Skip to content

Commit 3aa09b3

Browse files
committed
fix: Failing test cases
1 parent b8db62c commit 3aa09b3

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

  • packages/components/src/tools-panel/tools-panel-item

‎packages/components/src/tools-panel/tools-panel-item/hook.ts‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
useEffect,
88
useLayoutEffect,
99
useMemo,
10+
useRef,
1011
} from '@wordpress/element';
1112

1213
/**
@@ -142,6 +143,11 @@ export function useToolsPanelItem(
142143
isShownByDefault,
143144
] );
144145

146+
// Tracks whether the item was explicitly shown by a user menu action.
147+
// This allows onDeselect to fire even when hasValue() is false, but only
148+
// for items the user intentionally toggled on.
149+
const wasShownByUserRef = useRef( false );
150+
145151
// Determine if the panel item's corresponding menu is being toggled and
146152
// trigger appropriate callback if it is.
147153
useEffect( () => {
@@ -153,11 +159,15 @@ export function useToolsPanelItem(
153159
}
154160

155161
if ( isMenuItemChecked && ! isValueSet && ! wasMenuItemChecked ) {
162+
wasShownByUserRef.current = true;
156163
onSelect?.();
157164
}
158165

159166
if ( ! isMenuItemChecked && wasMenuItemChecked ) {
160-
onDeselect?.();
167+
if ( isValueSet || wasShownByUserRef.current ) {
168+
onDeselect?.();
169+
}
170+
wasShownByUserRef.current = false;
161171
}
162172
}, [
163173
hasMatchingPanel,

0 commit comments

Comments
 (0)