@webiny/app-admin 6.3.0-beta.2 → 6.3.0-beta.4
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/base/Base/DefaultFieldRenderers.js +69 -5
- package/base/Base/DefaultFieldRenderers.js.map +1 -1
- package/base/Base/DefaultLayoutRenderers.js +5 -1
- package/base/Base/DefaultLayoutRenderers.js.map +1 -1
- package/base/Base/FieldRenderers/CheckboxesRenderer.d.ts +13 -0
- package/base/Base/FieldRenderers/CheckboxesRenderer.js +28 -0
- package/base/Base/FieldRenderers/CheckboxesRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/CodeEditorRenderer.d.ts +15 -0
- package/base/Base/FieldRenderers/CodeEditorRenderer.js +17 -0
- package/base/Base/FieldRenderers/CodeEditorRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/DateTimeInputsRenderer.d.ts +17 -0
- package/base/Base/FieldRenderers/DateTimeInputsRenderer.js +66 -0
- package/base/Base/FieldRenderers/DateTimeInputsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/DateTimeRenderer.d.ts +21 -0
- package/base/Base/FieldRenderers/DateTimeRenderer.js +46 -0
- package/base/Base/FieldRenderers/DateTimeRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/FilePickerRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/FilePickerRenderer.js +47 -0
- package/base/Base/FieldRenderers/FilePickerRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/FileUrlPickerRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/FileUrlPickerRenderer.js +25 -0
- package/base/Base/FieldRenderers/FileUrlPickerRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/HiddenRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/HiddenRenderer.js +5 -0
- package/base/Base/FieldRenderers/HiddenRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.d.ts +5 -0
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.js +27 -0
- package/base/Base/FieldRenderers/HorizontalTabsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/InputRenderer.d.ts +4 -7
- package/base/Base/FieldRenderers/InputRenderer.js +2 -2
- package/base/Base/FieldRenderers/InputRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/NumberInputRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/NumberInputRenderer.js +23 -0
- package/base/Base/FieldRenderers/NumberInputRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/NumberInputsRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/NumberInputsRenderer.js +49 -0
- package/base/Base/FieldRenderers/NumberInputsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js +20 -0
- package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js +65 -0
- package/base/Base/FieldRenderers/ObjectRenderer/KeyValueTagsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js +109 -0
- package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.d.ts +17 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +55 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +7 -3
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +15 -19
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.d.ts +5 -8
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +7 -50
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +64 -0
- package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.d.ts +10 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +85 -0
- package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +1 -0
- package/base/Base/FieldRenderers/PassthroughRenderer.d.ts +3 -6
- package/base/Base/FieldRenderers/PassthroughRenderer.js +9 -23
- package/base/Base/FieldRenderers/PassthroughRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/RadioButtonsRenderer.d.ts +13 -0
- package/base/Base/FieldRenderers/RadioButtonsRenderer.js +27 -0
- package/base/Base/FieldRenderers/RadioButtonsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/SelectRenderer.d.ts +6 -8
- package/base/Base/FieldRenderers/SelectRenderer.js +8 -5
- package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/SwitchRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/SwitchRenderer.js +19 -0
- package/base/Base/FieldRenderers/SwitchRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/TagsRenderer.d.ts +12 -0
- package/base/Base/FieldRenderers/TagsRenderer.js +21 -0
- package/base/Base/FieldRenderers/TagsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/TextInputsRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/TextInputsRenderer.js +48 -0
- package/base/Base/FieldRenderers/TextInputsRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/TextareaRenderer.d.ts +3 -6
- package/base/Base/FieldRenderers/TextareaRenderer.js +3 -4
- package/base/Base/FieldRenderers/TextareaRenderer.js.map +1 -1
- package/base/Base/FieldRenderers/TextareasRenderer.d.ts +14 -0
- package/base/Base/FieldRenderers/TextareasRenderer.js +51 -0
- package/base/Base/FieldRenderers/TextareasRenderer.js.map +1 -0
- package/base/Base/FieldRenderers/VerticalTabsRenderer.js +2 -2
- package/base/Base/FieldRenderers/VerticalTabsRenderer.js.map +1 -1
- package/base/Base/Menus.js +5 -64
- package/base/Base/Menus.js.map +1 -1
- package/base/Base/RoutesConfig.js +6 -0
- package/base/Base/RoutesConfig.js.map +1 -1
- package/exports/admin/build-params.d.ts +2 -0
- package/exports/admin/build-params.js +3 -0
- package/exports/admin/build-params.js.map +1 -1
- package/exports/admin/form.d.ts +5 -0
- package/exports/admin/form.js +8 -0
- package/exports/admin/form.js.map +1 -1
- package/exports/admin/ui.d.ts +1 -0
- package/exports/admin/ui.js +1 -0
- package/exports/admin/ui.js.map +1 -1
- package/exports/admin.d.ts +3 -1
- package/exports/admin.js +3 -1
- package/exports/admin.js.map +1 -1
- package/features/formModel/ConditionRuleEvaluator.d.ts +9 -0
- package/features/formModel/ConditionRuleEvaluator.js +56 -0
- package/features/formModel/ConditionRuleEvaluator.js.map +1 -0
- package/features/formModel/Field.d.ts +50 -4
- package/features/formModel/Field.js +254 -35
- package/features/formModel/Field.js.map +1 -1
- package/features/formModel/FieldBuilder.d.ts +17 -35
- package/features/formModel/FieldBuilder.js +63 -100
- package/features/formModel/FieldBuilder.js.map +1 -1
- package/features/formModel/FieldBuilder.test.js +127 -13
- package/features/formModel/FieldBuilder.test.js.map +1 -1
- package/features/formModel/FieldBuilderRegistry.d.ts +4 -0
- package/features/formModel/FieldBuilderRegistry.js +31 -0
- package/features/formModel/FieldBuilderRegistry.js.map +1 -0
- package/features/formModel/FocusManager.d.ts +14 -0
- package/features/formModel/FocusManager.js +109 -0
- package/features/formModel/FocusManager.js.map +1 -0
- package/features/formModel/FormModel.d.ts +27 -31
- package/features/formModel/FormModel.js +210 -403
- package/features/formModel/FormModel.js.map +1 -1
- package/features/formModel/FormModel.test.js +2044 -193
- package/features/formModel/FormModel.test.js.map +1 -1
- package/features/formModel/FormModelFactory.d.ts +4 -2
- package/features/formModel/FormModelFactory.js +13 -3
- package/features/formModel/FormModelFactory.js.map +1 -1
- package/features/formModel/FormView.d.ts +2 -0
- package/features/formModel/FormView.js +44 -37
- package/features/formModel/FormView.js.map +1 -1
- package/features/formModel/LayoutBuilderFactory.d.ts +61 -0
- package/features/formModel/LayoutBuilderFactory.js +386 -0
- package/features/formModel/LayoutBuilderFactory.js.map +1 -0
- package/features/formModel/LayoutMutator.d.ts +11 -0
- package/features/formModel/LayoutMutator.js +136 -0
- package/features/formModel/LayoutMutator.js.map +1 -0
- package/features/formModel/LayoutResolver.d.ts +26 -0
- package/features/formModel/LayoutResolver.js +239 -0
- package/features/formModel/LayoutResolver.js.map +1 -0
- package/features/formModel/ObjectField.d.ts +55 -4
- package/features/formModel/ObjectField.js +499 -82
- package/features/formModel/ObjectField.js.map +1 -1
- package/features/formModel/Rules.test.d.ts +1 -0
- package/features/formModel/Rules.test.js +289 -0
- package/features/formModel/Rules.test.js.map +1 -0
- package/features/formModel/abstractions.d.ts +402 -52
- package/features/formModel/abstractions.js +55 -0
- package/features/formModel/abstractions.js.map +1 -1
- package/features/formModel/createFieldRenderer.d.ts +20 -0
- package/features/formModel/createFieldRenderer.js +15 -0
- package/features/formModel/createFieldRenderer.js.map +1 -0
- package/features/formModel/demo/FieldRenderersDemoPresenter.d.ts +18 -0
- package/features/formModel/demo/FieldRenderersDemoPresenter.js +225 -0
- package/features/formModel/demo/FieldRenderersDemoPresenter.js.map +1 -0
- package/features/formModel/demo/FormModelDemo.d.ts +4 -0
- package/features/formModel/demo/FormModelDemo.js +230 -0
- package/features/formModel/demo/FormModelDemo.js.map +1 -0
- package/features/formModel/demo/FormModelDemoPresenter.d.ts +22 -0
- package/features/formModel/demo/FormModelDemoPresenter.js +121 -0
- package/features/formModel/demo/FormModelDemoPresenter.js.map +1 -0
- package/features/formModel/demo/FormModelPhase11Presenter.d.ts +25 -0
- package/features/formModel/demo/FormModelPhase11Presenter.js +104 -0
- package/features/formModel/demo/FormModelPhase11Presenter.js.map +1 -0
- package/features/formModel/demo/FormModelPhase8c1Presenter.d.ts +23 -0
- package/features/formModel/demo/FormModelPhase8c1Presenter.js +62 -0
- package/features/formModel/demo/FormModelPhase8c1Presenter.js.map +1 -0
- package/features/formModel/feature.js +12 -0
- package/features/formModel/feature.js.map +1 -1
- package/features/formModel/fieldTypes/BooleanFieldType.d.ts +19 -0
- package/features/formModel/fieldTypes/BooleanFieldType.js +23 -0
- package/features/formModel/fieldTypes/BooleanFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/DateTimeFieldType.d.ts +173 -0
- package/features/formModel/fieldTypes/DateTimeFieldType.js +369 -0
- package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/FileFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/FileFieldType.js +20 -0
- package/features/formModel/fieldTypes/FileFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/FileUrlFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/FileUrlFieldType.js +20 -0
- package/features/formModel/fieldTypes/FileUrlFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/NumberFieldType.d.ts +19 -0
- package/features/formModel/fieldTypes/NumberFieldType.js +27 -0
- package/features/formModel/fieldTypes/NumberFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/ObjectFieldType.d.ts +34 -0
- package/features/formModel/fieldTypes/ObjectFieldType.js +109 -0
- package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/TextFieldType.d.ts +18 -0
- package/features/formModel/fieldTypes/TextFieldType.js +20 -0
- package/features/formModel/fieldTypes/TextFieldType.js.map +1 -0
- package/features/formModel/fieldTypes/index.d.ts +7 -0
- package/features/formModel/fieldTypes/index.js +9 -0
- package/features/formModel/fieldTypes/index.js.map +1 -0
- package/features/formModel/index.d.ts +13 -4
- package/features/formModel/index.js +21 -2
- package/features/formModel/index.js.map +1 -1
- package/features/formModel/renderers.d.ts +15 -1
- package/features/formModel/renderers.js +15 -1
- package/features/formModel/renderers.js.map +1 -1
- package/features/tools/LexicalContext/LexicalContext.d.ts +14 -0
- package/features/tools/LexicalContext/LexicalContext.js +22 -0
- package/features/tools/LexicalContext/LexicalContext.js.map +1 -0
- package/features/tools/LexicalContext/abstractions.d.ts +11 -0
- package/features/tools/LexicalContext/abstractions.js +4 -0
- package/features/tools/LexicalContext/abstractions.js.map +1 -0
- package/features/tools/LexicalContext/index.d.ts +2 -0
- package/features/tools/LexicalContext/index.js +3 -0
- package/features/tools/LexicalContext/index.js.map +1 -0
- package/features/tools/feature.js +2 -0
- package/features/tools/feature.js.map +1 -1
- package/features/tools/index.d.ts +1 -0
- package/features/tools/index.js +1 -0
- package/features/tools/index.js.map +1 -1
- package/index.d.ts +8 -1
- package/index.js +7 -0
- package/index.js.map +1 -1
- package/package.json +30 -24
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js +1 -1
- package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js.map +1 -1
- package/presentation/lexicalContext/useLexicalContext.d.ts +3 -0
- package/presentation/lexicalContext/useLexicalContext.js +14 -0
- package/presentation/lexicalContext/useLexicalContext.js.map +1 -0
- package/presentation/textToLexicalTool/TextToLexicalTool.d.ts +3 -0
- package/presentation/textToLexicalTool/TextToLexicalTool.js +6 -2
- package/presentation/textToLexicalTool/TextToLexicalTool.js.map +1 -1
- package/presentation/textToLexicalTool/textToLexicalState.d.ts +2 -1
- package/presentation/textToLexicalTool/textToLexicalState.js +15 -3
- package/presentation/textToLexicalTool/textToLexicalState.js.map +1 -1
- package/routes.d.ts +1 -0
- package/routes.js +4 -0
- package/routes.js.map +1 -1
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.d.ts +0 -21
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js +0 -28
- package/base/Base/FieldRenderers/ObjectRenderer/ObjectListFlatRenderer.js.map +0 -1
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { IFieldVM } from "../../../features/formModel/index.js";
|
|
3
2
|
declare module "../../../features/formModel/abstractions.js" {
|
|
4
3
|
interface IFieldRendererRegistry {
|
|
5
|
-
|
|
4
|
+
textInput: {
|
|
6
5
|
fieldType: "text";
|
|
7
6
|
settings: undefined;
|
|
8
7
|
};
|
|
9
8
|
}
|
|
10
9
|
}
|
|
11
|
-
export declare const InputRenderer:
|
|
12
|
-
field: IFieldVM;
|
|
13
|
-
}
|
|
14
|
-
displayName: string;
|
|
15
|
-
};
|
|
10
|
+
export declare const InputRenderer: React.ComponentType<{
|
|
11
|
+
field: import("../../..").IFieldVM;
|
|
12
|
+
}>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { createFieldRenderer } from "../../../features/formModel/createFieldRenderer.js";
|
|
3
3
|
import { Input } from "@webiny/admin-ui";
|
|
4
4
|
import { DelayedOnChange } from "@webiny/admin-ui";
|
|
5
|
-
export const InputRenderer =
|
|
5
|
+
export const InputRenderer = createFieldRenderer(({
|
|
6
6
|
field
|
|
7
7
|
}) => {
|
|
8
8
|
return /*#__PURE__*/React.createElement(DelayedOnChange, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","
|
|
1
|
+
{"version":3,"names":["React","createFieldRenderer","Input","DelayedOnChange","InputRenderer","field","createElement","value","onChange","label","placeholder","description","note","required","disabled","validation","onBlur"],"sources":["InputRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { createFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport { Input } from \"@webiny/admin-ui\";\nimport { DelayedOnChange } from \"@webiny/admin-ui\";\n\ndeclare module \"../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n textInput: { fieldType: \"text\"; settings: undefined };\n }\n}\n\nexport const InputRenderer = createFieldRenderer(({ field }) => {\n return (\n <DelayedOnChange value={field.value} onChange={value => field.onChange(value)}>\n <Input\n label={field.label}\n placeholder={field.placeholder}\n description={field.description}\n note={field.note}\n required={field.required}\n disabled={field.disabled}\n validation={field.validation}\n onBlur={() => field.onBlur()}\n />\n </DelayedOnChange>\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,mBAAmB;AAC5B,SAASC,KAAK,QAAQ,kBAAkB;AACxC,SAASC,eAAe,QAAQ,kBAAkB;AAQlD,OAAO,MAAMC,aAAa,GAAGH,mBAAmB,CAAC,CAAC;EAAEI;AAAM,CAAC,KAAK;EAC5D,oBACIL,KAAA,CAAAM,aAAA,CAACH,eAAe;IAACI,KAAK,EAAEF,KAAK,CAACE,KAAM;IAACC,QAAQ,EAAED,KAAK,IAAIF,KAAK,CAACG,QAAQ,CAACD,KAAK;EAAE,gBAC1EP,KAAA,CAAAM,aAAA,CAACJ,KAAK;IACFO,KAAK,EAAEJ,KAAK,CAACI,KAAM;IACnBC,WAAW,EAAEL,KAAK,CAACK,WAAY;IAC/BC,WAAW,EAAEN,KAAK,CAACM,WAAY;IAC/BC,IAAI,EAAEP,KAAK,CAACO,IAAK;IACjBC,QAAQ,EAAER,KAAK,CAACQ,QAAS;IACzBC,QAAQ,EAAET,KAAK,CAACS,QAAS;IACzBC,UAAU,EAAEV,KAAK,CAACU,UAAW;IAC7BC,MAAM,EAAEA,CAAA,KAAMX,KAAK,CAACW,MAAM,CAAC;EAAE,CAChC,CACY,CAAC;AAE1B,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
declare module "../../../features/formModel/abstractions.js" {
|
|
3
|
+
interface IFieldRendererRegistry {
|
|
4
|
+
numberInput: {
|
|
5
|
+
fieldType: "number";
|
|
6
|
+
settings: undefined;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export declare const NumberInputRenderer: React.ComponentType<{
|
|
11
|
+
field: import("../../..").IFieldVM;
|
|
12
|
+
}>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { createFieldRenderer } from "../../../features/formModel/createFieldRenderer.js";
|
|
3
|
+
import { DelayedOnChange, Input } from "@webiny/admin-ui";
|
|
4
|
+
export const NumberInputRenderer = createFieldRenderer(({
|
|
5
|
+
field
|
|
6
|
+
}) => {
|
|
7
|
+
return /*#__PURE__*/React.createElement(DelayedOnChange, {
|
|
8
|
+
value: field.value,
|
|
9
|
+
onChange: value => field.onChange(value)
|
|
10
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
11
|
+
label: field.label,
|
|
12
|
+
placeholder: field.placeholder,
|
|
13
|
+
description: field.description,
|
|
14
|
+
note: field.note,
|
|
15
|
+
required: field.required,
|
|
16
|
+
disabled: field.disabled,
|
|
17
|
+
validation: field.validation,
|
|
18
|
+
onBlur: () => field.onBlur(),
|
|
19
|
+
type: "number"
|
|
20
|
+
}));
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=NumberInputRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","createFieldRenderer","DelayedOnChange","Input","NumberInputRenderer","field","createElement","value","onChange","label","placeholder","description","note","required","disabled","validation","onBlur","type"],"sources":["NumberInputRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { createFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport { DelayedOnChange, Input } from \"@webiny/admin-ui\";\n\ndeclare module \"../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n numberInput: { fieldType: \"number\"; settings: undefined };\n }\n}\n\nexport const NumberInputRenderer = createFieldRenderer(({ field }) => {\n return (\n <DelayedOnChange value={field.value} onChange={value => field.onChange(value)}>\n <Input\n label={field.label}\n placeholder={field.placeholder}\n description={field.description}\n note={field.note}\n required={field.required}\n disabled={field.disabled}\n validation={field.validation}\n onBlur={() => field.onBlur()}\n type=\"number\"\n />\n </DelayedOnChange>\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,mBAAmB;AAC5B,SAASC,eAAe,EAAEC,KAAK,QAAQ,kBAAkB;AAQzD,OAAO,MAAMC,mBAAmB,GAAGH,mBAAmB,CAAC,CAAC;EAAEI;AAAM,CAAC,KAAK;EAClE,oBACIL,KAAA,CAAAM,aAAA,CAACJ,eAAe;IAACK,KAAK,EAAEF,KAAK,CAACE,KAAM;IAACC,QAAQ,EAAED,KAAK,IAAIF,KAAK,CAACG,QAAQ,CAACD,KAAK;EAAE,gBAC1EP,KAAA,CAAAM,aAAA,CAACH,KAAK;IACFM,KAAK,EAAEJ,KAAK,CAACI,KAAM;IACnBC,WAAW,EAAEL,KAAK,CAACK,WAAY;IAC/BC,WAAW,EAAEN,KAAK,CAACM,WAAY;IAC/BC,IAAI,EAAEP,KAAK,CAACO,IAAK;IACjBC,QAAQ,EAAER,KAAK,CAACQ,QAAS;IACzBC,QAAQ,EAAET,KAAK,CAACS,QAAS;IACzBC,UAAU,EAAEV,KAAK,CAACU,UAAW;IAC7BC,MAAM,EAAEA,CAAA,KAAMX,KAAK,CAACW,MAAM,CAAC,CAAE;IAC7BC,IAAI,EAAC;EAAQ,CAChB,CACY,CAAC;AAE1B,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
declare module "../../../features/formModel/abstractions.js" {
|
|
3
|
+
interface IFieldRendererRegistry {
|
|
4
|
+
numberInputs: {
|
|
5
|
+
fieldType: "number";
|
|
6
|
+
settings?: {
|
|
7
|
+
addItemLabel?: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export declare const NumberInputsRenderer: React.ComponentType<{
|
|
13
|
+
field: import("../../..").IFieldVM;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { createFieldRenderer } from "../../../features/formModel/createFieldRenderer.js";
|
|
3
|
+
import { ReactComponent as DeleteIcon } from "@webiny/icons/delete.svg";
|
|
4
|
+
import { ReactComponent as AddIcon } from "@webiny/icons/add.svg";
|
|
5
|
+
import { Button, DelayedOnChange, FormComponentDescription, Icon, Input, Separator } from "@webiny/admin-ui";
|
|
6
|
+
export const NumberInputsRenderer = createFieldRenderer(({
|
|
7
|
+
field
|
|
8
|
+
}) => {
|
|
9
|
+
const values = Array.isArray(field.value) ? field.value : [];
|
|
10
|
+
const updateAt = (index, val) => {
|
|
11
|
+
const next = [...values];
|
|
12
|
+
next[index] = val;
|
|
13
|
+
field.onChange(next);
|
|
14
|
+
};
|
|
15
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
16
|
+
className: "flex flex-col gap-sm"
|
|
17
|
+
}, /*#__PURE__*/React.createElement(Separator, {
|
|
18
|
+
labelPosition: "start",
|
|
19
|
+
variant: "accent"
|
|
20
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
21
|
+
className: "text-accent-primary text-lg font-semibold"
|
|
22
|
+
}, `${field.label ?? ""} ${values.length ? `(${values.length})` : ""}`)), field.description && /*#__PURE__*/React.createElement(FormComponentDescription, {
|
|
23
|
+
text: field.description
|
|
24
|
+
}), values.map((val, index) => /*#__PURE__*/React.createElement(DelayedOnChange, {
|
|
25
|
+
key: index,
|
|
26
|
+
value: val,
|
|
27
|
+
onChange: value => updateAt(index, value)
|
|
28
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
29
|
+
disabled: field.disabled,
|
|
30
|
+
label: `Value ${index + 1}`,
|
|
31
|
+
placeholder: field.placeholder,
|
|
32
|
+
type: "number",
|
|
33
|
+
onEnter: () => field.addItem(""),
|
|
34
|
+
endIcon: /*#__PURE__*/React.createElement(Icon, {
|
|
35
|
+
icon: /*#__PURE__*/React.createElement(DeleteIcon, null),
|
|
36
|
+
label: "Delete",
|
|
37
|
+
onClick: () => field.removeItem(index),
|
|
38
|
+
className: "cursor-pointer"
|
|
39
|
+
})
|
|
40
|
+
}))), /*#__PURE__*/React.createElement(Button, {
|
|
41
|
+
disabled: field.disabled,
|
|
42
|
+
variant: "tertiary",
|
|
43
|
+
icon: /*#__PURE__*/React.createElement(AddIcon, null),
|
|
44
|
+
text: field.rendererSettings?.addItemLabel ?? "Add Value",
|
|
45
|
+
onClick: () => field.addItem("")
|
|
46
|
+
}));
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=NumberInputsRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","createFieldRenderer","ReactComponent","DeleteIcon","AddIcon","Button","DelayedOnChange","FormComponentDescription","Icon","Input","Separator","NumberInputsRenderer","field","values","Array","isArray","value","updateAt","index","val","next","onChange","createElement","className","labelPosition","variant","label","length","description","text","map","key","disabled","placeholder","type","onEnter","addItem","endIcon","icon","onClick","removeItem","rendererSettings","addItemLabel"],"sources":["NumberInputsRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { createFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport {\n Button,\n DelayedOnChange,\n FormComponentDescription,\n Icon,\n Input,\n Separator\n} from \"@webiny/admin-ui\";\n\ndeclare module \"../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n numberInputs: { fieldType: \"number\"; settings?: { addItemLabel?: string } };\n }\n}\n\nexport const NumberInputsRenderer = createFieldRenderer<\"numberInputs\">(({ field }) => {\n const values = Array.isArray(field.value) ? field.value : [];\n\n const updateAt = (index: number, val: unknown) => {\n const next = [...values];\n next[index] = val as number;\n field.onChange(next);\n };\n\n return (\n <div className={\"flex flex-col gap-sm\"}>\n <Separator labelPosition={\"start\"} variant={\"accent\"}>\n <span className={\"text-accent-primary text-lg font-semibold\"}>\n {`${field.label ?? \"\"} ${values.length ? `(${values.length})` : \"\"}`}\n </span>\n </Separator>\n {field.description && <FormComponentDescription text={field.description} />}\n {values.map((val, index) => (\n <DelayedOnChange key={index} value={val} onChange={value => updateAt(index, value)}>\n <Input\n disabled={field.disabled}\n label={`Value ${index + 1}`}\n placeholder={field.placeholder}\n type=\"number\"\n onEnter={() => field.addItem(\"\")}\n endIcon={\n <Icon\n icon={<DeleteIcon />}\n label={\"Delete\"}\n onClick={() => field.removeItem(index)}\n className={\"cursor-pointer\"}\n />\n }\n />\n </DelayedOnChange>\n ))}\n <Button\n disabled={field.disabled}\n variant={\"tertiary\"}\n icon={<AddIcon />}\n text={field.rendererSettings?.addItemLabel ?? \"Add Value\"}\n onClick={() => field.addItem(\"\")}\n />\n </div>\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,mBAAmB;AAC5B,SAASC,cAAc,IAAIC,UAAU,QAAQ,0BAA0B;AACvE,SAASD,cAAc,IAAIE,OAAO,QAAQ,uBAAuB;AACjE,SACIC,MAAM,EACNC,eAAe,EACfC,wBAAwB,EACxBC,IAAI,EACJC,KAAK,EACLC,SAAS,QACN,kBAAkB;AAQzB,OAAO,MAAMC,oBAAoB,GAAGV,mBAAmB,CAAiB,CAAC;EAAEW;AAAM,CAAC,KAAK;EACnF,MAAMC,MAAM,GAAGC,KAAK,CAACC,OAAO,CAACH,KAAK,CAACI,KAAK,CAAC,GAAGJ,KAAK,CAACI,KAAK,GAAG,EAAE;EAE5D,MAAMC,QAAQ,GAAGA,CAACC,KAAa,EAAEC,GAAY,KAAK;IAC9C,MAAMC,IAAI,GAAG,CAAC,GAAGP,MAAM,CAAC;IACxBO,IAAI,CAACF,KAAK,CAAC,GAAGC,GAAa;IAC3BP,KAAK,CAACS,QAAQ,CAACD,IAAI,CAAC;EACxB,CAAC;EAED,oBACIpB,KAAA,CAAAsB,aAAA;IAAKC,SAAS,EAAE;EAAuB,gBACnCvB,KAAA,CAAAsB,aAAA,CAACZ,SAAS;IAACc,aAAa,EAAE,OAAQ;IAACC,OAAO,EAAE;EAAS,gBACjDzB,KAAA,CAAAsB,aAAA;IAAMC,SAAS,EAAE;EAA4C,GACxD,GAAGX,KAAK,CAACc,KAAK,IAAI,EAAE,IAAIb,MAAM,CAACc,MAAM,GAAG,IAAId,MAAM,CAACc,MAAM,GAAG,GAAG,EAAE,EAChE,CACC,CAAC,EACXf,KAAK,CAACgB,WAAW,iBAAI5B,KAAA,CAAAsB,aAAA,CAACf,wBAAwB;IAACsB,IAAI,EAAEjB,KAAK,CAACgB;EAAY,CAAE,CAAC,EAC1Ef,MAAM,CAACiB,GAAG,CAAC,CAACX,GAAG,EAAED,KAAK,kBACnBlB,KAAA,CAAAsB,aAAA,CAAChB,eAAe;IAACyB,GAAG,EAAEb,KAAM;IAACF,KAAK,EAAEG,GAAI;IAACE,QAAQ,EAAEL,KAAK,IAAIC,QAAQ,CAACC,KAAK,EAAEF,KAAK;EAAE,gBAC/EhB,KAAA,CAAAsB,aAAA,CAACb,KAAK;IACFuB,QAAQ,EAAEpB,KAAK,CAACoB,QAAS;IACzBN,KAAK,EAAE,SAASR,KAAK,GAAG,CAAC,EAAG;IAC5Be,WAAW,EAAErB,KAAK,CAACqB,WAAY;IAC/BC,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAEA,CAAA,KAAMvB,KAAK,CAACwB,OAAO,CAAC,EAAE,CAAE;IACjCC,OAAO,eACHrC,KAAA,CAAAsB,aAAA,CAACd,IAAI;MACD8B,IAAI,eAAEtC,KAAA,CAAAsB,aAAA,CAACnB,UAAU,MAAE,CAAE;MACrBuB,KAAK,EAAE,QAAS;MAChBa,OAAO,EAAEA,CAAA,KAAM3B,KAAK,CAAC4B,UAAU,CAACtB,KAAK,CAAE;MACvCK,SAAS,EAAE;IAAiB,CAC/B;EACJ,CACJ,CACY,CACpB,CAAC,eACFvB,KAAA,CAAAsB,aAAA,CAACjB,MAAM;IACH2B,QAAQ,EAAEpB,KAAK,CAACoB,QAAS;IACzBP,OAAO,EAAE,UAAW;IACpBa,IAAI,eAAEtC,KAAA,CAAAsB,aAAA,CAAClB,OAAO,MAAE,CAAE;IAClByB,IAAI,EAAEjB,KAAK,CAAC6B,gBAAgB,EAAEC,YAAY,IAAI,WAAY;IAC1DH,OAAO,EAAEA,CAAA,KAAM3B,KAAK,CAACwB,OAAO,CAAC,EAAE;EAAE,CACpC,CACA,CAAC;AAEd,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
declare module "../../../../features/formModel/abstractions.js" {
|
|
3
|
+
interface IFieldRendererRegistry {
|
|
4
|
+
dynamicZone: {
|
|
5
|
+
fieldType: "object";
|
|
6
|
+
settings?: {
|
|
7
|
+
container?: boolean;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export declare const DynamicZoneRenderer: React.ComponentType<{
|
|
13
|
+
field: import("../../../../index.js").IFieldVM;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { createObjectFieldRenderer } from "../../../../features/formModel/createFieldRenderer.js";
|
|
3
|
+
import { SingleValueDynamicZone } from "./SingleValueDynamicZone.js";
|
|
4
|
+
import { MultiValueDynamicZone } from "./MultiValueDynamicZone.js";
|
|
5
|
+
export const DynamicZoneRenderer = createObjectFieldRenderer(({
|
|
6
|
+
field
|
|
7
|
+
}) => {
|
|
8
|
+
if (field.isList) {
|
|
9
|
+
return /*#__PURE__*/React.createElement(MultiValueDynamicZone, {
|
|
10
|
+
field: field,
|
|
11
|
+
showContainer: field.rendererSettings?.container !== false
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return /*#__PURE__*/React.createElement(SingleValueDynamicZone, {
|
|
15
|
+
field: field,
|
|
16
|
+
showContainer: field.rendererSettings?.container !== false
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=DynamicZoneRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","createObjectFieldRenderer","SingleValueDynamicZone","MultiValueDynamicZone","DynamicZoneRenderer","field","isList","createElement","showContainer","rendererSettings","container"],"sources":["DynamicZoneRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { createObjectFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport { SingleValueDynamicZone } from \"./SingleValueDynamicZone.js\";\nimport { MultiValueDynamicZone } from \"./MultiValueDynamicZone.js\";\n\ndeclare module \"../../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n dynamicZone: {\n fieldType: \"object\";\n settings?: {\n container?: boolean;\n };\n };\n }\n}\n\nexport const DynamicZoneRenderer = createObjectFieldRenderer<\"dynamicZone\">(({ field }) => {\n if (field.isList) {\n return (\n <MultiValueDynamicZone\n field={field}\n showContainer={field.rendererSettings?.container !== false}\n />\n );\n }\n\n return (\n <SingleValueDynamicZone\n field={field}\n showContainer={field.rendererSettings?.container !== false}\n />\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,yBAAyB;AAClC,SAASC,sBAAsB;AAC/B,SAASC,qBAAqB;AAa9B,OAAO,MAAMC,mBAAmB,GAAGH,yBAAyB,CAAgB,CAAC;EAAEI;AAAM,CAAC,KAAK;EACvF,IAAIA,KAAK,CAACC,MAAM,EAAE;IACd,oBACIN,KAAA,CAAAO,aAAA,CAACJ,qBAAqB;MAClBE,KAAK,EAAEA,KAAM;MACbG,aAAa,EAAEH,KAAK,CAACI,gBAAgB,EAAEC,SAAS,KAAK;IAAM,CAC9D,CAAC;EAEV;EAEA,oBACIV,KAAA,CAAAO,aAAA,CAACL,sBAAsB;IACnBG,KAAK,EAAEA,KAAM;IACbG,aAAa,EAAEH,KAAK,CAACI,gBAAgB,EAAEC,SAAS,KAAK;EAAM,CAC9D,CAAC;AAEV,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
declare module "../../../../features/formModel/abstractions.js" {
|
|
3
|
+
interface IFieldRendererRegistry {
|
|
4
|
+
keyValueTags: {
|
|
5
|
+
fieldType: "object";
|
|
6
|
+
settings?: {
|
|
7
|
+
addItemLabel?: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export declare const KeyValueTagsRenderer: React.ComponentType<{
|
|
13
|
+
field: import("~/features/formModel/index.js").IFieldVM;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { observer } from "mobx-react-lite";
|
|
3
|
+
import { ReactComponent as AddIcon } from "@webiny/icons/add.svg";
|
|
4
|
+
import { ReactComponent as DeleteIcon } from "@webiny/icons/delete.svg";
|
|
5
|
+
import { Button, FormComponentDescription, FormComponentLabel, IconButton } from "@webiny/admin-ui";
|
|
6
|
+
import { createObjectFieldRenderer } from "../../../../features/formModel/createFieldRenderer.js";
|
|
7
|
+
import { NestedLayout } from "./ObjectFieldComponents.js";
|
|
8
|
+
export const KeyValueTagsRenderer = createObjectFieldRenderer(({
|
|
9
|
+
field
|
|
10
|
+
}) => {
|
|
11
|
+
if (!field.isList) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
return /*#__PURE__*/React.createElement(KeyValueTagsList, {
|
|
15
|
+
field: field
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
const KeyValueTagsList = createObjectFieldRenderer(({
|
|
19
|
+
field
|
|
20
|
+
}) => {
|
|
21
|
+
const settings = field.rendererSettings;
|
|
22
|
+
const hasItems = field.items.length > 0;
|
|
23
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, field.label && /*#__PURE__*/React.createElement(FormComponentLabel, {
|
|
24
|
+
text: field.label
|
|
25
|
+
}), field.description && /*#__PURE__*/React.createElement(FormComponentDescription, {
|
|
26
|
+
text: field.description
|
|
27
|
+
}), hasItems ? /*#__PURE__*/React.createElement("div", {
|
|
28
|
+
className: "flex flex-col gap-md"
|
|
29
|
+
}, field.items.map(item => /*#__PURE__*/React.createElement(TagRow, {
|
|
30
|
+
key: item.key,
|
|
31
|
+
item: item,
|
|
32
|
+
disabled: field.disabled
|
|
33
|
+
}))) : null, !field.disabled ? /*#__PURE__*/React.createElement("div", {
|
|
34
|
+
className: "mt-md"
|
|
35
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
36
|
+
onClick: () => field.addItem(),
|
|
37
|
+
text: settings?.addItemLabel ?? "Add tag",
|
|
38
|
+
variant: "secondary",
|
|
39
|
+
size: "sm",
|
|
40
|
+
icon: /*#__PURE__*/React.createElement(AddIcon, null)
|
|
41
|
+
})) : null);
|
|
42
|
+
});
|
|
43
|
+
const TagRow = observer(({
|
|
44
|
+
item,
|
|
45
|
+
disabled
|
|
46
|
+
}) => {
|
|
47
|
+
const inlineLayout = [{
|
|
48
|
+
type: "row",
|
|
49
|
+
fields: item.fields
|
|
50
|
+
}];
|
|
51
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
52
|
+
className: "flex items-center gap-sm"
|
|
53
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
54
|
+
className: "flex-1 gap-md"
|
|
55
|
+
}, /*#__PURE__*/React.createElement(NestedLayout, {
|
|
56
|
+
layout: inlineLayout
|
|
57
|
+
})), !disabled && /*#__PURE__*/React.createElement(IconButton, {
|
|
58
|
+
variant: "ghost",
|
|
59
|
+
size: "lg",
|
|
60
|
+
icon: /*#__PURE__*/React.createElement(DeleteIcon, null),
|
|
61
|
+
onClick: () => item.remove()
|
|
62
|
+
}));
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=KeyValueTagsRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","observer","ReactComponent","AddIcon","DeleteIcon","Button","FormComponentDescription","FormComponentLabel","IconButton","createObjectFieldRenderer","NestedLayout","KeyValueTagsRenderer","field","isList","createElement","KeyValueTagsList","settings","rendererSettings","hasItems","items","length","Fragment","label","text","description","className","map","item","TagRow","key","disabled","onClick","addItem","addItemLabel","variant","size","icon","inlineLayout","type","fields","layout","remove"],"sources":["KeyValueTagsRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { Button, FormComponentDescription, FormComponentLabel, IconButton } from \"@webiny/admin-ui\";\nimport { createObjectFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport type { IObjectFieldItemVM } from \"~/features/formModel/index.js\";\nimport { NestedLayout } from \"./ObjectFieldComponents.js\";\n\ndeclare module \"../../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n keyValueTags: {\n fieldType: \"object\";\n settings?: { addItemLabel?: string };\n };\n }\n}\n\nexport const KeyValueTagsRenderer = createObjectFieldRenderer(({ field }) => {\n if (!field.isList) {\n return null;\n }\n\n return <KeyValueTagsList field={field} />;\n});\n\nconst KeyValueTagsList = createObjectFieldRenderer<\"keyValueTags\">(({ field }) => {\n const settings = field.rendererSettings;\n\n const hasItems = field.items.length > 0;\n\n return (\n <>\n {field.label && <FormComponentLabel text={field.label} />}\n {field.description && <FormComponentDescription text={field.description} />}\n {hasItems ? (\n <div className={\"flex flex-col gap-md\"}>\n {field.items.map(item => (\n <TagRow key={item.key} item={item} disabled={field.disabled} />\n ))}\n </div>\n ) : null}\n {!field.disabled ? (\n <div className={\"mt-md\"}>\n <Button\n onClick={() => field.addItem()}\n text={settings?.addItemLabel ?? \"Add tag\"}\n variant={\"secondary\"}\n size={\"sm\"}\n icon={<AddIcon />}\n />\n </div>\n ) : null}\n </>\n );\n});\n\nconst TagRow = observer(({ item, disabled }: { item: IObjectFieldItemVM; disabled: boolean }) => {\n const inlineLayout = [{ type: \"row\" as const, fields: item.fields }];\n\n return (\n <div className={\"flex items-center gap-sm\"}>\n <div className={\"flex-1 gap-md\"}>\n <NestedLayout layout={inlineLayout} />\n </div>\n {!disabled && (\n <IconButton\n variant={\"ghost\"}\n size={\"lg\"}\n icon={<DeleteIcon />}\n onClick={() => item.remove()}\n />\n )}\n </div>\n );\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { IObjectFieldVM } from "../../../../features/formModel/index.js";
|
|
3
|
+
interface MultiValueDynamicZoneProps {
|
|
4
|
+
field: IObjectFieldVM;
|
|
5
|
+
showContainer?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const MultiValueDynamicZone: (({ field, showContainer }: MultiValueDynamicZoneProps) => React.JSX.Element) & {
|
|
8
|
+
displayName: string;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { observer } from "mobx-react-lite";
|
|
3
|
+
import { Accordion, Tooltip } from "@webiny/admin-ui";
|
|
4
|
+
import { ReactComponent as DeleteIcon } from "@webiny/icons/delete_outline.svg";
|
|
5
|
+
import { ReactComponent as CloneIcon } from "@webiny/icons/library_add.svg";
|
|
6
|
+
import { ReactComponent as ArrowUpIcon } from "@webiny/icons/expand_less.svg";
|
|
7
|
+
import { ReactComponent as ArrowDownIcon } from "@webiny/icons/expand_more.svg";
|
|
8
|
+
import { ReactComponent as HorizontalRuleIcon } from "@webiny/icons/horizontal_rule.svg";
|
|
9
|
+
import { useConfirmationDialog } from "../../../../hooks/useConfirmationDialog.js";
|
|
10
|
+
import { NestedLayout } from "./ObjectFieldComponents.js";
|
|
11
|
+
import { AddTemplateButton } from "./TemplatePicker.js";
|
|
12
|
+
export const MultiValueDynamicZone = observer(({
|
|
13
|
+
field,
|
|
14
|
+
showContainer = true
|
|
15
|
+
}) => {
|
|
16
|
+
const itemCount = field.items.length;
|
|
17
|
+
const content = /*#__PURE__*/React.createElement("div", {
|
|
18
|
+
className: "flex flex-col gap-lg"
|
|
19
|
+
}, itemCount > 0 ? /*#__PURE__*/React.createElement(Accordion, {
|
|
20
|
+
background: "base",
|
|
21
|
+
variant: "container",
|
|
22
|
+
className: "gap-md flex flex-col"
|
|
23
|
+
}, field.items.map((item, index) => /*#__PURE__*/React.createElement(TemplatedListItem, {
|
|
24
|
+
key: item.key,
|
|
25
|
+
item: item,
|
|
26
|
+
index: index,
|
|
27
|
+
total: itemCount,
|
|
28
|
+
templates: field.availableTemplates,
|
|
29
|
+
disabled: field.disabled
|
|
30
|
+
}))) : null, !field.disabled && /*#__PURE__*/React.createElement(AddTemplateButton, {
|
|
31
|
+
templates: field.availableTemplates,
|
|
32
|
+
onSelect: template => field.addItem(template.id)
|
|
33
|
+
}));
|
|
34
|
+
if (!showContainer) {
|
|
35
|
+
return content;
|
|
36
|
+
}
|
|
37
|
+
const label = `${field.label || ""}${itemCount ? ` (${itemCount})` : ""}`;
|
|
38
|
+
return /*#__PURE__*/React.createElement(Accordion, {
|
|
39
|
+
background: "base",
|
|
40
|
+
variant: "container"
|
|
41
|
+
}, /*#__PURE__*/React.createElement(Accordion.Item, {
|
|
42
|
+
icon: /*#__PURE__*/React.createElement(Accordion.Item.Icon, {
|
|
43
|
+
color: "accent",
|
|
44
|
+
label: "Dynamic Zone",
|
|
45
|
+
icon: /*#__PURE__*/React.createElement(HorizontalRuleIcon, null)
|
|
46
|
+
}),
|
|
47
|
+
title: label,
|
|
48
|
+
defaultOpen: true
|
|
49
|
+
}, content));
|
|
50
|
+
});
|
|
51
|
+
const TemplatedListItem = observer(({
|
|
52
|
+
item,
|
|
53
|
+
index,
|
|
54
|
+
total,
|
|
55
|
+
templates,
|
|
56
|
+
disabled
|
|
57
|
+
}) => {
|
|
58
|
+
const {
|
|
59
|
+
showConfirmation
|
|
60
|
+
} = useConfirmationDialog({
|
|
61
|
+
title: "Delete item",
|
|
62
|
+
message: "Are you sure you want to delete this item? This action is not reversible.",
|
|
63
|
+
acceptLabel: "Yes, I'm sure!",
|
|
64
|
+
cancelLabel: "No, leave it."
|
|
65
|
+
});
|
|
66
|
+
const template = templates.find(t => t.id === item.templateId);
|
|
67
|
+
const title = template?.label || `Item #${index + 1}`;
|
|
68
|
+
const onDelete = () => {
|
|
69
|
+
showConfirmation(() => {
|
|
70
|
+
item.remove();
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
const actions = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Accordion.Item.Action, {
|
|
74
|
+
icon: /*#__PURE__*/React.createElement(Tooltip, {
|
|
75
|
+
trigger: /*#__PURE__*/React.createElement(ArrowUpIcon, null),
|
|
76
|
+
content: "Move up"
|
|
77
|
+
}),
|
|
78
|
+
onClick: item.moveUp,
|
|
79
|
+
disabled: index === 0
|
|
80
|
+
}), /*#__PURE__*/React.createElement(Accordion.Item.Action, {
|
|
81
|
+
icon: /*#__PURE__*/React.createElement(Tooltip, {
|
|
82
|
+
trigger: /*#__PURE__*/React.createElement(ArrowDownIcon, null),
|
|
83
|
+
content: "Move down"
|
|
84
|
+
}),
|
|
85
|
+
onClick: item.moveDown,
|
|
86
|
+
disabled: index === total - 1
|
|
87
|
+
}), /*#__PURE__*/React.createElement(Accordion.Item.Action.Separator, null), /*#__PURE__*/React.createElement(Accordion.Item.Action, {
|
|
88
|
+
icon: /*#__PURE__*/React.createElement(Tooltip, {
|
|
89
|
+
trigger: /*#__PURE__*/React.createElement(CloneIcon, null),
|
|
90
|
+
content: "Duplicate"
|
|
91
|
+
}),
|
|
92
|
+
onClick: item.duplicate
|
|
93
|
+
}), /*#__PURE__*/React.createElement(Accordion.Item.Action, {
|
|
94
|
+
icon: /*#__PURE__*/React.createElement(Tooltip, {
|
|
95
|
+
trigger: /*#__PURE__*/React.createElement(DeleteIcon, null),
|
|
96
|
+
content: "Delete"
|
|
97
|
+
}),
|
|
98
|
+
onClick: onDelete
|
|
99
|
+
}));
|
|
100
|
+
return /*#__PURE__*/React.createElement(Accordion.Item, {
|
|
101
|
+
title: title,
|
|
102
|
+
actions: disabled ? null : actions,
|
|
103
|
+
defaultOpen: false
|
|
104
|
+
}, /*#__PURE__*/React.createElement(NestedLayout, {
|
|
105
|
+
layout: item.layout
|
|
106
|
+
}));
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
//# sourceMappingURL=MultiValueDynamicZone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","observer","Accordion","Tooltip","ReactComponent","DeleteIcon","CloneIcon","ArrowUpIcon","ArrowDownIcon","HorizontalRuleIcon","useConfirmationDialog","NestedLayout","AddTemplateButton","MultiValueDynamicZone","field","showContainer","itemCount","items","length","content","createElement","className","background","variant","map","item","index","TemplatedListItem","key","total","templates","availableTemplates","disabled","onSelect","template","addItem","id","label","Item","icon","Icon","color","title","defaultOpen","showConfirmation","message","acceptLabel","cancelLabel","find","t","templateId","onDelete","remove","actions","Fragment","Action","trigger","onClick","moveUp","moveDown","Separator","duplicate","layout"],"sources":["MultiValueDynamicZone.tsx"],"sourcesContent":["import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { Accordion, Tooltip } from \"@webiny/admin-ui\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete_outline.svg\";\nimport { ReactComponent as CloneIcon } from \"@webiny/icons/library_add.svg\";\nimport { ReactComponent as ArrowUpIcon } from \"@webiny/icons/expand_less.svg\";\nimport { ReactComponent as ArrowDownIcon } from \"@webiny/icons/expand_more.svg\";\nimport { ReactComponent as HorizontalRuleIcon } from \"@webiny/icons/horizontal_rule.svg\";\nimport type { IObjectFieldItemVM, IObjectFieldVM } from \"~/features/formModel/index.js\";\nimport { useConfirmationDialog } from \"~/hooks/useConfirmationDialog.js\";\nimport { NestedLayout } from \"./ObjectFieldComponents.js\";\nimport { AddTemplateButton } from \"./TemplatePicker.js\";\n\ninterface MultiValueDynamicZoneProps {\n field: IObjectFieldVM;\n showContainer?: boolean;\n}\n\nexport const MultiValueDynamicZone = observer(\n ({ field, showContainer = true }: MultiValueDynamicZoneProps) => {\n const itemCount = field.items.length;\n\n const content = (\n <div className={\"flex flex-col gap-lg\"}>\n {itemCount > 0 ? (\n <Accordion\n background={\"base\"}\n variant={\"container\"}\n className={\"gap-md flex flex-col\"}\n >\n {field.items.map((item, index) => (\n <TemplatedListItem\n key={item.key}\n item={item}\n index={index}\n total={itemCount}\n templates={field.availableTemplates}\n disabled={field.disabled}\n />\n ))}\n </Accordion>\n ) : null}\n {!field.disabled && (\n <AddTemplateButton\n templates={field.availableTemplates}\n onSelect={template => field.addItem(template.id)}\n />\n )}\n </div>\n );\n\n if (!showContainer) {\n return content;\n }\n\n const label = `${field.label || \"\"}${itemCount ? ` (${itemCount})` : \"\"}`;\n\n return (\n <Accordion background={\"base\"} variant={\"container\"}>\n <Accordion.Item\n icon={\n <Accordion.Item.Icon\n color={\"accent\"}\n label={\"Dynamic Zone\"}\n icon={<HorizontalRuleIcon />}\n />\n }\n title={label}\n defaultOpen={true}\n >\n {content}\n </Accordion.Item>\n </Accordion>\n );\n }\n);\n\ninterface TemplatedListItemProps {\n item: IObjectFieldItemVM;\n index: number;\n total: number;\n templates: { id: string; label: string }[];\n disabled: boolean;\n}\n\nconst TemplatedListItem = observer(\n ({ item, index, total, templates, disabled }: TemplatedListItemProps) => {\n const { showConfirmation } = useConfirmationDialog({\n title: \"Delete item\",\n message: \"Are you sure you want to delete this item? This action is not reversible.\",\n acceptLabel: \"Yes, I'm sure!\",\n cancelLabel: \"No, leave it.\"\n });\n\n const template = templates.find(t => t.id === item.templateId);\n const title = template?.label || `Item #${index + 1}`;\n\n const onDelete = () => {\n showConfirmation(() => {\n item.remove();\n });\n };\n\n const actions = (\n <>\n <Accordion.Item.Action\n icon={<Tooltip trigger={<ArrowUpIcon />} content={\"Move up\"} />}\n onClick={item.moveUp}\n disabled={index === 0}\n />\n <Accordion.Item.Action\n icon={<Tooltip trigger={<ArrowDownIcon />} content={\"Move down\"} />}\n onClick={item.moveDown}\n disabled={index === total - 1}\n />\n <Accordion.Item.Action.Separator />\n <Accordion.Item.Action\n icon={<Tooltip trigger={<CloneIcon />} content={\"Duplicate\"} />}\n onClick={item.duplicate}\n />\n <Accordion.Item.Action\n icon={<Tooltip trigger={<DeleteIcon />} content={\"Delete\"} />}\n onClick={onDelete}\n />\n </>\n );\n\n return (\n <Accordion.Item title={title} actions={disabled ? null : actions} defaultOpen={false}>\n <NestedLayout layout={item.layout} />\n </Accordion.Item>\n );\n }\n);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
declare module "../../../../features/formModel/abstractions.js" {
|
|
3
|
+
interface IFieldRendererRegistry {
|
|
4
|
+
objectAccordionMultiple: {
|
|
5
|
+
fieldType: "object";
|
|
6
|
+
settings?: {
|
|
7
|
+
open?: boolean;
|
|
8
|
+
container?: boolean;
|
|
9
|
+
itemTitle?: string | ((data: Record<string, unknown>, index: number) => string);
|
|
10
|
+
addItemLabel?: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export declare const ObjectAccordionMultipleRenderer: React.ComponentType<{
|
|
16
|
+
field: import("../../../../index.js").IFieldVM;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Accordion } from "@webiny/admin-ui";
|
|
3
|
+
import { createObjectFieldRenderer } from "../../../../features/formModel/createFieldRenderer.js";
|
|
4
|
+
import { ListItemRenderer, AddItemButton } from "./ObjectFieldComponents.js";
|
|
5
|
+
export const ObjectAccordionMultipleRenderer = createObjectFieldRenderer(({
|
|
6
|
+
field
|
|
7
|
+
}) => {
|
|
8
|
+
if (!field.isList) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const settings = field.rendererSettings;
|
|
12
|
+
const showContainer = settings?.container !== false;
|
|
13
|
+
const addButton = /*#__PURE__*/React.createElement(AddItemButton, {
|
|
14
|
+
label: settings?.addItemLabel ?? `Add ${field.label || "Item"}`,
|
|
15
|
+
disabled: field.disabled,
|
|
16
|
+
onAdd: () => field.addItem()
|
|
17
|
+
});
|
|
18
|
+
if (!showContainer) {
|
|
19
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
20
|
+
className: "flex flex-col gap-lg"
|
|
21
|
+
}, /*#__PURE__*/React.createElement(ListItems, {
|
|
22
|
+
field: field
|
|
23
|
+
}), addButton);
|
|
24
|
+
}
|
|
25
|
+
const label = `${field.label || ""} ${field.items.length ? `(${field.items.length})` : ""}`;
|
|
26
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
27
|
+
className: "flex flex-col gap-lg"
|
|
28
|
+
}, /*#__PURE__*/React.createElement(Accordion, {
|
|
29
|
+
background: "base",
|
|
30
|
+
variant: "container"
|
|
31
|
+
}, /*#__PURE__*/React.createElement(Accordion.Item, {
|
|
32
|
+
title: label,
|
|
33
|
+
defaultOpen: true
|
|
34
|
+
}, /*#__PURE__*/React.createElement(ListItems, {
|
|
35
|
+
field: field
|
|
36
|
+
}))), addButton);
|
|
37
|
+
});
|
|
38
|
+
const ListItems = createObjectFieldRenderer(({
|
|
39
|
+
field
|
|
40
|
+
}) => {
|
|
41
|
+
const settings = field.rendererSettings;
|
|
42
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
43
|
+
className: "flex flex-col gap-md"
|
|
44
|
+
}, field.items.map((item, index) => /*#__PURE__*/React.createElement(ListItemRenderer, {
|
|
45
|
+
key: item.key,
|
|
46
|
+
item: item,
|
|
47
|
+
index: index,
|
|
48
|
+
total: field.items.length,
|
|
49
|
+
label: field.label,
|
|
50
|
+
itemTitle: settings?.itemTitle,
|
|
51
|
+
disabled: field.disabled
|
|
52
|
+
})));
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=ObjectAccordionMultipleRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Accordion","createObjectFieldRenderer","ListItemRenderer","AddItemButton","ObjectAccordionMultipleRenderer","field","isList","settings","rendererSettings","showContainer","container","addButton","createElement","label","addItemLabel","disabled","onAdd","addItem","className","ListItems","items","length","background","variant","Item","title","defaultOpen","map","item","index","key","total","itemTitle"],"sources":["ObjectAccordionMultipleRenderer.tsx"],"sourcesContent":["import React from \"react\";\nimport { Accordion } from \"@webiny/admin-ui\";\nimport { createObjectFieldRenderer } from \"~/features/formModel/createFieldRenderer.js\";\nimport { ListItemRenderer, AddItemButton } from \"./ObjectFieldComponents.js\";\n\ndeclare module \"../../../../features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n objectAccordionMultiple: {\n fieldType: \"object\";\n settings?: {\n open?: boolean;\n container?: boolean;\n itemTitle?: string | ((data: Record<string, unknown>, index: number) => string);\n addItemLabel?: string;\n };\n };\n }\n}\n\nexport const ObjectAccordionMultipleRenderer = createObjectFieldRenderer<\"objectAccordionMultiple\">(\n ({ field }) => {\n if (!field.isList) {\n return null;\n }\n\n const settings = field.rendererSettings;\n const showContainer = settings?.container !== false;\n\n const addButton = (\n <AddItemButton\n label={settings?.addItemLabel ?? `Add ${field.label || \"Item\"}`}\n disabled={field.disabled}\n onAdd={() => field.addItem()}\n />\n );\n\n if (!showContainer) {\n return (\n <div className={\"flex flex-col gap-lg\"}>\n <ListItems field={field} />\n {addButton}\n </div>\n );\n }\n\n const label = `${field.label || \"\"} ${field.items.length ? `(${field.items.length})` : \"\"}`;\n\n return (\n <div className={\"flex flex-col gap-lg\"}>\n <Accordion background={\"base\"} variant={\"container\"}>\n <Accordion.Item title={label} defaultOpen={true}>\n <ListItems field={field} />\n </Accordion.Item>\n </Accordion>\n {addButton}\n </div>\n );\n }\n);\n\nconst ListItems = createObjectFieldRenderer<\"objectAccordionMultiple\">(({ field }) => {\n const settings = field.rendererSettings;\n\n return (\n <div className={\"flex flex-col gap-md\"}>\n {field.items.map((item, index) => (\n <ListItemRenderer\n key={item.key}\n item={item}\n index={index}\n total={field.items.length}\n label={field.label}\n itemTitle={settings?.itemTitle}\n disabled={field.disabled}\n />\n ))}\n </div>\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,yBAAyB;AAClC,SAASC,gBAAgB,EAAEC,aAAa;AAgBxC,OAAO,MAAMC,+BAA+B,GAAGH,yBAAyB,CACpE,CAAC;EAAEI;AAAM,CAAC,KAAK;EACX,IAAI,CAACA,KAAK,CAACC,MAAM,EAAE;IACf,OAAO,IAAI;EACf;EAEA,MAAMC,QAAQ,GAAGF,KAAK,CAACG,gBAAgB;EACvC,MAAMC,aAAa,GAAGF,QAAQ,EAAEG,SAAS,KAAK,KAAK;EAEnD,MAAMC,SAAS,gBACXZ,KAAA,CAAAa,aAAA,CAACT,aAAa;IACVU,KAAK,EAAEN,QAAQ,EAAEO,YAAY,IAAI,OAAOT,KAAK,CAACQ,KAAK,IAAI,MAAM,EAAG;IAChEE,QAAQ,EAAEV,KAAK,CAACU,QAAS;IACzBC,KAAK,EAAEA,CAAA,KAAMX,KAAK,CAACY,OAAO,CAAC;EAAE,CAChC,CACJ;EAED,IAAI,CAACR,aAAa,EAAE;IAChB,oBACIV,KAAA,CAAAa,aAAA;MAAKM,SAAS,EAAE;IAAuB,gBACnCnB,KAAA,CAAAa,aAAA,CAACO,SAAS;MAACd,KAAK,EAAEA;IAAM,CAAE,CAAC,EAC1BM,SACA,CAAC;EAEd;EAEA,MAAME,KAAK,GAAG,GAAGR,KAAK,CAACQ,KAAK,IAAI,EAAE,IAAIR,KAAK,CAACe,KAAK,CAACC,MAAM,GAAG,IAAIhB,KAAK,CAACe,KAAK,CAACC,MAAM,GAAG,GAAG,EAAE,EAAE;EAE3F,oBACItB,KAAA,CAAAa,aAAA;IAAKM,SAAS,EAAE;EAAuB,gBACnCnB,KAAA,CAAAa,aAAA,CAACZ,SAAS;IAACsB,UAAU,EAAE,MAAO;IAACC,OAAO,EAAE;EAAY,gBAChDxB,KAAA,CAAAa,aAAA,CAACZ,SAAS,CAACwB,IAAI;IAACC,KAAK,EAAEZ,KAAM;IAACa,WAAW,EAAE;EAAK,gBAC5C3B,KAAA,CAAAa,aAAA,CAACO,SAAS;IAACd,KAAK,EAAEA;EAAM,CAAE,CACd,CACT,CAAC,EACXM,SACA,CAAC;AAEd,CACJ,CAAC;AAED,MAAMQ,SAAS,GAAGlB,yBAAyB,CAA4B,CAAC;EAAEI;AAAM,CAAC,KAAK;EAClF,MAAME,QAAQ,GAAGF,KAAK,CAACG,gBAAgB;EAEvC,oBACIT,KAAA,CAAAa,aAAA;IAAKM,SAAS,EAAE;EAAuB,GAClCb,KAAK,CAACe,KAAK,CAACO,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,kBACzB9B,KAAA,CAAAa,aAAA,CAACV,gBAAgB;IACb4B,GAAG,EAAEF,IAAI,CAACE,GAAI;IACdF,IAAI,EAAEA,IAAK;IACXC,KAAK,EAAEA,KAAM;IACbE,KAAK,EAAE1B,KAAK,CAACe,KAAK,CAACC,MAAO;IAC1BR,KAAK,EAAER,KAAK,CAACQ,KAAM;IACnBmB,SAAS,EAAEzB,QAAQ,EAAEyB,SAAU;IAC/BjB,QAAQ,EAAEV,KAAK,CAACU;EAAS,CAC5B,CACJ,CACA,CAAC;AAEd,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { IFieldVM, IObjectFieldVM, IObjectFieldItemVM } from "../../../../features/formModel/index.js";
|
|
2
|
+
import type { IFieldVM, IObjectFieldVM, IObjectFieldItemVM, LayoutNodeVM } from "../../../../features/formModel/index.js";
|
|
3
3
|
export declare const isObjectFieldVM: (field: IFieldVM) => field is IObjectFieldVM;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Walks a resolved layout sub-tree. Used by dynamic-zone renderers to render
|
|
6
|
+
* a templated object's children via per-template layouts (Phase 8c).
|
|
7
|
+
*/
|
|
8
|
+
export declare const NestedLayout: (({ layout }: {
|
|
9
|
+
layout: LayoutNodeVM[];
|
|
6
10
|
}) => React.JSX.Element) & {
|
|
7
11
|
displayName: string;
|
|
8
12
|
};
|
|
@@ -4,29 +4,25 @@ import { Accordion, Button, IconButton } from "@webiny/admin-ui";
|
|
|
4
4
|
import { ReactComponent as DeleteIcon } from "@webiny/icons/delete_outline.svg";
|
|
5
5
|
import { ReactComponent as ArrowUp } from "@webiny/icons/arrow_upward.svg";
|
|
6
6
|
import { ReactComponent as ArrowDown } from "@webiny/icons/arrow_downward.svg";
|
|
7
|
-
import {
|
|
7
|
+
import { LayoutNodeRenderer } from "../../../../features/formModel/FormView.js";
|
|
8
8
|
import { resolveItemTitle } from "./resolveItemTitle.js";
|
|
9
9
|
export const isObjectFieldVM = field => {
|
|
10
10
|
return field.type === "object";
|
|
11
11
|
};
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Walks a resolved layout sub-tree. Used by dynamic-zone renderers to render
|
|
15
|
+
* a templated object's children via per-template layouts (Phase 8c).
|
|
16
|
+
*/
|
|
17
|
+
export const NestedLayout = observer(({
|
|
18
|
+
layout
|
|
14
19
|
}) => {
|
|
15
|
-
const {
|
|
16
|
-
fieldRenderers
|
|
17
|
-
} = useFormViewRenderers();
|
|
18
20
|
return /*#__PURE__*/React.createElement("div", {
|
|
19
|
-
className: "flex flex-col gap-
|
|
20
|
-
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
return /*#__PURE__*/React.createElement(Renderer, {
|
|
26
|
-
key: childField.name,
|
|
27
|
-
field: childField
|
|
28
|
-
});
|
|
29
|
-
}));
|
|
21
|
+
className: "flex flex-col gap-md"
|
|
22
|
+
}, layout.map((node, index) => /*#__PURE__*/React.createElement(LayoutNodeRenderer, {
|
|
23
|
+
key: index,
|
|
24
|
+
node: node
|
|
25
|
+
})));
|
|
30
26
|
});
|
|
31
27
|
export const ListItemRenderer = observer(({
|
|
32
28
|
item,
|
|
@@ -68,8 +64,8 @@ export const ListItemRenderer = observer(({
|
|
|
68
64
|
title: resolveItemTitle(item, index, label, itemTitle),
|
|
69
65
|
actions: disabled ? null : actions,
|
|
70
66
|
defaultOpen: false
|
|
71
|
-
}, /*#__PURE__*/React.createElement(
|
|
72
|
-
|
|
67
|
+
}, /*#__PURE__*/React.createElement(NestedLayout, {
|
|
68
|
+
layout: item.layout
|
|
73
69
|
})));
|
|
74
70
|
});
|
|
75
71
|
export const AddItemButton = ({
|