diff --git a/app/client/src/constants/WidgetConstants.tsx b/app/client/src/constants/WidgetConstants.tsx index 4cf04ed4578..ee46f704f40 100644 --- a/app/client/src/constants/WidgetConstants.tsx +++ b/app/client/src/constants/WidgetConstants.tsx @@ -69,7 +69,7 @@ export const layoutConfigurations: LayoutConfigurations = { FLUID: { minWidth: -1, maxWidth: -1 }, }; -export const LATEST_PAGE_VERSION = 49; +export const LATEST_PAGE_VERSION = 50; export const GridDefaults = { DEFAULT_CELL_SIZE: 1, diff --git a/app/client/src/entities/DataTree/dataTreeFactory.ts b/app/client/src/entities/DataTree/dataTreeFactory.ts index 26a4fe16f99..a285558e100 100644 --- a/app/client/src/entities/DataTree/dataTreeFactory.ts +++ b/app/client/src/entities/DataTree/dataTreeFactory.ts @@ -39,6 +39,11 @@ export enum EvaluationSubstitutionType { SMART_SUBSTITUTE = "SMART_SUBSTITUTE", } +// Private widgets do not get evaluated +// For example, for widget Button1 in a List widget List1, List1.template.Button1.text gets evaluated, +// so there is no need to evaluate Button1.text +export type PrivateWidgets = Record; + export interface DataTreeAction extends Omit { data: ActionResponse["body"]; @@ -81,6 +86,7 @@ export interface DataTreeWidget extends WidgetProps { validationPaths: Record; ENTITY_TYPE: ENTITY_TYPE.WIDGET; logBlackList: Record; + privateWidgets: PrivateWidgets; } export interface DataTreeAppsmith extends Omit { diff --git a/app/client/src/entities/DataTree/dataTreeWidget.test.ts b/app/client/src/entities/DataTree/dataTreeWidget.test.ts index 48ccaf1d76b..09227e1a5a4 100644 --- a/app/client/src/entities/DataTree/dataTreeWidget.test.ts +++ b/app/client/src/entities/DataTree/dataTreeWidget.test.ts @@ -251,6 +251,7 @@ describe("generateDataTreeWidget", () => { defaultProps: { text: "defaultText", }, + privateWidgets: {}, }; const result = generateDataTreeWidget(widget, widgetMetaProps); diff --git a/app/client/src/entities/DataTree/dataTreeWidget.ts b/app/client/src/entities/DataTree/dataTreeWidget.ts index 2243f642bff..281ac540820 100644 --- a/app/client/src/entities/DataTree/dataTreeWidget.ts +++ b/app/client/src/entities/DataTree/dataTreeWidget.ts @@ -78,5 +78,8 @@ export const generateDataTreeWidget = ( triggerPaths, validationPaths, ENTITY_TYPE: ENTITY_TYPE.WIDGET, + privateWidgets: { + ...widget.privateWidgets, + }, }; }; diff --git a/app/client/src/selectors/editorSelectors.tsx b/app/client/src/selectors/editorSelectors.tsx index 1af5c91cd52..a4818e87880 100644 --- a/app/client/src/selectors/editorSelectors.tsx +++ b/app/client/src/selectors/editorSelectors.tsx @@ -402,6 +402,7 @@ const createLoadingWidget = ( validationPaths: {}, logBlackList: {}, isLoading: true, + privateWidgets: {}, }; }; diff --git a/app/client/src/utils/DSLMigrations.ts b/app/client/src/utils/DSLMigrations.ts index d5752f548a6..3db9559b7ee 100644 --- a/app/client/src/utils/DSLMigrations.ts +++ b/app/client/src/utils/DSLMigrations.ts @@ -44,6 +44,7 @@ import { migrateCheckboxGroupWidgetInlineProperty } from "./migrations/CheckboxG import { migrateMapWidgetIsClickedMarkerCentered } from "./migrations/MapWidget"; import { DSLWidget } from "widgets/constants"; import { migrateRecaptchaType } from "./migrations/ButtonWidgetMigrations"; +import { PrivateWidgets } from "entities/DataTree/dataTreeFactory"; /** * adds logBlackList key for all list widget children @@ -83,6 +84,32 @@ const addLogBlackListToAllListWidgetChildren = ( return currentDSL; }; +/** + * adds 'privateWidgets' key for all list widgets + * + * @param currentDSL + * @returns + */ +const addPrivateWidgetsToAllListWidgets = ( + currentDSL: ContainerWidgetProps, +) => { + currentDSL.children = currentDSL.children?.map((child: WidgetProps) => { + if (child.type === "LIST_WIDGET") { + const privateWidgets: PrivateWidgets = {}; + Object.keys(child.template).forEach((entityName) => { + privateWidgets[entityName] = true; + }); + + if (!child.privateWidgets) { + set(child, `privateWidgets`, privateWidgets); + } + } + return child; + }); + + return currentDSL; +}; + /** * changes items -> listData * @@ -1001,6 +1028,11 @@ export const transformDSL = ( if (currentDSL.version === 48) { currentDSL = migrateRecaptchaType(currentDSL); + currentDSL.version = 49; + } + + if (currentDSL.version === 49) { + currentDSL = addPrivateWidgetsToAllListWidgets(currentDSL); currentDSL.version = LATEST_PAGE_VERSION; } diff --git a/app/client/src/utils/DSLMigrationsUtils.test.ts b/app/client/src/utils/DSLMigrationsUtils.test.ts new file mode 100644 index 00000000000..cbf4e84d039 --- /dev/null +++ b/app/client/src/utils/DSLMigrationsUtils.test.ts @@ -0,0 +1,1170 @@ +import { transformDSL } from "./DSLMigrations"; +import { RenderModes } from "constants/WidgetConstants"; +import { ContainerWidgetProps } from "widgets/ContainerWidget/widget"; +import { WidgetProps } from "widgets/BaseWidget"; + +describe("correctly migrate dsl", () => { + it("AddsPrivateWidgetsToAllListWidgets", () => { + const currentVersion = 49; + const nextVersion = currentVersion + 1; + const currentDSL: ContainerWidgetProps = { + backgroundColor: "none", + bottomRow: 740, + canExtend: true, + children: [ + { + widgetName: "Input1", + displayName: "Input", + iconSVG: "/static/media/icon.9f505595.svg", + topRow: 18, + bottomRow: 22, + parentRowSpace: 10, + autoFocus: false, + type: "INPUT_WIDGET", + hideCard: false, + animateLoading: true, + parentColumnSpace: 15.0625, + dynamicTriggerPathList: [], + resetOnSubmit: true, + leftColumn: 23, + dynamicBindingPathList: [], + labelStyle: "", + inputType: "TEXT", + isDisabled: false, + key: "ftefjorusw", + isRequired: false, + rightColumn: 43, + widgetId: "lz9hvhcltl", + isVisible: true, + label: "", + allowCurrencyChange: false, + version: 1, + parentId: "0", + renderMode: "CANVAS", + isLoading: false, + iconAlign: "left", + defaultText: "", + }, + { + widgetName: "Button1", + onClick: + '{{Api1.run(()=>{\ndownload((\nfunction(){\nreturn "data:image/jpeg;base64,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"\n}\n)(), "test.png", "image/png")\n})}}', + buttonColor: "#03B365", + dynamicPropertyPathList: [ + { + key: "onClick", + }, + ], + displayName: "Button", + iconSVG: "/static/media/icon.cca02633.svg", + topRow: 29, + bottomRow: 33, + tooltip: "", + parentRowSpace: 10, + type: "BUTTON_WIDGET", + hideCard: false, + animateLoading: true, + parentColumnSpace: 14.0625, + dynamicTriggerPathList: [ + { + key: "onClick", + }, + ], + leftColumn: 20, + dynamicBindingPathList: [], + text: "Submit", + isDisabled: false, + key: "pg01cxraj1", + rightColumn: 36, + isDefaultClickDisabled: true, + widgetId: "d229q1ydul", + isVisible: true, + recaptchaType: "V3", + version: 1, + parentId: "0", + renderMode: "CANVAS", + isLoading: false, + buttonVariant: "PRIMARY", + placement: "CENTER", + }, + { + widgetName: "Input2", + displayName: "Input", + iconSVG: "/static/media/icon.9f505595.svg", + topRow: 44, + bottomRow: 48, + parentRowSpace: 10, + autoFocus: false, + type: "INPUT_WIDGET", + hideCard: false, + animateLoading: true, + parentColumnSpace: 14.0625, + resetOnSubmit: true, + leftColumn: 9, + labelStyle: "", + inputType: "TEXT", + isDisabled: false, + key: "519sr07k1u", + isRequired: false, + rightColumn: 29, + widgetId: "eenq4c022d", + isVisible: true, + label: "", + allowCurrencyChange: false, + version: 1, + parentId: "0", + renderMode: "CANVAS", + isLoading: false, + iconAlign: "left", + defaultText: "", + }, + { + version: 1, + template: { + Image1: { + isVisible: true, + defaultImage: "https://assets.appsmith.com/widgets/default.png", + imageShape: "RECTANGLE", + maxZoomLevel: 1, + enableRotation: false, + enableDownload: false, + objectFit: "contain", + image: "{{List1.listData.map((currentItem) => currentItem.img)}}", + widgetName: "Image1", + version: 1, + animateLoading: true, + type: "IMAGE_WIDGET", + hideCard: false, + displayName: "Image", + key: "9cn4ooadxj", + iconSVG: "/static/media/icon.52d8fb96.svg", + dynamicBindingPathList: [ + { + key: "image", + }, + ], + dynamicTriggerPathList: [], + widgetId: "yqofym38tn", + renderMode: "CANVAS", + isLoading: false, + leftColumn: 0, + rightColumn: 16, + topRow: 0, + bottomRow: 8.4, + parentId: "vqn2okwc6a", + }, + Text1: { + isVisible: true, + text: "{{List1.listData.map((currentItem) => currentItem.name)}}", + fontSize: "PARAGRAPH", + fontStyle: "BOLD", + textAlign: "LEFT", + textColor: "#231F20", + truncateButtonColor: "#FFC13D", + widgetName: "Text1", + shouldScroll: false, + shouldTruncate: false, + version: 1, + animateLoading: true, + type: "TEXT_WIDGET", + hideCard: false, + displayName: "Text", + key: "yd217bk315", + iconSVG: "/static/media/icon.97c59b52.svg", + textStyle: "HEADING", + dynamicBindingPathList: [ + { + key: "text", + }, + ], + dynamicTriggerPathList: [], + widgetId: "zeqf6yfm3s", + renderMode: "CANVAS", + isLoading: false, + leftColumn: 16, + rightColumn: 28, + topRow: 0, + bottomRow: 4, + parentId: "vqn2okwc6a", + }, + Text2: { + isVisible: true, + text: "{{List1.listData.map((currentItem) => currentItem.id)}}", + fontSize: "PARAGRAPH", + fontStyle: "BOLD", + textAlign: "LEFT", + textColor: "#231F20", + truncateButtonColor: "#FFC13D", + widgetName: "Text2", + shouldScroll: false, + shouldTruncate: false, + version: 1, + animateLoading: true, + type: "TEXT_WIDGET", + hideCard: false, + displayName: "Text", + key: "yd217bk315", + iconSVG: "/static/media/icon.97c59b52.svg", + textStyle: "BODY", + dynamicBindingPathList: [ + { + key: "text", + }, + ], + dynamicTriggerPathList: [], + widgetId: "8wyekp2o6e", + renderMode: "CANVAS", + isLoading: false, + leftColumn: 16, + rightColumn: 24, + topRow: 4, + bottomRow: 8, + parentId: "vqn2okwc6a", + }, + }, + widgetName: "List1", + listData: [ + { + id: "001", + name: "Blue", + img: "https://assets.appsmith.com/widgets/default.png", + }, + { + id: "002", + name: "Green", + img: "https://assets.appsmith.com/widgets/default.png", + }, + { + id: "003", + name: "Red", + img: "https://assets.appsmith.com/widgets/default.png", + }, + ], + isCanvas: true, + displayName: "List", + iconSVG: "/static/media/icon.9925ee17.svg", + topRow: 34, + bottomRow: 74, + parentRowSpace: 10, + type: "LIST_WIDGET", + hideCard: false, + gridGap: 0, + animateLoading: true, + parentColumnSpace: 14.0625, + leftColumn: 39, + dynamicBindingPathList: [ + { + key: "template.Image1.image", + }, + { + key: "template.Text1.text", + }, + { + key: "template.Text2.text", + }, + ], + gridType: "vertical", + enhancements: true, + children: [ + { + widgetName: "Canvas1", + displayName: "Canvas", + topRow: 0, + bottomRow: 400, + parentRowSpace: 1, + type: "CANVAS_WIDGET", + canExtend: false, + hideCard: true, + dropDisabled: true, + openParentPropertyPane: true, + minHeight: 400, + noPad: true, + parentColumnSpace: 1, + leftColumn: 0, + children: [ + { + boxShadow: "NONE", + widgetName: "Container1", + borderColor: "transparent", + disallowCopy: true, + isCanvas: true, + displayName: "Container", + iconSVG: "/static/media/icon.1977dca3.svg", + topRow: 0, + bottomRow: 12, + dragDisabled: true, + type: "CONTAINER_WIDGET", + hideCard: false, + openParentPropertyPane: true, + isDeletable: false, + animateLoading: true, + leftColumn: 0, + children: [ + { + widgetName: "Canvas2", + detachFromLayout: true, + displayName: "Canvas", + widgetId: "vqn2okwc6a", + containerStyle: "none", + topRow: 0, + parentRowSpace: 1, + isVisible: true, + type: "CANVAS_WIDGET", + canExtend: false, + version: 1, + hideCard: true, + parentId: "9e77epyavg", + renderMode: "CANVAS", + isLoading: false, + parentColumnSpace: 1, + leftColumn: 0, + children: [ + { + widgetName: "Image1", + displayName: "Image", + iconSVG: "/static/media/icon.52d8fb96.svg", + topRow: 0, + bottomRow: 8.4, + type: "IMAGE_WIDGET", + hideCard: false, + animateLoading: true, + dynamicTriggerPathList: [], + imageShape: "RECTANGLE", + dynamicBindingPathList: [ + { + key: "image", + }, + ], + leftColumn: 0, + defaultImage: + "https://assets.appsmith.com/widgets/default.png", + key: "9cn4ooadxj", + image: "{{currentItem.img}}", + rightColumn: 16, + objectFit: "contain", + widgetId: "yqofym38tn", + logBlackList: { + isVisible: true, + defaultImage: true, + imageShape: true, + maxZoomLevel: true, + enableRotation: true, + enableDownload: true, + objectFit: true, + image: true, + widgetName: true, + version: true, + animateLoading: true, + type: true, + hideCard: true, + displayName: true, + key: true, + iconSVG: true, + isCanvas: true, + dynamicBindingPathList: true, + dynamicTriggerPathList: true, + minHeight: true, + widgetId: true, + renderMode: true, + isLoading: true, + parentColumnSpace: true, + parentRowSpace: true, + leftColumn: true, + rightColumn: true, + topRow: true, + bottomRow: true, + parentId: true, + }, + isVisible: true, + version: 1, + parentId: "vqn2okwc6a", + renderMode: "CANVAS", + isLoading: false, + maxZoomLevel: 1, + enableDownload: false, + enableRotation: false, + }, + { + widgetName: "Text1", + displayName: "Text", + iconSVG: "/static/media/icon.97c59b52.svg", + topRow: 0, + bottomRow: 4, + type: "TEXT_WIDGET", + hideCard: false, + animateLoading: true, + dynamicTriggerPathList: [], + dynamicBindingPathList: [ + { + key: "text", + }, + ], + leftColumn: 16, + shouldTruncate: false, + truncateButtonColor: "#FFC13D", + text: "{{currentItem.name}}", + key: "yd217bk315", + rightColumn: 28, + textAlign: "LEFT", + widgetId: "zeqf6yfm3s", + logBlackList: { + isVisible: true, + text: true, + fontSize: true, + fontStyle: true, + textAlign: true, + textColor: true, + truncateButtonColor: true, + widgetName: true, + shouldScroll: true, + shouldTruncate: true, + version: true, + animateLoading: true, + type: true, + hideCard: true, + displayName: true, + key: true, + iconSVG: true, + isCanvas: true, + textStyle: true, + dynamicBindingPathList: true, + dynamicTriggerPathList: true, + minHeight: true, + widgetId: true, + renderMode: true, + isLoading: true, + parentColumnSpace: true, + parentRowSpace: true, + leftColumn: true, + rightColumn: true, + topRow: true, + bottomRow: true, + parentId: true, + }, + isVisible: true, + fontStyle: "BOLD", + textColor: "#231F20", + shouldScroll: false, + version: 1, + parentId: "vqn2okwc6a", + renderMode: "CANVAS", + isLoading: false, + fontSize: "PARAGRAPH", + textStyle: "HEADING", + }, + { + widgetName: "Text2", + displayName: "Text", + iconSVG: "/static/media/icon.97c59b52.svg", + topRow: 4, + bottomRow: 8, + type: "TEXT_WIDGET", + hideCard: false, + animateLoading: true, + dynamicTriggerPathList: [], + dynamicBindingPathList: [ + { + key: "text", + }, + ], + leftColumn: 16, + shouldTruncate: false, + truncateButtonColor: "#FFC13D", + text: "{{currentItem.id}}", + key: "yd217bk315", + rightColumn: 24, + textAlign: "LEFT", + widgetId: "8wyekp2o6e", + logBlackList: { + isVisible: true, + text: true, + fontSize: true, + fontStyle: true, + textAlign: true, + textColor: true, + truncateButtonColor: true, + widgetName: true, + shouldScroll: true, + shouldTruncate: true, + version: true, + animateLoading: true, + type: true, + hideCard: true, + displayName: true, + key: true, + iconSVG: true, + isCanvas: true, + textStyle: true, + dynamicBindingPathList: true, + dynamicTriggerPathList: true, + minHeight: true, + widgetId: true, + renderMode: true, + isLoading: true, + parentColumnSpace: true, + parentRowSpace: true, + leftColumn: true, + rightColumn: true, + topRow: true, + bottomRow: true, + parentId: true, + }, + isVisible: true, + fontStyle: "BOLD", + textColor: "#231F20", + shouldScroll: false, + version: 1, + parentId: "vqn2okwc6a", + renderMode: "CANVAS", + isLoading: false, + fontSize: "PARAGRAPH", + textStyle: "BODY", + }, + ], + key: "omhgz5cakp", + }, + ], + borderWidth: "0", + key: "ca3a42k2a4", + disablePropertyPane: true, + backgroundColor: "white", + rightColumn: 64, + widgetId: "9e77epyavg", + containerStyle: "card", + isVisible: true, + version: 1, + parentId: "q3ype57cdo", + renderMode: "CANVAS", + isLoading: false, + borderRadius: "0", + }, + ], + key: "omhgz5cakp", + rightColumn: 337.5, + detachFromLayout: true, + widgetId: "q3ype57cdo", + containerStyle: "none", + isVisible: true, + version: 1, + parentId: "iupz1d99ka", + renderMode: "CANVAS", + isLoading: false, + }, + ], + key: "axex98spx3", + backgroundColor: "transparent", + rightColumn: 63, + itemBackgroundColor: "#FFFFFF", + widgetId: "iupz1d99ka", + isVisible: true, + parentId: "0", + renderMode: "CANVAS", + isLoading: false, + }, + ], + containerStyle: "none", + detachFromLayout: true, + dynamicBindingPathList: [], + dynamicTriggerPathList: [], + leftColumn: 0, + minHeight: 640, + parentColumnSpace: 1, + parentRowSpace: 1, + rightColumn: 912, + snapColumns: 64, + snapRows: 125, + topRow: 0, + type: "CANVAS_WIDGET", + version: currentVersion, + widgetId: "0", + widgetName: "MainContainer", + renderMode: "CANVAS", + isLoading: false, + }; + + const expectedNextDSL: ContainerWidgetProps = { + backgroundColor: "none", + bottomRow: 740, + canExtend: true, + version: nextVersion, + children: [ + { + widgetName: "Input1", + displayName: "Input", + iconSVG: "/static/media/icon.9f505595.svg", + topRow: 18, + bottomRow: 22, + parentRowSpace: 10, + autoFocus: false, + type: "INPUT_WIDGET", + hideCard: false, + animateLoading: true, + parentColumnSpace: 15.0625, + dynamicTriggerPathList: [], + resetOnSubmit: true, + leftColumn: 23, + dynamicBindingPathList: [], + labelStyle: "", + inputType: "TEXT", + isDisabled: false, + key: "ftefjorusw", + isRequired: false, + rightColumn: 43, + widgetId: "lz9hvhcltl", + isVisible: true, + label: "", + allowCurrencyChange: false, + version: 1, + parentId: "0", + renderMode: "CANVAS", + isLoading: false, + iconAlign: "left", + defaultText: "", + }, + { + widgetName: "Button1", + onClick: + '{{Api1.run(()=>{\ndownload((\nfunction(){\nreturn "data:image/jpeg;base64,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"\n}\n)(), "test.png", "image/png")\n})}}', + buttonColor: "#03B365", + dynamicPropertyPathList: [ + { + key: "onClick", + }, + ], + displayName: "Button", + iconSVG: "/static/media/icon.cca02633.svg", + topRow: 29, + bottomRow: 33, + tooltip: "", + parentRowSpace: 10, + type: "BUTTON_WIDGET", + hideCard: false, + animateLoading: true, + parentColumnSpace: 14.0625, + dynamicTriggerPathList: [ + { + key: "onClick", + }, + ], + leftColumn: 20, + dynamicBindingPathList: [], + text: "Submit", + isDisabled: false, + key: "pg01cxraj1", + rightColumn: 36, + isDefaultClickDisabled: true, + widgetId: "d229q1ydul", + isVisible: true, + recaptchaType: "V3", + version: 1, + parentId: "0", + renderMode: "CANVAS", + isLoading: false, + buttonVariant: "PRIMARY", + placement: "CENTER", + }, + { + widgetName: "Input2", + displayName: "Input", + iconSVG: "/static/media/icon.9f505595.svg", + topRow: 44, + bottomRow: 48, + parentRowSpace: 10, + autoFocus: false, + type: "INPUT_WIDGET", + hideCard: false, + animateLoading: true, + parentColumnSpace: 14.0625, + resetOnSubmit: true, + leftColumn: 9, + labelStyle: "", + inputType: "TEXT", + isDisabled: false, + key: "519sr07k1u", + isRequired: false, + rightColumn: 29, + widgetId: "eenq4c022d", + isVisible: true, + label: "", + allowCurrencyChange: false, + version: 1, + parentId: "0", + renderMode: "CANVAS", + isLoading: false, + iconAlign: "left", + defaultText: "", + }, + { + widgetName: "List1", + template: { + Image1: { + isVisible: true, + defaultImage: "https://assets.appsmith.com/widgets/default.png", + imageShape: "RECTANGLE", + maxZoomLevel: 1, + enableRotation: false, + enableDownload: false, + objectFit: "contain", + image: "{{List1.listData.map((currentItem) => currentItem.img)}}", + widgetName: "Image1", + version: 1, + animateLoading: true, + type: "IMAGE_WIDGET", + hideCard: false, + displayName: "Image", + key: "9cn4ooadxj", + iconSVG: "/static/media/icon.52d8fb96.svg", + dynamicBindingPathList: [ + { + key: "image", + }, + ], + dynamicTriggerPathList: [], + widgetId: "yqofym38tn", + renderMode: "CANVAS", + isLoading: false, + leftColumn: 0, + rightColumn: 16, + topRow: 0, + bottomRow: 8.4, + parentId: "vqn2okwc6a", + }, + Text1: { + isVisible: true, + text: "{{List1.listData.map((currentItem) => currentItem.name)}}", + fontSize: "PARAGRAPH", + fontStyle: "BOLD", + textAlign: "LEFT", + textColor: "#231F20", + truncateButtonColor: "#FFC13D", + widgetName: "Text1", + shouldScroll: false, + shouldTruncate: false, + version: 1, + animateLoading: true, + type: "TEXT_WIDGET", + hideCard: false, + displayName: "Text", + key: "yd217bk315", + iconSVG: "/static/media/icon.97c59b52.svg", + textStyle: "HEADING", + dynamicBindingPathList: [ + { + key: "text", + }, + ], + dynamicTriggerPathList: [], + widgetId: "zeqf6yfm3s", + renderMode: "CANVAS", + isLoading: false, + leftColumn: 16, + rightColumn: 28, + topRow: 0, + bottomRow: 4, + parentId: "vqn2okwc6a", + }, + Text2: { + isVisible: true, + text: "{{List1.listData.map((currentItem) => currentItem.id)}}", + fontSize: "PARAGRAPH", + fontStyle: "BOLD", + textAlign: "LEFT", + textColor: "#231F20", + truncateButtonColor: "#FFC13D", + widgetName: "Text2", + shouldScroll: false, + shouldTruncate: false, + version: 1, + animateLoading: true, + type: "TEXT_WIDGET", + hideCard: false, + displayName: "Text", + key: "yd217bk315", + iconSVG: "/static/media/icon.97c59b52.svg", + textStyle: "BODY", + dynamicBindingPathList: [ + { + key: "text", + }, + ], + dynamicTriggerPathList: [], + widgetId: "8wyekp2o6e", + renderMode: "CANVAS", + isLoading: false, + leftColumn: 16, + rightColumn: 24, + topRow: 4, + bottomRow: 8, + parentId: "vqn2okwc6a", + }, + }, + listData: [ + { + id: "001", + name: "Blue", + img: "https://assets.appsmith.com/widgets/default.png", + }, + { + id: "002", + name: "Green", + img: "https://assets.appsmith.com/widgets/default.png", + }, + { + id: "003", + name: "Red", + img: "https://assets.appsmith.com/widgets/default.png", + }, + ], + isCanvas: true, + displayName: "List", + iconSVG: "/static/media/icon.9925ee17.svg", + topRow: 34, + bottomRow: 74, + parentRowSpace: 10, + type: "LIST_WIDGET", + hideCard: false, + gridGap: 0, + animateLoading: true, + parentColumnSpace: 14.0625, + leftColumn: 39, + dynamicBindingPathList: [ + { + key: "template.Image1.image", + }, + { + key: "template.Text1.text", + }, + { + key: "template.Text2.text", + }, + ], + gridType: "vertical", + enhancements: true, + children: [ + { + widgetName: "Canvas1", + displayName: "Canvas", + topRow: 0, + bottomRow: 400, + parentRowSpace: 1, + type: "CANVAS_WIDGET", + canExtend: false, + hideCard: true, + dropDisabled: true, + openParentPropertyPane: true, + minHeight: 400, + noPad: true, + parentColumnSpace: 1, + leftColumn: 0, + children: [ + { + boxShadow: "NONE", + widgetName: "Container1", + borderColor: "transparent", + disallowCopy: true, + isCanvas: true, + displayName: "Container", + iconSVG: "/static/media/icon.1977dca3.svg", + topRow: 0, + bottomRow: 12, + dragDisabled: true, + type: "CONTAINER_WIDGET", + hideCard: false, + openParentPropertyPane: true, + isDeletable: false, + animateLoading: true, + leftColumn: 0, + children: [ + { + widgetName: "Canvas2", + detachFromLayout: true, + displayName: "Canvas", + widgetId: "vqn2okwc6a", + containerStyle: "none", + topRow: 0, + parentRowSpace: 1, + isVisible: true, + type: "CANVAS_WIDGET", + canExtend: false, + version: 1, + hideCard: true, + parentId: "9e77epyavg", + renderMode: "CANVAS", + isLoading: false, + parentColumnSpace: 1, + leftColumn: 0, + children: [ + { + widgetName: "Image1", + displayName: "Image", + iconSVG: "/static/media/icon.52d8fb96.svg", + topRow: 0, + bottomRow: 8.4, + type: "IMAGE_WIDGET", + hideCard: false, + animateLoading: true, + dynamicTriggerPathList: [], + imageShape: "RECTANGLE", + dynamicBindingPathList: [ + { + key: "image", + }, + ], + leftColumn: 0, + defaultImage: + "https://assets.appsmith.com/widgets/default.png", + key: "9cn4ooadxj", + image: "{{currentItem.img}}", + rightColumn: 16, + objectFit: "contain", + widgetId: "yqofym38tn", + logBlackList: { + isVisible: true, + defaultImage: true, + imageShape: true, + maxZoomLevel: true, + enableRotation: true, + enableDownload: true, + objectFit: true, + image: true, + widgetName: true, + version: true, + animateLoading: true, + type: true, + hideCard: true, + displayName: true, + key: true, + iconSVG: true, + isCanvas: true, + dynamicBindingPathList: true, + dynamicTriggerPathList: true, + minHeight: true, + widgetId: true, + renderMode: true, + isLoading: true, + parentColumnSpace: true, + parentRowSpace: true, + leftColumn: true, + rightColumn: true, + topRow: true, + bottomRow: true, + parentId: true, + }, + isVisible: true, + version: 1, + parentId: "vqn2okwc6a", + renderMode: "CANVAS", + isLoading: false, + maxZoomLevel: 1, + enableDownload: false, + enableRotation: false, + }, + { + widgetName: "Text1", + displayName: "Text", + iconSVG: "/static/media/icon.97c59b52.svg", + topRow: 0, + bottomRow: 4, + type: "TEXT_WIDGET", + hideCard: false, + animateLoading: true, + dynamicTriggerPathList: [], + dynamicBindingPathList: [ + { + key: "text", + }, + ], + leftColumn: 16, + shouldTruncate: false, + truncateButtonColor: "#FFC13D", + text: "{{currentItem.name}}", + key: "yd217bk315", + rightColumn: 28, + textAlign: "LEFT", + widgetId: "zeqf6yfm3s", + logBlackList: { + isVisible: true, + text: true, + fontSize: true, + fontStyle: true, + textAlign: true, + textColor: true, + truncateButtonColor: true, + widgetName: true, + shouldScroll: true, + shouldTruncate: true, + version: true, + animateLoading: true, + type: true, + hideCard: true, + displayName: true, + key: true, + iconSVG: true, + isCanvas: true, + textStyle: true, + dynamicBindingPathList: true, + dynamicTriggerPathList: true, + minHeight: true, + widgetId: true, + renderMode: true, + isLoading: true, + parentColumnSpace: true, + parentRowSpace: true, + leftColumn: true, + rightColumn: true, + topRow: true, + bottomRow: true, + parentId: true, + }, + isVisible: true, + fontStyle: "BOLD", + textColor: "#231F20", + shouldScroll: false, + version: 1, + parentId: "vqn2okwc6a", + renderMode: "CANVAS", + isLoading: false, + fontSize: "PARAGRAPH", + textStyle: "HEADING", + }, + { + widgetName: "Text2", + displayName: "Text", + iconSVG: "/static/media/icon.97c59b52.svg", + topRow: 4, + bottomRow: 8, + type: "TEXT_WIDGET", + hideCard: false, + animateLoading: true, + dynamicTriggerPathList: [], + dynamicBindingPathList: [ + { + key: "text", + }, + ], + leftColumn: 16, + shouldTruncate: false, + truncateButtonColor: "#FFC13D", + text: "{{currentItem.id}}", + key: "yd217bk315", + rightColumn: 24, + textAlign: "LEFT", + widgetId: "8wyekp2o6e", + logBlackList: { + isVisible: true, + text: true, + fontSize: true, + fontStyle: true, + textAlign: true, + textColor: true, + truncateButtonColor: true, + widgetName: true, + shouldScroll: true, + shouldTruncate: true, + version: true, + animateLoading: true, + type: true, + hideCard: true, + displayName: true, + key: true, + iconSVG: true, + isCanvas: true, + textStyle: true, + dynamicBindingPathList: true, + dynamicTriggerPathList: true, + minHeight: true, + widgetId: true, + renderMode: true, + isLoading: true, + parentColumnSpace: true, + parentRowSpace: true, + leftColumn: true, + rightColumn: true, + topRow: true, + bottomRow: true, + parentId: true, + }, + isVisible: true, + fontStyle: "BOLD", + textColor: "#231F20", + shouldScroll: false, + version: 1, + parentId: "vqn2okwc6a", + renderMode: "CANVAS", + isLoading: false, + fontSize: "PARAGRAPH", + textStyle: "BODY", + }, + ], + key: "omhgz5cakp", + }, + ], + borderWidth: "0", + key: "ca3a42k2a4", + disablePropertyPane: true, + backgroundColor: "white", + rightColumn: 64, + widgetId: "9e77epyavg", + containerStyle: "card", + isVisible: true, + version: 1, + parentId: "q3ype57cdo", + renderMode: "CANVAS", + isLoading: false, + borderRadius: "0", + }, + ], + key: "omhgz5cakp", + rightColumn: 337.5, + detachFromLayout: true, + widgetId: "q3ype57cdo", + containerStyle: "none", + isVisible: true, + version: 1, + parentId: "iupz1d99ka", + renderMode: "CANVAS", + isLoading: false, + }, + ], + privateWidgets: { + Image1: true, + Text1: true, + Text2: true, + }, + key: "axex98spx3", + backgroundColor: "transparent", + rightColumn: 63, + itemBackgroundColor: "#FFFFFF", + widgetId: "iupz1d99ka", + isVisible: true, + parentId: "0", + renderMode: "CANVAS", + isLoading: false, + version: 1, + }, + ], + containerStyle: "none", + detachFromLayout: true, + dynamicBindingPathList: [], + dynamicTriggerPathList: [], + leftColumn: 0, + minHeight: 640, + parentColumnSpace: 1, + parentRowSpace: 1, + rightColumn: 912, + snapColumns: 64, + snapRows: 125, + topRow: 0, + type: "CANVAS_WIDGET", + version: nextVersion, + widgetId: "0", + widgetName: "MainContainer", + renderMode: RenderModes.CANVAS, + isLoading: false, + }; + + const actualNextDsl = transformDSL(currentDSL, false); + + expect(actualNextDsl).toEqual(expectedNextDSL); + }); +}); diff --git a/app/client/src/widgets/ListWidget/index.ts b/app/client/src/widgets/ListWidget/index.ts index 217af3111eb..e3f1b434290 100644 --- a/app/client/src/widgets/ListWidget/index.ts +++ b/app/client/src/widgets/ListWidget/index.ts @@ -353,7 +353,6 @@ export const CONFIG = { ...get(parent, "template", {}), [widget.widgetName]: widget, }; - parent.template = template; // add logBlackList for the children being added diff --git a/app/client/src/widgets/ListWidget/widget/index.tsx b/app/client/src/widgets/ListWidget/widget/index.tsx index 795e4ce27d9..df49c175353 100644 --- a/app/client/src/widgets/ListWidget/widget/index.tsx +++ b/app/client/src/widgets/ListWidget/widget/index.tsx @@ -12,6 +12,7 @@ import { omit, floor, isEmpty, + isEqual, } from "lodash"; import memoizeOne from "memoize-one"; import shallowEqual from "shallowequal"; @@ -37,8 +38,15 @@ import derivedProperties from "./parseDerivedProperties"; import { DSLWidget } from "widgets/constants"; import { entityDefinitions } from "utils/autocomplete/EntityDefinitions"; import { escapeSpecialChars } from "../../WidgetUtils"; +import { PrivateWidgets } from "entities/DataTree/dataTreeFactory"; const LIST_WIDGEY_PAGINATION_HEIGHT = 36; + +/* in the List Widget, "children.0.children.0.children.0.children" is the path to the list of all + widgets present in the List Widget +*/ +const PATH_TO_ALL_WIDGETS_IN_LIST_WIDGET = + "children.0.children.0.children.0.children"; class ListWidget extends BaseWidget, WidgetState> { state = { page: 1, @@ -73,6 +81,9 @@ class ListWidget extends BaseWidget, WidgetState> { this.generateChildrenDefaultPropertiesMap(this.props); this.generateChildrenMetaPropertiesMap(this.props); this.generateChildrenEntityDefinitions(this.props); + + // add privateWidgets to ListWidget + this.addPrivateWidgetsForChildren(this.props); } /** @@ -113,6 +124,20 @@ class ListWidget extends BaseWidget, WidgetState> { } } + // updates the "privateWidgets" field of the List Widget + addPrivateWidgetsForChildren(props: ListWidgetProps) { + const privateWidgets: PrivateWidgets = {}; + const listWidgetChildren: WidgetProps[] = get( + props, + PATH_TO_ALL_WIDGETS_IN_LIST_WIDGET, + ); + listWidgetChildren.map((child) => { + privateWidgets[child.widgetName] = true; + }); + + super.updateWidgetProperty("privateWidgets", privateWidgets); + } + generateChildrenDefaultPropertiesMap = ( props: ListWidgetProps, ) => { @@ -174,6 +199,16 @@ class ListWidget extends BaseWidget, WidgetState> { }; componentDidUpdate(prevProps: ListWidgetProps) { + const currentListWidgetChildren: WidgetProps[] = get( + this.props, + PATH_TO_ALL_WIDGETS_IN_LIST_WIDGET, + ); + + const previousListWidgetChildren: WidgetProps[] = get( + prevProps, + PATH_TO_ALL_WIDGETS_IN_LIST_WIDGET, + ); + if ( xor( Object.keys(get(prevProps, "template", {})), @@ -233,6 +268,11 @@ class ListWidget extends BaseWidget, WidgetState> { }, ); } + + // Update privateWidget field if there is a change in the List widget children + if (!isEqual(currentListWidgetChildren, previousListWidgetChildren)) { + this.addPrivateWidgetsForChildren(this.props); + } } static getDefaultPropertiesMap(): Record { diff --git a/app/client/src/workers/DataTreeEvaluator.ts b/app/client/src/workers/DataTreeEvaluator.ts index aa85f129d49..069959916e4 100644 --- a/app/client/src/workers/DataTreeEvaluator.ts +++ b/app/client/src/workers/DataTreeEvaluator.ts @@ -22,6 +22,7 @@ import { DataTreeWidget, ENTITY_TYPE, EvaluationSubstitutionType, + PrivateWidgets, } from "entities/DataTree/dataTreeFactory"; import { addDependantsOfNestedPropertyPaths, @@ -46,6 +47,7 @@ import { getParams, updateJSCollectionInDataTree, removeFunctionsAndVariableJSCollection, + isPrivateEntityPath, } from "workers/evaluationUtils"; import _ from "lodash"; import { applyChange, Diff, diff } from "deep-diff"; @@ -78,6 +80,7 @@ export default class DataTreeEvaluator { widgetConfigMap: WidgetTypeConfigMap = {}; evalTree: DataTree = {}; allKeys: Record = {}; + privateWidgets: PrivateWidgets = {}; oldUnEvalTree: DataTree = {}; errors: EvalError[] = []; resolvedFunctions: Record = {}; @@ -471,6 +474,17 @@ export default class DataTreeEvaluator { return dependencyMap; } + getPrivateWidgets(dataTree: DataTree): PrivateWidgets { + let privateWidgets: PrivateWidgets = {}; + Object.keys(dataTree).forEach((entityName) => { + const entity = dataTree[entityName]; + if (isWidget(entity) && !_.isEmpty(entity.privateWidgets)) { + privateWidgets = { ...privateWidgets, ...entity.privateWidgets }; + } + }); + return privateWidgets; + } + listEntityDependencies( entity: DataTreeWidget | DataTreeAction | DataTreeJSAction, entityName: string, @@ -556,9 +570,13 @@ export default class DataTreeEvaluator { sortedDependencies: Array, ): DataTree { const tree = _.cloneDeep(oldUnevalTree); + this.privateWidgets = this.getPrivateWidgets(oldUnevalTree); try { return sortedDependencies.reduce( (currentTree: DataTree, fullPropertyPath: string) => { + // do not evaluate private entities + if (isPrivateEntityPath(this.privateWidgets, fullPropertyPath)) + return currentTree; const { entityName, propertyPath } = getEntityNameAndPropertyPath( fullPropertyPath, ); diff --git a/app/client/src/workers/evaluationUtils.test.ts b/app/client/src/workers/evaluationUtils.test.ts index 6e8b9eaacff..9d1008e0c08 100644 --- a/app/client/src/workers/evaluationUtils.test.ts +++ b/app/client/src/workers/evaluationUtils.test.ts @@ -1,6 +1,7 @@ -import { getAllPaths } from "./evaluationUtils"; +import { PrivateWidgets } from "entities/DataTree/dataTreeFactory"; +import { getAllPaths, isPrivateEntityPath } from "./evaluationUtils"; -describe("getAllPaths", () => { +describe("Correctly handle paths", () => { it("getsAllPaths", () => { const myTree = { WidgetName: { @@ -38,4 +39,22 @@ describe("getAllPaths", () => { const actual = getAllPaths(myTree); expect(actual).toStrictEqual(result); }); + + it("correctly checks if path is a PrivateEntityPath", () => { + const privateWidgets: PrivateWidgets = { + Button1: true, + Image1: true, + Button2: true, + Image2: true, + }; + + expect( + isPrivateEntityPath(privateWidgets, "List1.template.Button1.text"), + ).toBeFalsy(); + expect(isPrivateEntityPath(privateWidgets, "Button1.text")).toBeTruthy(); + expect( + isPrivateEntityPath(privateWidgets, "List2.template.Image2.data"), + ).toBeFalsy(); + expect(isPrivateEntityPath(privateWidgets, "Image2.data")).toBeTruthy(); + }); }); diff --git a/app/client/src/workers/evaluationUtils.ts b/app/client/src/workers/evaluationUtils.ts index de8f86324a1..2f367d9b4fd 100644 --- a/app/client/src/workers/evaluationUtils.ts +++ b/app/client/src/workers/evaluationUtils.ts @@ -19,6 +19,7 @@ import { ENTITY_TYPE, DataTreeJSAction, EvaluationSubstitutionType, + PrivateWidgets, } from "entities/DataTree/dataTreeFactory"; import _ from "lodash"; import { WidgetTypeConfigMap } from "utils/WidgetFactory"; @@ -710,3 +711,14 @@ export const removeFunctionsAndVariableJSCollection = ( _.set(modifiedDataTree, `${entity.name}.meta`, meta); return modifiedDataTree; }; + +export const isPrivateEntityPath = ( + privateWidgets: PrivateWidgets, + fullPropertyPath: string, +) => { + const entityName = fullPropertyPath.split(".")[0]; + if (Object.keys(privateWidgets).indexOf(entityName) !== -1) { + return true; + } + return false; +};