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 { withUnstatedContainers } from './UnstatedUtils';
import RevisionCompareContainer from '../services/RevisionCompareContainer';
import RevisionDiff from './PageHistory/RevisionDiff';
import RevisionIdForm from './RevisionCompare/RevisionIdForm';
/* eslint-disable react/prop-types */
const DropdownItemContents = ({ title, contents }) => (
<>
{title}
{contents}
>
);
/* eslint-enable react/prop-types */
function encodeSpaces(str) {
if (str == null) {
return null;
}
// Encode SPACE and IDEOGRAPHIC SPACE
return str.replace(/ /g, '%20').replace(/\u3000/g, '%E3%80%80');
}
const PageCompare = (props) => {
const toggleDropdown = () => {
setDropdownOpen(!dropdownOpen);
}
const pagePathUrl = () => {
const { origin } = window.location;
const { path } = revisionCompareContainer.pageContainer.state;
const { fromRevision, toRevision } = revisionCompareContainer.state;
const urlParams = (fromRevision && toRevision ? `?compare=${fromRevision._id}...${toRevision._id}` : '');
return encodeSpaces(decodeURI(`${origin}/${path}${urlParams}`));
};
const [dropdownOpen, setDropdownOpen] = useState(false);
const { t, revisionCompareContainer } = props;
const fromRev = revisionCompareContainer.state.fromRevision;
const toRev = revisionCompareContainer.state.toRevision;
const showDiff = (fromRev && toRev);
return (
{t('page_history.comparing_changes')}
toggleDropdown()}
>
{/* Page path URL */}
{ showDiff && (
)}
);
}
/**
* Wrapper component for using unstated
*/
const PageCompareWrapper = withUnstatedContainers(PageCompare, [RevisionCompareContainer]);
PageCompare.propTypes = {
t: PropTypes.func.isRequired, // i18next
revisionCompareContainer: PropTypes.instanceOf(RevisionCompareContainer).isRequired,
};
export default withTranslation()(PageCompareWrapper);