nodeCollapsible.tsx 876 B

123456789101112131415161718192021222324252627282930313233
  1. import React, { useState, useEffect, ReactNode } from 'react';
  2. import Collapsible from '../collapsible';
  3. interface NodeCollapsibleProps {
  4. key?: string;
  5. open?: boolean;
  6. motion?: boolean;
  7. duration?: number;
  8. onMotionEnd?: () => void;
  9. children?: ReactNode
  10. }
  11. function NodeCollapsible(props: NodeCollapsibleProps) {
  12. const { open, children, ...rest } = props;
  13. const [isOpen, setIsOpen] = useState(props.open);
  14. useEffect(() => {
  15. // Why do we need to change isOPen value in setTimeout?
  16. // Because when NodeCollapsible ComponentDidMount, the domHeight in Collapsible has not been given
  17. setTimeout(() => {
  18. setIsOpen(!props.open);
  19. }, 0);
  20. }, []);
  21. return (<Collapsible
  22. {...rest}
  23. isOpen={isOpen}
  24. >
  25. {children}
  26. </Collapsible>);
  27. }
  28. export default NodeCollapsible;