Skip to content

Commit

Permalink
citeproc-rs conversion: item review
Browse files Browse the repository at this point in the history
  • Loading branch information
tnajdek committed Jun 8, 2021
1 parent e9875cb commit d111ea6
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 88 deletions.
2 changes: 1 addition & 1 deletion src/js/components/confirm-add-dialog.jsx
Expand Up @@ -17,7 +17,7 @@ class ConfirmAddDialog extends React.Component {
}

const { bibliographyItems, bibliographyMeta } = itemToConfirm;
const html = styleHasBibliography ? formatFallback(bibliographyItems) : formatBib(bibliographyItems, bibliographyMeta);
const html = styleHasBibliography ? formatBib(bibliographyItems, bibliographyMeta) : formatFallback(bibliographyItems);
const div = document.createElement('div');
div.innerHTML = html;

Expand Down
56 changes: 41 additions & 15 deletions src/js/components/container.jsx
Expand Up @@ -25,7 +25,7 @@ const BibWebContainer = props => {
const copyData = useRef(null);
const [isCiteprocReady, setIsCiteprocReady] = useState(false);
const [isDataReady, setIsDataReady] = useState(false);
const [activeDialog, setActiveDialog] = useState(false);
const [activeDialog, setActiveDialog] = useState(null);
const wasDataReady = usePrevious(isDataReady);
const [messages, setMessages] = useState([]);
const [bibliography, setBibliography] = useState({ items: [], meta: null, lookup: {} });
Expand Down Expand Up @@ -240,7 +240,7 @@ const BibWebContainer = props => {
const handleCitationStyleChanged = useCallback(async ev => {
const newCitationStyle = ev.value;
// this.clearMessages(); //@TODO
// setItemUnderReview(null); //@TODO
setItemUnderReview(null);
if(newCitationStyle === 'install') {
setActiveDialog('STYLE_INSTALLER');
setIsStylesDataLoading(true);
Expand All @@ -260,7 +260,7 @@ const BibWebContainer = props => {

const handleCitationCopyDialogOpen = useCallback(itemId => {
// this.clearMessages(); //@TODO
// setItemUnderReview(null); //@TODO
setItemUnderReview(null);
setActiveDialog('COPY_CITATION');
setCitationToCopy(itemId);
}, []);
Expand Down Expand Up @@ -303,9 +303,15 @@ const BibWebContainer = props => {
setItemToConfirm(null);
}, []);

const handleConfirmAddConfirm = useCallback(() => {
const handleConfirmAddConfirm = useCallback(async () => {
addItem(itemToConfirm.item);
setItemUnderReview(itemToConfirm.item);
// TODO
// setItemUnderReview({
// item: itemToConfirm.items,
// ...(await getOneTimeBibliographyOrFallback(
// reviewBib.itemsCSL, citationStyleXml, styleHasBibliography
// ))
// );
setActiveDialog(null);
setItemToConfirm(null);
}, [addItem, itemToConfirm]);
Expand Down Expand Up @@ -462,6 +468,18 @@ const BibWebContainer = props => {
setActiveDialog(null);
};

const handleReviewDelete = useCallback(() => {
handleDeleteEntry(itemUnderReview.key);
}, [handleDeleteEntry, itemUnderReview]);

const handleReviewDismiss = useCallback(() => {
setItemUnderReview(null);
}, []);

const handleReviewEdit = useCallback(() => {
handleOpenEditor(itemUnderReview.key);
}, [handleOpenEditor, itemUnderReview]);

const handleStyleInstallerDelete = useCallback((deleteStyleMeta) => {
setCitationStyles(citationStyles.filter(cs => cs.name !== deleteStyleMeta.name ));
}, [citationStyles]);
Expand All @@ -478,6 +496,7 @@ const BibWebContainer = props => {
}, [citationStyles]);

const handleTranslateIdentifier = useCallback(async (identifier, multipleSelectedItems = null, shouldConfirm = false) => {
var reviewBib;
identifier = parseIdentifier(identifier);

// this.clearMessages(); //@TODO
Expand Down Expand Up @@ -518,7 +537,7 @@ const BibWebContainer = props => {
var rootItems = translationResponse.items.filter(item => !item.parentItem);

if(rootItems.length > 1) {
const reviewBib = new ZoteroBib({
reviewBib = new ZoteroBib({
...config,
persist: false,
initialItems: rootItems
Expand All @@ -538,13 +557,13 @@ const BibWebContainer = props => {
return;
}

if(shouldConfirm) {
const reviewBib = new ZoteroBib({
...config,
persist: false,
initialItems: [translationResponse.items[0]]
});
reviewBib = new ZoteroBib({
...config,
persist: false,
initialItems: [translationResponse.items[0]]
});

if(shouldConfirm) {
const itemToConfirm = {
item: translationResponse.items[0],
...(await getOneTimeBibliographyOrFallback(
Expand All @@ -557,14 +576,18 @@ const BibWebContainer = props => {
setActiveDialog('CONFIRM_ADD_DIALOG');
setItemToConfirm(itemToConfirm);
return;
} else {
addItem(translationResponse.items[0]);
}

addItem(translationResponse.items[0]);
setIdentifier('');
setIsTranslating(false);
updateBibliography();
setItemUnderReview(translationResponse.items[0]);
setItemUnderReview({
item: translationResponse.items[0],
...(await getOneTimeBibliographyOrFallback(
reviewBib.itemsCSL, citationStyleXml, styleHasBibliography
))
});

break;
case ZoteroBib.MULTIPLE_CHOICES:
Expand Down Expand Up @@ -695,6 +718,9 @@ const BibWebContainer = props => {
onItemUpdate = { handleItemUpdate }
onMutipleItemsCancel = { handleMutipleItemsCancel }
onMutipleItemsSelect = { handleMutipleItemsSelect }
onReviewDelete = { handleReviewDelete }
onReviewDismiss = { handleReviewDismiss }
onReviewEdit = { handleReviewEdit }
onStyleInstallerCancel = { handleStyleInstallerCancel }
onStyleInstallerDelete = { handleStyleInstallerDelete }
onStyleInstallerSelect = { handleStyleInstallerSelect }
Expand Down
117 changes: 46 additions & 71 deletions src/js/components/review.jsx
@@ -1,79 +1,54 @@
import React from 'react';
import PropTypes from 'prop-types';
import Button from './ui/button';
import { formatBib } from '../cite';

class Review extends React.PureComponent {
handleDismiss() {
this.props.onReviewDismiss();
}

handleDelete() {
this.props.onReviewDelete();
}

handleEdit() {
this.props.onReviewEdit();
}

render() {
if(this.props.isTranslating) {
return (
<section className="section section-review review">
<h2>New item…</h2>
</section>
);
}

if(!this.props.itemUnderReviewBibliography) {
return null;
}

const { citations, bibliography, isFallback } = this.props.itemUnderReviewBibliography;
const html = isFallback ?
`<ol><li>${citations.join('</li><li>')}</li></ol>` :
formatBib(bibliography);
const div = document.createElement('div');
div.innerHTML = html;
return (
<section className="section section-review review">
<h2 className="sr-only">New item …</h2>
<div className="container">
<div
dangerouslySetInnerHTML={ { __html: div.innerHTML } }
/>
<div className="actions">
<Button
className="btn-outline-secondary btn-min-width"
onClick={ this.handleDismiss.bind(this) }
>
Close
</Button>
<Button
className="btn-outline-secondary btn-min-width"
onClick={ this.handleDelete.bind(this) }
>
Delete
</Button>
<Button
className="btn-secondary btn-min-width"
onClick={ this.handleEdit.bind(this) }
>
Edit
</Button>
</div>
import { formatBib, formatFallback } from '../cite';

const Review = ({ isTranslating, itemUnderReview, onReviewEdit, onReviewDelete, onReviewDismiss, styleHasBibliography }) => {
const { bibliographyItems, bibliographyMeta } = itemUnderReview;
const html = styleHasBibliography ? formatBib(bibliographyItems, bibliographyMeta) : formatFallback(bibliographyItems);
console.log({ html, bibliographyItems, bibliographyMeta });

return isTranslating ? (
<section className="section section-review review">
<h2>New item…</h2>
</section>
) : (
<section className="section section-review review">
<h2 className="sr-only">New item …</h2>
<div className="container">
<div dangerouslySetInnerHTML={ { __html: html } } />
<div className="actions">
<Button
className="btn-outline-secondary btn-min-width"
onClick={ onReviewDismiss }
>
Close
</Button>
<Button
className="btn-outline-secondary btn-min-width"
onClick={ onReviewDelete }
>
Delete
</Button>
<Button
className="btn-secondary btn-min-width"
onClick={ onReviewEdit }
>
Edit
</Button>
</div>
</section>
);
}
</div>
</section>
);
}

static propTypes = {
isTranslating: PropTypes.bool,
itemUnderReviewBibliography: PropTypes.object,
onReviewDelete: PropTypes.func.isRequired,
onReviewDismiss: PropTypes.func.isRequired,
onReviewEdit: PropTypes.func.isRequired,
}
Review.propTypes = {
isTranslating: PropTypes.bool,
itemUnderReview: PropTypes.object,
onReviewDelete: PropTypes.func.isRequired,
onReviewDismiss: PropTypes.func.isRequired,
onReviewEdit: PropTypes.func.isRequired,
styleHasBibliography: PropTypes.bool,
}

export default Review;
2 changes: 1 addition & 1 deletion src/js/components/zbib.jsx
Expand Up @@ -75,7 +75,7 @@ class ZBib extends React.PureComponent {
</section>
)
}
<Review { ...this.props} />
{ this.props.itemUnderReview && <Review { ...this.props} /> }
<BibliographySection { ...this.props} />

{
Expand Down

0 comments on commit d111ea6

Please sign in to comment.