Skip to content

Commit dffd977

Browse files
authored
support onTriggered action in PopupMenu widget (#1049)
1 parent 43ede4b commit dffd977

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

.changeset/twenty-lamps-help.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@ensembleui/react-kitchen-sink": patch
3+
"@ensembleui/react-runtime": patch
4+
---
5+
6+
support onTriggered action in PopupMenu widget

apps/kitchen-sink/src/ensemble/screens/widgets.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ View:
5151
trigger: hover
5252
styles:
5353
height: 200px
54+
onTriggered: console.log("onTriggered called", open)
5455
onItemSelect:
5556
showToast:
5657
message: Your selected brand's ${value?.product ? "rating" :"price"} is ${value?.product?.rating || value?.value}
@@ -172,6 +173,7 @@ View:
172173
trigger: contextMenu
173174
styles:
174175
backgroundColor: ${colors.gray['50']}
176+
onTriggered: console.log("onTriggered called", open)
175177
onItemSelect:
176178
showToast:
177179
message: navigated to ${value.str}

packages/runtime/src/widgets/PopupMenu.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,13 @@ export type PopupMenuProps = {
5656
onItemSelect?: EnsembleAction;
5757
showDivider?: boolean | Expression<string>;
5858
trigger?: "click" | "hover" | "contextMenu";
59+
onTriggered?: EnsembleAction;
5960
enabled?: boolean;
6061
} & EnsembleWidgetProps<PopupMenuStyles & EnsembleWidgetStyles> &
6162
HasItemTemplate & { "item-template"?: { value: Expression<string> } };
6263

6364
export const PopupMenu: React.FC<PopupMenuProps> = ({
65+
onTriggered,
6466
onItemSelect,
6567
"item-template": itemTemplate,
6668
...rest
@@ -70,6 +72,7 @@ export const PopupMenu: React.FC<PopupMenuProps> = ({
7072
rest.id,
7173
);
7274
const action = useEnsembleAction(onItemSelect);
75+
const onTriggerAction = useEnsembleAction(onTriggered);
7376

7477
const { namedData } = useTemplateData({
7578
data: itemTemplate?.data,
@@ -188,6 +191,15 @@ export const PopupMenu: React.FC<PopupMenuProps> = ({
188191
[action?.callback, itemsMap],
189192
);
190193

194+
const handleOnOpenChange = useCallback(
195+
(open: boolean) => {
196+
if (open) {
197+
onTriggerAction?.callback({ open });
198+
}
199+
},
200+
[onTriggerAction],
201+
);
202+
191203
return (
192204
<div ref={rootRef}>
193205
<AntdDropdown
@@ -198,6 +210,7 @@ export const PopupMenu: React.FC<PopupMenuProps> = ({
198210
onClick: handleMenuItemClick,
199211
style: { overflow: "auto", ...values?.styles },
200212
}}
213+
onOpenChange={handleOnOpenChange}
201214
trigger={[values?.trigger || DEFAULT_POPUPMENU_TRIGGER]}
202215
>
203216
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}

0 commit comments

Comments
 (0)