import React from 'react'; import PropTypes from 'prop-types'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Tooltip, } from 'reactstrap'; import { CopyToClipboard } from 'react-copy-to-clipboard'; export default class CopyDropdown extends React.Component { constructor(props) { super(props); // retrieve xss library from window this.xss = window.xss; this.state = { dropdownOpen: false, tooltipOpen: false, }; this.toggle = this.toggle.bind(this); this.showToolTip = this.showToolTip.bind(this); this.generatePageUrl = this.generatePageUrl.bind(this); } toggle() { this.setState({ dropdownOpen: !this.state.dropdownOpen }); } showToolTip() { this.setState({ tooltipOpen: true }); setTimeout(() => { this.setState({ tooltipOpen: false }); }, 1000); } generatePageUrl() { return (this.props.pageId == null) ? decodeURIComponent(window.location.pathname + window.location.search) : `${window.location.origin}/${this.props.pageId}`; } generateMarkdownLink() { return; } render() { const { t } = this.props; const safePagePath = this.xss.process(this.props.pagePath); const url = this.generatePageUrl(); return ( <> { t('copy_to_clipboard.Copy to clipboard') } {/* Page path */} { t('copy_to_clipboard.Page path') } {safePagePath} {/* Parmanent Link */} { this.props.pageId && ( { t('copy_to_clipboard.Parmanent link') } {url} )} {/* Page path + Parmanent Link */} { this.props.pageId && ( { t('copy_to_clipboard.Page path and parmanent link') } {safePagePath} {url} )} {/* Markdown Link */} { this.props.pageId && ( { t('copy_to_clipboard.Markdown link') } {`[${safePagePath}](${url})`} )} copied! > ); } } CopyDropdown.propTypes = { t: PropTypes.func.isRequired, // i18next pagePath: PropTypes.string.isRequired, pageId: PropTypes.string, buttonStyle: PropTypes.object, };