|
|
@@ -1,10 +1,9 @@
|
|
|
import React, {
|
|
|
- useState, useMemo, useCallback,
|
|
|
+ useState, useMemo, useCallback, type ReactNode, type CSSProperties,
|
|
|
} from 'react';
|
|
|
|
|
|
import { pagePathUtils } from '@growi/core/dist/utils';
|
|
|
import { useTranslation } from 'next-i18next';
|
|
|
-import PropTypes from 'prop-types';
|
|
|
import { CopyToClipboard } from 'react-copy-to-clipboard';
|
|
|
import {
|
|
|
Dropdown, DropdownToggle, DropdownMenu, DropdownItem,
|
|
|
@@ -15,9 +14,25 @@ import styles from './CopyDropdown.module.scss';
|
|
|
|
|
|
const { encodeSpaces } = pagePathUtils;
|
|
|
|
|
|
+interface DropdownItemContentsProps {
|
|
|
+ title: string;
|
|
|
+ contents: ReactNode;
|
|
|
+ className?: string;
|
|
|
+ style?: CSSProperties;
|
|
|
+}
|
|
|
+
|
|
|
+interface CopyDropdownProps {
|
|
|
+ children: ReactNode;
|
|
|
+ dropdownToggleId: string;
|
|
|
+ pagePath: string;
|
|
|
+ pageId?: string;
|
|
|
+ dropdownToggleClassName?: string;
|
|
|
+ isShareLinkMode?: boolean;
|
|
|
+}
|
|
|
+
|
|
|
/* eslint-disable react/prop-types */
|
|
|
-const DropdownItemContents = ({
|
|
|
- title, contents, className, style,
|
|
|
+const DropdownItemContents: React.FC<DropdownItemContentsProps> = ({
|
|
|
+ title, contents, className = '', style,
|
|
|
}) => (
|
|
|
<>
|
|
|
<div className="h6 mt-1 mb-2"><strong>{title}</strong></div>
|
|
|
@@ -27,7 +42,7 @@ const DropdownItemContents = ({
|
|
|
/* eslint-enable react/prop-types */
|
|
|
|
|
|
|
|
|
-export const CopyDropdown = (props) => {
|
|
|
+export const CopyDropdown: React.FC<CopyDropdownProps> = (props) => {
|
|
|
const [dropdownOpen, setDropdownOpen] = useState(false);
|
|
|
const [tooltipOpen, setTooltipOpen] = useState(false);
|
|
|
const [isParamsAppended, setParamsAppended] = useState(!props.isShareLinkMode);
|
|
|
@@ -209,7 +224,7 @@ export const CopyDropdown = (props) => {
|
|
|
{ pageId && (
|
|
|
<CopyToClipboard text={markdownLink} onCopy={showToolTip}>
|
|
|
<DropdownItem className="px-3 text-wrap">
|
|
|
- <DropdownItemContents title={t('copy_to_clipboard.Markdown link')} contents={markdownLink} isContentsWrap />
|
|
|
+ <DropdownItemContents title={t('copy_to_clipboard.Markdown link')} contents={markdownLink} />
|
|
|
</DropdownItem>
|
|
|
</CopyToClipboard>
|
|
|
)}
|
|
|
@@ -223,13 +238,3 @@ export const CopyDropdown = (props) => {
|
|
|
</>
|
|
|
);
|
|
|
};
|
|
|
-
|
|
|
-CopyDropdown.propTypes = {
|
|
|
- children: PropTypes.node.isRequired,
|
|
|
- dropdownToggleId: PropTypes.string.isRequired,
|
|
|
- pagePath: PropTypes.string.isRequired,
|
|
|
-
|
|
|
- pageId: PropTypes.string,
|
|
|
- dropdownToggleClassName: PropTypes.string,
|
|
|
- isShareLinkMode: PropTypes.bool,
|
|
|
-};
|