@webiny/app-headless-cms 6.0.0-rc.1 → 6.0.0-rc.3

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.
Files changed (177) hide show
  1. package/admin/components/ContentEntries/Header/ButtonRefresh/ButtonRefresh.d.ts +2 -0
  2. package/admin/components/ContentEntries/Header/ButtonRefresh/ButtonRefresh.js +18 -0
  3. package/admin/components/ContentEntries/Header/ButtonRefresh/ButtonRefresh.js.map +1 -0
  4. package/admin/components/ContentEntries/Header/ButtonRefresh/index.d.ts +1 -0
  5. package/admin/components/ContentEntries/Header/ButtonRefresh/index.js +3 -0
  6. package/admin/components/ContentEntries/Header/ButtonRefresh/index.js.map +1 -0
  7. package/admin/components/ContentEntries/Header/Header.js +2 -1
  8. package/admin/components/ContentEntries/Header/Header.js.map +1 -1
  9. package/admin/components/ContentEntries/SidebarContent/SidebarContent.js +1 -1
  10. package/admin/components/ContentEntries/SidebarContent/SidebarContent.js.map +1 -1
  11. package/admin/components/ContentEntries/SidebarHeader/SidebarHeader.js +1 -1
  12. package/admin/components/ContentEntries/SidebarHeader/SidebarHeader.js.map +1 -1
  13. package/admin/components/ContentEntries/Table/Cells/CellLive.d.ts +2 -0
  14. package/admin/components/ContentEntries/Table/Cells/CellLive.js +26 -0
  15. package/admin/components/ContentEntries/Table/Cells/CellLive.js.map +1 -0
  16. package/admin/components/ContentEntries/Table/Cells/index.d.ts +1 -0
  17. package/admin/components/ContentEntries/Table/Cells/index.js +1 -0
  18. package/admin/components/ContentEntries/Table/Cells/index.js.map +1 -1
  19. package/admin/components/ContentModelEditor/ContentModelEditor.js +1 -6
  20. package/admin/components/ContentModelEditor/ContentModelEditor.js.map +1 -1
  21. package/admin/components/ContentModelEditor/ContentModelEditorProvider.d.ts +2 -0
  22. package/admin/components/ContentModelEditor/ContentModelEditorProvider.js +14 -2
  23. package/admin/components/ContentModelEditor/ContentModelEditorProvider.js.map +1 -1
  24. package/admin/components/ContentModelEditor/FieldsSidebar.js +51 -2
  25. package/admin/components/ContentModelEditor/FieldsSidebar.js.map +1 -1
  26. package/admin/components/Droppable.d.ts +1 -1
  27. package/admin/components/Droppable.js.map +1 -1
  28. package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js +3 -3
  29. package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js.map +1 -1
  30. package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.d.ts +10 -0
  31. package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js +69 -0
  32. package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js.map +1 -0
  33. package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js +27 -9
  34. package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js.map +1 -1
  35. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/CannotUsePermissions.d.ts +2 -0
  36. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/CannotUsePermissions.js +14 -0
  37. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/CannotUsePermissions.js.map +1 -0
  38. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/FieldPermissionsSelection.d.ts +15 -0
  39. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/FieldPermissionsSelection.js +131 -0
  40. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/FieldPermissionsSelection.js.map +1 -0
  41. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.d.ts +4 -0
  42. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.js +74 -0
  43. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.js.map +1 -0
  44. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.d.ts +13 -0
  45. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.js +203 -0
  46. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.js.map +1 -0
  47. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.d.ts +1 -0
  48. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js +3 -0
  49. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js.map +1 -0
  50. package/admin/components/FieldEditor/EditFieldDialog.js +13 -56
  51. package/admin/components/FieldEditor/EditFieldDialog.js.map +1 -1
  52. package/admin/components/FieldEditor/EditFieldDialogContainer.d.ts +12 -0
  53. package/admin/components/FieldEditor/EditFieldDialogContainer.js +40 -0
  54. package/admin/components/FieldEditor/EditFieldDialogContainer.js.map +1 -0
  55. package/admin/components/FieldEditor/EditFieldDrawerContainer.d.ts +12 -0
  56. package/admin/components/FieldEditor/EditFieldDrawerContainer.js +40 -0
  57. package/admin/components/FieldEditor/EditFieldDrawerContainer.js.map +1 -0
  58. package/admin/components/FieldEditor/FieldEditor.js +148 -88
  59. package/admin/components/FieldEditor/FieldEditor.js.map +1 -1
  60. package/admin/components/FieldEditor/FieldEditorContext.d.ts +33 -3
  61. package/admin/components/FieldEditor/FieldEditorContext.js +225 -6
  62. package/admin/components/FieldEditor/FieldEditorContext.js.map +1 -1
  63. package/admin/components/FieldEditor/LayoutCell.d.ts +9 -0
  64. package/admin/components/FieldEditor/LayoutCell.js +33 -0
  65. package/admin/components/FieldEditor/LayoutCell.js.map +1 -0
  66. package/admin/components/FieldEditor/utils/deleteField.js +12 -4
  67. package/admin/components/FieldEditor/utils/deleteField.js.map +1 -1
  68. package/admin/components/FieldEditor/utils/getFieldPosition.js +6 -1
  69. package/admin/components/FieldEditor/utils/getFieldPosition.js.map +1 -1
  70. package/admin/graphql/contentModels.d.ts +2 -2
  71. package/admin/graphql/contentModels.js +7 -0
  72. package/admin/graphql/contentModels.js.map +1 -1
  73. package/admin/hooks/useModelFieldGraphqlContext.d.ts +1 -0
  74. package/admin/plugins/fieldRenderers/DynamicSection.d.ts +2 -1
  75. package/admin/plugins/fieldRenderers/DynamicSection.js +3 -1
  76. package/admin/plugins/fieldRenderers/DynamicSection.js.map +1 -1
  77. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js +7 -1
  78. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js.map +1 -1
  79. package/admin/plugins/fieldRenderers/checkboxes.js +7 -1
  80. package/admin/plugins/fieldRenderers/checkboxes.js.map +1 -1
  81. package/admin/plugins/fieldRenderers/dateTime/Input.js +9 -2
  82. package/admin/plugins/fieldRenderers/dateTime/Input.js.map +1 -1
  83. package/admin/plugins/fieldRenderers/dateTime/Select.js +7 -0
  84. package/admin/plugins/fieldRenderers/dateTime/Select.js.map +1 -1
  85. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.d.ts +1 -0
  86. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js +9 -5
  87. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js.map +1 -1
  88. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.d.ts +2 -1
  89. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js +18 -10
  90. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js.map +1 -1
  91. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js +13 -4
  92. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js.map +1 -1
  93. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js +10 -4
  94. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js.map +1 -1
  95. package/admin/plugins/fieldRenderers/longText/longText.js +7 -1
  96. package/admin/plugins/fieldRenderers/longText/longText.js.map +1 -1
  97. package/admin/plugins/fieldRenderers/longText/longTexts.js +12 -3
  98. package/admin/plugins/fieldRenderers/longText/longTexts.js.map +1 -1
  99. package/admin/plugins/fieldRenderers/number/numberInput.js +7 -1
  100. package/admin/plugins/fieldRenderers/number/numberInput.js.map +1 -1
  101. package/admin/plugins/fieldRenderers/number/numberInputs.js +11 -3
  102. package/admin/plugins/fieldRenderers/number/numberInputs.js.map +1 -1
  103. package/admin/plugins/fieldRenderers/object/FieldSettings.d.ts +2 -1
  104. package/admin/plugins/fieldRenderers/object/MultiValueContainer.js +5 -0
  105. package/admin/plugins/fieldRenderers/object/MultiValueContainer.js.map +1 -1
  106. package/admin/plugins/fieldRenderers/object/MultiValueItemContainer.d.ts +1 -0
  107. package/admin/plugins/fieldRenderers/object/MultiValueItemContainer.js +3 -2
  108. package/admin/plugins/fieldRenderers/object/MultiValueItemContainer.js.map +1 -1
  109. package/admin/plugins/fieldRenderers/radioButtons.js +7 -1
  110. package/admin/plugins/fieldRenderers/radioButtons.js.map +1 -1
  111. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js +15 -7
  112. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js.map +1 -1
  113. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js +14 -7
  114. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js.map +1 -1
  115. package/admin/plugins/fieldRenderers/ref/advanced/components/Entry.d.ts +3 -1
  116. package/admin/plugins/fieldRenderers/ref/advanced/components/Entry.js +7 -6
  117. package/admin/plugins/fieldRenderers/ref/advanced/components/Entry.js.map +1 -1
  118. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.d.ts +1 -1
  119. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js +9 -3
  120. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
  121. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.d.ts +1 -1
  122. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js +9 -3
  123. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js.map +1 -1
  124. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js +7 -1
  125. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js.map +1 -1
  126. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js +7 -1
  127. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js.map +1 -1
  128. package/admin/plugins/fieldRenderers/select.js +7 -1
  129. package/admin/plugins/fieldRenderers/select.js.map +1 -1
  130. package/admin/plugins/fieldRenderers/text/tags.js +7 -1
  131. package/admin/plugins/fieldRenderers/text/tags.js.map +1 -1
  132. package/admin/plugins/fieldRenderers/text/textInput.js +7 -1
  133. package/admin/plugins/fieldRenderers/text/textInput.js.map +1 -1
  134. package/admin/plugins/fieldRenderers/text/textInputs.js +12 -3
  135. package/admin/plugins/fieldRenderers/text/textInputs.js.map +1 -1
  136. package/admin/plugins/fields/ui/TabsLayoutEditor.d.ts +9 -0
  137. package/admin/plugins/fields/ui/TabsLayoutEditor.js +470 -0
  138. package/admin/plugins/fields/ui/TabsLayoutEditor.js.map +1 -0
  139. package/admin/plugins/fields/ui/alert.d.ts +2 -2
  140. package/admin/plugins/fields/ui/alert.js +144 -17
  141. package/admin/plugins/fields/ui/alert.js.map +1 -1
  142. package/admin/plugins/fields/ui/index.d.ts +1 -0
  143. package/admin/plugins/fields/ui/index.js +1 -0
  144. package/admin/plugins/fields/ui/index.js.map +1 -1
  145. package/admin/plugins/fields/ui/separator.d.ts +2 -2
  146. package/admin/plugins/fields/ui/separator.js +131 -17
  147. package/admin/plugins/fields/ui/separator.js.map +1 -1
  148. package/admin/plugins/fields/ui/tabs.d.ts +2 -0
  149. package/admin/plugins/fields/ui/tabs.js +89 -0
  150. package/admin/plugins/fields/ui/tabs.js.map +1 -0
  151. package/admin/plugins/index.d.ts +1 -0
  152. package/admin/views/contentEntries/ContentEntriesModule.js +6 -1
  153. package/admin/views/contentEntries/ContentEntriesModule.js.map +1 -1
  154. package/admin/views/contentEntries/hooks/useContentEntriesList.d.ts +1 -0
  155. package/admin/views/contentEntries/hooks/useContentEntriesList.js +8 -4
  156. package/admin/views/contentEntries/hooks/useContentEntriesList.js.map +1 -1
  157. package/admin/views/contentModels/importing/graphql.d.ts +2 -2
  158. package/admin/views/contentModels/importing/graphql.js.map +1 -1
  159. package/allPlugins.d.ts +2 -1
  160. package/allPlugins.js +2 -3
  161. package/allPlugins.js.map +1 -1
  162. package/exports/admin/cms/model.d.ts +1 -0
  163. package/exports/admin/cms/model.js +3 -0
  164. package/exports/admin/cms/model.js.map +1 -0
  165. package/package.json +24 -24
  166. package/types.d.ts +1 -0
  167. package/types.js +5 -1
  168. package/types.js.map +1 -1
  169. package/admin/plugins/fieldRenderers/ui/alert.d.ts +0 -2
  170. package/admin/plugins/fieldRenderers/ui/alert.js +0 -32
  171. package/admin/plugins/fieldRenderers/ui/alert.js.map +0 -1
  172. package/admin/plugins/fieldRenderers/ui/index.d.ts +0 -2
  173. package/admin/plugins/fieldRenderers/ui/index.js +0 -4
  174. package/admin/plugins/fieldRenderers/ui/index.js.map +0 -1
  175. package/admin/plugins/fieldRenderers/ui/separator.d.ts +0 -2
  176. package/admin/plugins/fieldRenderers/ui/separator.js +0 -31
  177. package/admin/plugins/fieldRenderers/ui/separator.js.map +0 -1
