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';
/* 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 RevisionCompare = (props) => {
const [dropdownOpen, setDropdownOpen] = useState(false);
const { t, revisionCompareContainer } = props;
function 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 fromRev = revisionCompareContainer.state.fromRevision;
const toRev = revisionCompareContainer.state.toRevision;
const showDiff = (fromRev && toRev);
return (
{t('page_history.comparing_versions')}
toggleDropdown()}
>
{/* Page path URL */}
{ showDiff && (
)}
);
};
/**
* Wrapper component for using unstated
*/
const RevisionCompareWrapper = withUnstatedContainers(RevisionCompare, [RevisionCompareContainer]);
RevisionCompare.propTypes = {
t: PropTypes.func.isRequired, // i18next
revisionCompareContainer: PropTypes.instanceOf(RevisionCompareContainer).isRequired,
revisions: PropTypes.array,
};
export default withTranslation()(RevisionCompareWrapper);