Skip to content

Commit df42758

Browse files
feat(popup-menu-web): click close on (#2084)
Co-authored-by: Rahman <rahmanunver@gmail.com>
1 parent b7164eb commit df42758

6 files changed

Lines changed: 25 additions & 4 deletions

File tree

packages/pluggableWidgets/popup-menu-web/src/PopupMenu.editorConfig.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ export function getProperties(
8585
hidePropertyIn(defaultProperties, values, "hoverCloseOn");
8686
}
8787

88+
if (values.trigger !== "onclick") {
89+
hidePropertyIn(defaultProperties, values, "clickCloseOn");
90+
}
91+
8892
return defaultProperties;
8993
}
9094

packages/pluggableWidgets/popup-menu-web/src/PopupMenu.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,14 @@
9191
<enumerationValue key="onhover">Hover</enumerationValue>
9292
</enumerationValues>
9393
</property>
94+
<property key="clickCloseOn" type="enumeration" defaultValue="onClickAnywhere">
95+
<caption>Close on</caption>
96+
<description />
97+
<enumerationValues>
98+
<enumerationValue key="onClickAnywhere">Click anywhere</enumerationValue>
99+
<enumerationValue key="onClickOutside">Click outside</enumerationValue>
100+
</enumerationValues>
101+
</property>
94102
<property key="hoverCloseOn" type="enumeration" defaultValue="onHoverLeave">
95103
<caption>Close on</caption>
96104
<description />

packages/pluggableWidgets/popup-menu-web/src/__tests__/Menu.spec.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ describe("Menu", () => {
3434
menuTrigger: createElement("button", null, "Trigger"),
3535
advancedMode: false,
3636
hoverCloseOn: "onClickOutside",
37+
clickCloseOn: "onClickAnywhere",
3738
position: "bottom",
3839
basicItems: [
3940
basicItemProps,

packages/pluggableWidgets/popup-menu-web/src/__tests__/PopupMenu.spec.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ describe("Popup Menu", () => {
2828
advancedMode: false,
2929
position: "bottom",
3030
hoverCloseOn: "onHoverLeave",
31+
clickCloseOn: "onClickAnywhere",
3132
basicItems: [
3233
basicItemProps,
3334
{ itemType: "divider", caption: dynamicValue("Caption"), styleClass: "defaultStyle" }

packages/pluggableWidgets/popup-menu-web/src/components/PopupMenu.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@ export function PopupMenu(props: PopupMenuContainerProps): ReactElement {
1919
clippingStrategy: props.clippingStrategy
2020
});
2121

22-
const handleOnClickItem = useCallback((itemAction?: ActionValue): void => {
23-
setVisibility(false);
24-
executeAction(itemAction);
25-
}, []);
22+
const handleOnClickItem = useCallback(
23+
(itemAction?: ActionValue): void => {
24+
if (props.clickCloseOn === "onClickAnywhere") setVisibility(false);
25+
executeAction(itemAction);
26+
},
27+
[props.clickCloseOn]
28+
);
2629

2730
useEffect(() => {
2831
setVisibility(props.menuToggle);

packages/pluggableWidgets/popup-menu-web/typings/PopupMenuProps.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ export interface CustomItemsType {
2626

2727
export type TriggerEnum = "onclick" | "onhover";
2828

29+
export type ClickCloseOnEnum = "onClickAnywhere" | "onClickOutside";
30+
2931
export type HoverCloseOnEnum = "onClickOutside" | "onHoverLeave";
3032

3133
export type PositionEnum = "left" | "right" | "top" | "bottom";
@@ -56,6 +58,7 @@ export interface PopupMenuContainerProps {
5658
basicItems: BasicItemsType[];
5759
customItems: CustomItemsType[];
5860
trigger: TriggerEnum;
61+
clickCloseOn: ClickCloseOnEnum;
5962
hoverCloseOn: HoverCloseOnEnum;
6063
position: PositionEnum;
6164
clippingStrategy: ClippingStrategyEnum;
@@ -78,6 +81,7 @@ export interface PopupMenuPreviewProps {
7881
basicItems: BasicItemsPreviewType[];
7982
customItems: CustomItemsPreviewType[];
8083
trigger: TriggerEnum;
84+
clickCloseOn: ClickCloseOnEnum;
8185
hoverCloseOn: HoverCloseOnEnum;
8286
position: PositionEnum;
8387
clippingStrategy: ClippingStrategyEnum;

0 commit comments

Comments
 (0)