index.tsx 2.1 KB

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