|
|
@@ -3,8 +3,6 @@ import React from 'react';
|
|
|
import PropTypes from 'prop-types';
|
|
|
import { withTranslation } from 'react-i18next';
|
|
|
|
|
|
-import RevisionComparerContainer from '~/client/services/RevisionComparerContainer';
|
|
|
-
|
|
|
import Revision from './Revision';
|
|
|
|
|
|
class PageRevisionTable extends React.Component {
|
|
|
@@ -16,19 +14,20 @@ class PageRevisionTable extends React.Component {
|
|
|
* @param {boolean} hasDiff whether revision has difference to previousRevision
|
|
|
* @param {boolean} isContiguousNodiff true if the current 'hasDiff' and one of previous row is both false
|
|
|
*/
|
|
|
- renderRow(revision, previousRevision, latestRevision, oldestRevision, hasDiff, isContiguousNodiff) {
|
|
|
- const { revisionComparerContainer, t } = this.props;
|
|
|
+ renderRow(revision, previousRevision, latestRevision, isOldestRevision, hasDiff) {
|
|
|
+ const {
|
|
|
+ t, sourceRevision, targetRevision, onChangeSourceInvoked, onChangeTargetInvoked,
|
|
|
+ } = this.props;
|
|
|
const revisionId = revision._id;
|
|
|
- const { sourceRevision, targetRevision } = revisionComparerContainer.state;
|
|
|
|
|
|
const handleCompareLatestRevisionButton = () => {
|
|
|
- revisionComparerContainer.setState({ sourceRevision: revision });
|
|
|
- revisionComparerContainer.setState({ targetRevision: latestRevision });
|
|
|
+ onChangeSourceInvoked(revision);
|
|
|
+ onChangeTargetInvoked(latestRevision);
|
|
|
};
|
|
|
|
|
|
const handleComparePreviousRevisionButton = () => {
|
|
|
- revisionComparerContainer.setState({ sourceRevision: previousRevision });
|
|
|
- revisionComparerContainer.setState({ targetRevision: revision });
|
|
|
+ onChangeSourceInvoked(previousRevision);
|
|
|
+ onChangeTargetInvoked(revision);
|
|
|
};
|
|
|
|
|
|
return (
|
|
|
@@ -56,7 +55,7 @@ class PageRevisionTable extends React.Component {
|
|
|
type="button"
|
|
|
className="btn btn-outline-secondary btn-sm"
|
|
|
onClick={handleComparePreviousRevisionButton}
|
|
|
- disabled={revision === oldestRevision}
|
|
|
+ disabled={isOldestRevision}
|
|
|
>
|
|
|
{t('page_history.compare_previous')}
|
|
|
</button>
|
|
|
@@ -66,34 +65,34 @@ class PageRevisionTable extends React.Component {
|
|
|
</div>
|
|
|
</td>
|
|
|
<td className="col-1">
|
|
|
- {(hasDiff || revision._id === sourceRevision?._id) && (
|
|
|
+ {(hasDiff || revisionId === sourceRevision?._id) && (
|
|
|
<div className="custom-control custom-radio custom-control-inline mr-0">
|
|
|
<input
|
|
|
type="radio"
|
|
|
className="custom-control-input"
|
|
|
- id={`compareSource-${revision._id}`}
|
|
|
+ id={`compareSource-${revisionId}`}
|
|
|
name="compareSource"
|
|
|
- value={revision._id}
|
|
|
- checked={revision._id === sourceRevision?._id}
|
|
|
- onChange={() => revisionComparerContainer.setState({ sourceRevision: revision })}
|
|
|
+ value={revisionId}
|
|
|
+ checked={revisionId === sourceRevision?._id}
|
|
|
+ onChange={() => onChangeSourceInvoked(revision)}
|
|
|
/>
|
|
|
- <label className="custom-control-label" htmlFor={`compareSource-${revision._id}`} />
|
|
|
+ <label className="custom-control-label" htmlFor={`compareSource-${revisionId}`} />
|
|
|
</div>
|
|
|
)}
|
|
|
</td>
|
|
|
<td className="col-2">
|
|
|
- {(hasDiff || revision._id === targetRevision?._id) && (
|
|
|
+ {(hasDiff || revisionId === targetRevision?._id) && (
|
|
|
<div className="custom-control custom-radio custom-control-inline mr-0">
|
|
|
<input
|
|
|
type="radio"
|
|
|
className="custom-control-input"
|
|
|
- id={`compareTarget-${revision._id}`}
|
|
|
+ id={`compareTarget-${revisionId}`}
|
|
|
name="compareTarget"
|
|
|
- value={revision._id}
|
|
|
- checked={revision._id === targetRevision?._id}
|
|
|
- onChange={() => revisionComparerContainer.setState({ targetRevision: revision })}
|
|
|
+ value={revisionId}
|
|
|
+ checked={revisionId === targetRevision?._id}
|
|
|
+ onChange={() => onChangeTargetInvoked(revision)}
|
|
|
/>
|
|
|
- <label className="custom-control-label" htmlFor={`compareTarget-${revision._id}`} />
|
|
|
+ <label className="custom-control-label" htmlFor={`compareTarget-${revisionId}`} />
|
|
|
</div>
|
|
|
)}
|
|
|
</td>
|
|
|
@@ -125,13 +124,13 @@ class PageRevisionTable extends React.Component {
|
|
|
previousRevision = revision; // if it is the first revision, show full text as diff text
|
|
|
}
|
|
|
|
|
|
+ const isOldestRevision = revision === oldestRevision;
|
|
|
|
|
|
const hasDiff = revision.hasDiffToPrev !== false; // set 'true' if undefined for backward compatibility
|
|
|
- const isContiguousNodiff = !hasDiff && !hasDiffPrev;
|
|
|
|
|
|
hasDiffPrev = hasDiff;
|
|
|
|
|
|
- return this.renderRow(revision, previousRevision, latestRevision, oldestRevision, hasDiff, isContiguousNodiff);
|
|
|
+ return this.renderRow(revision, previousRevision, latestRevision, isOldestRevision, hasDiff);
|
|
|
});
|
|
|
|
|
|
return (
|
|
|
@@ -154,10 +153,13 @@ class PageRevisionTable extends React.Component {
|
|
|
|
|
|
PageRevisionTable.propTypes = {
|
|
|
t: PropTypes.func.isRequired, // i18next
|
|
|
- revisionComparerContainer: PropTypes.instanceOf(RevisionComparerContainer).isRequired,
|
|
|
|
|
|
revisions: PropTypes.array,
|
|
|
pagingLimit: PropTypes.number,
|
|
|
+ sourceRevision: PropTypes.instanceOf(Object),
|
|
|
+ targetRevision: PropTypes.instanceOf(Object),
|
|
|
+ onChangeSourceInvoked: PropTypes.func.isRequired,
|
|
|
+ onChangeTargetInvoked: PropTypes.func.isRequired,
|
|
|
};
|
|
|
|
|
|
export default withTranslation()(PageRevisionTable);
|