| | |
| | | import * as React from 'react'; |
| | | import CopyableIcon from './CopyableIcon'; |
| | | import type { ThemeType } from './index'; |
| | | import type { CategoriesKeys } from './fields'; |
| | | import { useIntl } from '@umijs/max'; |
| | | import styles from './style.less'; |
| | | |
| | | interface CategoryProps { |
| | | title: CategoriesKeys; |
| | | icons: string[]; |
| | | theme: ThemeType; |
| | | newIcons: string[]; |
| | | onSelect: (type: string, name: string) => any; |
| | | } |
| | | |
| | | const Category: React.FC<CategoryProps> = props => { |
| | | |
| | | const { icons, title, newIcons, theme } = props; |
| | | const intl = useIntl(); |
| | | const [justCopied, setJustCopied] = React.useState<string | null>(null); |
| | | const copyId = React.useRef<NodeJS.Timeout | null>(null); |
| | | const onSelect = React.useCallback((type: string, text: string) => { |
| | | const { onSelect } = props; |
| | | if (onSelect) { |
| | | onSelect(type, text); |
| | | } |
| | | setJustCopied(type); |
| | | copyId.current = setTimeout(() => { |
| | | setJustCopied(null); |
| | | }, 2000); |
| | | }, []); |
| | | React.useEffect( |
| | | () => () => { |
| | | if (copyId.current) { |
| | | clearTimeout(copyId.current); |
| | | } |
| | | }, |
| | | [], |
| | | ); |
| | | |
| | | return ( |
| | | <div> |
| | | <h4>{intl.formatMessage({ |
| | | id: `app.docs.components.icon.category.${title}`, |
| | | defaultMessage: '信息', |
| | | })}</h4> |
| | | <ul className={styles.anticonsList}> |
| | | {icons.map(name => ( |
| | | <CopyableIcon |
| | | key={name} |
| | | name={name} |
| | | theme={theme} |
| | | isNew={newIcons.includes(name)} |
| | | justCopied={justCopied} |
| | | onSelect={onSelect} |
| | | /> |
| | | ))} |
| | | </ul> |
| | | </div> |
| | | ); |
| | | }; |
| | | |
| | | export default Category; |
| | | import * as React from 'react';
|
| | | import CopyableIcon from './CopyableIcon';
|
| | | import type { ThemeType } from './index';
|
| | | import type { CategoriesKeys } from './fields';
|
| | | import { useIntl } from '@umijs/max';
|
| | | import styles from './style.less';
|
| | |
|
| | | interface CategoryProps {
|
| | | title: CategoriesKeys;
|
| | | icons: string[];
|
| | | theme: ThemeType;
|
| | | newIcons: string[];
|
| | | onSelect: (type: string, name: string) => any;
|
| | | }
|
| | |
|
| | | const Category: React.FC<CategoryProps> = props => {
|
| | |
|
| | | const { icons, title, newIcons, theme } = props;
|
| | | const intl = useIntl();
|
| | | const [justCopied, setJustCopied] = React.useState<string | null>(null);
|
| | | const copyId = React.useRef<NodeJS.Timeout | null>(null);
|
| | | const onSelect = React.useCallback((type: string, text: string) => {
|
| | | const { onSelect } = props;
|
| | | if (onSelect) {
|
| | | onSelect(type, text);
|
| | | }
|
| | | setJustCopied(type);
|
| | | copyId.current = setTimeout(() => {
|
| | | setJustCopied(null);
|
| | | }, 2000);
|
| | | }, []);
|
| | | React.useEffect(
|
| | | () => () => {
|
| | | if (copyId.current) {
|
| | | clearTimeout(copyId.current);
|
| | | }
|
| | | },
|
| | | [],
|
| | | );
|
| | |
|
| | | return (
|
| | | <div>
|
| | | <h4>{intl.formatMessage({
|
| | | id: `app.docs.components.icon.category.${title}`,
|
| | | defaultMessage: '信息',
|
| | | })}</h4>
|
| | | <ul className={styles.anticonsList}>
|
| | | {icons.map(name => (
|
| | | <CopyableIcon
|
| | | key={name}
|
| | | name={name}
|
| | | theme={theme}
|
| | | isNew={newIcons.includes(name)}
|
| | | justCopied={justCopied}
|
| | | onSelect={onSelect}
|
| | | />
|
| | | ))}
|
| | | </ul>
|
| | | </div>
|
| | | );
|
| | | };
|
| | |
|
| | | export default Category;
|