import React from 'react'; import ReactSelect from 'react-select'; import PropTypes from 'prop-types'; import { format } from 'date-fns'; import { withUnstatedContainers } from '../UnstatedUtils'; import PageHistroyContainer from '../../services/PageHistoryContainer'; import RevisionCompareContainer from '../../services/RevisionCompareContainer'; import UserDate from '../User/UserDate'; import Username from '../User/Username'; import UserPicture from '../User/UserPicture'; const RevisionIdForm = (props) => { /** * create an Option array for AsyncSelect from the revision list */ const revisionOptions = () => { const timeFormat = 'yyyy/MM/dd HH:mm:ss'; const { revisions } = props.pageHistoryContainer.state; return revisions.map((rev) => { return { label: `${format(new Date(rev.createdAt), timeFormat)} - ${rev._id}`, value: rev._id }; }); } /** * render a revision selector * @param {label} label text of inputbox */ const renderRevisionSelector = (label) => { if (['FromRev', 'ToRev'].indexOf(label) === -1) { return <>; } const forFromRev = (label === 'FromRev'); const { revisionCompareContainer } = props; const options = revisionOptions(); const selectedRevision = (forFromRev ? revisionCompareContainer.state.fromRevision : revisionCompareContainer.state.toRevision); const value = options.find(it => it.value === selectedRevision?._id); const changeHandler = (forFromRev ? revisionCompareContainer.handleFromRevisionChange : revisionCompareContainer.handleToRevisionChange); const author = selectedRevision?.author; const pic = (typeof author === 'object') ? : ''; return (
changeHandler(selectedOption.value)} placeholder={label} value={value} />
{ selectedRevision && (
{pic}

)}
); } const fromRevSelector = renderRevisionSelector('FromRev'); const toRevSelector = renderRevisionSelector('ToRev'); return (
{ fromRevSelector }
{ toRevSelector }
); } /** * Wrapper component for using unstated */ const RevisionIdFormWrapper = withUnstatedContainers(RevisionIdForm, [PageHistroyContainer, RevisionCompareContainer]); /** * Properties */ RevisionIdForm.propTypes = { pageHistoryContainer: PropTypes.instanceOf(PageHistroyContainer).isRequired, revisionCompareContainer: PropTypes.instanceOf(RevisionCompareContainer).isRequired, }; /** * Properties */ RevisionIdForm.defaultProps = { }; export default RevisionIdFormWrapper;