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; 
 |