index.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import Icon from '@ant-design/icons';
  2. import { Modal } from 'antd';
  3. import React from 'react';
  4. import IconMap from '@/components/Icon/IconMap';
  5. import styles from './index.less';
  6. interface dataProps {
  7. visible: boolean;
  8. onSelected: (item: any) => void;
  9. }
  10. /**
  11. * 图标选择器
  12. * @param props
  13. * @constructor
  14. */
  15. const IconSelector: React.FC<dataProps> = (props) => {
  16. const { visible, onSelected } = props;
  17. const iconNames = Object.keys(IconMap);
  18. /**
  19. * 选中图标后
  20. */
  21. const onIconClick = (item: React.Key | null | undefined) => {
  22. onSelected(item);
  23. };
  24. return (
  25. <Modal
  26. title="图标选择"
  27. footer={null}
  28. open={visible}
  29. width={900}
  30. bodyStyle={{ height: 600, overflowY: 'auto' }}
  31. onCancel={onSelected}
  32. >
  33. {iconNames &&
  34. iconNames.map((item: any) => {
  35. return (
  36. <Icon
  37. className={styles.iconItem}
  38. key={item}
  39. component={IconMap[item] as React.ForwardRefExoticComponent<any>}
  40. onClick={() => {
  41. onIconClick(item);
  42. }}
  43. />
  44. );
  45. })}
  46. </Modal>
  47. );
  48. };
  49. export default IconSelector;