import React from 'react'; import { IRevisionHasId } from '@growi/core'; import { useTranslation } from 'next-i18next'; import { Revision } from './Revision'; import styles from './PageRevisionTable.module.scss'; type PageRevisionTAble = { revisions: IRevisionHasId[], pagingLimit: number, sourceRevision: IRevisionHasId, targetRevision: IRevisionHasId, onChangeSourceInvoked: React.Dispatch>, onChangeTargetInvoked: React.Dispatch>, } export const PageRevisionTable = (props: PageRevisionTAble): JSX.Element => { const { t } = useTranslation(); const { revisions, pagingLimit, sourceRevision, targetRevision, onChangeSourceInvoked, onChangeTargetInvoked, } = props; const revisionCount = revisions.length; const latestRevision = revisions[0]; const oldestRevision = revisions[revisions.length - 1]; const renderRow = (revision: IRevisionHasId, previousRevision: IRevisionHasId, latestRevision: IRevisionHasId, isOldestRevision: boolean, hasDiff: boolean) => { const revisionId = revision._id; const handleCompareLatestRevisionButton = () => { onChangeSourceInvoked(revision); onChangeTargetInvoked(latestRevision); }; const handleComparePreviousRevisionButton = () => { onChangeSourceInvoked(previousRevision); onChangeTargetInvoked(revision); }; return (
{hasDiff && (
)}
{(hasDiff || revisionId === sourceRevision?._id) && (
onChangeSourceInvoked(revision)} />
)} {(hasDiff || revisionId === targetRevision?._id) && (
onChangeTargetInvoked(revision)} />
)} ); }; const revisionList = revisions.map((revision, idx) => { // Returns null because the last revision is for the bottom diff display if (idx === pagingLimit) { return null; } // if it is the first revision, show full text as diff text const previousRevision = (idx + 1 < revisionCount) ? revisions[idx + 1] : revision; const isOldestRevision = revision === oldestRevision; // set 'true' if undefined for backward compatibility const hasDiff = revision.hasDiffToPrev !== false; return renderRow(revision, previousRevision, latestRevision, isOldestRevision, hasDiff); }); return ( {revisionList}
{ t('page_history.revision') } { t('page_history.comparing_source') } { t('page_history.comparing_target') }
); };