import React, { useState } from 'react';
import PropTypes from 'prop-types';
import { withTranslation } from 'react-i18next';
import { CopyToClipboard } from 'react-copy-to-clipboard';
import {
Dropdown, DropdownToggle, DropdownMenu, DropdownItem,
} from 'reactstrap';
import { encodeSpaces } from '@commons/util/path-utils';
import { withUnstatedContainers } from '../UnstatedUtils';
import RevisionComparerContainer from '../../services/RevisionComparerContainer';
import RevisionDiff from '../PageHistory/RevisionDiff';
/* 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;
function toggleDropdown() {
setDropdownOpen(!dropdownOpen);
}
const pagePathUrl = () => {
const { origin } = window.location;
const { path } = revisionComparerContainer.pageContainer.state;
const { sourceRevision, targetRevision } = revisionComparerContainer.state;
const url = new URL(path, 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 */}
{ 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);