@@ -13,6 +13,7 @@ export interface DynamicSectionPropsChildrenParams {
13
13
  export interface DynamicSectionProps {
14
14
  field: CmsModelField;
15
15
  getBind: GetBindCallable;
16
+ disabled?: boolean;
16
17
  showLabel?: boolean;
17
18
  children: (params: DynamicSectionPropsChildrenParams) => JSX.Element;
18
19
  emptyValue?: any;
@@ -20,5 +21,5 @@ export interface DynamicSectionProps {
20
21
  onAddItem?: (index: number) => void;
21
22
  addValueButtonLabel?: string;
22
23
  }
23
- declare const DynamicSection: ({ field, getBind, children, showLabel, emptyValue, onAddItem, gridClassName, ...props }: DynamicSectionProps) => React.JSX.Element;
24
+ declare const DynamicSection: ({ field, getBind, children, disabled, showLabel, emptyValue, onAddItem, gridClassName, ...props }: DynamicSectionProps) => React.JSX.Element;
24
25
  export default DynamicSection;
@@ -15,7 +15,7 @@ const style = {
15
15
  styles: "padding:0!important"
16
16
  } : {
17
17
  name: "56q6jo-gridContainer",
18
- styles: "padding:0!important;label:gridContainer;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR5bmFtaWNTZWN0aW9uLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1QnNCIiwiZmlsZSI6IkR5bmFtaWNTZWN0aW9uLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc1NldCBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSBcIkBlbW90aW9uL2Nzc1wiO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gXCJAd2ViaW55L2FwcC9pMThuL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBSZWFjdENvbXBvbmVudCBhcyBBZGRJY29uIH0gZnJvbSBcIkB3ZWJpbnkvaWNvbnMvYWRkLnN2Z1wiO1xuaW1wb3J0IHR5cGUgeyBHZXRCaW5kQ2FsbGFibGUgfSBmcm9tIFwifi9hZG1pbi9jb21wb25lbnRzL0NvbnRlbnRFbnRyeUZvcm0vdXNlQmluZC5qc1wiO1xuaW1wb3J0IHsgUGFyZW50RmllbGRQcm92aWRlciB9IGZyb20gXCJ+L2FkbWluL2hvb2tzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBQYXJlbnRWYWx1ZUluZGV4UHJvdmlkZXIgfSBmcm9tIFwifi9hZG1pbi9jb21wb25lbnRzL01vZGVsRmllbGRQcm92aWRlci9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kQ29tcG9uZW50LCBCaW5kQ29tcG9uZW50UmVuZGVyUHJvcCwgQ21zTW9kZWxGaWVsZCB9IGZyb20gXCJ+L3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBnZXRNdWx0aVZhbHVlUmVuZGVyZXJTZXR0aW5ncyB9IGZyb20gXCJ+L2FkbWluL3BsdWdpbnMvZmllbGRSZW5kZXJlcnMvTXVsdGlWYWx1ZVJlbmRlcmVyU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7XG4gICAgQnV0dG9uLFxuICAgIGNuLFxuICAgIEZvcm1Db21wb25lbnREZXNjcmlwdGlvbixcbiAgICBGb3JtQ29tcG9uZW50RXJyb3JNZXNzYWdlLFxuICAgIEZvcm1Db21wb25lbnROb3RlLFxuICAgIEdyaWQsXG4gICAgU2VwYXJhdG9yXG59IGZyb20gXCJAd2ViaW55L2FkbWluLXVpXCI7XG5cbmNvbnN0IHQgPSBpMThuLm5zKFwiYXBwLWhlYWRsZXNzLWNtcy9hZG1pbi9maWVsZHMvdGV4dFwiKTtcblxuY29uc3Qgc3R5bGUgPSB7XG4gICAgZ3JpZENvbnRhaW5lcjogY3NzYFxuICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgYFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljU2VjdGlvblByb3BzQ2hpbGRyZW5QYXJhbXMge1xuICAgIEJpbmQ6IEJpbmRDb21wb25lbnQ7XG4gICAgZmllbGQ6IENtc01vZGVsRmllbGQ7XG4gICAgYmluZDoge1xuICAgICAgICBpbmRleDogQmluZENvbXBvbmVudFJlbmRlclByb3A7XG4gICAgICAgIGZpZWxkOiBCaW5kQ29tcG9uZW50UmVuZGVyUHJvcDtcbiAgICB9O1xuICAgIGluZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY1NlY3Rpb25Qcm9wcyB7XG4gICAgZmllbGQ6IENtc01vZGVsRmllbGQ7XG4gICAgZ2V0QmluZDogR2V0QmluZENhbGxhYmxlO1xuICAgIHNob3dMYWJlbD86IGJvb2xlYW47XG4gICAgY2hpbGRyZW46IChwYXJhbXM6IER5bmFtaWNTZWN0aW9uUHJvcHNDaGlsZHJlblBhcmFtcykgPT4gSlNYLkVsZW1lbnQ7XG4gICAgZW1wdHlWYWx1ZT86IGFueTtcbiAgICBncmlkQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIG9uQWRkSXRlbT86IChpbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuICAgIGFkZFZhbHVlQnV0dG9uTGFiZWw/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGRlZmF1bHRBZGRJdGVtID0gKCkgPT4ge1xuICAgIC8vIE5vIG9wLlxufTtcblxuY29uc3QgRHluYW1pY1NlY3Rpb24gPSAoe1xuICAgIGZpZWxkLFxuICAgIGdldEJpbmQsXG4gICAgY2hpbGRyZW4sXG4gICAgc2hvd0xhYmVsID0gdHJ1ZSxcbiAgICBlbXB0eVZhbHVlID0gXCJcIixcbiAgICBvbkFkZEl0ZW0gPSBkZWZhdWx0QWRkSXRlbSxcbiAgICBncmlkQ2xhc3NOYW1lLFxuICAgIC4uLnByb3BzXG59OiBEeW5hbWljU2VjdGlvblByb3BzKSA9PiB7XG4gICAgY29uc3QgQmluZCA9IGdldEJpbmQoKTtcblxuICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0TXVsdGlWYWx1ZVJlbmRlcmVyU2V0dGluZ3MoZmllbGQpO1xuICAgIGNvbnN0IGFkZFZhbHVlQnV0dG9uTGFiZWwgPVxuICAgICAgICBwcm9wcy5hZGRWYWx1ZUJ1dHRvbkxhYmVsID8/IHNldHRpbmdzLmFkZFZhbHVlQnV0dG9uTGFiZWwgPz8gXCJBZGQgVmFsdWVcIjtcblxuICAgIHJldHVybiAoXG4gICAgICAgIC8qIEZpcnN0IHdlIG1vdW50IHRoZSB0b3AgbGV2ZWwgZmllbGQsIGZvciBleGFtcGxlOiBcIml0ZW1zXCIgKi9cbiAgICAgICAgPEJpbmQ+XG4gICAgICAgICAgICB7YmluZEZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBcInZhbHVlXCIgLT4gYW4gYXJyYXkgb2YgaXRlbXNcbiAgICAgICAgICAgICAgICAgKiBcImFwcGVuZFZhbHVlXCIgLT4gYSBjYWxsYmFjayB0byBhZGQgYSBuZXcgdmFsdWUgdG8gdGhlIHRvcCBsZXZlbCBcIml0ZW1zXCIgYXJyYXlcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbHVlLCBhcHBlbmRWYWx1ZSB9ID0gYmluZEZpZWxkO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYmluZEZpZWxkVmFsdWU6IHN0cmluZ1tdID0gdmFsdWUgfHwgW107XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8QmluZC5WYWxpZGF0aW9uQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBhcmVudEZpZWxkUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfSBwYXRoPXtCaW5kLnBhcmVudE5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzaG93TGFiZWwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJtYi1zbSBmbGV4IGZsZXgtY29sIGdhcC15LXNtXCJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlcGFyYXRvciBsYWJlbFBvc2l0aW9uPXtcInN0YXJ0XCJ9IHZhcmlhbnQ9e1wiYWNjZW50XCJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XCJ0ZXh0LWFjY2VudC1wcmltYXJ5IHRleHQtbGcgZm9udC1zZW1pYm9sZFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Ake2ZpZWxkLmxhYmVsfSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZEZpZWxkVmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgKCR7YmluZEZpZWxkVmFsdWUubGVuZ3RofSlgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VwYXJhdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZpZWxkLmRlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUNvbXBvbmVudERlc2NyaXB0aW9uIHRleHQ9e2ZpZWxkLmRlc2NyaXB0aW9ufSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9e2NsYXNzU2V0KGdyaWRDbGFzc05hbWUsIHN0eWxlLmdyaWRDb250YWluZXIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtiaW5kRmllbGRWYWx1ZS5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmluZEZpZWxkID0gZ2V0QmluZChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQuQ29sdW1uIHNwYW49ezEyfSBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCaW5kRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2JpbmRQcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCaW5kRmllbGQuVmFsaWRhdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQYXJlbnRWYWx1ZUluZGV4UHJvdmlkZXIgaW5kZXg9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaW5kOiBCaW5kRmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogYmluZFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGJpbmRGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9QYXJlbnRWYWx1ZUluZGV4UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUNvbXBvbmVudE5vdGUgdGV4dD17ZmllbGQubm90ZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CaW5kRmllbGQuVmFsaWRhdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CaW5kRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtiaW5kRmllbGQudmFsaWRhdGlvbi5pc1ZhbGlkID09PSBmYWxzZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQuQ29sdW1uIHNwYW49ezEyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1Db21wb25lbnRFcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9e2JpbmRGaWVsZC52YWxpZGF0aW9uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkLkNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW4gc3Bhbj17MTJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRGaWVsZFZhbHVlLmxlbmd0aCA+IDAgPyBcInB0LW5vbmVcIiA6IFwicHQtc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PXtcInRlcnRpYXJ5XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxBZGRJY29uIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PXt0KGFkZFZhbHVlQnV0dG9uTGFiZWwpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRWYWx1ZShlbXB0eVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkSXRlbShiaW5kRmllbGRWYWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkLkNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1BhcmVudEZpZWxkUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvQmluZC5WYWxpZGF0aW9uQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9fVxuICAgICAgICA8L0JpbmQ+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IER5bmFtaWNTZWN0aW9uO1xuIl19 */",
18
+ styles: "padding:0!important;label:gridContainer;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR5bmFtaWNTZWN0aW9uLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1QnNCIiwiZmlsZSI6IkR5bmFtaWNTZWN0aW9uLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc1NldCBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSBcIkBlbW90aW9uL2Nzc1wiO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gXCJAd2ViaW55L2FwcC9pMThuL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBSZWFjdENvbXBvbmVudCBhcyBBZGRJY29uIH0gZnJvbSBcIkB3ZWJpbnkvaWNvbnMvYWRkLnN2Z1wiO1xuaW1wb3J0IHR5cGUgeyBHZXRCaW5kQ2FsbGFibGUgfSBmcm9tIFwifi9hZG1pbi9jb21wb25lbnRzL0NvbnRlbnRFbnRyeUZvcm0vdXNlQmluZC5qc1wiO1xuaW1wb3J0IHsgUGFyZW50RmllbGRQcm92aWRlciB9IGZyb20gXCJ+L2FkbWluL2hvb2tzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBQYXJlbnRWYWx1ZUluZGV4UHJvdmlkZXIgfSBmcm9tIFwifi9hZG1pbi9jb21wb25lbnRzL01vZGVsRmllbGRQcm92aWRlci9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kQ29tcG9uZW50LCBCaW5kQ29tcG9uZW50UmVuZGVyUHJvcCwgQ21zTW9kZWxGaWVsZCB9IGZyb20gXCJ+L3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBnZXRNdWx0aVZhbHVlUmVuZGVyZXJTZXR0aW5ncyB9IGZyb20gXCJ+L2FkbWluL3BsdWdpbnMvZmllbGRSZW5kZXJlcnMvTXVsdGlWYWx1ZVJlbmRlcmVyU2V0dGluZ3MuanNcIjtcbmltcG9ydCB7XG4gICAgQnV0dG9uLFxuICAgIGNuLFxuICAgIEZvcm1Db21wb25lbnREZXNjcmlwdGlvbixcbiAgICBGb3JtQ29tcG9uZW50RXJyb3JNZXNzYWdlLFxuICAgIEZvcm1Db21wb25lbnROb3RlLFxuICAgIEdyaWQsXG4gICAgU2VwYXJhdG9yXG59IGZyb20gXCJAd2ViaW55L2FkbWluLXVpXCI7XG5cbmNvbnN0IHQgPSBpMThuLm5zKFwiYXBwLWhlYWRsZXNzLWNtcy9hZG1pbi9maWVsZHMvdGV4dFwiKTtcblxuY29uc3Qgc3R5bGUgPSB7XG4gICAgZ3JpZENvbnRhaW5lcjogY3NzYFxuICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgYFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljU2VjdGlvblByb3BzQ2hpbGRyZW5QYXJhbXMge1xuICAgIEJpbmQ6IEJpbmRDb21wb25lbnQ7XG4gICAgZmllbGQ6IENtc01vZGVsRmllbGQ7XG4gICAgYmluZDoge1xuICAgICAgICBpbmRleDogQmluZENvbXBvbmVudFJlbmRlclByb3A7XG4gICAgICAgIGZpZWxkOiBCaW5kQ29tcG9uZW50UmVuZGVyUHJvcDtcbiAgICB9O1xuICAgIGluZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY1NlY3Rpb25Qcm9wcyB7XG4gICAgZmllbGQ6IENtc01vZGVsRmllbGQ7XG4gICAgZ2V0QmluZDogR2V0QmluZENhbGxhYmxlO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICBzaG93TGFiZWw/OiBib29sZWFuO1xuICAgIGNoaWxkcmVuOiAocGFyYW1zOiBEeW5hbWljU2VjdGlvblByb3BzQ2hpbGRyZW5QYXJhbXMpID0+IEpTWC5FbGVtZW50O1xuICAgIGVtcHR5VmFsdWU/OiBhbnk7XG4gICAgZ3JpZENsYXNzTmFtZT86IHN0cmluZztcbiAgICBvbkFkZEl0ZW0/OiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgICBhZGRWYWx1ZUJ1dHRvbkxhYmVsPzogc3RyaW5nO1xufVxuXG5jb25zdCBkZWZhdWx0QWRkSXRlbSA9ICgpID0+IHtcbiAgICAvLyBObyBvcC5cbn07XG5cbmNvbnN0IER5bmFtaWNTZWN0aW9uID0gKHtcbiAgICBmaWVsZCxcbiAgICBnZXRCaW5kLFxuICAgIGNoaWxkcmVuLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgc2hvd0xhYmVsID0gdHJ1ZSxcbiAgICBlbXB0eVZhbHVlID0gXCJcIixcbiAgICBvbkFkZEl0ZW0gPSBkZWZhdWx0QWRkSXRlbSxcbiAgICBncmlkQ2xhc3NOYW1lLFxuICAgIC4uLnByb3BzXG59OiBEeW5hbWljU2VjdGlvblByb3BzKSA9PiB7XG4gICAgY29uc3QgQmluZCA9IGdldEJpbmQoKTtcblxuICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0TXVsdGlWYWx1ZVJlbmRlcmVyU2V0dGluZ3MoZmllbGQpO1xuICAgIGNvbnN0IGFkZFZhbHVlQnV0dG9uTGFiZWwgPVxuICAgICAgICBwcm9wcy5hZGRWYWx1ZUJ1dHRvbkxhYmVsID8/IHNldHRpbmdzLmFkZFZhbHVlQnV0dG9uTGFiZWwgPz8gXCJBZGQgVmFsdWVcIjtcblxuICAgIHJldHVybiAoXG4gICAgICAgIC8qIEZpcnN0IHdlIG1vdW50IHRoZSB0b3AgbGV2ZWwgZmllbGQsIGZvciBleGFtcGxlOiBcIml0ZW1zXCIgKi9cbiAgICAgICAgPEJpbmQ+XG4gICAgICAgICAgICB7YmluZEZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBcInZhbHVlXCIgLT4gYW4gYXJyYXkgb2YgaXRlbXNcbiAgICAgICAgICAgICAgICAgKiBcImFwcGVuZFZhbHVlXCIgLT4gYSBjYWxsYmFjayB0byBhZGQgYSBuZXcgdmFsdWUgdG8gdGhlIHRvcCBsZXZlbCBcIml0ZW1zXCIgYXJyYXlcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbHVlLCBhcHBlbmRWYWx1ZSB9ID0gYmluZEZpZWxkO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYmluZEZpZWxkVmFsdWU6IHN0cmluZ1tdID0gdmFsdWUgfHwgW107XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8QmluZC5WYWxpZGF0aW9uQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBhcmVudEZpZWxkUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfSBwYXRoPXtCaW5kLnBhcmVudE5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzaG93TGFiZWwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJtYi1zbSBmbGV4IGZsZXgtY29sIGdhcC15LXNtXCJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlcGFyYXRvciBsYWJlbFBvc2l0aW9uPXtcInN0YXJ0XCJ9IHZhcmlhbnQ9e1wiYWNjZW50XCJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XCJ0ZXh0LWFjY2VudC1wcmltYXJ5IHRleHQtbGcgZm9udC1zZW1pYm9sZFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Ake2ZpZWxkLmxhYmVsfSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZEZpZWxkVmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgKCR7YmluZEZpZWxkVmFsdWUubGVuZ3RofSlgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VwYXJhdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZpZWxkLmRlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUNvbXBvbmVudERlc2NyaXB0aW9uIHRleHQ9e2ZpZWxkLmRlc2NyaXB0aW9ufSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R3JpZCBjbGFzc05hbWU9e2NsYXNzU2V0KGdyaWRDbGFzc05hbWUsIHN0eWxlLmdyaWRDb250YWluZXIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtiaW5kRmllbGRWYWx1ZS5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmluZEZpZWxkID0gZ2V0QmluZChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQuQ29sdW1uIHNwYW49ezEyfSBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCaW5kRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2JpbmRQcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCaW5kRmllbGQuVmFsaWRhdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQYXJlbnRWYWx1ZUluZGV4UHJvdmlkZXIgaW5kZXg9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaW5kOiBCaW5kRmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogYmluZFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGJpbmRGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9QYXJlbnRWYWx1ZUluZGV4UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUNvbXBvbmVudE5vdGUgdGV4dD17ZmllbGQubm90ZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CaW5kRmllbGQuVmFsaWRhdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CaW5kRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtiaW5kRmllbGQudmFsaWRhdGlvbi5pc1ZhbGlkID09PSBmYWxzZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQuQ29sdW1uIHNwYW49ezEyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1Db21wb25lbnRFcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9e2JpbmRGaWVsZC52YWxpZGF0aW9uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkLkNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW4gc3Bhbj17MTJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRGaWVsZFZhbHVlLmxlbmd0aCA+IDAgPyBcInB0LW5vbmVcIiA6IFwicHQtc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD17XCJ0ZXJ0aWFyeVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PEFkZEljb24gLz59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PXt0KGFkZFZhbHVlQnV0dG9uTGFiZWwpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFZhbHVlKGVtcHR5VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkSXRlbShiaW5kRmllbGRWYWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1BhcmVudEZpZWxkUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvQmluZC5WYWxpZGF0aW9uQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9fVxuICAgICAgICA8L0JpbmQ+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IER5bmFtaWNTZWN0aW9uO1xuIl19 */",
19
19
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
20
20
  })
21
21
  };
