@webiny/app-dynamic-pages 0.0.0-unstable.2aaa1916d9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +20 -0
- package/admin/ContentEntryForm/AddPreviewPane.d.ts +2 -0
- package/admin/ContentEntryForm/AddPreviewPane.js +47 -0
- package/admin/ContentEntryForm/AddPreviewPane.js.map +1 -0
- package/admin/ContentEntryForm/PassEntryToDataSource.d.ts +2 -0
- package/admin/ContentEntryForm/PassEntryToDataSource.js +58 -0
- package/admin/ContentEntryForm/PassEntryToDataSource.js.map +1 -0
- package/admin/ContentEntryForm/PreviewPane.d.ts +6 -0
- package/admin/ContentEntryForm/PreviewPane.js +56 -0
- package/admin/ContentEntryForm/PreviewPane.js.map +1 -0
- package/admin/Extensions.d.ts +2 -0
- package/admin/Extensions.js +14 -0
- package/admin/Extensions.js.map +1 -0
- package/admin/PageTemplateDialog/CreateTemplateDialog.d.ts +11 -0
- package/admin/PageTemplateDialog/CreateTemplateDialog.js +200 -0
- package/admin/PageTemplateDialog/CreateTemplateDialog.js.map +1 -0
- package/admin/PageTemplateDialog/PageTemplateDialog.d.ts +2 -0
- package/admin/PageTemplateDialog/PageTemplateDialog.js +44 -0
- package/admin/PageTemplateDialog/PageTemplateDialog.js.map +1 -0
- package/admin/SetupDynamicPages.d.ts +2 -0
- package/admin/SetupDynamicPages.js +16 -0
- package/admin/SetupDynamicPages.js.map +1 -0
- package/admin/elements/Elements.d.ts +2 -0
- package/admin/elements/Elements.js +12 -0
- package/admin/elements/Elements.js.map +1 -0
- package/admin/elements/entriesList.d.ts +2 -0
- package/admin/elements/entriesList.js +35 -0
- package/admin/elements/entriesList.js.map +1 -0
- package/admin/elements/entriesSearch.d.ts +2 -0
- package/admin/elements/entriesSearch.js +34 -0
- package/admin/elements/entriesSearch.js.map +1 -0
- package/admin/elements/eventHandlers/ContentTraverser.d.ts +11 -0
- package/admin/elements/eventHandlers/ContentTraverser.js +10 -0
- package/admin/elements/eventHandlers/ContentTraverser.js.map +1 -0
- package/admin/elements/renderers/DynamicGrid.d.ts +2 -0
- package/admin/elements/renderers/DynamicGrid.js +49 -0
- package/admin/elements/renderers/DynamicGrid.js.map +1 -0
- package/admin/elements/renderers/EntriesList.d.ts +10 -0
- package/admin/elements/renderers/EntriesList.js +22 -0
- package/admin/elements/renderers/EntriesList.js.map +1 -0
- package/admin/elements/renderers/Repeater.d.ts +7 -0
- package/admin/elements/renderers/Repeater.js +21 -0
- package/admin/elements/renderers/Repeater.js.map +1 -0
- package/admin/elements/repeater.d.ts +2 -0
- package/admin/elements/repeater.js +34 -0
- package/admin/elements/repeater.js.map +1 -0
- package/admin/index.d.ts +1 -0
- package/admin/index.js +3 -0
- package/admin/index.js.map +1 -0
- package/admin/pageEditor/DynamicPageEditorConfig.d.ts +2 -0
- package/admin/pageEditor/DynamicPageEditorConfig.js +10 -0
- package/admin/pageEditor/DynamicPageEditorConfig.js.map +1 -0
- package/admin/pageEditor/ElementEventHandlers.d.ts +1 -0
- package/admin/pageEditor/ElementEventHandlers.js +100 -0
- package/admin/pageEditor/ElementEventHandlers.js.map +1 -0
- package/admin/templateEditor/DynamicTemplateEditorConfig.d.ts +2 -0
- package/admin/templateEditor/DynamicTemplateEditorConfig.js +28 -0
- package/admin/templateEditor/DynamicTemplateEditorConfig.js.map +1 -0
- package/admin/templateEditor/ElementEventHandlers.d.ts +1 -0
- package/admin/templateEditor/ElementEventHandlers.js +100 -0
- package/admin/templateEditor/ElementEventHandlers.js.map +1 -0
- package/admin/templateEditor/EntrySelector/EntrySelector.d.ts +2 -0
- package/admin/templateEditor/EntrySelector/EntrySelector.js +27 -0
- package/admin/templateEditor/EntrySelector/EntrySelector.js.map +1 -0
- package/admin/templateEditor/EntrySelector/index.d.ts +1 -0
- package/admin/templateEditor/EntrySelector/index.js +3 -0
- package/admin/templateEditor/EntrySelector/index.js.map +1 -0
- package/dataInjection/AddEntriesListDataSourceContext.d.ts +2 -0
- package/dataInjection/AddEntriesListDataSourceContext.js +27 -0
- package/dataInjection/AddEntriesListDataSourceContext.js.map +1 -0
- package/dataInjection/editor/DisableGridDelete.d.ts +2 -0
- package/dataInjection/editor/DisableGridDelete.js +18 -0
- package/dataInjection/editor/DisableGridDelete.js.map +1 -0
- package/dataInjection/editor/ElementDataSettings.d.ts +2 -0
- package/dataInjection/editor/ElementDataSettings.js +21 -0
- package/dataInjection/editor/ElementDataSettings.js.map +1 -0
- package/dataInjection/editor/HideIfChildOfEntriesList.d.ts +6 -0
- package/dataInjection/editor/HideIfChildOfEntriesList.js +16 -0
- package/dataInjection/editor/HideIfChildOfEntriesList.js.map +1 -0
- package/dataInjection/editor/HideIfEntriesListGridWithDataSource.d.ts +6 -0
- package/dataInjection/editor/HideIfEntriesListGridWithDataSource.js +22 -0
- package/dataInjection/editor/HideIfEntriesListGridWithDataSource.js.map +1 -0
- package/dataInjection/editor/SetupElementDataSettings.d.ts +2 -0
- package/dataInjection/editor/SetupElementDataSettings.js +14 -0
- package/dataInjection/editor/SetupElementDataSettings.js.map +1 -0
- package/dataInjection/renderers/DynamicElementRenderers.d.ts +2 -0
- package/dataInjection/renderers/DynamicElementRenderers.js +20 -0
- package/dataInjection/renderers/DynamicElementRenderers.js.map +1 -0
- package/dataInjection/renderers/DynamicGrid.d.ts +2 -0
- package/dataInjection/renderers/DynamicGrid.js +44 -0
- package/dataInjection/renderers/DynamicGrid.js.map +1 -0
- package/dataInjection/renderers/EntriesList.d.ts +70 -0
- package/dataInjection/renderers/EntriesList.js +45 -0
- package/dataInjection/renderers/EntriesList.js.map +1 -0
- package/dataInjection/renderers/EntriesSearch.d.ts +47 -0
- package/dataInjection/renderers/EntriesSearch.js +26 -0
- package/dataInjection/renderers/EntriesSearch.js.map +1 -0
- package/dataInjection/renderers/Repeater.d.ts +70 -0
- package/dataInjection/renderers/Repeater.js +45 -0
- package/dataInjection/renderers/Repeater.js.map +1 -0
- package/features/index.d.ts +3 -0
- package/features/index.js +5 -0
- package/features/index.js.map +1 -0
- package/features/pageTemplate/createDynamicTemplate/useCreateDynamicTemplate.d.ts +4 -0
- package/features/pageTemplate/createDynamicTemplate/useCreateDynamicTemplate.js +58 -0
- package/features/pageTemplate/createDynamicTemplate/useCreateDynamicTemplate.js.map +1 -0
- package/features/pageTemplate/hasMainDataSource.d.ts +2 -0
- package/features/pageTemplate/hasMainDataSource.js +5 -0
- package/features/pageTemplate/hasMainDataSource.js.map +1 -0
- package/features/pageTemplate/listDynamicTemplates/useListDynamicTemplates.d.ts +3 -0
- package/features/pageTemplate/listDynamicTemplates/useListDynamicTemplates.js +13 -0
- package/features/pageTemplate/listDynamicTemplates/useListDynamicTemplates.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { useRenderer, Elements, ElementInput } from "@webiny/app-page-builder-elements";
|
|
3
|
+
import { PeGrid } from "@webiny/app-page-builder/editor/plugins/elements/grid/PeGrid";
|
|
4
|
+
import { useElementWithChildren } from "@webiny/app-page-builder/editor";
|
|
5
|
+
import { DataSourceDataProvider } from "@webiny/app-page-builder/dataInjection";
|
|
6
|
+
const elementInputs = {
|
|
7
|
+
dataSource: ElementInput.create({
|
|
8
|
+
name: "dataSource",
|
|
9
|
+
type: "array",
|
|
10
|
+
translatable: false,
|
|
11
|
+
getDefaultValue() {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
};
|
|
16
|
+
export const DynamicGrid = PeGrid.Component.createDecorator(Original => {
|
|
17
|
+
return function DynamicGrid(props) {
|
|
18
|
+
const {
|
|
19
|
+
getElement,
|
|
20
|
+
getInputValues
|
|
21
|
+
} = useRenderer();
|
|
22
|
+
const element = getElement();
|
|
23
|
+
const elementWithChildren = useElementWithChildren(element.id);
|
|
24
|
+
const inputs = getInputValues();
|
|
25
|
+
if (!elementWithChildren) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
if (Array.isArray(inputs.dataSource)) {
|
|
29
|
+
const hasData = inputs.dataSource.length > 0;
|
|
30
|
+
const baseCell = elementWithChildren.elements[0];
|
|
31
|
+
const dynamicElement = {
|
|
32
|
+
...element,
|
|
33
|
+
elements: hasData ? Array(inputs.dataSource.length).fill(baseCell) : elementWithChildren.elements
|
|
34
|
+
};
|
|
35
|
+
return /*#__PURE__*/React.createElement(Elements, {
|
|
36
|
+
element: dynamicElement,
|
|
37
|
+
wrapper: (element, index) => {
|
|
38
|
+
const dataSource = inputs.dataSource ? inputs.dataSource[index] : {};
|
|
39
|
+
return /*#__PURE__*/React.createElement(DataSourceDataProvider, {
|
|
40
|
+
dataSource: dataSource
|
|
41
|
+
}, element);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return /*#__PURE__*/React.createElement(Original, props);
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=DynamicGrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useRenderer","Elements","ElementInput","PeGrid","useElementWithChildren","DataSourceDataProvider","elementInputs","dataSource","create","name","type","translatable","getDefaultValue","DynamicGrid","Component","createDecorator","Original","props","getElement","getInputValues","element","elementWithChildren","id","inputs","Array","isArray","hasData","length","baseCell","elements","dynamicElement","fill","createElement","wrapper","index"],"sources":["DynamicGrid.tsx"],"sourcesContent":["import React from \"react\";\nimport { useRenderer, Elements, ElementInput } from \"@webiny/app-page-builder-elements\";\nimport { PeGrid } from \"@webiny/app-page-builder/editor/plugins/elements/grid/PeGrid\";\nimport { useElementWithChildren } from \"@webiny/app-page-builder/editor\";\nimport type { GenericRecord } from \"@webiny/app/types\";\nimport { DataSourceDataProvider } from \"@webiny/app-page-builder/dataInjection\";\n\nconst elementInputs = {\n dataSource: ElementInput.create<GenericRecord[]>({\n name: \"dataSource\",\n type: \"array\",\n translatable: false,\n getDefaultValue() {\n return [];\n }\n })\n};\n\nexport const DynamicGrid = PeGrid.Component.createDecorator(Original => {\n return function DynamicGrid(props) {\n const { getElement, getInputValues } = useRenderer();\n const element = getElement();\n const elementWithChildren = useElementWithChildren(element.id);\n const inputs = getInputValues<typeof elementInputs>();\n\n if (!elementWithChildren) {\n return null;\n }\n\n if (Array.isArray(inputs.dataSource)) {\n const hasData = inputs.dataSource.length > 0;\n\n const baseCell = elementWithChildren.elements[0];\n const dynamicElement = {\n ...element,\n elements: hasData\n ? Array(inputs.dataSource.length).fill(baseCell)\n : elementWithChildren.elements\n };\n\n return (\n <Elements\n element={dynamicElement}\n wrapper={(element, index) => {\n const dataSource = inputs.dataSource ? inputs.dataSource[index] : {};\n\n return (\n <DataSourceDataProvider dataSource={dataSource}>\n {element}\n </DataSourceDataProvider>\n );\n }}\n />\n );\n }\n\n return <Original {...props} />;\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,EAAEC,QAAQ,EAAEC,YAAY,QAAQ,mCAAmC;AACvF,SAASC,MAAM,QAAQ,8DAA8D;AACrF,SAASC,sBAAsB,QAAQ,iCAAiC;AAExE,SAASC,sBAAsB,QAAQ,wCAAwC;AAE/E,MAAMC,aAAa,GAAG;EAClBC,UAAU,EAAEL,YAAY,CAACM,MAAM,CAAkB;IAC7CC,IAAI,EAAE,YAAY;IAClBC,IAAI,EAAE,OAAO;IACbC,YAAY,EAAE,KAAK;IACnBC,eAAeA,CAAA,EAAG;MACd,OAAO,EAAE;IACb;EACJ,CAAC;AACL,CAAC;AAED,OAAO,MAAMC,WAAW,GAAGV,MAAM,CAACW,SAAS,CAACC,eAAe,CAACC,QAAQ,IAAI;EACpE,OAAO,SAASH,WAAWA,CAACI,KAAK,EAAE;IAC/B,MAAM;MAAEC,UAAU;MAAEC;IAAe,CAAC,GAAGnB,WAAW,CAAC,CAAC;IACpD,MAAMoB,OAAO,GAAGF,UAAU,CAAC,CAAC;IAC5B,MAAMG,mBAAmB,GAAGjB,sBAAsB,CAACgB,OAAO,CAACE,EAAE,CAAC;IAC9D,MAAMC,MAAM,GAAGJ,cAAc,CAAuB,CAAC;IAErD,IAAI,CAACE,mBAAmB,EAAE;MACtB,OAAO,IAAI;IACf;IAEA,IAAIG,KAAK,CAACC,OAAO,CAACF,MAAM,CAAChB,UAAU,CAAC,EAAE;MAClC,MAAMmB,OAAO,GAAGH,MAAM,CAAChB,UAAU,CAACoB,MAAM,GAAG,CAAC;MAE5C,MAAMC,QAAQ,GAAGP,mBAAmB,CAACQ,QAAQ,CAAC,CAAC,CAAC;MAChD,MAAMC,cAAc,GAAG;QACnB,GAAGV,OAAO;QACVS,QAAQ,EAAEH,OAAO,GACXF,KAAK,CAACD,MAAM,CAAChB,UAAU,CAACoB,MAAM,CAAC,CAACI,IAAI,CAACH,QAAQ,CAAC,GAC9CP,mBAAmB,CAACQ;MAC9B,CAAC;MAED,oBACI9B,KAAA,CAAAiC,aAAA,CAAC/B,QAAQ;QACLmB,OAAO,EAAEU,cAAe;QACxBG,OAAO,EAAEA,CAACb,OAAO,EAAEc,KAAK,KAAK;UACzB,MAAM3B,UAAU,GAAGgB,MAAM,CAAChB,UAAU,GAAGgB,MAAM,CAAChB,UAAU,CAAC2B,KAAK,CAAC,GAAG,CAAC,CAAC;UAEpE,oBACInC,KAAA,CAAAiC,aAAA,CAAC3B,sBAAsB;YAACE,UAAU,EAAEA;UAAW,GAC1Ca,OACmB,CAAC;QAEjC;MAAE,CACL,CAAC;IAEV;IAEA,oBAAOrB,KAAA,CAAAiC,aAAA,CAAChB,QAAQ,EAAKC,KAAQ,CAAC;EAClC,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { PbElement } from "@webiny/app-page-builder/types";
|
|
3
|
+
interface AdminEntriesListRendererProps {
|
|
4
|
+
element: PbElement;
|
|
5
|
+
}
|
|
6
|
+
export declare const AdminEntriesListRenderer: {
|
|
7
|
+
({ element, ...rest }: AdminEntriesListRendererProps): React.JSX.Element | null;
|
|
8
|
+
displayName: string;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { EmptyCell } from "@webiny/app-page-builder/editor/plugins/elements/cell/EmptyCell";
|
|
3
|
+
import { useElementWithChildren } from "@webiny/app-page-builder/editor";
|
|
4
|
+
import { EntriesListRenderer } from "../../../dataInjection/renderers/EntriesList";
|
|
5
|
+
export const AdminEntriesListRenderer = ({
|
|
6
|
+
element,
|
|
7
|
+
...rest
|
|
8
|
+
}) => {
|
|
9
|
+
const elementWithChildren = useElementWithChildren(element.id);
|
|
10
|
+
if (!elementWithChildren) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
return /*#__PURE__*/React.createElement(EntriesListRenderer, Object.assign({}, rest, {
|
|
14
|
+
element: elementWithChildren,
|
|
15
|
+
ifEmpty: /*#__PURE__*/React.createElement(EmptyCell, {
|
|
16
|
+
element: elementWithChildren
|
|
17
|
+
})
|
|
18
|
+
}));
|
|
19
|
+
};
|
|
20
|
+
AdminEntriesListRenderer.displayName = "AdminEntriesListRenderer";
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=EntriesList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","EmptyCell","useElementWithChildren","EntriesListRenderer","AdminEntriesListRenderer","element","rest","elementWithChildren","id","createElement","Object","assign","ifEmpty","displayName"],"sources":["EntriesList.tsx"],"sourcesContent":["import React from \"react\";\nimport type { PbElement } from \"@webiny/app-page-builder/types\";\nimport { EmptyCell } from \"@webiny/app-page-builder/editor/plugins/elements/cell/EmptyCell\";\nimport { useElementWithChildren } from \"@webiny/app-page-builder/editor\";\nimport { EntriesListRenderer } from \"~/dataInjection/renderers/EntriesList\";\n\ninterface AdminEntriesListRendererProps {\n element: PbElement;\n}\n\nexport const AdminEntriesListRenderer = ({ element, ...rest }: AdminEntriesListRendererProps) => {\n const elementWithChildren = useElementWithChildren(element.id);\n\n if (!elementWithChildren) {\n return null;\n }\n\n return (\n <EntriesListRenderer\n {...rest}\n element={elementWithChildren}\n ifEmpty={<EmptyCell element={elementWithChildren} />}\n />\n );\n};\n\nAdminEntriesListRenderer.displayName = \"AdminEntriesListRenderer\";\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,SAAS,QAAQ,iEAAiE;AAC3F,SAASC,sBAAsB,QAAQ,iCAAiC;AACxE,SAASC,mBAAmB;AAM5B,OAAO,MAAMC,wBAAwB,GAAGA,CAAC;EAAEC,OAAO;EAAE,GAAGC;AAAoC,CAAC,KAAK;EAC7F,MAAMC,mBAAmB,GAAGL,sBAAsB,CAACG,OAAO,CAACG,EAAE,CAAC;EAE9D,IAAI,CAACD,mBAAmB,EAAE;IACtB,OAAO,IAAI;EACf;EAEA,oBACIP,KAAA,CAAAS,aAAA,CAACN,mBAAmB,EAAAO,MAAA,CAAAC,MAAA,KACZL,IAAI;IACRD,OAAO,EAAEE,mBAAoB;IAC7BK,OAAO,eAAEZ,KAAA,CAAAS,aAAA,CAACR,SAAS;MAACI,OAAO,EAAEE;IAAoB,CAAE;EAAE,EACxD,CAAC;AAEV,CAAC;AAEDH,wBAAwB,CAACS,WAAW,GAAG,0BAA0B","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { PbElement } from "@webiny/app-page-builder/types";
|
|
3
|
+
interface AdminRepeaterRendererProps {
|
|
4
|
+
element: PbElement;
|
|
5
|
+
}
|
|
6
|
+
export declare const AdminRepeaterRenderer: ({ element, ...rest }: AdminRepeaterRendererProps) => React.JSX.Element | null;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { EmptyCell } from "@webiny/app-page-builder/editor/plugins/elements/cell/EmptyCell";
|
|
3
|
+
import { useElementWithChildren } from "@webiny/app-page-builder/editor";
|
|
4
|
+
import { RepeaterRenderer } from "../../../dataInjection/renderers/Repeater";
|
|
5
|
+
export const AdminRepeaterRenderer = ({
|
|
6
|
+
element,
|
|
7
|
+
...rest
|
|
8
|
+
}) => {
|
|
9
|
+
const elementWithChildren = useElementWithChildren(element.id);
|
|
10
|
+
if (!elementWithChildren) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
return /*#__PURE__*/React.createElement(RepeaterRenderer, Object.assign({}, rest, {
|
|
14
|
+
element: elementWithChildren,
|
|
15
|
+
ifEmpty: /*#__PURE__*/React.createElement(EmptyCell, {
|
|
16
|
+
element: elementWithChildren
|
|
17
|
+
})
|
|
18
|
+
}));
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=Repeater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","EmptyCell","useElementWithChildren","RepeaterRenderer","AdminRepeaterRenderer","element","rest","elementWithChildren","id","createElement","Object","assign","ifEmpty"],"sources":["Repeater.tsx"],"sourcesContent":["import React from \"react\";\nimport type { PbElement } from \"@webiny/app-page-builder/types\";\nimport { EmptyCell } from \"@webiny/app-page-builder/editor/plugins/elements/cell/EmptyCell\";\nimport { useElementWithChildren } from \"@webiny/app-page-builder/editor\";\nimport { RepeaterRenderer } from \"~/dataInjection/renderers/Repeater\";\n\ninterface AdminRepeaterRendererProps {\n element: PbElement;\n}\n\nexport const AdminRepeaterRenderer = ({ element, ...rest }: AdminRepeaterRendererProps) => {\n const elementWithChildren = useElementWithChildren(element.id);\n\n if (!elementWithChildren) {\n return null;\n }\n\n return (\n <RepeaterRenderer\n {...rest}\n element={elementWithChildren}\n ifEmpty={<EmptyCell element={elementWithChildren} />}\n />\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,SAAS,QAAQ,iEAAiE;AAC3F,SAASC,sBAAsB,QAAQ,iCAAiC;AACxE,SAASC,gBAAgB;AAMzB,OAAO,MAAMC,qBAAqB,GAAGA,CAAC;EAAEC,OAAO;EAAE,GAAGC;AAAiC,CAAC,KAAK;EACvF,MAAMC,mBAAmB,GAAGL,sBAAsB,CAACG,OAAO,CAACG,EAAE,CAAC;EAE9D,IAAI,CAACD,mBAAmB,EAAE;IACtB,OAAO,IAAI;EACf;EAEA,oBACIP,KAAA,CAAAS,aAAA,CAACN,gBAAgB,EAAAO,MAAA,CAAAC,MAAA,KACTL,IAAI;IACRD,OAAO,EAAEE,mBAAoB;IAC7BK,OAAO,eAAEZ,KAAA,CAAAS,aAAA,CAACR,SAAS;MAACI,OAAO,EAAEE;IAAoB,CAAE;EAAE,EACxD,CAAC;AAEV,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ReactComponent as RepeatIcon } from "@webiny/icons/repeat.svg";
|
|
3
|
+
import { AdminRepeaterRenderer } from "./renderers/Repeater";
|
|
4
|
+
export const createRepeaterElement = () => {
|
|
5
|
+
return {
|
|
6
|
+
name: `pb-editor-page-element-repeater`,
|
|
7
|
+
type: "pb-editor-page-element",
|
|
8
|
+
elementType: "repeater",
|
|
9
|
+
canReceiveChildren: true,
|
|
10
|
+
toolbar: {
|
|
11
|
+
title: "Repeater Element",
|
|
12
|
+
group: "pb-editor-element-group-basic",
|
|
13
|
+
preview() {
|
|
14
|
+
return /*#__PURE__*/React.createElement(RepeatIcon, null);
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
settings: ["pb-editor-page-element-settings-clone", "pb-editor-page-element-settings-delete"],
|
|
18
|
+
target: ["cell", "block"],
|
|
19
|
+
create() {
|
|
20
|
+
return {
|
|
21
|
+
type: this.elementType,
|
|
22
|
+
elements: [],
|
|
23
|
+
data: {}
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
render(props) {
|
|
27
|
+
return /*#__PURE__*/React.createElement(AdminRepeaterRenderer, Object.assign({}, props, {
|
|
28
|
+
element: props.element
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=repeater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","ReactComponent","RepeatIcon","AdminRepeaterRenderer","createRepeaterElement","name","type","elementType","canReceiveChildren","toolbar","title","group","preview","createElement","settings","target","create","elements","data","render","props","Object","assign","element"],"sources":["repeater.tsx"],"sourcesContent":["import React from \"react\";\nimport { ReactComponent as RepeatIcon } from \"@webiny/icons/repeat.svg\";\nimport type { PbEditorPageElementPlugin, PbElement } from \"@webiny/app-page-builder/types\";\nimport { AdminRepeaterRenderer } from \"./renderers/Repeater\";\n\nexport const createRepeaterElement = (): PbEditorPageElementPlugin => {\n return {\n name: `pb-editor-page-element-repeater`,\n type: \"pb-editor-page-element\",\n elementType: \"repeater\",\n canReceiveChildren: true,\n toolbar: {\n title: \"Repeater Element\",\n group: \"pb-editor-element-group-basic\",\n preview() {\n return <RepeatIcon />;\n }\n },\n settings: [\n \"pb-editor-page-element-settings-clone\",\n \"pb-editor-page-element-settings-delete\"\n ],\n target: [\"cell\", \"block\"],\n create() {\n return {\n type: this.elementType,\n elements: [],\n data: {}\n };\n },\n\n render(props) {\n return <AdminRepeaterRenderer {...props} element={props.element as PbElement} />;\n }\n };\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,cAAc,IAAIC,UAAU,QAAQ,0BAA0B;AAEvE,SAASC,qBAAqB;AAE9B,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAiC;EAClE,OAAO;IACHC,IAAI,EAAE,iCAAiC;IACvCC,IAAI,EAAE,wBAAwB;IAC9BC,WAAW,EAAE,UAAU;IACvBC,kBAAkB,EAAE,IAAI;IACxBC,OAAO,EAAE;MACLC,KAAK,EAAE,kBAAkB;MACzBC,KAAK,EAAE,+BAA+B;MACtCC,OAAOA,CAAA,EAAG;QACN,oBAAOZ,KAAA,CAAAa,aAAA,CAACX,UAAU,MAAE,CAAC;MACzB;IACJ,CAAC;IACDY,QAAQ,EAAE,CACN,uCAAuC,EACvC,wCAAwC,CAC3C;IACDC,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACzBC,MAAMA,CAAA,EAAG;MACL,OAAO;QACHV,IAAI,EAAE,IAAI,CAACC,WAAW;QACtBU,QAAQ,EAAE,EAAE;QACZC,IAAI,EAAE,CAAC;MACX,CAAC;IACL,CAAC;IAEDC,MAAMA,CAACC,KAAK,EAAE;MACV,oBAAOpB,KAAA,CAAAa,aAAA,CAACV,qBAAqB,EAAAkB,MAAA,CAAAC,MAAA,KAAKF,KAAK;QAAEG,OAAO,EAAEH,KAAK,CAACG;MAAqB,EAAE,CAAC;IACpF;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
|
package/admin/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Extensions as DynamicPages } from "./Extensions";
|
package/admin/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Extensions","DynamicPages"],"sources":["index.ts"],"sourcesContent":["export { Extensions as DynamicPages } from \"./Extensions\";\n"],"mappings":"AAAA,SAASA,UAAU,IAAIC,YAAY","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { PageEditorConfig } from "@webiny/app-page-builder/pageEditor";
|
|
3
|
+
import { ElementEventHandlers } from "./ElementEventHandlers";
|
|
4
|
+
import { SetupElementDataSettings } from "../../dataInjection/editor/SetupElementDataSettings";
|
|
5
|
+
import { AddEntriesListDataSourceContext } from "../../dataInjection/AddEntriesListDataSourceContext";
|
|
6
|
+
export const DynamicPageEditorConfig = () => {
|
|
7
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(PageEditorConfig, null, /*#__PURE__*/React.createElement(AddEntriesListDataSourceContext, null), /*#__PURE__*/React.createElement(ElementEventHandlers, null), /*#__PURE__*/React.createElement(SetupElementDataSettings, null)));
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=DynamicPageEditorConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","PageEditorConfig","ElementEventHandlers","SetupElementDataSettings","AddEntriesListDataSourceContext","DynamicPageEditorConfig","createElement","Fragment"],"sources":["DynamicPageEditorConfig.tsx"],"sourcesContent":["import React from \"react\";\nimport { PageEditorConfig } from \"@webiny/app-page-builder/pageEditor\";\nimport { ElementEventHandlers } from \"./ElementEventHandlers\";\nimport { SetupElementDataSettings } from \"~/dataInjection/editor/SetupElementDataSettings\";\nimport { AddEntriesListDataSourceContext } from \"~/dataInjection/AddEntriesListDataSourceContext\";\n\nexport const DynamicPageEditorConfig = () => {\n return (\n <>\n <PageEditorConfig>\n <AddEntriesListDataSourceContext />\n <ElementEventHandlers />\n <SetupElementDataSettings />\n </PageEditorConfig>\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,gBAAgB,QAAQ,qCAAqC;AACtE,SAASC,oBAAoB;AAC7B,SAASC,wBAAwB;AACjC,SAASC,+BAA+B;AAExC,OAAO,MAAMC,uBAAuB,GAAGA,CAAA,KAAM;EACzC,oBACIL,KAAA,CAAAM,aAAA,CAAAN,KAAA,CAAAO,QAAA,qBACIP,KAAA,CAAAM,aAAA,CAACL,gBAAgB,qBACbD,KAAA,CAAAM,aAAA,CAACF,+BAA+B,MAAE,CAAC,eACnCJ,KAAA,CAAAM,aAAA,CAACJ,oBAAoB,MAAE,CAAC,eACxBF,KAAA,CAAAM,aAAA,CAACH,wBAAwB,MAAE,CACb,CACpB,CAAC;AAEX,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ElementEventHandlers: () => null;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { useEventActionHandler } from "@webiny/app-page-builder/editor";
|
|
3
|
+
import { CreateElementActionEvent, DeleteElementActionEvent } from "@webiny/app-page-builder/editor/recoil/actions";
|
|
4
|
+
import { ContentTraverser } from "@webiny/app-page-builder/dataInjection";
|
|
5
|
+
const doNothing = {
|
|
6
|
+
actions: []
|
|
7
|
+
};
|
|
8
|
+
const addCmsListDataSource = (document, element) => {
|
|
9
|
+
const dataSourceName = `element:${element.id}`;
|
|
10
|
+
const gridElement = element.elements[0];
|
|
11
|
+
return {
|
|
12
|
+
...document,
|
|
13
|
+
dataSources: [...(document.dataSources || []), {
|
|
14
|
+
name: dataSourceName,
|
|
15
|
+
type: "cms.entries",
|
|
16
|
+
config: {
|
|
17
|
+
modelId: undefined,
|
|
18
|
+
limit: 10
|
|
19
|
+
}
|
|
20
|
+
}],
|
|
21
|
+
dataBindings: [...(document.dataBindings || []), {
|
|
22
|
+
dataSource: dataSourceName,
|
|
23
|
+
bindFrom: "*",
|
|
24
|
+
bindTo: `element:${gridElement.id}.dataSource`
|
|
25
|
+
}]
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export const ElementEventHandlers = () => {
|
|
29
|
+
const eventHandler = useEventActionHandler();
|
|
30
|
+
const onElementCreate = (state, _, args) => {
|
|
31
|
+
if (!args) {
|
|
32
|
+
return doNothing;
|
|
33
|
+
}
|
|
34
|
+
const {
|
|
35
|
+
element
|
|
36
|
+
} = args;
|
|
37
|
+
if (element.type !== "entries-list") {
|
|
38
|
+
return doNothing;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// @ts-expect-error Event callable types need to be more generic.
|
|
42
|
+
const page = state.page;
|
|
43
|
+
const updatedPage = addCmsListDataSource(page, element);
|
|
44
|
+
return {
|
|
45
|
+
state: {
|
|
46
|
+
...state,
|
|
47
|
+
page: updatedPage
|
|
48
|
+
},
|
|
49
|
+
actions: []
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
const onElementDelete = async (state, _, args) => {
|
|
53
|
+
if (!args) {
|
|
54
|
+
return doNothing;
|
|
55
|
+
}
|
|
56
|
+
const {
|
|
57
|
+
element
|
|
58
|
+
} = args;
|
|
59
|
+
|
|
60
|
+
// @ts-expect-error Event callable types need to be more generic.
|
|
61
|
+
const page = state.page;
|
|
62
|
+
const withDescendants = await state.getElementTree({
|
|
63
|
+
element
|
|
64
|
+
});
|
|
65
|
+
const traverser = new ContentTraverser();
|
|
66
|
+
const deletedElements = [element.id];
|
|
67
|
+
traverser.traverse(withDescendants, node => {
|
|
68
|
+
deletedElements.push(node.id);
|
|
69
|
+
});
|
|
70
|
+
const deleteDataSources = deletedElements.map(id => `element:${id}`);
|
|
71
|
+
const deleteDataBindings = deletedElements.map(id => `element:${id}.`);
|
|
72
|
+
const updatedPage = {
|
|
73
|
+
...page,
|
|
74
|
+
dataSources: (page.dataSources || []).filter(ds => {
|
|
75
|
+
return !deleteDataSources.includes(ds.name);
|
|
76
|
+
}),
|
|
77
|
+
dataBindings: (page.dataBindings || []).filter(binding => {
|
|
78
|
+
return !deleteDataBindings.some(toDelete => binding.bindTo.startsWith(toDelete));
|
|
79
|
+
})
|
|
80
|
+
};
|
|
81
|
+
return {
|
|
82
|
+
state: {
|
|
83
|
+
...state,
|
|
84
|
+
page: updatedPage
|
|
85
|
+
},
|
|
86
|
+
actions: []
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
const offCreateElement = eventHandler.on(CreateElementActionEvent, onElementCreate);
|
|
91
|
+
const offDeleteElement = eventHandler.on(DeleteElementActionEvent, onElementDelete);
|
|
92
|
+
return () => {
|
|
93
|
+
offCreateElement();
|
|
94
|
+
offDeleteElement();
|
|
95
|
+
};
|
|
96
|
+
}, []);
|
|
97
|
+
return null;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=ElementEventHandlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useEventActionHandler","CreateElementActionEvent","DeleteElementActionEvent","ContentTraverser","doNothing","actions","addCmsListDataSource","document","element","dataSourceName","id","gridElement","elements","dataSources","name","type","config","modelId","undefined","limit","dataBindings","dataSource","bindFrom","bindTo","ElementEventHandlers","eventHandler","onElementCreate","state","_","args","page","updatedPage","onElementDelete","withDescendants","getElementTree","traverser","deletedElements","traverse","node","push","deleteDataSources","map","deleteDataBindings","filter","ds","includes","binding","some","toDelete","startsWith","offCreateElement","on","offDeleteElement"],"sources":["ElementEventHandlers.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useEventActionHandler } from \"@webiny/app-page-builder/editor\";\nimport {\n CreateElementActionEvent,\n DeleteElementActionEvent\n} from \"@webiny/app-page-builder/editor/recoil/actions\";\nimport type {\n DynamicDocument,\n EventActionCallable,\n PbEditorElementTree\n} from \"@webiny/app-page-builder/types\";\nimport type { CreateElementEventActionArgsType } from \"@webiny/app-page-builder/editor/recoil/actions/createElement/types\";\nimport type { DeleteElementActionArgsType } from \"@webiny/app-page-builder/editor/recoil/actions/deleteElement/types\";\nimport type { PageAtomType } from \"@webiny/app-page-builder/pageEditor/state\";\nimport { ContentTraverser } from \"@webiny/app-page-builder/dataInjection\";\n\nconst doNothing = {\n actions: []\n};\n\nconst addCmsListDataSource = <T extends DynamicDocument>(\n document: T,\n element: PbEditorElementTree\n): T => {\n const dataSourceName = `element:${element.id}`;\n\n const gridElement = element.elements[0];\n\n return {\n ...document,\n dataSources: [\n ...(document.dataSources || []),\n {\n name: dataSourceName,\n type: \"cms.entries\",\n config: {\n modelId: undefined,\n limit: 10\n }\n }\n ],\n dataBindings: [\n ...(document.dataBindings || []),\n {\n dataSource: dataSourceName,\n bindFrom: \"*\",\n bindTo: `element:${gridElement.id}.dataSource`\n }\n ]\n };\n};\n\nexport const ElementEventHandlers = () => {\n const eventHandler = useEventActionHandler();\n\n const onElementCreate: EventActionCallable<CreateElementEventActionArgsType> = (\n state,\n _,\n args\n ) => {\n if (!args) {\n return doNothing;\n }\n\n const { element } = args;\n\n if (element.type !== \"entries-list\") {\n return doNothing;\n }\n\n // @ts-expect-error Event callable types need to be more generic.\n const page = state.page as PageAtomType;\n\n const updatedPage = addCmsListDataSource(page, element as PbEditorElementTree);\n\n return {\n state: {\n ...state,\n page: updatedPage\n },\n actions: []\n };\n };\n\n const onElementDelete: EventActionCallable<DeleteElementActionArgsType> = async (\n state,\n _,\n args\n ) => {\n if (!args) {\n return doNothing;\n }\n\n const { element } = args;\n\n // @ts-expect-error Event callable types need to be more generic.\n const page = state.page as PageAtomType;\n\n const withDescendants = await state.getElementTree({ element });\n\n const traverser = new ContentTraverser();\n const deletedElements: string[] = [element.id];\n\n traverser.traverse(withDescendants, node => {\n deletedElements.push(node.id);\n });\n\n const deleteDataSources = deletedElements.map(id => `element:${id}`);\n const deleteDataBindings = deletedElements.map(id => `element:${id}.`);\n\n const updatedPage: PageAtomType = {\n ...page,\n dataSources: (page.dataSources || []).filter(ds => {\n return !deleteDataSources.includes(ds.name);\n }),\n dataBindings: (page.dataBindings || []).filter(binding => {\n return !deleteDataBindings.some(toDelete => binding.bindTo.startsWith(toDelete));\n })\n };\n\n return {\n state: {\n ...state,\n page: updatedPage\n },\n actions: []\n };\n };\n\n useEffect(() => {\n const offCreateElement = eventHandler.on(CreateElementActionEvent, onElementCreate);\n const offDeleteElement = eventHandler.on(DeleteElementActionEvent, onElementDelete);\n\n return () => {\n offCreateElement();\n offDeleteElement();\n };\n }, []);\n return null;\n};\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,qBAAqB,QAAQ,iCAAiC;AACvE,SACIC,wBAAwB,EACxBC,wBAAwB,QACrB,gDAAgD;AASvD,SAASC,gBAAgB,QAAQ,wCAAwC;AAEzE,MAAMC,SAAS,GAAG;EACdC,OAAO,EAAE;AACb,CAAC;AAED,MAAMC,oBAAoB,GAAGA,CACzBC,QAAW,EACXC,OAA4B,KACxB;EACJ,MAAMC,cAAc,GAAG,WAAWD,OAAO,CAACE,EAAE,EAAE;EAE9C,MAAMC,WAAW,GAAGH,OAAO,CAACI,QAAQ,CAAC,CAAC,CAAC;EAEvC,OAAO;IACH,GAAGL,QAAQ;IACXM,WAAW,EAAE,CACT,IAAIN,QAAQ,CAACM,WAAW,IAAI,EAAE,CAAC,EAC/B;MACIC,IAAI,EAAEL,cAAc;MACpBM,IAAI,EAAE,aAAa;MACnBC,MAAM,EAAE;QACJC,OAAO,EAAEC,SAAS;QAClBC,KAAK,EAAE;MACX;IACJ,CAAC,CACJ;IACDC,YAAY,EAAE,CACV,IAAIb,QAAQ,CAACa,YAAY,IAAI,EAAE,CAAC,EAChC;MACIC,UAAU,EAAEZ,cAAc;MAC1Ba,QAAQ,EAAE,GAAG;MACbC,MAAM,EAAE,WAAWZ,WAAW,CAACD,EAAE;IACrC,CAAC;EAET,CAAC;AACL,CAAC;AAED,OAAO,MAAMc,oBAAoB,GAAGA,CAAA,KAAM;EACtC,MAAMC,YAAY,GAAGzB,qBAAqB,CAAC,CAAC;EAE5C,MAAM0B,eAAsE,GAAGA,CAC3EC,KAAK,EACLC,CAAC,EACDC,IAAI,KACH;IACD,IAAI,CAACA,IAAI,EAAE;MACP,OAAOzB,SAAS;IACpB;IAEA,MAAM;MAAEI;IAAQ,CAAC,GAAGqB,IAAI;IAExB,IAAIrB,OAAO,CAACO,IAAI,KAAK,cAAc,EAAE;MACjC,OAAOX,SAAS;IACpB;;IAEA;IACA,MAAM0B,IAAI,GAAGH,KAAK,CAACG,IAAoB;IAEvC,MAAMC,WAAW,GAAGzB,oBAAoB,CAACwB,IAAI,EAAEtB,OAA8B,CAAC;IAE9E,OAAO;MACHmB,KAAK,EAAE;QACH,GAAGA,KAAK;QACRG,IAAI,EAAEC;MACV,CAAC;MACD1B,OAAO,EAAE;IACb,CAAC;EACL,CAAC;EAED,MAAM2B,eAAiE,GAAG,MAAAA,CACtEL,KAAK,EACLC,CAAC,EACDC,IAAI,KACH;IACD,IAAI,CAACA,IAAI,EAAE;MACP,OAAOzB,SAAS;IACpB;IAEA,MAAM;MAAEI;IAAQ,CAAC,GAAGqB,IAAI;;IAExB;IACA,MAAMC,IAAI,GAAGH,KAAK,CAACG,IAAoB;IAEvC,MAAMG,eAAe,GAAG,MAAMN,KAAK,CAACO,cAAc,CAAC;MAAE1B;IAAQ,CAAC,CAAC;IAE/D,MAAM2B,SAAS,GAAG,IAAIhC,gBAAgB,CAAC,CAAC;IACxC,MAAMiC,eAAyB,GAAG,CAAC5B,OAAO,CAACE,EAAE,CAAC;IAE9CyB,SAAS,CAACE,QAAQ,CAACJ,eAAe,EAAEK,IAAI,IAAI;MACxCF,eAAe,CAACG,IAAI,CAACD,IAAI,CAAC5B,EAAE,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM8B,iBAAiB,GAAGJ,eAAe,CAACK,GAAG,CAAC/B,EAAE,IAAI,WAAWA,EAAE,EAAE,CAAC;IACpE,MAAMgC,kBAAkB,GAAGN,eAAe,CAACK,GAAG,CAAC/B,EAAE,IAAI,WAAWA,EAAE,GAAG,CAAC;IAEtE,MAAMqB,WAAyB,GAAG;MAC9B,GAAGD,IAAI;MACPjB,WAAW,EAAE,CAACiB,IAAI,CAACjB,WAAW,IAAI,EAAE,EAAE8B,MAAM,CAACC,EAAE,IAAI;QAC/C,OAAO,CAACJ,iBAAiB,CAACK,QAAQ,CAACD,EAAE,CAAC9B,IAAI,CAAC;MAC/C,CAAC,CAAC;MACFM,YAAY,EAAE,CAACU,IAAI,CAACV,YAAY,IAAI,EAAE,EAAEuB,MAAM,CAACG,OAAO,IAAI;QACtD,OAAO,CAACJ,kBAAkB,CAACK,IAAI,CAACC,QAAQ,IAAIF,OAAO,CAACvB,MAAM,CAAC0B,UAAU,CAACD,QAAQ,CAAC,CAAC;MACpF,CAAC;IACL,CAAC;IAED,OAAO;MACHrB,KAAK,EAAE;QACH,GAAGA,KAAK;QACRG,IAAI,EAAEC;MACV,CAAC;MACD1B,OAAO,EAAE;IACb,CAAC;EACL,CAAC;EAEDN,SAAS,CAAC,MAAM;IACZ,MAAMmD,gBAAgB,GAAGzB,YAAY,CAAC0B,EAAE,CAAClD,wBAAwB,EAAEyB,eAAe,CAAC;IACnF,MAAM0B,gBAAgB,GAAG3B,YAAY,CAAC0B,EAAE,CAACjD,wBAAwB,EAAE8B,eAAe,CAAC;IAEnF,OAAO,MAAM;MACTkB,gBAAgB,CAAC,CAAC;MAClBE,gBAAgB,CAAC,CAAC;IACtB,CAAC;EACL,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACf,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { TemplateEditorConfig } from "@webiny/app-page-builder/templateEditor";
|
|
3
|
+
import { EntrySelector } from "./EntrySelector";
|
|
4
|
+
import { hasMainDataSource } from "../../features";
|
|
5
|
+
import { ElementEventHandlers } from "./ElementEventHandlers";
|
|
6
|
+
import { useDynamicDocument } from "@webiny/app-page-builder/dataInjection";
|
|
7
|
+
import { SetupElementDataSettings } from "../../dataInjection/editor/SetupElementDataSettings";
|
|
8
|
+
import { AddEntriesListDataSourceContext } from "../../dataInjection/AddEntriesListDataSourceContext";
|
|
9
|
+
const {
|
|
10
|
+
Ui
|
|
11
|
+
} = TemplateEditorConfig;
|
|
12
|
+
const OnDynamicTemplate = ({
|
|
13
|
+
children
|
|
14
|
+
}) => {
|
|
15
|
+
const {
|
|
16
|
+
dataSources
|
|
17
|
+
} = useDynamicDocument();
|
|
18
|
+
return hasMainDataSource(dataSources) ? /*#__PURE__*/React.createElement(React.Fragment, null, children) : null;
|
|
19
|
+
};
|
|
20
|
+
export const DynamicTemplateEditorConfig = () => {
|
|
21
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TemplateEditorConfig, null, /*#__PURE__*/React.createElement(AddEntriesListDataSourceContext, null), /*#__PURE__*/React.createElement(SetupElementDataSettings, null), /*#__PURE__*/React.createElement(Ui.TopBar.Element, {
|
|
22
|
+
name: "entrySelector",
|
|
23
|
+
element: /*#__PURE__*/React.createElement(OnDynamicTemplate, null, /*#__PURE__*/React.createElement(EntrySelector, null)),
|
|
24
|
+
group: "center"
|
|
25
|
+
}), /*#__PURE__*/React.createElement(ElementEventHandlers, null)));
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=DynamicTemplateEditorConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","TemplateEditorConfig","EntrySelector","hasMainDataSource","ElementEventHandlers","useDynamicDocument","SetupElementDataSettings","AddEntriesListDataSourceContext","Ui","OnDynamicTemplate","children","dataSources","createElement","Fragment","DynamicTemplateEditorConfig","TopBar","Element","name","element","group"],"sources":["DynamicTemplateEditorConfig.tsx"],"sourcesContent":["import React from \"react\";\nimport { TemplateEditorConfig } from \"@webiny/app-page-builder/templateEditor\";\nimport { EntrySelector } from \"~/admin/templateEditor/EntrySelector\";\nimport { hasMainDataSource } from \"~/features\";\nimport { ElementEventHandlers } from \"./ElementEventHandlers\";\nimport { useDynamicDocument } from \"@webiny/app-page-builder/dataInjection\";\nimport { SetupElementDataSettings } from \"~/dataInjection/editor/SetupElementDataSettings\";\nimport { AddEntriesListDataSourceContext } from \"~/dataInjection/AddEntriesListDataSourceContext\";\n\nconst { Ui } = TemplateEditorConfig;\n\nconst OnDynamicTemplate = ({ children }: { children: React.ReactNode }) => {\n const { dataSources } = useDynamicDocument();\n\n return hasMainDataSource(dataSources) ? <>{children}</> : null;\n};\n\nexport const DynamicTemplateEditorConfig = () => {\n return (\n <>\n <TemplateEditorConfig>\n <AddEntriesListDataSourceContext />\n <SetupElementDataSettings />\n <Ui.TopBar.Element\n name={\"entrySelector\"}\n element={\n <OnDynamicTemplate>\n <EntrySelector />\n </OnDynamicTemplate>\n }\n group={\"center\"}\n />\n\n <ElementEventHandlers />\n </TemplateEditorConfig>\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,oBAAoB,QAAQ,yCAAyC;AAC9E,SAASC,aAAa;AACtB,SAASC,iBAAiB;AAC1B,SAASC,oBAAoB;AAC7B,SAASC,kBAAkB,QAAQ,wCAAwC;AAC3E,SAASC,wBAAwB;AACjC,SAASC,+BAA+B;AAExC,MAAM;EAAEC;AAAG,CAAC,GAAGP,oBAAoB;AAEnC,MAAMQ,iBAAiB,GAAGA,CAAC;EAAEC;AAAwC,CAAC,KAAK;EACvE,MAAM;IAAEC;EAAY,CAAC,GAAGN,kBAAkB,CAAC,CAAC;EAE5C,OAAOF,iBAAiB,CAACQ,WAAW,CAAC,gBAAGX,KAAA,CAAAY,aAAA,CAAAZ,KAAA,CAAAa,QAAA,QAAGH,QAAW,CAAC,GAAG,IAAI;AAClE,CAAC;AAED,OAAO,MAAMI,2BAA2B,GAAGA,CAAA,KAAM;EAC7C,oBACId,KAAA,CAAAY,aAAA,CAAAZ,KAAA,CAAAa,QAAA,qBACIb,KAAA,CAAAY,aAAA,CAACX,oBAAoB,qBACjBD,KAAA,CAAAY,aAAA,CAACL,+BAA+B,MAAE,CAAC,eACnCP,KAAA,CAAAY,aAAA,CAACN,wBAAwB,MAAE,CAAC,eAC5BN,KAAA,CAAAY,aAAA,CAACJ,EAAE,CAACO,MAAM,CAACC,OAAO;IACdC,IAAI,EAAE,eAAgB;IACtBC,OAAO,eACHlB,KAAA,CAAAY,aAAA,CAACH,iBAAiB,qBACdT,KAAA,CAAAY,aAAA,CAACV,aAAa,MAAE,CACD,CACtB;IACDiB,KAAK,EAAE;EAAS,CACnB,CAAC,eAEFnB,KAAA,CAAAY,aAAA,CAACR,oBAAoB,MAAE,CACL,CACxB,CAAC;AAEX,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ElementEventHandlers: () => null;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { useEventActionHandler } from "@webiny/app-page-builder/editor";
|
|
3
|
+
import { CreateElementActionEvent, DeleteElementActionEvent } from "@webiny/app-page-builder/editor/recoil/actions";
|
|
4
|
+
import { ContentTraverser } from "@webiny/app-page-builder/dataInjection";
|
|
5
|
+
const doNothing = {
|
|
6
|
+
actions: []
|
|
7
|
+
};
|
|
8
|
+
const addCmsListDataSource = (document, element) => {
|
|
9
|
+
const dataSourceName = `element:${element.id}`;
|
|
10
|
+
const gridElement = element.elements[0];
|
|
11
|
+
return {
|
|
12
|
+
...document,
|
|
13
|
+
dataSources: [...document.dataSources, {
|
|
14
|
+
name: dataSourceName,
|
|
15
|
+
type: "cms.entries",
|
|
16
|
+
config: {
|
|
17
|
+
modelId: undefined,
|
|
18
|
+
limit: 10
|
|
19
|
+
}
|
|
20
|
+
}],
|
|
21
|
+
dataBindings: [...document.dataBindings, {
|
|
22
|
+
dataSource: dataSourceName,
|
|
23
|
+
bindFrom: "*",
|
|
24
|
+
bindTo: `element:${gridElement.id}.dataSource`
|
|
25
|
+
}]
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export const ElementEventHandlers = () => {
|
|
29
|
+
const eventHandler = useEventActionHandler();
|
|
30
|
+
const onElementCreate = (state, _, args) => {
|
|
31
|
+
if (!args) {
|
|
32
|
+
return doNothing;
|
|
33
|
+
}
|
|
34
|
+
const {
|
|
35
|
+
element
|
|
36
|
+
} = args;
|
|
37
|
+
if (element.type !== "entries-list") {
|
|
38
|
+
return doNothing;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// @ts-expect-error Event callable types need to be more generic.
|
|
42
|
+
const template = state.template;
|
|
43
|
+
const updatedTemplate = addCmsListDataSource(template, element);
|
|
44
|
+
return {
|
|
45
|
+
state: {
|
|
46
|
+
...state,
|
|
47
|
+
template: updatedTemplate
|
|
48
|
+
},
|
|
49
|
+
actions: []
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
const onElementDelete = async (state, _, args) => {
|
|
53
|
+
if (!args) {
|
|
54
|
+
return doNothing;
|
|
55
|
+
}
|
|
56
|
+
const {
|
|
57
|
+
element
|
|
58
|
+
} = args;
|
|
59
|
+
|
|
60
|
+
// @ts-expect-error Event callable types need to be more generic.
|
|
61
|
+
const template = state.template;
|
|
62
|
+
const withDescendants = await state.getElementTree({
|
|
63
|
+
element
|
|
64
|
+
});
|
|
65
|
+
const traverser = new ContentTraverser();
|
|
66
|
+
const deletedElements = [element.id];
|
|
67
|
+
traverser.traverse(withDescendants, node => {
|
|
68
|
+
deletedElements.push(node.id);
|
|
69
|
+
});
|
|
70
|
+
const deleteDataSources = deletedElements.map(id => `element:${id}`);
|
|
71
|
+
const deleteDataBindings = deletedElements.map(id => `element:${id}.`);
|
|
72
|
+
const updatedTemplate = {
|
|
73
|
+
...template,
|
|
74
|
+
dataSources: template.dataSources.filter(ds => {
|
|
75
|
+
return !deleteDataSources.includes(ds.name);
|
|
76
|
+
}),
|
|
77
|
+
dataBindings: template.dataBindings.filter(binding => {
|
|
78
|
+
return !deleteDataBindings.some(toDelete => binding.bindTo.startsWith(toDelete));
|
|
79
|
+
})
|
|
80
|
+
};
|
|
81
|
+
return {
|
|
82
|
+
state: {
|
|
83
|
+
...state,
|
|
84
|
+
template: updatedTemplate
|
|
85
|
+
},
|
|
86
|
+
actions: []
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
const offCreateElement = eventHandler.on(CreateElementActionEvent, onElementCreate);
|
|
91
|
+
const offDeleteElement = eventHandler.on(DeleteElementActionEvent, onElementDelete);
|
|
92
|
+
return () => {
|
|
93
|
+
offCreateElement();
|
|
94
|
+
offDeleteElement();
|
|
95
|
+
};
|
|
96
|
+
}, []);
|
|
97
|
+
return null;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=ElementEventHandlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useEventActionHandler","CreateElementActionEvent","DeleteElementActionEvent","ContentTraverser","doNothing","actions","addCmsListDataSource","document","element","dataSourceName","id","gridElement","elements","dataSources","name","type","config","modelId","undefined","limit","dataBindings","dataSource","bindFrom","bindTo","ElementEventHandlers","eventHandler","onElementCreate","state","_","args","template","updatedTemplate","onElementDelete","withDescendants","getElementTree","traverser","deletedElements","traverse","node","push","deleteDataSources","map","deleteDataBindings","filter","ds","includes","binding","some","toDelete","startsWith","offCreateElement","on","offDeleteElement"],"sources":["ElementEventHandlers.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useEventActionHandler } from \"@webiny/app-page-builder/editor\";\nimport {\n CreateElementActionEvent,\n DeleteElementActionEvent\n} from \"@webiny/app-page-builder/editor/recoil/actions\";\nimport type {\n DynamicDocument,\n EventActionCallable,\n PbEditorElementTree,\n PbPageTemplate\n} from \"@webiny/app-page-builder/types\";\nimport type { CreateElementEventActionArgsType } from \"@webiny/app-page-builder/editor/recoil/actions/createElement/types\";\nimport type { DeleteElementActionArgsType } from \"@webiny/app-page-builder/editor/recoil/actions/deleteElement/types\";\nimport { ContentTraverser } from \"@webiny/app-page-builder/dataInjection\";\n\nconst doNothing = {\n actions: []\n};\n\nconst addCmsListDataSource = <T extends DynamicDocument>(\n document: T,\n element: PbEditorElementTree\n): T => {\n const dataSourceName = `element:${element.id}`;\n\n const gridElement = element.elements[0];\n\n return {\n ...document,\n dataSources: [\n ...document.dataSources,\n {\n name: dataSourceName,\n type: \"cms.entries\",\n config: {\n modelId: undefined,\n limit: 10\n }\n }\n ],\n dataBindings: [\n ...document.dataBindings,\n {\n dataSource: dataSourceName,\n bindFrom: \"*\",\n bindTo: `element:${gridElement.id}.dataSource`\n }\n ]\n };\n};\n\nexport const ElementEventHandlers = () => {\n const eventHandler = useEventActionHandler();\n\n const onElementCreate: EventActionCallable<CreateElementEventActionArgsType> = (\n state,\n _,\n args\n ) => {\n if (!args) {\n return doNothing;\n }\n\n const { element } = args;\n\n if (element.type !== \"entries-list\") {\n return doNothing;\n }\n\n // @ts-expect-error Event callable types need to be more generic.\n const template = state.template as PbPageTemplate;\n\n const updatedTemplate = addCmsListDataSource(template, element as PbEditorElementTree);\n\n return {\n state: {\n ...state,\n template: updatedTemplate\n },\n actions: []\n };\n };\n\n const onElementDelete: EventActionCallable<DeleteElementActionArgsType> = async (\n state,\n _,\n args\n ) => {\n if (!args) {\n return doNothing;\n }\n\n const { element } = args;\n\n // @ts-expect-error Event callable types need to be more generic.\n const template = state.template as PbPageTemplate;\n\n const withDescendants = await state.getElementTree({ element });\n\n const traverser = new ContentTraverser();\n const deletedElements: string[] = [element.id];\n\n traverser.traverse(withDescendants, node => {\n deletedElements.push(node.id);\n });\n\n const deleteDataSources = deletedElements.map(id => `element:${id}`);\n const deleteDataBindings = deletedElements.map(id => `element:${id}.`);\n\n const updatedTemplate: PbPageTemplate = {\n ...template,\n dataSources: template.dataSources.filter(ds => {\n return !deleteDataSources.includes(ds.name);\n }),\n dataBindings: template.dataBindings.filter(binding => {\n return !deleteDataBindings.some(toDelete => binding.bindTo.startsWith(toDelete));\n })\n };\n\n return {\n state: {\n ...state,\n template: updatedTemplate\n },\n actions: []\n };\n };\n\n useEffect(() => {\n const offCreateElement = eventHandler.on(CreateElementActionEvent, onElementCreate);\n const offDeleteElement = eventHandler.on(DeleteElementActionEvent, onElementDelete);\n\n return () => {\n offCreateElement();\n offDeleteElement();\n };\n }, []);\n return null;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Input } from "@webiny/ui/Input";
|
|
3
|
+
import { useDocumentDataSource } from "@webiny/app-page-builder/templateEditor";
|
|
4
|
+
export const EntrySelector = () => {
|
|
5
|
+
const {
|
|
6
|
+
getDataSource,
|
|
7
|
+
updateDataSource
|
|
8
|
+
} = useDocumentDataSource();
|
|
9
|
+
const mainDataSource = getDataSource("main");
|
|
10
|
+
const [localId, setLocalId] = useState(mainDataSource ? mainDataSource.config.entryId : "");
|
|
11
|
+
const applyPreviewId = () => {
|
|
12
|
+
updateDataSource("main", config => {
|
|
13
|
+
return {
|
|
14
|
+
...config,
|
|
15
|
+
entryId: localId
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
return /*#__PURE__*/React.createElement(Input, {
|
|
20
|
+
value: localId,
|
|
21
|
+
onChange: setLocalId,
|
|
22
|
+
onBlur: applyPreviewId,
|
|
23
|
+
placeholder: "Preview Entry Id"
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=EntrySelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useState","Input","useDocumentDataSource","EntrySelector","getDataSource","updateDataSource","mainDataSource","localId","setLocalId","config","entryId","applyPreviewId","createElement","value","onChange","onBlur","placeholder"],"sources":["EntrySelector.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { useDocumentDataSource } from \"@webiny/app-page-builder/templateEditor\";\n\nexport const EntrySelector = () => {\n const { getDataSource, updateDataSource } = useDocumentDataSource();\n const mainDataSource = getDataSource(\"main\");\n const [localId, setLocalId] = useState(mainDataSource ? mainDataSource.config.entryId : \"\");\n\n const applyPreviewId = () => {\n updateDataSource(\"main\", config => {\n return {\n ...config,\n entryId: localId\n };\n });\n };\n\n return (\n <Input\n value={localId}\n onChange={setLocalId}\n onBlur={applyPreviewId}\n placeholder={\"Preview Entry Id\"}\n />\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,KAAK,QAAQ,kBAAkB;AACxC,SAASC,qBAAqB,QAAQ,yCAAyC;AAE/E,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EAC/B,MAAM;IAAEC,aAAa;IAAEC;EAAiB,CAAC,GAAGH,qBAAqB,CAAC,CAAC;EACnE,MAAMI,cAAc,GAAGF,aAAa,CAAC,MAAM,CAAC;EAC5C,MAAM,CAACG,OAAO,EAAEC,UAAU,CAAC,GAAGR,QAAQ,CAACM,cAAc,GAAGA,cAAc,CAACG,MAAM,CAACC,OAAO,GAAG,EAAE,CAAC;EAE3F,MAAMC,cAAc,GAAGA,CAAA,KAAM;IACzBN,gBAAgB,CAAC,MAAM,EAAEI,MAAM,IAAI;MAC/B,OAAO;QACH,GAAGA,MAAM;QACTC,OAAO,EAAEH;MACb,CAAC;IACL,CAAC,CAAC;EACN,CAAC;EAED,oBACIR,KAAA,CAAAa,aAAA,CAACX,KAAK;IACFY,KAAK,EAAEN,OAAQ;IACfO,QAAQ,EAAEN,UAAW;IACrBO,MAAM,EAAEJ,cAAe;IACvBK,WAAW,EAAE;EAAmB,CACnC,CAAC;AAEV,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./EntrySelector";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./EntrySelector\";\n"],"mappings":"AAAA","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Element } from "@webiny/app-page-builder-elements";
|
|
3
|
+
import { DataSourceProvider, useDynamicDocument } from "@webiny/app-page-builder/dataInjection";
|
|
4
|
+
export const AddEntriesListDataSourceContext = Element.createDecorator(Original => {
|
|
5
|
+
return function WithDataSourceContext(props) {
|
|
6
|
+
const {
|
|
7
|
+
dataSources
|
|
8
|
+
} = useDynamicDocument();
|
|
9
|
+
const {
|
|
10
|
+
element
|
|
11
|
+
} = props;
|
|
12
|
+
const renderOriginal = /*#__PURE__*/React.createElement(Original, props);
|
|
13
|
+
if (!element) {
|
|
14
|
+
return renderOriginal;
|
|
15
|
+
}
|
|
16
|
+
const isEntriesList = element.type === "entries-list";
|
|
17
|
+
if (isEntriesList) {
|
|
18
|
+
const dataSource = dataSources.find(source => source.name === `element:${element.id}`);
|
|
19
|
+
return /*#__PURE__*/React.createElement(DataSourceProvider, {
|
|
20
|
+
dataSource: dataSource
|
|
21
|
+
}, renderOriginal);
|
|
22
|
+
}
|
|
23
|
+
return renderOriginal;
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=AddEntriesListDataSourceContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Element","DataSourceProvider","useDynamicDocument","AddEntriesListDataSourceContext","createDecorator","Original","WithDataSourceContext","props","dataSources","element","renderOriginal","createElement","isEntriesList","type","dataSource","find","source","name","id"],"sources":["AddEntriesListDataSourceContext.tsx"],"sourcesContent":["import React from \"react\";\nimport { Element } from \"@webiny/app-page-builder-elements\";\nimport { DataSourceProvider, useDynamicDocument } from \"@webiny/app-page-builder/dataInjection\";\n\nexport const AddEntriesListDataSourceContext = Element.createDecorator(Original => {\n return function WithDataSourceContext(props) {\n const { dataSources } = useDynamicDocument();\n\n const { element } = props;\n\n const renderOriginal = <Original {...props} />;\n\n if (!element) {\n return renderOriginal;\n }\n\n const isEntriesList = element.type === \"entries-list\";\n\n if (isEntriesList) {\n const dataSource = dataSources.find(source => source.name === `element:${element.id}`);\n\n return (\n <DataSourceProvider dataSource={dataSource!}>{renderOriginal}</DataSourceProvider>\n );\n }\n\n return renderOriginal;\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,OAAO,QAAQ,mCAAmC;AAC3D,SAASC,kBAAkB,EAAEC,kBAAkB,QAAQ,wCAAwC;AAE/F,OAAO,MAAMC,+BAA+B,GAAGH,OAAO,CAACI,eAAe,CAACC,QAAQ,IAAI;EAC/E,OAAO,SAASC,qBAAqBA,CAACC,KAAK,EAAE;IACzC,MAAM;MAAEC;IAAY,CAAC,GAAGN,kBAAkB,CAAC,CAAC;IAE5C,MAAM;MAAEO;IAAQ,CAAC,GAAGF,KAAK;IAEzB,MAAMG,cAAc,gBAAGX,KAAA,CAAAY,aAAA,CAACN,QAAQ,EAAKE,KAAQ,CAAC;IAE9C,IAAI,CAACE,OAAO,EAAE;MACV,OAAOC,cAAc;IACzB;IAEA,MAAME,aAAa,GAAGH,OAAO,CAACI,IAAI,KAAK,cAAc;IAErD,IAAID,aAAa,EAAE;MACf,MAAME,UAAU,GAAGN,WAAW,CAACO,IAAI,CAACC,MAAM,IAAIA,MAAM,CAACC,IAAI,KAAK,WAAWR,OAAO,CAACS,EAAE,EAAE,CAAC;MAEtF,oBACInB,KAAA,CAAAY,aAAA,CAACV,kBAAkB;QAACa,UAAU,EAAEA;MAAY,GAAEJ,cAAmC,CAAC;IAE1F;IAEA,OAAOA,cAAc;EACzB,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { EditorConfig } from "@webiny/app-page-builder/editor";
|
|
3
|
+
import { HideIfEntriesListGridWithDataSource } from "./HideIfEntriesListGridWithDataSource";
|
|
4
|
+
const {
|
|
5
|
+
ElementAction
|
|
6
|
+
} = EditorConfig;
|
|
7
|
+
export const DisableGridDelete = ElementAction.createDecorator(Original => {
|
|
8
|
+
return function DisableActions(props) {
|
|
9
|
+
if (props.name === "delete") {
|
|
10
|
+
return /*#__PURE__*/React.createElement(Original, Object.assign({}, props, {
|
|
11
|
+
element: /*#__PURE__*/React.createElement(HideIfEntriesListGridWithDataSource, null, props.element)
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
return /*#__PURE__*/React.createElement(Original, props);
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=DisableGridDelete.js.map
|