Skip to content

Commit be24bd6

Browse files
authored
[WC-3299] Show popup content in design preview when advanced mode is enabled (#2139)
2 parents 12b11dd + f0ccad7 commit be24bd6

7 files changed

Lines changed: 41 additions & 60 deletions

File tree

packages/pluggableWidgets/popup-menu-web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66

77
## [Unreleased]
88

9+
### Fixed
10+
11+
- We fixed an issue with Advanced options mode not showing options content in Design mode.
12+
913
## [4.0.3] - 2026-02-10
1014

1115
### Added

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
import {
2+
changePropertyIn,
3+
hidePropertyIn,
4+
Problem,
5+
Properties,
6+
transformGroupsIntoTabs
7+
} from "@mendix/pluggable-widgets-tools";
18
import {
29
ContainerProps,
310
DropZoneProps,
@@ -7,13 +14,6 @@ import {
714
StructurePreviewProps,
815
TextProps
916
} from "@mendix/widget-plugin-platform/preview/structure-preview-api";
10-
import {
11-
changePropertyIn,
12-
hidePropertyIn,
13-
Problem,
14-
Properties,
15-
transformGroupsIntoTabs
16-
} from "@mendix/pluggable-widgets-tools";
1717

1818
import { BasicItemsPreviewType, PopupMenuPreviewProps } from "../typings/PopupMenuProps";
1919

Lines changed: 19 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,34 @@
1-
import { parseStyle } from "@mendix/widget-plugin-platform/preview/parse-style";
1+
import classNames from "classnames";
22
import { ReactElement } from "react";
3-
import { PopupMenu as PopupMenuComponent } from "./components/PopupMenu";
43

5-
import { BasicItemsType, CustomItemsType, PopupMenuPreviewProps } from "../typings/PopupMenuProps";
6-
import { dynamicValue } from "./utils/attrValue";
4+
import { parseStyle } from "@mendix/widget-plugin-platform/preview/parse-style";
5+
import { PopupMenuPreviewProps } from "../typings/PopupMenuProps";
76

87
export function getPreviewCss(): string {
98
return require("./ui/PopupMenuPreview.scss");
109
}
1110

1211
export function preview(props: PopupMenuPreviewProps): ReactElement {
13-
const basicItems: BasicItemsType[] = [];
14-
const customItems: CustomItemsType[] = [];
15-
const styles = parseStyle(props.style);
16-
17-
if (!props.advancedMode) {
18-
props.basicItems.forEach(item => {
19-
basicItems.push({
20-
itemType: item.itemType,
21-
caption: dynamicValue(item.caption),
22-
action: undefined,
23-
styleClass: item.styleClass
24-
});
25-
});
26-
} else {
27-
props.customItems.forEach(item => {
28-
customItems.push({
29-
action: undefined,
30-
content: (
31-
<item.content.renderer>
32-
<div />
33-
</item.content.renderer>
34-
)
35-
});
36-
});
37-
}
12+
const showMenu = props.advancedMode && props.customItems.length > 0;
3813

3914
return (
40-
<PopupMenuComponent
41-
{...props}
42-
class={props.className}
43-
basicItems={basicItems}
44-
customItems={customItems}
45-
menuTrigger={
15+
<div className={classNames("popupmenu", props.class)}>
16+
<div className="popupmenu-trigger">
4617
<props.menuTrigger.renderer>
4718
<div />
4819
</props.menuTrigger.renderer>
49-
}
50-
name="Popup Menu"
51-
preview
52-
style={styles}
53-
tabIndex={0}
54-
/>
20+
</div>
21+
<div className="widget-popupmenu-root">
22+
{showMenu && (
23+
<ul style={parseStyle(props.style)} className="popupmenu-menu">
24+
{props.customItems.map((item, index) => (
25+
<item.content.renderer key={index}>
26+
<li className={"popupmenu-custom-item"}></li>
27+
</item.content.renderer>
28+
))}
29+
</ul>
30+
)}
31+
</div>
32+
</div>
5533
);
5634
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { fireEvent, render, RenderResult } from "@testing-library/react";
22
import { ValueStatus } from "mendix";
33
import { createElement } from "react";
4+
import { MenuWithContext as Menu } from "./MenuWithContext";
45
import { BasicItemsType, CustomItemsType } from "../../typings/PopupMenuProps";
56
import { MenuProps } from "../components/Menu";
67
import { actionValue, dynamicValue } from "../utils/attrValue";
7-
import { MenuWithContext as Menu } from "./MenuWithContext";
88

99
import "@testing-library/jest-dom";
1010

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

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
1-
import { executeAction } from "@mendix/widget-plugin-platform/framework/execute-action";
21
import classNames from "classnames";
32
import { ActionValue } from "mendix";
43
import { ReactElement, useCallback, useEffect, useState } from "react";
5-
import { PopupMenuContainerProps } from "../../typings/PopupMenuProps";
6-
import { usePopup } from "../hooks/usePopup";
4+
import { executeAction } from "@mendix/widget-plugin-platform/framework/execute-action";
75
import { Menu } from "./Menu";
86
import { PopupContext } from "./PopupContext";
97
import { PopupTrigger } from "./PopupTrigger";
8+
import { PopupMenuContainerProps } from "../../typings/PopupMenuProps";
9+
import { usePopup } from "../hooks/usePopup";
1010

11-
export interface PopupMenuProps extends PopupMenuContainerProps {
12-
preview?: boolean;
13-
}
14-
15-
export function PopupMenu(props: PopupMenuProps): ReactElement {
16-
const preview = !!props.preview;
17-
const [visibility, setVisibility] = useState(preview && props.menuToggle);
11+
export function PopupMenu(props: PopupMenuContainerProps): ReactElement {
12+
const [visibility, setVisibility] = useState(props.menuToggle);
1813
const open = visibility;
1914
const popup = usePopup({
2015
open,

packages/pluggableWidgets/popup-menu-web/src/hooks/usePopupContext.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useContext } from "react";
2-
import { PopupContext } from "../components/PopupContext";
32
import { UsePopupReturn } from "./usePopup";
3+
import { PopupContext } from "../components/PopupContext";
44

55
export const usePopupContext = (): UsePopupReturn => {
66
const context = useContext(PopupContext);

packages/pluggableWidgets/popup-menu-web/src/ui/PopupMenuPreview.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
.popupmenu {
22
width: 100%;
3+
flex-direction: column;
4+
.popupmenu-menu {
5+
position: static;
6+
}
37
}
48

59
.popupmenu-trigger {

0 commit comments

Comments
 (0)