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 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 */
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 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 urlParams = (sourceRevision && targetRevision ? `?compare=${sourceRevision._id}...${targetRevision._id}` : '');
return encodeSpaces(decodeURI(`${origin}/${path}${urlParams}`));
};
const { sourceRevision, targetRevision } = revisionComparerContainer.state;
const showDiff = (sourceRevision && targetRevision);
return (
{ t('page_history.comparing_revisions') }
toggleDropdown()}
>
{/* Page path URL */}
{ showDiff && (
)}
);
};
/**
* 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);