import React, { useState } from 'react'; import { pagePathUtils } from '@growi/core'; import PropTypes from 'prop-types'; import { CopyToClipboard } from 'react-copy-to-clipboard'; import { withTranslation } from 'react-i18next'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem, } from 'reactstrap'; import RevisionComparerContainer from '~/client/services/RevisionComparerContainer'; import RevisionDiff from '../PageHistory/RevisionDiff'; import { withUnstatedContainers } from '../UnstatedUtils'; const { encodeSpaces } = pagePathUtils; /* eslint-disable react/prop-types */ const DropdownItemContents = ({ title, contents }) => ( <>
{title}
{contents}
); /* eslint-enable react/prop-types */ const RevisionComparer = (props) => { const [dropdownOpen, setDropdownOpen] = useState(false); const { t, revisionComparerContainer } = props; const { path, pageId } = revisionComparerContainer.pageContainer.state; function toggleDropdown() { setDropdownOpen(!dropdownOpen); } const generateURL = (pathName) => { const { origin } = window.location; const { sourceRevision, targetRevision } = revisionComparerContainer.state; const url = new URL(pathName, origin); if (sourceRevision != null && targetRevision != null) { const urlParams = `${sourceRevision._id}...${targetRevision._id}`; url.searchParams.set('compare', urlParams); } return encodeSpaces(decodeURI(url)); }; const { sourceRevision, targetRevision } = revisionComparerContainer.state; if (sourceRevision == null || targetRevision == null) { return null; } const isNodiff = sourceRevision._id === targetRevision._id; return (

{ t('page_history.comparing_revisions') }

toggleDropdown()} > {/* Page path URL */} {/* Permanent Link URL */}
{ isNodiff ? ( {t('No diff')} ) : ( ) }
); }; /** * Wrapper component for using unstated */ const RevisionComparerWrapper = withUnstatedContainers(RevisionComparer, [RevisionComparerContainer]); RevisionComparer.propTypes = { t: PropTypes.func.isRequired, // i18next revisionComparerContainer: PropTypes.instanceOf(RevisionComparerContainer).isRequired, revisions: PropTypes.array, }; export default withTranslation()(RevisionComparerWrapper);