From 1f6d0291eedb3749222f45e91fbea0d8c932b3e4 Mon Sep 17 00:00:00 2001 From: lucataglia Date: Fri, 19 May 2023 18:47:21 +0200 Subject: [PATCH] handle default button visibility --- .../react-json-tree/src/JSONNestedNode.tsx | 8 +++-- .../react-json-tree/src/expandableButtons.tsx | 35 ++++++++++++++----- packages/react-json-tree/src/index.tsx | 4 +++ packages/react-json-tree/src/types.ts | 1 + 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/packages/react-json-tree/src/JSONNestedNode.tsx b/packages/react-json-tree/src/JSONNestedNode.tsx index 6a505adf..2f035e38 100644 --- a/packages/react-json-tree/src/JSONNestedNode.tsx +++ b/packages/react-json-tree/src/JSONNestedNode.tsx @@ -112,6 +112,7 @@ export default function JSONNestedNode(props: Props) { shouldExpandNodeInitially, shouldExpandNode, styling, + setEnableDefaultButton, } = props; const [expanded, setExpanded] = useState( @@ -131,8 +132,11 @@ export default function JSONNestedNode(props: Props) { }, [defaultExpanded, shouldExpandNode]); const handleClick = useCallback(() => { - if (expandable) setExpanded(!expanded); - }, [expandable, expanded]); + if (expandable) { + setExpanded(!expanded); + setEnableDefaultButton(true); + } + }, [expandable, expanded, setEnableDefaultButton]); const renderedChildren = expanded || (hideRoot && level === 0) diff --git a/packages/react-json-tree/src/expandableButtons.tsx b/packages/react-json-tree/src/expandableButtons.tsx index ed9f9856..99c10e2b 100644 --- a/packages/react-json-tree/src/expandableButtons.tsx +++ b/packages/react-json-tree/src/expandableButtons.tsx @@ -5,6 +5,8 @@ import { Expandable } from '.'; interface Props { expandable?: Expandable; + enableDefaultButton: boolean; + setEnableDefaultButton: any; shouldExpandNode?: 'expand' | 'collapse' | 'default'; setShouldExpandNode: any; } @@ -14,6 +16,7 @@ interface ExpandButtonProps { expandIcon?: ReactNode; shouldExpandNode?: 'expand' | 'collapse' | 'default'; setShouldExpandNode: any; + setEnableDefaultButton: any; } interface CollapseButtonProps { @@ -21,15 +24,19 @@ interface CollapseButtonProps { collapseIcon?: ReactNode; shouldExpandNode?: 'expand' | 'collapse' | 'default'; setShouldExpandNode: any; + setEnableDefaultButton: any; } interface DefaultButtonProps { defaultIcon?: ReactNode; setShouldExpandNode: any; + setEnableDefaultButton: any; } function ExpandableButtons({ expandable, + enableDefaultButton, + setEnableDefaultButton, setShouldExpandNode, shouldExpandNode }: Props){ @@ -41,15 +48,17 @@ function ExpandableButtons({ return (
- + setEnableDefaultButton={setEnableDefaultButton} + />} @@ -57,14 +66,18 @@ function ExpandableButtons({ expandableDefaultValue={expandable?.defaultValue} collapseIcon={expandable?.collapseIcon} setShouldExpandNode={setShouldExpandNode} + setEnableDefaultButton={setEnableDefaultButton} shouldExpandNode={shouldExpandNode} />
) } -function ExpandButton({ expandableDefaultValue, expandIcon, shouldExpandNode, setShouldExpandNode }: ExpandButtonProps) { - const onExpand = () => setShouldExpandNode('expand'); +function ExpandButton({ expandableDefaultValue, expandIcon, shouldExpandNode, setEnableDefaultButton, setShouldExpandNode }: ExpandButtonProps) { + const onExpand = () => { + setShouldExpandNode('expand'); + setEnableDefaultButton(true); + } const isDefault = !shouldExpandNode ||shouldExpandNode === 'default' @@ -79,8 +92,11 @@ function ExpandButton({ expandableDefaultValue, expandIcon, shouldExpandNode, se return <>; } - function CollapseButton({ expandableDefaultValue, collapseIcon, shouldExpandNode, setShouldExpandNode }: CollapseButtonProps) { - const onCollapse = () => setShouldExpandNode('collapse'); + function CollapseButton({ expandableDefaultValue, collapseIcon, shouldExpandNode, setEnableDefaultButton, setShouldExpandNode }: CollapseButtonProps) { + const onCollapse = () => { + setShouldExpandNode('collapse'); + setEnableDefaultButton(true); + } const isDefault = !shouldExpandNode ||shouldExpandNode === 'default' @@ -95,8 +111,11 @@ function ExpandButton({ expandableDefaultValue, expandIcon, shouldExpandNode, se return <>; } - function DefaultButton({defaultIcon, setShouldExpandNode }:DefaultButtonProps) { - const onDefaultCollapse = () => setShouldExpandNode('default'); + function DefaultButton({defaultIcon, setEnableDefaultButton, setShouldExpandNode }:DefaultButtonProps) { + const onDefaultCollapse = () => { + setShouldExpandNode('default'); + setEnableDefaultButton(false) + } return (
diff --git a/packages/react-json-tree/src/index.tsx b/packages/react-json-tree/src/index.tsx index 77458611..9b5a6d68 100644 --- a/packages/react-json-tree/src/index.tsx +++ b/packages/react-json-tree/src/index.tsx @@ -58,6 +58,7 @@ export function JSONTree({ collectionLimit = 50, sortObjectKeys = false, }: Props) { + const [enableDefaultButton, setEnableDefaultButton] = useState(false); const [shouldExpandNode, setShouldExpandNode] = useState(); const styling = useMemo( @@ -77,6 +78,7 @@ export function JSONTree({ valueRenderer={valueRenderer} shouldExpandNodeInitially={shouldExpandNodeInitially} shouldExpandNode={shouldExpandNode} + setEnableDefaultButton={setEnableDefaultButton} hideRoot={hideRoot} getItemString={getItemString} postprocessValue={postprocessValue} @@ -86,6 +88,8 @@ export function JSONTree({ diff --git a/packages/react-json-tree/src/types.ts b/packages/react-json-tree/src/types.ts index 048a4086..27e4f806 100644 --- a/packages/react-json-tree/src/types.ts +++ b/packages/react-json-tree/src/types.ts @@ -53,6 +53,7 @@ export interface CommonExternalProps { isCustomNode: IsCustomNode; collectionLimit: number; sortObjectKeys: SortObjectKeys; + setEnableDefaultButton: any; } export interface CommonInternalProps extends CommonExternalProps {