@@ -26,6 +26,7 @@ const DynamicSection = ({
26
26
  field,
27
27
  getBind,
28
28
  children,
29
+ disabled = false,
29
30
  showLabel = true,
30
31
  emptyValue = "",
31
32
  onAddItem = defaultAddItem,
@@ -87,6 +88,7 @@ const DynamicSection = ({
87
88
  }, /*#__PURE__*/React.createElement("div", {
88
89
  className: cn(bindFieldValue.length > 0 ? "pt-none" : "pt-sm")
89
90
  }, /*#__PURE__*/React.createElement(Button, {
91
+ disabled: disabled,
90
92
  variant: "tertiary",
91
93
  icon: /*#__PURE__*/React.createElement(AddIcon, null),
92
94
  text: t(addValueButtonLabel),
@@ -1 +1 @@
1
- {"version":3,"names":["React","classSet","css","i18n","ReactComponent","AddIcon","ParentFieldProvider","ParentValueIndexProvider","getMultiValueRendererSettings","Button","cn","FormComponentDescription","FormComponentErrorMessage","FormComponentNote","Grid","Separator","t","ns","style","gridContainer","process","env","NODE_ENV","name","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","defaultAddItem","DynamicSection","field","getBind","children","showLabel","emptyValue","onAddItem","gridClassName","props","Bind","settings","addValueButtonLabel","createElement","bindField","value","appendValue","bindFieldValue","ValidationContainer","path","parentName","className","labelPosition","variant","label","length","description","text","Fragment","map","_","index","BindField","Column","span","key","bindProps","bind","note","validation","isValid","invalid","message","icon","onClick"],"sources":["DynamicSection.tsx"],"sourcesContent":["import React from \"react\";\nimport classSet from \"classnames\";\nimport { css } from \"@emotion/css\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport type { GetBindCallable } from \"~/admin/components/ContentEntryForm/useBind.js\";\nimport { ParentFieldProvider } from \"~/admin/hooks/index.js\";\nimport { ParentValueIndexProvider } from \"~/admin/components/ModelFieldProvider/index.js\";\nimport type { BindComponent, BindComponentRenderProp, CmsModelField } from \"~/types.js\";\nimport { getMultiValueRendererSettings } from \"~/admin/plugins/fieldRenderers/MultiValueRendererSettings.js\";\nimport {\n Button,\n cn,\n FormComponentDescription,\n FormComponentErrorMessage,\n FormComponentNote,\n Grid,\n Separator\n} from \"@webiny/admin-ui\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst style = {\n gridContainer: css`\n padding: 0 !important;\n `\n};\n\nexport interface DynamicSectionPropsChildrenParams {\n Bind: BindComponent;\n field: CmsModelField;\n bind: {\n index: BindComponentRenderProp;\n field: BindComponentRenderProp;\n };\n index: number;\n}\n\nexport interface DynamicSectionProps {\n field: CmsModelField;\n getBind: GetBindCallable;\n showLabel?: boolean;\n children: (params: DynamicSectionPropsChildrenParams) => JSX.Element;\n emptyValue?: any;\n gridClassName?: string;\n onAddItem?: (index: number) => void;\n addValueButtonLabel?: string;\n}\n\nconst defaultAddItem = () => {\n // No op.\n};\n\nconst DynamicSection = ({\n field,\n getBind,\n children,\n showLabel = true,\n emptyValue = \"\",\n onAddItem = defaultAddItem,\n gridClassName,\n ...props\n}: DynamicSectionProps) => {\n const Bind = getBind();\n\n const settings = getMultiValueRendererSettings(field);\n const addValueButtonLabel =\n props.addValueButtonLabel ?? settings.addValueButtonLabel ?? \"Add Value\";\n\n return (\n /* First we mount the top level field, for example: \"items\" */\n <Bind>\n {bindField => {\n /**\n * \"value\" -> an array of items\n * \"appendValue\" -> a callback to add a new value to the top level \"items\" array\n */\n const { value, appendValue } = bindField;\n\n const bindFieldValue: string[] = value || [];\n\n return (\n <Bind.ValidationContainer>\n <ParentFieldProvider value={value} path={Bind.parentName}>\n {showLabel && (\n <div className={\"mb-sm flex flex-col gap-y-sm\"}>\n <Separator labelPosition={\"start\"} variant={\"accent\"}>\n <span\n className={\"text-accent-primary text-lg font-semibold\"}\n >\n {`${field.label} ${\n bindFieldValue.length\n ? `(${bindFieldValue.length})`\n : \"\"\n }`}\n </span>\n </Separator>\n {field.description && (\n <FormComponentDescription text={field.description} />\n )}\n </div>\n )}\n <Grid className={classSet(gridClassName, style.gridContainer)}>\n <>\n {bindFieldValue.map((_, index) => {\n const BindField = getBind(index);\n return (\n <Grid.Column span={12} key={index}>\n <BindField>\n {bindProps => (\n <BindField.ValidationContainer>\n <ParentValueIndexProvider index={index}>\n {children({\n Bind: BindField,\n field,\n bind: {\n index: bindProps,\n field: bindField\n },\n index\n })}\n </ParentValueIndexProvider>\n <FormComponentNote text={field.note} />\n </BindField.ValidationContainer>\n )}\n </BindField>\n </Grid.Column>\n );\n })}\n </>\n <>\n {bindField.validation.isValid === false && (\n <Grid.Column span={12}>\n <FormComponentErrorMessage\n invalid\n text={bindField.validation.message}\n />\n </Grid.Column>\n )}\n </>\n <Grid.Column span={12}>\n <div\n className={cn(\n bindFieldValue.length > 0 ? \"pt-none\" : \"pt-sm\"\n )}\n >\n <Button\n variant={\"tertiary\"}\n icon={<AddIcon />}\n text={t(addValueButtonLabel)}\n onClick={() => {\n appendValue(emptyValue);\n onAddItem(bindFieldValue.length);\n }}\n />\n </div>\n </Grid.Column>\n </Grid>\n </ParentFieldProvider>\n </Bind.ValidationContainer>\n );\n }}\n </Bind>\n );\n};\n\nexport default DynamicSection;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","classSet","css","i18n","ReactComponent","AddIcon","ParentFieldProvider","ParentValueIndexProvider","getMultiValueRendererSettings","Button","cn","FormComponentDescription","FormComponentErrorMessage","FormComponentNote","Grid","Separator","t","ns","style","gridContainer","process","env","NODE_ENV","name","styles","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","defaultAddItem","DynamicSection","field","getBind","children","disabled","showLabel","emptyValue","onAddItem","gridClassName","props","Bind","settings","addValueButtonLabel","createElement","bindField","value","appendValue","bindFieldValue","ValidationContainer","path","parentName","className","labelPosition","variant","label","length","description","text","Fragment","map","_","index","BindField","Column","span","key","bindProps","bind","note","validation","isValid","invalid","message","icon","onClick"],"sources":["DynamicSection.tsx"],"sourcesContent":["import React from \"react\";\nimport classSet from \"classnames\";\nimport { css } from \"@emotion/css\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport type { GetBindCallable } from \"~/admin/components/ContentEntryForm/useBind.js\";\nimport { ParentFieldProvider } from \"~/admin/hooks/index.js\";\nimport { ParentValueIndexProvider } from \"~/admin/components/ModelFieldProvider/index.js\";\nimport type { BindComponent, BindComponentRenderProp, CmsModelField } from \"~/types.js\";\nimport { getMultiValueRendererSettings } from \"~/admin/plugins/fieldRenderers/MultiValueRendererSettings.js\";\nimport {\n Button,\n cn,\n FormComponentDescription,\n FormComponentErrorMessage,\n FormComponentNote,\n Grid,\n Separator\n} from \"@webiny/admin-ui\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst style = {\n gridContainer: css`\n padding: 0 !important;\n `\n};\n\nexport interface DynamicSectionPropsChildrenParams {\n Bind: BindComponent;\n field: CmsModelField;\n bind: {\n index: BindComponentRenderProp;\n field: BindComponentRenderProp;\n };\n index: number;\n}\n\nexport interface DynamicSectionProps {\n field: CmsModelField;\n getBind: GetBindCallable;\n disabled?: boolean;\n showLabel?: boolean;\n children: (params: DynamicSectionPropsChildrenParams) => JSX.Element;\n emptyValue?: any;\n gridClassName?: string;\n onAddItem?: (index: number) => void;\n addValueButtonLabel?: string;\n}\n\nconst defaultAddItem = () => {\n // No op.\n};\n\nconst DynamicSection = ({\n field,\n getBind,\n children,\n disabled = false,\n showLabel = true,\n emptyValue = \"\",\n onAddItem = defaultAddItem,\n gridClassName,\n ...props\n}: DynamicSectionProps) => {\n const Bind = getBind();\n\n const settings = getMultiValueRendererSettings(field);\n const addValueButtonLabel =\n props.addValueButtonLabel ?? settings.addValueButtonLabel ?? \"Add Value\";\n\n return (\n /* First we mount the top level field, for example: \"items\" */\n <Bind>\n {bindField => {\n /**\n * \"value\" -> an array of items\n * \"appendValue\" -> a callback to add a new value to the top level \"items\" array\n */\n const { value, appendValue } = bindField;\n\n const bindFieldValue: string[] = value || [];\n\n return (\n <Bind.ValidationContainer>\n <ParentFieldProvider value={value} path={Bind.parentName}>\n {showLabel && (\n <div className={\"mb-sm flex flex-col gap-y-sm\"}>\n <Separator labelPosition={\"start\"} variant={\"accent\"}>\n <span\n className={\"text-accent-primary text-lg font-semibold\"}\n >\n {`${field.label} ${\n bindFieldValue.length\n ? `(${bindFieldValue.length})`\n : \"\"\n }`}\n </span>\n </Separator>\n {field.description && (\n <FormComponentDescription text={field.description} />\n )}\n </div>\n )}\n <Grid className={classSet(gridClassName, style.gridContainer)}>\n <>\n {bindFieldValue.map((_, index) => {\n const BindField = getBind(index);\n return (\n <Grid.Column span={12} key={index}>\n <BindField>\n {bindProps => (\n <BindField.ValidationContainer>\n <ParentValueIndexProvider index={index}>\n {children({\n Bind: BindField,\n field,\n bind: {\n index: bindProps,\n field: bindField\n },\n index\n })}\n </ParentValueIndexProvider>\n <FormComponentNote text={field.note} />\n </BindField.ValidationContainer>\n )}\n </BindField>\n </Grid.Column>\n );\n })}\n </>\n <>\n {bindField.validation.isValid === false && (\n <Grid.Column span={12}>\n <FormComponentErrorMessage\n invalid\n text={bindField.validation.message}\n />\n </Grid.Column>\n )}\n </>\n {\n <Grid.Column span={12}>\n <div\n className={cn(\n bindFieldValue.length > 0 ? \"pt-none\" : \"pt-sm\"\n )}\n >\n <Button\n disabled={disabled}\n variant={\"tertiary\"}\n icon={<AddIcon />}\n text={t(addValueButtonLabel)}\n onClick={() => {\n appendValue(emptyValue);\n onAddItem(bindFieldValue.length);\n }}\n />\n </div>\n </Grid.Column>\n }\n </Grid>\n </ParentFieldProvider>\n </Bind.ValidationContainer>\n );\n }}\n </Bind>\n );\n};\n\nexport default DynamicSection;\n"],"mappings":"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","ignoreList":[]}
@@ -2,6 +2,7 @@ import React from "react";
2
2
  import get from "lodash/get.js";
3
3
  import { i18n } from "@webiny/app/i18n/index.js";
4
4
  import { Switch } from "@webiny/admin-ui";
5
+ import { useEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
5
6
  const t = i18n.ns("app-headless-cms/admin/fields/boolean");
6
7
  const plugin = {
7
8
  type: "cms-editor-field-renderer",
@@ -16,11 +17,16 @@ const plugin = {
16
17
  return field.type === "boolean" && !field.list && !get(field, "predefinedValues.enabled");
17
18
  },
18
19
  render({
19
- field,
20
20
  getBind
21
21
  }) {
22
+ const {
23
+ field
24
+ } = useModelField();
25
+ const rules = useEffectiveRules(field);
22
26
  const Bind = getBind();
27
+ const disabled = !rules.canEdit || rules.disabled;
23
28
  return /*#__PURE__*/React.createElement(Bind, null, bindProps => /*#__PURE__*/React.createElement(Switch, Object.assign({}, bindProps, {
29
+ disabled: disabled,
24
30
  label: field.label,
25
31
  description: field.description,
26
32
  note: field.note,
@@ -1 +1 @@
1
- {"version":3,"names":["React","get","i18n","Switch","t","ns","plugin","type","name","renderer","rendererName","description","canUse","field","list","render","getBind","Bind","createElement","bindProps","Object","assign","label","note"],"sources":["booleanSwitch.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get.js\";\nimport type { CmsModelFieldRendererPlugin } from \"~/types.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Switch } from \"@webiny/admin-ui\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/boolean\");\n\nconst plugin: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-boolean\",\n renderer: {\n rendererName: \"boolean-input\",\n name: t`Boolean Input`,\n description: t`Renders a simple switch button.`,\n canUse({ field }) {\n return (\n field.type === \"boolean\" && !field.list && !get(field, \"predefinedValues.enabled\")\n );\n },\n render({ field, getBind }) {\n const Bind = getBind();\n\n return (\n <Bind>\n {bindProps => (\n <Switch\n {...bindProps}\n label={field.label}\n description={field.description}\n note={field.note}\n data-testid={`fr.input.boolean.${field.label}`}\n />\n )}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,MAAM,eAAe;AAE/B,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,MAAM,QAAQ,kBAAkB;AAEzC,MAAMC,CAAC,GAAGF,IAAI,CAACG,EAAE,CAAC,uCAAuC,CAAC;AAE1D,MAAMC,MAAmC,GAAG;EACxCC,IAAI,EAAE,2BAA2B;EACjCC,IAAI,EAAE,mCAAmC;EACzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,eAAe;IAC7BF,IAAI,EAAEJ,CAAC,eAAe;IACtBO,WAAW,EAAEP,CAAC,iCAAiC;IAC/CQ,MAAMA,CAAC;MAAEC;IAAM,CAAC,EAAE;MACd,OACIA,KAAK,CAACN,IAAI,KAAK,SAAS,IAAI,CAACM,KAAK,CAACC,IAAI,IAAI,CAACb,GAAG,CAACY,KAAK,EAAE,0BAA0B,CAAC;IAE1F,CAAC;IACDE,MAAMA,CAAC;MAAEF,KAAK;MAAEG;IAAQ,CAAC,EAAE;MACvB,MAAMC,IAAI,GAAGD,OAAO,CAAC,CAAC;MAEtB,oBACIhB,KAAA,CAAAkB,aAAA,CAACD,IAAI,QACAE,SAAS,iBACNnB,KAAA,CAAAkB,aAAA,CAACf,MAAM,EAAAiB,MAAA,CAAAC,MAAA,KACCF,SAAS;QACbG,KAAK,EAAET,KAAK,CAACS,KAAM;QACnBX,WAAW,EAAEE,KAAK,CAACF,WAAY;QAC/BY,IAAI,EAAEV,KAAK,CAACU,IAAK;QACjB,eAAa,oBAAoBV,KAAK,CAACS,KAAK;MAAG,EAClD,CAEH,CAAC;IAEf;EACJ;AACJ,CAAC;AAED,eAAehB,MAAM","ignoreList":[]}
1
+ {"version":3,"names":["React","get","i18n","Switch","useEffectiveRules","useModelField","t","ns","plugin","type","name","renderer","rendererName","description","canUse","field","list","render","getBind","rules","Bind","disabled","canEdit","createElement","bindProps","Object","assign","label","note"],"sources":["booleanSwitch.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get.js\";\nimport type { CmsModelFieldRendererPlugin } from \"~/types.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Switch } from \"@webiny/admin-ui\";\nimport { useEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/boolean\");\n\nconst plugin: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-boolean\",\n renderer: {\n rendererName: \"boolean-input\",\n name: t`Boolean Input`,\n description: t`Renders a simple switch button.`,\n canUse({ field }) {\n return (\n field.type === \"boolean\" && !field.list && !get(field, \"predefinedValues.enabled\")\n );\n },\n render({ getBind }) {\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n const Bind = getBind();\n\n const disabled = !rules.canEdit || rules.disabled;\n\n return (\n <Bind>\n {bindProps => (\n <Switch\n {...bindProps}\n disabled={disabled}\n label={field.label}\n description={field.description}\n note={field.note}\n data-testid={`fr.input.boolean.${field.label}`}\n />\n )}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,MAAM,eAAe;AAE/B,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,iBAAiB,EAAEC,aAAa,QAAQ,iCAAiC;AAElF,MAAMC,CAAC,GAAGJ,IAAI,CAACK,EAAE,CAAC,uCAAuC,CAAC;AAE1D,MAAMC,MAAmC,GAAG;EACxCC,IAAI,EAAE,2BAA2B;EACjCC,IAAI,EAAE,mCAAmC;EACzCC,QAAQ,EAAE;IACNC,YAAY,EAAE,eAAe;IAC7BF,IAAI,EAAEJ,CAAC,eAAe;IACtBO,WAAW,EAAEP,CAAC,iCAAiC;IAC/CQ,MAAMA,CAAC;MAAEC;IAAM,CAAC,EAAE;MACd,OACIA,KAAK,CAACN,IAAI,KAAK,SAAS,IAAI,CAACM,KAAK,CAACC,IAAI,IAAI,CAACf,GAAG,CAACc,KAAK,EAAE,0BAA0B,CAAC;IAE1F,CAAC;IACDE,MAAMA,CAAC;MAAEC;IAAQ,CAAC,EAAE;MAChB,MAAM;QAAEH;MAAM,CAAC,GAAGV,aAAa,CAAC,CAAC;MACjC,MAAMc,KAAK,GAAGf,iBAAiB,CAACW,KAAK,CAAC;MACtC,MAAMK,IAAI,GAAGF,OAAO,CAAC,CAAC;MAEtB,MAAMG,QAAQ,GAAG,CAACF,KAAK,CAACG,OAAO,IAAIH,KAAK,CAACE,QAAQ;MAEjD,oBACIrB,KAAA,CAAAuB,aAAA,CAACH,IAAI,QACAI,SAAS,iBACNxB,KAAA,CAAAuB,aAAA,CAACpB,MAAM,EAAAsB,MAAA,CAAAC,MAAA,KACCF,SAAS;QACbH,QAAQ,EAAEA,QAAS;QACnBM,KAAK,EAAEZ,KAAK,CAACY,KAAM;QACnBd,WAAW,EAAEE,KAAK,CAACF,WAAY;QAC/Be,IAAI,EAAEb,KAAK,CAACa,IAAK;QACjB,eAAa,oBAAoBb,KAAK,CAACY,KAAK;MAAG,EAClD,CAEH,CAAC;IAEf;EACJ;AACJ,CAAC;AAED,eAAenB,MAAM","ignoreList":[]}
@@ -2,6 +2,7 @@ import React from "react";
2
2
  import get from "lodash/get.js";
3
3
  import { i18n } from "@webiny/app/i18n/index.js";
4
4
  import { CheckboxGroup } from "@webiny/admin-ui";
5
+ import { useEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
5
6
  const t = i18n.ns("app-headless-cms/admin/fields/text");
6
7
  const adaptToField = (field, value) => {
7
8
  return field.type === "number" ? Number(value) : value;
@@ -19,9 +20,12 @@ const plugin = {
19
20
  return !!field.list && !!get(field, "predefinedValues.enabled");
20
21
  },
21
22
  render({
22
- field,
23
23
  getBind
24
24
  }) {
25
+ const {
26
+ field
27
+ } = useModelField();
28
+ const rules = useEffectiveRules(field);
25
29
  const Bind = getBind();
26
30
  const {
27
31
  values: predefinedOptions = []
@@ -36,9 +40,11 @@ const plugin = {
36
40
  }));
37
41
  const defaults = options.filter(option => option.selected);
38
42
  const defaultValue = defaults.length > 0 ? defaults.map(opt => opt.value) : undefined;
43
+ const disabled = !rules.canEdit || rules.disabled;
39
44
  return /*#__PURE__*/React.createElement(Bind, {
40
45
  defaultValue: defaultValue
41
46
  }, bind => /*#__PURE__*/React.createElement(Bind.ValidationContainer, null, /*#__PURE__*/React.createElement(CheckboxGroup, Object.assign({}, bind, {
47
+ disabled: disabled,
42
48
  label: field.label,
43
49
  description: field.description,
44
50
  note: field.note,
@@ -1 +1 @@
1
- {"version":3,"names":["React","get","i18n","CheckboxGroup","t","ns","adaptToField","field","value","type","Number","plugin","name","renderer","rendererName","description","canUse","list","render","getBind","Bind","values","predefinedOptions","predefinedValues","options","map","opt","defaults","filter","option","selected","defaultValue","length","undefined","createElement","bind","ValidationContainer","Object","assign","label","note","hint","help","items"],"sources":["checkboxes.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get.js\";\nimport type { CmsModelField, CmsModelFieldRendererPlugin } from \"~/types.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { CheckboxGroup } from \"@webiny/admin-ui\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst adaptToField = (field: CmsModelField, value: string) => {\n return field.type === \"number\" ? Number(value) : value;\n};\n\nconst plugin: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-checkboxes-buttons\",\n renderer: {\n rendererName: \"checkboxes\",\n name: t`Checkboxes`,\n description: t`Renders checkboxes, allowing selection of multiple values.`,\n canUse({ field }) {\n return !!field.list && !!get(field, \"predefinedValues.enabled\");\n },\n render({ field, getBind }) {\n const Bind = getBind();\n\n const { values: predefinedOptions = [] } = field.predefinedValues || {\n values: []\n };\n\n // For `number` field, we want to convert the value to actual Number.\n const options = predefinedOptions.map(opt => ({\n ...opt,\n value: adaptToField(field, opt.value)\n }));\n\n const defaults = options.filter(option => option.selected);\n const defaultValue = defaults.length > 0 ? defaults.map(opt => opt.value) : undefined;\n\n return (\n <Bind defaultValue={defaultValue}>\n {bind => (\n <Bind.ValidationContainer>\n <CheckboxGroup\n {...bind}\n label={field.label}\n description={field.description}\n note={field.note}\n hint={field.help}\n value={bind.value}\n items={options.map(opt => ({\n label: opt.label,\n value: opt.value,\n selected: opt.selected\n }))}\n />\n </Bind.ValidationContainer>\n )}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,MAAM,eAAe;AAE/B,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,aAAa,QAAQ,kBAAkB;AAEhD,MAAMC,CAAC,GAAGF,IAAI,CAACG,EAAE,CAAC,oCAAoC,CAAC;AAEvD,MAAMC,YAAY,GAAGA,CAACC,KAAoB,EAAEC,KAAa,KAAK;EAC1D,OAAOD,KAAK,CAACE,IAAI,KAAK,QAAQ,GAAGC,MAAM,CAACF,KAAK,CAAC,GAAGA,KAAK;AAC1D,CAAC;AAED,MAAMG,MAAmC,GAAG;EACxCF,IAAI,EAAE,2BAA2B;EACjCG,IAAI,EAAE,8CAA8C;EACpDC,QAAQ,EAAE;IACNC,YAAY,EAAE,YAAY;IAC1BF,IAAI,EAAER,CAAC,YAAY;IACnBW,WAAW,EAAEX,CAAC,4DAA4D;IAC1EY,MAAMA,CAAC;MAAET;IAAM,CAAC,EAAE;MACd,OAAO,CAAC,CAACA,KAAK,CAACU,IAAI,IAAI,CAAC,CAAChB,GAAG,CAACM,KAAK,EAAE,0BAA0B,CAAC;IACnE,CAAC;IACDW,MAAMA,CAAC;MAAEX,KAAK;MAAEY;IAAQ,CAAC,EAAE;MACvB,MAAMC,IAAI,GAAGD,OAAO,CAAC,CAAC;MAEtB,MAAM;QAAEE,MAAM,EAAEC,iBAAiB,GAAG;MAAG,CAAC,GAAGf,KAAK,CAACgB,gBAAgB,IAAI;QACjEF,MAAM,EAAE;MACZ,CAAC;;MAED;MACA,MAAMG,OAAO,GAAGF,iBAAiB,CAACG,GAAG,CAACC,GAAG,KAAK;QAC1C,GAAGA,GAAG;QACNlB,KAAK,EAAEF,YAAY,CAACC,KAAK,EAAEmB,GAAG,CAAClB,KAAK;MACxC,CAAC,CAAC,CAAC;MAEH,MAAMmB,QAAQ,GAAGH,OAAO,CAACI,MAAM,CAACC,MAAM,IAAIA,MAAM,CAACC,QAAQ,CAAC;MAC1D,MAAMC,YAAY,GAAGJ,QAAQ,CAACK,MAAM,GAAG,CAAC,GAAGL,QAAQ,CAACF,GAAG,CAACC,GAAG,IAAIA,GAAG,CAAClB,KAAK,CAAC,GAAGyB,SAAS;MAErF,oBACIjC,KAAA,CAAAkC,aAAA,CAACd,IAAI;QAACW,YAAY,EAAEA;MAAa,GAC5BI,IAAI,iBACDnC,KAAA,CAAAkC,aAAA,CAACd,IAAI,CAACgB,mBAAmB,qBACrBpC,KAAA,CAAAkC,aAAA,CAAC/B,aAAa,EAAAkC,MAAA,CAAAC,MAAA,KACNH,IAAI;QACRI,KAAK,EAAEhC,KAAK,CAACgC,KAAM;QACnBxB,WAAW,EAAER,KAAK,CAACQ,WAAY;QAC/ByB,IAAI,EAAEjC,KAAK,CAACiC,IAAK;QACjBC,IAAI,EAAElC,KAAK,CAACmC,IAAK;QACjBlC,KAAK,EAAE2B,IAAI,CAAC3B,KAAM;QAClBmC,KAAK,EAAEnB,OAAO,CAACC,GAAG,CAACC,GAAG,KAAK;UACvBa,KAAK,EAAEb,GAAG,CAACa,KAAK;UAChB/B,KAAK,EAAEkB,GAAG,CAAClB,KAAK;UAChBsB,QAAQ,EAAEJ,GAAG,CAACI;QAClB,CAAC,CAAC;MAAE,EACP,CACqB,CAE5B,CAAC;IAEf;EACJ;AACJ,CAAC;AAED,eAAenB,MAAM","ignoreList":[]}
1
+ {"version":3,"names":["React","get","i18n","CheckboxGroup","useEffectiveRules","useModelField","t","ns","adaptToField","field","value","type","Number","plugin","name","renderer","rendererName","description","canUse","list","render","getBind","rules","Bind","values","predefinedOptions","predefinedValues","options","map","opt","defaults","filter","option","selected","defaultValue","length","undefined","disabled","canEdit","createElement","bind","ValidationContainer","Object","assign","label","note","hint","help","items"],"sources":["checkboxes.tsx"],"sourcesContent":["import React from \"react\";\nimport get from \"lodash/get.js\";\nimport type { CmsModelField, CmsModelFieldRendererPlugin } from \"~/types.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { CheckboxGroup } from \"@webiny/admin-ui\";\nimport { useEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst adaptToField = (field: CmsModelField, value: string) => {\n return field.type === \"number\" ? Number(value) : value;\n};\n\nconst plugin: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-checkboxes-buttons\",\n renderer: {\n rendererName: \"checkboxes\",\n name: t`Checkboxes`,\n description: t`Renders checkboxes, allowing selection of multiple values.`,\n canUse({ field }) {\n return !!field.list && !!get(field, \"predefinedValues.enabled\");\n },\n render({ getBind }) {\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n const Bind = getBind();\n\n const { values: predefinedOptions = [] } = field.predefinedValues || {\n values: []\n };\n\n // For `number` field, we want to convert the value to actual Number.\n const options = predefinedOptions.map(opt => ({\n ...opt,\n value: adaptToField(field, opt.value)\n }));\n\n const defaults = options.filter(option => option.selected);\n const defaultValue = defaults.length > 0 ? defaults.map(opt => opt.value) : undefined;\n\n const disabled = !rules.canEdit || rules.disabled;\n\n return (\n <Bind defaultValue={defaultValue}>\n {bind => (\n <Bind.ValidationContainer>\n <CheckboxGroup\n {...bind}\n disabled={disabled}\n label={field.label}\n description={field.description}\n note={field.note}\n hint={field.help}\n value={bind.value}\n items={options.map(opt => ({\n label: opt.label,\n value: opt.value,\n selected: opt.selected\n }))}\n />\n </Bind.ValidationContainer>\n )}\n </Bind>\n );\n }\n }\n};\n\nexport default plugin;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,MAAM,eAAe;AAE/B,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,iBAAiB,EAAEC,aAAa,QAAQ,iCAAiC;AAElF,MAAMC,CAAC,GAAGJ,IAAI,CAACK,EAAE,CAAC,oCAAoC,CAAC;AAEvD,MAAMC,YAAY,GAAGA,CAACC,KAAoB,EAAEC,KAAa,KAAK;EAC1D,OAAOD,KAAK,CAACE,IAAI,KAAK,QAAQ,GAAGC,MAAM,CAACF,KAAK,CAAC,GAAGA,KAAK;AAC1D,CAAC;AAED,MAAMG,MAAmC,GAAG;EACxCF,IAAI,EAAE,2BAA2B;EACjCG,IAAI,EAAE,8CAA8C;EACpDC,QAAQ,EAAE;IACNC,YAAY,EAAE,YAAY;IAC1BF,IAAI,EAAER,CAAC,YAAY;IACnBW,WAAW,EAAEX,CAAC,4DAA4D;IAC1EY,MAAMA,CAAC;MAAET;IAAM,CAAC,EAAE;MACd,OAAO,CAAC,CAACA,KAAK,CAACU,IAAI,IAAI,CAAC,CAAClB,GAAG,CAACQ,KAAK,EAAE,0BAA0B,CAAC;IACnE,CAAC;IACDW,MAAMA,CAAC;MAAEC;IAAQ,CAAC,EAAE;MAChB,MAAM;QAAEZ;MAAM,CAAC,GAAGJ,aAAa,CAAC,CAAC;MACjC,MAAMiB,KAAK,GAAGlB,iBAAiB,CAACK,KAAK,CAAC;MACtC,MAAMc,IAAI,GAAGF,OAAO,CAAC,CAAC;MAEtB,MAAM;QAAEG,MAAM,EAAEC,iBAAiB,GAAG;MAAG,CAAC,GAAGhB,KAAK,CAACiB,gBAAgB,IAAI;QACjEF,MAAM,EAAE;MACZ,CAAC;;MAED;MACA,MAAMG,OAAO,GAAGF,iBAAiB,CAACG,GAAG,CAACC,GAAG,KAAK;QAC1C,GAAGA,GAAG;QACNnB,KAAK,EAAEF,YAAY,CAACC,KAAK,EAAEoB,GAAG,CAACnB,KAAK;MACxC,CAAC,CAAC,CAAC;MAEH,MAAMoB,QAAQ,GAAGH,OAAO,CAACI,MAAM,CAACC,MAAM,IAAIA,MAAM,CAACC,QAAQ,CAAC;MAC1D,MAAMC,YAAY,GAAGJ,QAAQ,CAACK,MAAM,GAAG,CAAC,GAAGL,QAAQ,CAACF,GAAG,CAACC,GAAG,IAAIA,GAAG,CAACnB,KAAK,CAAC,GAAG0B,SAAS;MAErF,MAAMC,QAAQ,GAAG,CAACf,KAAK,CAACgB,OAAO,IAAIhB,KAAK,CAACe,QAAQ;MAEjD,oBACIrC,KAAA,CAAAuC,aAAA,CAAChB,IAAI;QAACW,YAAY,EAAEA;MAAa,GAC5BM,IAAI,iBACDxC,KAAA,CAAAuC,aAAA,CAAChB,IAAI,CAACkB,mBAAmB,qBACrBzC,KAAA,CAAAuC,aAAA,CAACpC,aAAa,EAAAuC,MAAA,CAAAC,MAAA,KACNH,IAAI;QACRH,QAAQ,EAAEA,QAAS;QACnBO,KAAK,EAAEnC,KAAK,CAACmC,KAAM;QACnB3B,WAAW,EAAER,KAAK,CAACQ,WAAY;QAC/B4B,IAAI,EAAEpC,KAAK,CAACoC,IAAK;QACjBC,IAAI,EAAErC,KAAK,CAACsC,IAAK;QACjBrC,KAAK,EAAE8B,IAAI,CAAC9B,KAAM;QAClBsC,KAAK,EAAErB,OAAO,CAACC,GAAG,CAACC,GAAG,KAAK;UACvBe,KAAK,EAAEf,GAAG,CAACe,KAAK;UAChBlC,KAAK,EAAEmB,GAAG,CAACnB,KAAK;UAChBuB,QAAQ,EAAEJ,GAAG,CAACI;QAClB,CAAC,CAAC;MAAE,EACP,CACqB,CAE5B,CAAC;IAEf;EACJ;AACJ,CAAC;AAED,eAAepB,MAAM","ignoreList":[]}
@@ -1,10 +1,16 @@
1
1
  import * as React from "react";
2
2
  import { Input as UiInput, Icon } from "@webiny/admin-ui";
3
+ import { useEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
3
4
  export const Input = ({
4
5
  bind,
5
6
  trailingIcon,
6
7
  ...props
7
8
  }) => {
9
+ const {
10
+ field
11
+ } = useModelField();
12
+ const rules = useEffectiveRules(field);
13
+ const disabled = !rules.canEdit || rules.disabled;
8
14
  const endIcon = React.useMemo(() => {
9
15
  if (!trailingIcon) {
10
16
  return undefined;
@@ -17,6 +23,7 @@ export const Input = ({
17
23
  });
18
24
  }, [trailingIcon]);
19
25
  return /*#__PURE__*/React.createElement(UiInput, Object.assign({}, props, bind, {
26
+ disabled: disabled,
20
27
  onChange: value => {
21
28
  if (props.type === "number") {
22
29
  value = parseFloat(value);
@@ -26,10 +33,10 @@ export const Input = ({
26
33
  label: null,
27
34
  note: null,
28
35
  description: null,
29
- placeholder: props.field.placeholder,
36
+ placeholder: field.placeholder,
30
37
  type: props.type,
31
38
  endIcon: endIcon,
32
- "data-testid": `fr.input.${props.field.label}`
39
+ "data-testid": `fr.input.${field.label}`
33
40
  }));
34
41
  };
35
42
 
@@ -1 +1 @@
1
- {"version":3,"names":["React","Input","UiInput","Icon","bind","trailingIcon","props","endIcon","useMemo","undefined","createElement","label","icon","onClick","className","Object","assign","onChange","value","type","parseFloat","note","description","placeholder","field"],"sources":["Input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { CmsModelField } from \"~/types.js\";\nimport type { BindComponentRenderProp } from \"@webiny/form\";\nimport { Input as UiInput, Icon } from \"@webiny/admin-ui\";\n\nexport interface TrailingIcon {\n icon: React.ReactNode;\n onClick: any;\n}\n\nexport interface InputProps {\n step?: number;\n type?: string;\n bind: BindComponentRenderProp;\n field: CmsModelField;\n trailingIcon?: TrailingIcon;\n}\n\nexport const Input = ({ bind, trailingIcon, ...props }: InputProps) => {\n const endIcon = React.useMemo(() => {\n if (!trailingIcon) {\n return undefined;\n }\n\n return (\n <Icon\n label={\"Icon\"}\n icon={trailingIcon?.icon}\n onClick={trailingIcon?.onClick}\n className={\"cursor-pointer\"}\n />\n );\n }, [trailingIcon]);\n\n return (\n <UiInput\n {...props}\n {...bind}\n onChange={value => {\n if (props.type === \"number\") {\n value = parseFloat(value);\n }\n return bind.onChange(value);\n }}\n label={null}\n note={null}\n description={null}\n placeholder={props.field.placeholder}\n type={props.type}\n endIcon={endIcon}\n data-testid={`fr.input.${props.field.label}`}\n />\n );\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAG9B,SAASC,KAAK,IAAIC,OAAO,EAAEC,IAAI,QAAQ,kBAAkB;AAezD,OAAO,MAAMF,KAAK,GAAGA,CAAC;EAAEG,IAAI;EAAEC,YAAY;EAAE,GAAGC;AAAkB,CAAC,KAAK;EACnE,MAAMC,OAAO,GAAGP,KAAK,CAACQ,OAAO,CAAC,MAAM;IAChC,IAAI,CAACH,YAAY,EAAE;MACf,OAAOI,SAAS;IACpB;IAEA,oBACIT,KAAA,CAAAU,aAAA,CAACP,IAAI;MACDQ,KAAK,EAAE,MAAO;MACdC,IAAI,EAAEP,YAAY,EAAEO,IAAK;MACzBC,OAAO,EAAER,YAAY,EAAEQ,OAAQ;MAC/BC,SAAS,EAAE;IAAiB,CAC/B,CAAC;EAEV,CAAC,EAAE,CAACT,YAAY,CAAC,CAAC;EAElB,oBACIL,KAAA,CAAAU,aAAA,CAACR,OAAO,EAAAa,MAAA,CAAAC,MAAA,KACAV,KAAK,EACLF,IAAI;IACRa,QAAQ,EAAEC,KAAK,IAAI;MACf,IAAIZ,KAAK,CAACa,IAAI,KAAK,QAAQ,EAAE;QACzBD,KAAK,GAAGE,UAAU,CAACF,KAAK,CAAC;MAC7B;MACA,OAAOd,IAAI,CAACa,QAAQ,CAACC,KAAK,CAAC;IAC/B,CAAE;IACFP,KAAK,EAAE,IAAK;IACZU,IAAI,EAAE,IAAK;IACXC,WAAW,EAAE,IAAK;IAClBC,WAAW,EAAEjB,KAAK,CAACkB,KAAK,CAACD,WAAY;IACrCJ,IAAI,EAAEb,KAAK,CAACa,IAAK;IACjBZ,OAAO,EAAEA,OAAQ;IACjB,eAAa,YAAYD,KAAK,CAACkB,KAAK,CAACb,KAAK;EAAG,EAChD,CAAC;AAEV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","Input","UiInput","Icon","useEffectiveRules","useModelField","bind","trailingIcon","props","field","rules","disabled","canEdit","endIcon","useMemo","undefined","createElement","label","icon","onClick","className","Object","assign","onChange","value","type","parseFloat","note","description","placeholder"],"sources":["Input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { CmsModelField } from \"~/types.js\";\nimport type { BindComponentRenderProp } from \"@webiny/form\";\nimport { Input as UiInput, Icon } from \"@webiny/admin-ui\";\nimport { useEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\n\nexport interface TrailingIcon {\n icon: React.ReactNode;\n onClick: any;\n}\n\nexport interface InputProps {\n step?: number;\n type?: string;\n bind: BindComponentRenderProp;\n field: CmsModelField;\n trailingIcon?: TrailingIcon;\n}\n\nexport const Input = ({ bind, trailingIcon, ...props }: InputProps) => {\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n const disabled = !rules.canEdit || rules.disabled;\n\n const endIcon = React.useMemo(() => {\n if (!trailingIcon) {\n return undefined;\n }\n\n return (\n <Icon\n label={\"Icon\"}\n icon={trailingIcon?.icon}\n onClick={trailingIcon?.onClick}\n className={\"cursor-pointer\"}\n />\n );\n }, [trailingIcon]);\n\n return (\n <UiInput\n {...props}\n {...bind}\n disabled={disabled}\n onChange={value => {\n if (props.type === \"number\") {\n value = parseFloat(value);\n }\n return bind.onChange(value);\n }}\n label={null}\n note={null}\n description={null}\n placeholder={field.placeholder}\n type={props.type}\n endIcon={endIcon}\n data-testid={`fr.input.${field.label}`}\n />\n );\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAG9B,SAASC,KAAK,IAAIC,OAAO,EAAEC,IAAI,QAAQ,kBAAkB;AACzD,SAASC,iBAAiB,EAAEC,aAAa,QAAQ,iCAAiC;AAelF,OAAO,MAAMJ,KAAK,GAAGA,CAAC;EAAEK,IAAI;EAAEC,YAAY;EAAE,GAAGC;AAAkB,CAAC,KAAK;EACnE,MAAM;IAAEC;EAAM,CAAC,GAAGJ,aAAa,CAAC,CAAC;EACjC,MAAMK,KAAK,GAAGN,iBAAiB,CAACK,KAAK,CAAC;EACtC,MAAME,QAAQ,GAAG,CAACD,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACC,QAAQ;EAEjD,MAAME,OAAO,GAAGb,KAAK,CAACc,OAAO,CAAC,MAAM;IAChC,IAAI,CAACP,YAAY,EAAE;MACf,OAAOQ,SAAS;IACpB;IAEA,oBACIf,KAAA,CAAAgB,aAAA,CAACb,IAAI;MACDc,KAAK,EAAE,MAAO;MACdC,IAAI,EAAEX,YAAY,EAAEW,IAAK;MACzBC,OAAO,EAAEZ,YAAY,EAAEY,OAAQ;MAC/BC,SAAS,EAAE;IAAiB,CAC/B,CAAC;EAEV,CAAC,EAAE,CAACb,YAAY,CAAC,CAAC;EAElB,oBACIP,KAAA,CAAAgB,aAAA,CAACd,OAAO,EAAAmB,MAAA,CAAAC,MAAA,KACAd,KAAK,EACLF,IAAI;IACRK,QAAQ,EAAEA,QAAS;IACnBY,QAAQ,EAAEC,KAAK,IAAI;MACf,IAAIhB,KAAK,CAACiB,IAAI,KAAK,QAAQ,EAAE;QACzBD,KAAK,GAAGE,UAAU,CAACF,KAAK,CAAC;MAC7B;MACA,OAAOlB,IAAI,CAACiB,QAAQ,CAACC,KAAK,CAAC;IAC/B,CAAE;IACFP,KAAK,EAAE,IAAK;IACZU,IAAI,EAAE,IAAK;IACXC,WAAW,EAAE,IAAK;IAClBC,WAAW,EAAEpB,KAAK,CAACoB,WAAY;IAC/BJ,IAAI,EAAEjB,KAAK,CAACiB,IAAK;IACjBZ,OAAO,EAAEA,OAAQ;IACjB,eAAa,YAAYJ,KAAK,CAACQ,KAAK;EAAG,EAC1C,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -1,7 +1,14 @@
1
1
  import * as React from "react";
2
2
  import { Select as UiSelect } from "@webiny/admin-ui";
3
+ import { useEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
3
4
  export const Select = props => {
5
+ const {
6
+ field
7
+ } = useModelField();
8
+ const rules = useEffectiveRules(field);
9
+ const disabled = !rules.canEdit || rules.disabled;
4
10
  return /*#__PURE__*/React.createElement(UiSelect, Object.assign({}, props, {
11
+ disabled: disabled,
5
12
  options: props.options.map(option => ({
6
13
  value: option.value,
7
14
  label: option.label,
@@ -1 +1 @@
1
- {"version":3,"names":["React","Select","UiSelect","props","createElement","Object","assign","options","map","option","value","label"],"sources":["Select.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SelectProps as UiSelectProps } from \"@webiny/admin-ui\";\nimport { Select as UiSelect } from \"@webiny/admin-ui\";\n\nexport interface Option {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends UiSelectProps {\n options: Option[];\n}\nexport const Select = (props: SelectProps) => {\n return (\n <UiSelect\n {...props}\n options={props.options.map(option => ({\n value: option.value,\n label: option.label,\n \"data-testid\": `fr.input.${option.label}`\n }))}\n />\n );\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,MAAM,IAAIC,QAAQ,QAAQ,kBAAkB;AAUrD,OAAO,MAAMD,MAAM,GAAIE,KAAkB,IAAK;EAC1C,oBACIH,KAAA,CAAAI,aAAA,CAACF,QAAQ,EAAAG,MAAA,CAAAC,MAAA,KACDH,KAAK;IACTI,OAAO,EAAEJ,KAAK,CAACI,OAAO,CAACC,GAAG,CAACC,MAAM,KAAK;MAClCC,KAAK,EAAED,MAAM,CAACC,KAAK;MACnBC,KAAK,EAAEF,MAAM,CAACE,KAAK;MACnB,aAAa,EAAE,YAAYF,MAAM,CAACE,KAAK;IAC3C,CAAC,CAAC;EAAE,EACP,CAAC;AAEV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","Select","UiSelect","useEffectiveRules","useModelField","props","field","rules","disabled","canEdit","createElement","Object","assign","options","map","option","value","label"],"sources":["Select.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { SelectProps as UiSelectProps } from \"@webiny/admin-ui\";\nimport { Select as UiSelect } from \"@webiny/admin-ui\";\nimport { useEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\n\nexport interface Option {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends UiSelectProps {\n options: Option[];\n}\nexport const Select = (props: SelectProps) => {\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n\n const disabled = !rules.canEdit || rules.disabled;\n\n return (\n <UiSelect\n {...props}\n disabled={disabled}\n options={props.options.map(option => ({\n value: option.value,\n label: option.label,\n \"data-testid\": `fr.input.${option.label}`\n }))}\n />\n );\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,MAAM,IAAIC,QAAQ,QAAQ,kBAAkB;AACrD,SAASC,iBAAiB,EAAEC,aAAa,QAAQ,iCAAiC;AAUlF,OAAO,MAAMH,MAAM,GAAII,KAAkB,IAAK;EAC1C,MAAM;IAAEC;EAAM,CAAC,GAAGF,aAAa,CAAC,CAAC;EACjC,MAAMG,KAAK,GAAGJ,iBAAiB,CAACG,KAAK,CAAC;EAEtC,MAAME,QAAQ,GAAG,CAACD,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACC,QAAQ;EAEjD,oBACIR,KAAA,CAAAU,aAAA,CAACR,QAAQ,EAAAS,MAAA,CAAAC,MAAA,KACDP,KAAK;IACTG,QAAQ,EAAEA,QAAS;IACnBK,OAAO,EAAER,KAAK,CAACQ,OAAO,CAACC,GAAG,CAACC,MAAM,KAAK;MAClCC,KAAK,EAAED,MAAM,CAACC,KAAK;MACnBC,KAAK,EAAEF,MAAM,CAACE,KAAK;MACnB,aAAa,EAAE,YAAYF,MAAM,CAACE,KAAK;IAC3C,CAAC,CAAC;EAAE,EACP,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -6,6 +6,7 @@ export interface MultiValueItemContainerProps {
6
6
  contentModel: CmsModel;
7
7
  isFirst: boolean;
8
8
  isLast: boolean;
9
+ disabled?: boolean;
9
10
  onMoveUp: () => void;
10
11
  onMoveDown: () => void;
11
12
  onDelete: () => void;
@@ -6,11 +6,12 @@ import { ReactComponent as ArrowUpIcon } from "@webiny/icons/expand_less.svg";
6
6
  import { ReactComponent as ArrowDownIcon } from "@webiny/icons/expand_more.svg";
7
7
  import { AddTemplateButton } from "./AddTemplate.js";
8
8
  import { TemplateIcon } from "./TemplateIcon.js";
9
+ import { useEffectiveRules } from "@webiny/app-headless-cms-common";
9
10
  import { ParentFieldProvider, useModelField } from "../../../hooks/index.js";
10
11
  import { Fields } from "../../../components/ContentEntryForm/Fields.js";
11
12
  import { makeDecoratable } from "@webiny/react-composition";
12
13
  import { TemplateProvider } from "./TemplateProvider.js";
13
- import { ParentValueIndexProvider } from "../../../components/ModelFieldProvider/index.js";
14
+ import { CanEditField, ParentValueIndexProvider } from "../../../components/ModelFieldProvider/index.js";
14
15
  import { useConfirmationDialog } from "@webiny/app-admin";
15
16
  import { Accordion, Tooltip } from "@webiny/admin-ui";
16
17
  export const MultiValueItemContainer = makeDecoratable("MultiValueItemContainer", ({
@@ -48,7 +49,7 @@ export const MultiValueItemContainer = makeDecoratable("MultiValueItemContainer"
48
49
  title: props.title,
49
50
  description: props.description,
50
51
  icon: props.icon,
51
- actions: actions
52
+ actions: props.disabled ? null : actions
52
53
  }, children);
53
54
  });
54
55
  export const MultiValueItem = makeDecoratable("MultiValueItem", props => {
@@ -80,6 +81,8 @@ const TemplateValueForm = ({
80
81
  const {
81
82
  field
82
83
  } = useModelField();
84
+ const rules = useEffectiveRules(field);
85
+ const disabled = !rules.canEdit || rules.disabled;
83
86
  const templates = field.settings?.templates || [];
84
87
  const template = templates.find(tpl => tpl.id === value._templateId);
85
88
  if (!template) {
@@ -99,7 +102,8 @@ const TemplateValueForm = ({
99
102
  icon: /*#__PURE__*/React.createElement(TemplateIcon, {
100
103
  icon: template.icon
101
104
  }),
102
- template: template
105
+ template: template,
106
+ disabled: disabled
103
107
  }, /*#__PURE__*/React.createElement(MultiValueItem, {
104
108
  template: template,
105
109
  contentModel: contentModel,
@@ -165,9 +169,9 @@ export const MultiValueDynamicZone = props => {
165
169
  onDelete: onDelete,
166
170
  onClone: value => cloneValue(value, index)
167
171
  }))));
168
- }))) : null, /*#__PURE__*/React.createElement(AddTemplateButton, {
172
+ }))) : null, /*#__PURE__*/React.createElement(CanEditField, null, /*#__PURE__*/React.createElement(AddTemplateButton, {
169
173
  onTemplate: onTemplate
170
- }));
174
+ })));
171
175
  };
172
176
 
173
177
  //# sourceMappingURL=MultiValueDynamicZone.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","cloneDeep","ReactComponent","DeleteIcon","CloneIcon","ArrowUpIcon","ArrowDownIcon","AddTemplateButton","TemplateIcon","ParentFieldProvider","useModelField","Fields","makeDecoratable","TemplateProvider","ParentValueIndexProvider","useConfirmationDialog","Accordion","Tooltip","MultiValueItemContainer","children","props","actions","createElement","Fragment","Item","Action","icon","trigger","content","onClick","onMoveUp","disabled","isFirst","onMoveDown","isLast","Separator","onClone","value","onDelete","title","description","MultiValueItem","template","Bind","contentModel","fields","layout","TemplateValueForm","field","templates","settings","find","tpl","id","_templateId","name","MultiValueContainer","variant","className","MultiValueDynamicZone","showConfirmation","message","acceptLabel","cancelLabel","bind","getBind","onTemplate","appendValue","__typename","cloneValue","index","values","hasValues","length","path","parentName","map","removeValue","key","ValidationContainer","moveValueUp","moveValueDown"],"sources":["MultiValueDynamicZone.tsx"],"sourcesContent":["import React from \"react\";\nimport cloneDeep from \"lodash/cloneDeep.js\";\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 { AddTemplateButton } from \"./AddTemplate.js\";\nimport { TemplateIcon } from \"./TemplateIcon.js\";\nimport { ParentFieldProvider, useModelField } from \"~/admin/hooks/index.js\";\nimport { Fields } from \"~/admin/components/ContentEntryForm/Fields.js\";\nimport type {\n BindComponent,\n BindComponentRenderProp,\n CmsDynamicZoneTemplate,\n CmsModelFieldRendererProps,\n CmsModel,\n CmsModelField,\n CmsDynamicZoneTemplateWithTypename\n} from \"~/types.js\";\nimport { makeDecoratable } from \"@webiny/react-composition\";\nimport { TemplateProvider } from \"~/admin/plugins/fieldRenderers/dynamicZone/TemplateProvider.js\";\nimport { ParentValueIndexProvider } from \"~/admin/components/ModelFieldProvider/index.js\";\nimport { useConfirmationDialog } from \"@webiny/app-admin\";\nimport { Accordion, Tooltip } from \"@webiny/admin-ui\";\n\ntype GetBind = CmsModelFieldRendererProps[\"getBind\"];\n\nexport interface MultiValueItemContainerProps {\n value: TemplateValue;\n contentModel: CmsModel;\n isFirst: boolean;\n isLast: boolean;\n onMoveUp: () => void;\n onMoveDown: () => void;\n onDelete: () => void;\n onClone: (value: TemplateValue) => void;\n title: React.ReactNode;\n description: string;\n icon: JSX.Element;\n actions?: JSX.Element;\n template: CmsDynamicZoneTemplate;\n children: React.ReactNode;\n}\n\nexport const MultiValueItemContainer = makeDecoratable(\n \"MultiValueItemContainer\",\n ({ children, ...props }: MultiValueItemContainerProps) => {\n const actions = (\n <>\n <Accordion.Item.Action\n icon={<Tooltip trigger={<ArrowUpIcon />} content={\"Move up\"} />}\n onClick={props.onMoveUp}\n disabled={props.isFirst}\n />\n <Accordion.Item.Action\n icon={<Tooltip trigger={<ArrowDownIcon />} content={\"Move down\"} />}\n onClick={props.onMoveDown}\n disabled={props.isLast}\n />\n <Accordion.Item.Action.Separator />\n {props.actions ? <>{props.actions}</> : null}\n <Accordion.Item.Action\n icon={<Tooltip trigger={<CloneIcon />} content={\"Duplicate\"} />}\n onClick={() => props.onClone(props.value)}\n />\n <Accordion.Item.Action\n icon={<Tooltip trigger={<DeleteIcon />} content={\"Delete\"} />}\n onClick={props.onDelete}\n />\n </>\n );\n\n return (\n <Accordion.Item\n title={props.title}\n description={props.description}\n icon={props.icon}\n actions={actions}\n >\n {children}\n </Accordion.Item>\n );\n }\n);\n\nexport interface MultiValueItemItemProps {\n template: CmsDynamicZoneTemplate;\n contentModel: CmsModel;\n Bind: BindComponent;\n}\n\nexport const MultiValueItem = makeDecoratable(\n \"MultiValueItem\",\n (props: MultiValueItemItemProps) => {\n const { template, Bind, contentModel } = props;\n\n return (\n <TemplateProvider template={template}>\n <Fields\n fields={template.fields}\n layout={template.layout || []}\n contentModel={contentModel}\n Bind={Bind}\n />\n </TemplateProvider>\n );\n }\n);\n\ninterface TemplateValue {\n _templateId: string;\n [key: string]: any;\n}\n\ninterface TemplateValueFormProps {\n value: TemplateValue;\n contentModel: CmsModel;\n Bind: BindComponent;\n isFirst: boolean;\n isLast: boolean;\n onMoveUp: () => void;\n onMoveDown: () => void;\n onDelete: () => void;\n onClone: (value: TemplateValue) => void;\n}\n\nconst TemplateValueForm = ({\n value,\n contentModel,\n Bind,\n isLast,\n isFirst,\n onMoveUp,\n onMoveDown,\n onDelete,\n onClone\n}: TemplateValueFormProps) => {\n const { field } = useModelField();\n const templates = field.settings?.templates || [];\n\n const template: CmsDynamicZoneTemplate | undefined = templates.find(\n tpl => tpl.id === value._templateId\n );\n\n if (!template) {\n return null;\n }\n\n return (\n <MultiValueItemContainer\n value={value}\n contentModel={contentModel}\n isFirst={isFirst}\n isLast={isLast}\n onClone={onClone}\n onDelete={onDelete}\n onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n title={template.name}\n description={template.description}\n icon={<TemplateIcon icon={template.icon} />}\n template={template}\n >\n <MultiValueItem template={template} contentModel={contentModel} Bind={Bind} />\n </MultiValueItemContainer>\n );\n};\n\nexport interface MultiValueContainerProps extends MultiValueDynamicZoneProps {\n children: React.ReactNode;\n}\n\nexport const MultiValueContainer = makeDecoratable(\n \"MultiValueContainer\",\n ({ children }: MultiValueContainerProps) => {\n return (\n <Accordion variant={\"container\"} className={\"gap-md\"}>\n <>{children}</>\n </Accordion>\n );\n }\n);\n\ninterface MultiValueDynamicZoneProps {\n // TODO: this prop might be useless, because we now have a `useModelField` hook.\n field: CmsModelField;\n bind: BindComponentRenderProp;\n contentModel: CmsModel;\n getBind: GetBind;\n}\n\nexport const MultiValueDynamicZone = (props: MultiValueDynamicZoneProps) => {\n const { showConfirmation } = useConfirmationDialog({\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 { bind, getBind, contentModel } = props;\n const onTemplate = (template: CmsDynamicZoneTemplateWithTypename) => {\n bind.appendValue({ _templateId: template.id, __typename: template.__typename });\n };\n\n const cloneValue = (value: TemplateValue, index: number) => {\n bind.appendValue(cloneDeep(value), index + 1);\n };\n\n const values: TemplateValue[] = bind.value || [];\n const hasValues = values.length > 0;\n\n const Bind = getBind();\n\n return (\n <div className={\"flex flex-col gap-y-lg\"}>\n {hasValues ? (\n <ParentFieldProvider value={bind.value} path={Bind.parentName}>\n <MultiValueContainer {...props}>\n {values.map((value, index) => {\n const Bind = getBind(index);\n\n const onDelete = () => {\n showConfirmation(() => {\n bind.removeValue(index);\n });\n };\n\n return (\n <ParentValueIndexProvider key={index} index={index}>\n <Bind>\n {() => (\n <Bind.ValidationContainer>\n <TemplateValueForm\n value={value}\n contentModel={contentModel}\n Bind={Bind}\n isFirst={index === 0}\n isLast={index === values.length - 1}\n onMoveUp={() => bind.moveValueUp(index)}\n onMoveDown={() => bind.moveValueDown(index)}\n onDelete={onDelete}\n onClone={value => cloneValue(value, index)}\n />\n </Bind.ValidationContainer>\n )}\n </Bind>\n </ParentValueIndexProvider>\n );\n })}\n </MultiValueContainer>\n </ParentFieldProvider>\n ) : null}\n <AddTemplateButton onTemplate={onTemplate} />\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","cloneDeep","ReactComponent","DeleteIcon","CloneIcon","ArrowUpIcon","ArrowDownIcon","AddTemplateButton","TemplateIcon","useEffectiveRules","ParentFieldProvider","useModelField","Fields","makeDecoratable","TemplateProvider","CanEditField","ParentValueIndexProvider","useConfirmationDialog","Accordion","Tooltip","MultiValueItemContainer","children","props","actions","createElement","Fragment","Item","Action","icon","trigger","content","onClick","onMoveUp","disabled","isFirst","onMoveDown","isLast","Separator","onClone","value","onDelete","title","description","MultiValueItem","template","Bind","contentModel","fields","layout","TemplateValueForm","field","rules","canEdit","templates","settings","find","tpl","id","_templateId","name","MultiValueContainer","variant","className","MultiValueDynamicZone","showConfirmation","message","acceptLabel","cancelLabel","bind","getBind","onTemplate","appendValue","__typename","cloneValue","index","values","hasValues","length","path","parentName","map","removeValue","key","ValidationContainer","moveValueUp","moveValueDown"],"sources":["MultiValueDynamicZone.tsx"],"sourcesContent":["import React from \"react\";\nimport cloneDeep from \"lodash/cloneDeep.js\";\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 { AddTemplateButton } from \"./AddTemplate.js\";\nimport { TemplateIcon } from \"./TemplateIcon.js\";\nimport { useEffectiveRules } from \"@webiny/app-headless-cms-common\";\nimport { ParentFieldProvider, useModelField } from \"~/admin/hooks/index.js\";\nimport { Fields } from \"~/admin/components/ContentEntryForm/Fields.js\";\nimport type {\n BindComponent,\n BindComponentRenderProp,\n CmsDynamicZoneTemplate,\n CmsModelFieldRendererProps,\n CmsModel,\n CmsModelField,\n CmsDynamicZoneTemplateWithTypename\n} from \"~/types.js\";\nimport { makeDecoratable } from \"@webiny/react-composition\";\nimport { TemplateProvider } from \"~/admin/plugins/fieldRenderers/dynamicZone/TemplateProvider.js\";\nimport {\n CanEditField,\n ParentValueIndexProvider\n} from \"~/admin/components/ModelFieldProvider/index.js\";\nimport { useConfirmationDialog } from \"@webiny/app-admin\";\nimport { Accordion, Tooltip } from \"@webiny/admin-ui\";\n\ntype GetBind = CmsModelFieldRendererProps[\"getBind\"];\n\nexport interface MultiValueItemContainerProps {\n value: TemplateValue;\n contentModel: CmsModel;\n isFirst: boolean;\n isLast: boolean;\n disabled?: boolean;\n onMoveUp: () => void;\n onMoveDown: () => void;\n onDelete: () => void;\n onClone: (value: TemplateValue) => void;\n title: React.ReactNode;\n description: string;\n icon: JSX.Element;\n actions?: JSX.Element;\n template: CmsDynamicZoneTemplate;\n children: React.ReactNode;\n}\n\nexport const MultiValueItemContainer = makeDecoratable(\n \"MultiValueItemContainer\",\n ({ children, ...props }: MultiValueItemContainerProps) => {\n const actions = (\n <>\n <Accordion.Item.Action\n icon={<Tooltip trigger={<ArrowUpIcon />} content={\"Move up\"} />}\n onClick={props.onMoveUp}\n disabled={props.isFirst}\n />\n <Accordion.Item.Action\n icon={<Tooltip trigger={<ArrowDownIcon />} content={\"Move down\"} />}\n onClick={props.onMoveDown}\n disabled={props.isLast}\n />\n <Accordion.Item.Action.Separator />\n {props.actions ? <>{props.actions}</> : null}\n <Accordion.Item.Action\n icon={<Tooltip trigger={<CloneIcon />} content={\"Duplicate\"} />}\n onClick={() => props.onClone(props.value)}\n />\n <Accordion.Item.Action\n icon={<Tooltip trigger={<DeleteIcon />} content={\"Delete\"} />}\n onClick={props.onDelete}\n />\n </>\n );\n\n return (\n <Accordion.Item\n title={props.title}\n description={props.description}\n icon={props.icon}\n actions={props.disabled ? null : actions}\n >\n {children}\n </Accordion.Item>\n );\n }\n);\n\nexport interface MultiValueItemItemProps {\n template: CmsDynamicZoneTemplate;\n contentModel: CmsModel;\n Bind: BindComponent;\n}\n\nexport const MultiValueItem = makeDecoratable(\n \"MultiValueItem\",\n (props: MultiValueItemItemProps) => {\n const { template, Bind, contentModel } = props;\n\n return (\n <TemplateProvider template={template}>\n <Fields\n fields={template.fields}\n layout={template.layout || []}\n contentModel={contentModel}\n Bind={Bind}\n />\n </TemplateProvider>\n );\n }\n);\n\ninterface TemplateValue {\n _templateId: string;\n [key: string]: any;\n}\n\ninterface TemplateValueFormProps {\n value: TemplateValue;\n contentModel: CmsModel;\n Bind: BindComponent;\n isFirst: boolean;\n isLast: boolean;\n onMoveUp: () => void;\n onMoveDown: () => void;\n onDelete: () => void;\n onClone: (value: TemplateValue) => void;\n}\n\nconst TemplateValueForm = ({\n value,\n contentModel,\n Bind,\n isLast,\n isFirst,\n onMoveUp,\n onMoveDown,\n onDelete,\n onClone\n}: TemplateValueFormProps) => {\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n const disabled = !rules.canEdit || rules.disabled;\n const templates = field.settings?.templates || [];\n\n const template: CmsDynamicZoneTemplate | undefined = templates.find(\n tpl => tpl.id === value._templateId\n );\n\n if (!template) {\n return null;\n }\n\n return (\n <MultiValueItemContainer\n value={value}\n contentModel={contentModel}\n isFirst={isFirst}\n isLast={isLast}\n onClone={onClone}\n onDelete={onDelete}\n onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n title={template.name}\n description={template.description}\n icon={<TemplateIcon icon={template.icon} />}\n template={template}\n disabled={disabled}\n >\n <MultiValueItem template={template} contentModel={contentModel} Bind={Bind} />\n </MultiValueItemContainer>\n );\n};\n\nexport interface MultiValueContainerProps extends MultiValueDynamicZoneProps {\n children: React.ReactNode;\n}\n\nexport const MultiValueContainer = makeDecoratable(\n \"MultiValueContainer\",\n ({ children }: MultiValueContainerProps) => {\n return (\n <Accordion variant={\"container\"} className={\"gap-md\"}>\n <>{children}</>\n </Accordion>\n );\n }\n);\n\ninterface MultiValueDynamicZoneProps {\n // TODO: this prop might be useless, because we now have a `useModelField` hook.\n field: CmsModelField;\n bind: BindComponentRenderProp;\n contentModel: CmsModel;\n getBind: GetBind;\n}\n\nexport const MultiValueDynamicZone = (props: MultiValueDynamicZoneProps) => {\n const { showConfirmation } = useConfirmationDialog({\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 { bind, getBind, contentModel } = props;\n const onTemplate = (template: CmsDynamicZoneTemplateWithTypename) => {\n bind.appendValue({ _templateId: template.id, __typename: template.__typename });\n };\n\n const cloneValue = (value: TemplateValue, index: number) => {\n bind.appendValue(cloneDeep(value), index + 1);\n };\n\n const values: TemplateValue[] = bind.value || [];\n const hasValues = values.length > 0;\n\n const Bind = getBind();\n\n return (\n <div className={\"flex flex-col gap-y-lg\"}>\n {hasValues ? (\n <ParentFieldProvider value={bind.value} path={Bind.parentName}>\n <MultiValueContainer {...props}>\n {values.map((value, index) => {\n const Bind = getBind(index);\n\n const onDelete = () => {\n showConfirmation(() => {\n bind.removeValue(index);\n });\n };\n\n return (\n <ParentValueIndexProvider key={index} index={index}>\n <Bind>\n {() => (\n <Bind.ValidationContainer>\n <TemplateValueForm\n value={value}\n contentModel={contentModel}\n Bind={Bind}\n isFirst={index === 0}\n isLast={index === values.length - 1}\n onMoveUp={() => bind.moveValueUp(index)}\n onMoveDown={() => bind.moveValueDown(index)}\n onDelete={onDelete}\n onClone={value => cloneValue(value, index)}\n />\n </Bind.ValidationContainer>\n )}\n </Bind>\n </ParentValueIndexProvider>\n );\n })}\n </MultiValueContainer>\n </ParentFieldProvider>\n ) : null}\n <CanEditField>\n <AddTemplateButton onTemplate={onTemplate} />\n </CanEditField>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -17,6 +17,7 @@ export interface SingleValueItemContainerProps {
17
17
  onDelete: () => void;
18
18
  title: React.ReactNode;
19
19
  description: string;
20
+ disabled?: boolean;
20
21
  icon: JSX.Element;
21
22
  actions?: JSX.Element;
22
23
  template: CmsDynamicZoneTemplate;
@@ -41,5 +42,5 @@ export declare const SingleValueItemContainer: ((props: SingleValueItemContainer
41
42
  displayName: string;
42
43
  }>) => (props: unknown) => React.JSX.Element;
43
44
  };
44
- export declare const SingleValueDynamicZone: ({ field, bind, contentModel, getBind }: SingleValueDynamicZoneProps) => React.JSX.Element;
45
+ export declare const SingleValueDynamicZone: ({ bind, contentModel, getBind }: SingleValueDynamicZoneProps) => React.JSX.Element;
45
46
  export {};
@@ -7,34 +7,41 @@ import { TemplateIcon } from "./TemplateIcon.js";
7
7
  import { TemplateProvider } from "./TemplateProvider.js";
8
8
  import { Fields } from "../../../components/ContentEntryForm/Fields.js";
9
9
  import { ParentFieldProvider } from "../../../components/ContentEntryForm/ParentValue.js";
10
- import { ParentValueIndexProvider, ModelFieldProvider } from "../../../components/ModelFieldProvider/index.js";
10
+ import { useEffectiveRules } from "@webiny/app-headless-cms-common";
11
+ import { ParentValueIndexProvider, ModelFieldProvider, useModelField } from "../../../components/ModelFieldProvider/index.js";
11
12
  export const SingleValueItemContainer = makeDecoratable("SingleValueItemContainer", props => {
12
13
  const {
13
14
  template,
14
15
  actions,
15
- children
16
+ children,
17
+ disabled = false
16
18
  } = props;
19
+ const accordionActions = disabled ? null : /*#__PURE__*/React.createElement(React.Fragment, null, actions ?? null, /*#__PURE__*/React.createElement(Accordion.Item.Action, {
20
+ icon: /*#__PURE__*/React.createElement(Tooltip, {
21
+ trigger: /*#__PURE__*/React.createElement(DeleteIcon, null),
22
+ content: "Delete"
23
+ }),
24
+ onClick: props.onDelete
25
+ }));
17
26
  return /*#__PURE__*/React.createElement(Accordion.Item, {
18
27
  title: template.name,
19
28
  description: template.description,
20
29
  icon: /*#__PURE__*/React.createElement(TemplateIcon, {
21
30
  icon: template.icon
22
31
  }),
23
- actions: /*#__PURE__*/React.createElement(React.Fragment, null, actions ?? null, /*#__PURE__*/React.createElement(Accordion.Item.Action, {
24
- icon: /*#__PURE__*/React.createElement(Tooltip, {
25
- trigger: /*#__PURE__*/React.createElement(DeleteIcon, null),
26
- content: "Delete"
27
- }),
28
- onClick: props.onDelete
29
- }))
32
+ actions: accordionActions
30
33
  }, children);
31
34
  });
32
35
  export const SingleValueDynamicZone = ({
33
- field,
34
36
  bind,
35
37
  contentModel,
36
38
  getBind
37
39
  }) => {
40
+ const {
41
+ field
42
+ } = useModelField();
43
+ const rules = useEffectiveRules(field);
44
+ const disabled = !rules.canEdit || rules.disabled;
38
45
  const {
39
46
  showConfirmation
40
47
  } = useConfirmationDialog({
@@ -67,6 +74,7 @@ export const SingleValueDynamicZone = ({
67
74
  background: "base",
68
75
  variant: "container"
69
76
  }, /*#__PURE__*/React.createElement(SingleValueItemContainer, {
77
+ disabled: !disabled,
70
78
  template: template,
71
79
  value: bind.value,
72
80
  contentModel: contentModel,