index.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import React from 'react';
  2. import Icon from '../Icon';
  3. import Typography from '../Typography';
  4. import ColorPicker from '../ColorPicker';
  5. import {
  6. Group,
  7. Item,
  8. Circle,
  9. PickerContainer,
  10. Blanket,
  11. } from '../../global/toolStyled';
  12. import data from './data';
  13. type Props = {
  14. title?: string;
  15. selectedColor?: string;
  16. onClick: (color: string) => void;
  17. mode?: 'normal' | 'shape' | 'watermark';
  18. isCollapse: boolean;
  19. pickerToggle: (e?: React.MouseEvent<HTMLElement>) => void;
  20. };
  21. type ColorItem = {
  22. key: string | number | undefined;
  23. color: string;
  24. icon?: string;
  25. };
  26. const ColorSelector: React.FC<Props> = ({
  27. title = '',
  28. mode = 'normal',
  29. selectedColor = '',
  30. onClick,
  31. pickerToggle,
  32. isCollapse,
  33. }: Props) => {
  34. const colorList: ColorItem[] = data[mode];
  35. return (
  36. <>
  37. {title ? (
  38. <Typography
  39. variant="subtitle"
  40. style={{ marginTop: '8px' }}
  41. align="left"
  42. >
  43. {title}
  44. </Typography>
  45. ) : null}
  46. <Group>
  47. {colorList.map((ele: ColorItem) => (
  48. <Item
  49. key={ele.key}
  50. selected={selectedColor === ele.color}
  51. onMouseDown={(): void => {
  52. onClick(ele.color);
  53. }}
  54. >
  55. {ele.icon ? (
  56. <Icon glyph={ele.icon} />
  57. ) : (
  58. <Circle color={ele.color} />
  59. )}
  60. </Item>
  61. ))}
  62. <Item
  63. onMouseDown={pickerToggle}
  64. selected={!colorList.find(ele => selectedColor === ele.color)}
  65. >
  66. <Icon glyph="color-picker" />
  67. </Item>
  68. {!isCollapse ? (
  69. <PickerContainer>
  70. <Blanket onMouseDown={pickerToggle} />
  71. <ColorPicker
  72. color={selectedColor}
  73. onSubmit={(color: any): void => {
  74. pickerToggle();
  75. onClick(color.hex);
  76. }}
  77. />
  78. </PickerContainer>
  79. ) : null}
  80. </Group>
  81. </>
  82. );
  83. };
  84. export default ColorSelector;