index.tsx 890 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React, { useState, useEffect } from 'react';
  2. import {
  3. Wrapper, Label, ContentWrapper, Content,
  4. } from './styled';
  5. type Props = {
  6. label: React.ReactNode;
  7. children?: React.ReactNode;
  8. isActive?: boolean;
  9. };
  10. const Collapse: React.FunctionComponent<Props> = ({
  11. label,
  12. children = '',
  13. isActive = false,
  14. }) => {
  15. const [isCollapse, setCollapse] = useState(true);
  16. const handleClick = () => {
  17. setCollapse(!isCollapse);
  18. };
  19. useEffect(() => {
  20. setCollapse(!isActive);
  21. }, [isActive]);
  22. return (
  23. <Wrapper>
  24. <Label onClick={handleClick}>
  25. {label}
  26. </Label>
  27. { children ? (
  28. <ContentWrapper isCollapse={isCollapse}>
  29. <Content>
  30. {children}
  31. </Content>
  32. </ContentWrapper>
  33. ) : null}
  34. </Wrapper>
  35. );
  36. };
  37. Collapse.defaultProps = {
  38. label: '',
  39. children: '',
  40. };
  41. export default Collapse;