index.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import React, { useState } from 'react';
  2. import ColorSelector from '../ColorSelector';
  3. import Button from '../Button';
  4. import Icon from '../Icon';
  5. import Divider from '../Divider';
  6. import Box from '../Box';
  7. import Sliders from '../Sliders';
  8. import DeleteDialog from '../DeleteDialog';
  9. import {
  10. Wrapper, Subtitle, SliderWrapper,
  11. } from './styled';
  12. type Props = {
  13. onUpdate: (data: any) => void;
  14. onDelete: () => void;
  15. color?: string;
  16. };
  17. const index: React.FunctionComponent<Props> = ({
  18. onUpdate,
  19. onDelete,
  20. }: Props) => {
  21. const [openSlider, setSlider] = useState(false);
  22. const [openDialog, setDialog] = useState(false);
  23. const [opacity, setOpacity] = useState(100);
  24. const handleClick = (color: string): void => {
  25. onUpdate({ color });
  26. };
  27. const handleChange = (value: number): void => {
  28. setOpacity(value);
  29. onUpdate({ opacity: value });
  30. };
  31. const sliderToggle = (e: React.MouseEvent<HTMLElement>): void => {
  32. e.preventDefault();
  33. setSlider(!openSlider);
  34. };
  35. const DialogToggle = (e: React.MouseEvent<HTMLElement>): void => {
  36. e.preventDefault();
  37. setDialog(!openDialog);
  38. };
  39. return (
  40. <Wrapper>
  41. {
  42. openSlider ? (
  43. <>
  44. <Box w="40px" h="36px" d="flex" j="center">
  45. <Icon glyph="right-arrow" onClick={sliderToggle} />
  46. </Box>
  47. <Divider style={{ margin: '0 10px 0 10px' }} />
  48. <SliderWrapper>
  49. <Sliders defaultValue={opacity} onChange={handleChange} />
  50. </SliderWrapper>
  51. <Subtitle>{`${opacity} %`}</Subtitle>
  52. </>
  53. ) : (
  54. <>
  55. <ColorSelector onClick={handleClick} />
  56. <Subtitle>opacity</Subtitle>
  57. <Button
  58. appearance="dark"
  59. style={{ height: '34px', width: '80px', fontSize: '12px' }}
  60. onClick={sliderToggle}
  61. >
  62. {`${opacity} %`}
  63. </Button>
  64. <Divider style={{ margin: '0 6px 0 15px' }} />
  65. <Box w="48px" h="36px" d="flex" j="center">
  66. <Icon glyph="trash" onClick={DialogToggle} />
  67. </Box>
  68. </>
  69. )
  70. }
  71. <DeleteDialog
  72. open={openDialog}
  73. onCancel={DialogToggle}
  74. onDelete={onDelete}
  75. />
  76. </Wrapper>
  77. );
  78. };
  79. export default index;