Skip to content

Commit 9a75f25

Browse files
astandrikAnton Standrik
andauthored
feat: add actions open toggle handler (#77)
* feat: add actions open close handlers --------- Co-authored-by: Anton Standrik <[email protected]>
1 parent 4fdddfc commit 9a75f25

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

src/components/NavigationTree/NavigationTreeNode.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export interface NavigationTreeNodeProps {
2727
children?: React.ReactNode;
2828
onActivate?: (path: string) => void;
2929
getActions?: NavigationTreeProps['getActions'];
30+
onActionsOpenToggle?: NavigationTreeProps['onActionsOpenToggle'];
3031
renderAdditionalNodeElements?: NavigationTreeProps['renderAdditionalNodeElements'];
3132
cache?: boolean;
3233
}
@@ -71,6 +72,7 @@ export function NavigationTreeNode({
7172
children,
7273
onActivate,
7374
getActions,
75+
onActionsOpenToggle,
7476
renderAdditionalNodeElements,
7577
cache,
7678
}: NavigationTreeNodeProps) {
@@ -130,6 +132,17 @@ export function NavigationTreeNode({
130132
return getActions?.(nodeState.path, nodeState.type);
131133
}, [getActions, nodeState]);
132134

135+
const handleActionsOpenToggle = React.useCallback(
136+
(isOpen: boolean) => {
137+
onActionsOpenToggle?.({
138+
path: nodeState.path,
139+
type: nodeState.type,
140+
isOpen,
141+
});
142+
},
143+
[nodeState.path, nodeState.type, onActionsOpenToggle],
144+
);
145+
133146
return (
134147
<TreeView
135148
name={nodeState.name}
@@ -141,6 +154,7 @@ export function NavigationTreeNode({
141154
hasArrow={nodeState.expandable}
142155
onClick={handleClick}
143156
onArrowClick={handleArrowClick}
157+
onActionsOpenToggle={handleActionsOpenToggle}
144158
level={level}
145159
>
146160
{children}

src/components/NavigationTree/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ export type NavigationTreeNodePartialState = Omit<
5353
export interface NavigationTreeProps<D = any> {
5454
rootState: NavigationTreeNodePartialState;
5555
fetchPath: (path: string) => Promise<NavigationTreeDataItem[]>;
56+
onActionsOpenToggle?: (args: {
57+
path: string;
58+
type: NavigationTreeNodeType;
59+
isOpen: boolean;
60+
}) => DropdownMenuItemMixed<D>[];
5661
getActions?: (path: string, type: NavigationTreeNodeType) => DropdownMenuItemMixed<D>[];
5762
renderAdditionalNodeElements?: (
5863
path: string,

src/components/TreeView/TreeView.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export interface TreeViewProps {
1616
active?: boolean;
1717
onClick?: () => void;
1818
onArrowClick?: () => void;
19+
onActionsOpenToggle?: (isOpen: boolean) => void;
1920
hasArrow?: boolean;
2021
actions?: DropdownMenuItemMixed<any>[];
2122
additionalNodeElements?: JSX.Element;
@@ -35,6 +36,7 @@ export function TreeView({
3536
active = false,
3637
onClick,
3738
onArrowClick,
39+
onActionsOpenToggle,
3840
hasArrow = false,
3941
actions,
4042
additionalNodeElements,
@@ -94,6 +96,7 @@ export function TreeView({
9496
<div className={b('actions')}>
9597
{additionalNodeElements}
9698
<DropdownMenu
99+
onOpenToggle={onActionsOpenToggle}
97100
defaultSwitcherProps={{
98101
view: 'flat-secondary',
99102
size: 's',

0 commit comments

Comments
 (0)