@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,7 +13,8 @@ export const MultiValueItemContainer = makeDecoratable("MultiValueItemContainer"
13
13
  onMoveDown,
14
14
  onDelete,
15
15
  isLast,
16
- isFirst
16
+ isFirst,
17
+ disabled = false
17
18
  } = props;
18
19
  const actions = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(IconButton, {
19
20
  icon: /*#__PURE__*/React.createElement(ArrowDown, null),
@@ -45,7 +46,7 @@ export const MultiValueItemContainer = makeDecoratable("MultiValueItemContainer"
45
46
  openClosedIndicatorPosition: "left"
46
47
  }, /*#__PURE__*/React.createElement(Accordion.Item, {
47
48
  title: props.title,
48
- actions: actions,
49
+ actions: disabled ? null : actions,
49
50
  defaultOpen: props.isExpanded
50
51
  }, children));
51
52
  });
@@ -1 +1 @@
1
- {"version":3,"names":["React","makeDecoratable","Accordion","IconButton","ReactComponent","DeleteIcon","ArrowUp","ArrowDown","MultiValueItemContainer","children","props","onMoveUp","onMoveDown","onDelete","isLast","isFirst","actions","createElement","Fragment","icon","onClick","e","stopPropagation","variant","disabled","Item","Action","Separator","background","openClosedIndicatorPosition","title","defaultOpen","isExpanded"],"sources":["MultiValueItemContainer.tsx"],"sourcesContent":["import React from \"react\";\nimport { makeDecoratable } from \"@webiny/react-composition\";\nimport { Accordion, IconButton } from \"@webiny/admin-ui\";\nimport type { GenericRecord } from \"@webiny/app/types.js\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete_outline.svg\";\nimport { ReactComponent as ArrowUp } from \"@webiny/icons/arrow_upward.svg\";\nimport { ReactComponent as ArrowDown } from \"@webiny/icons/arrow_downward.svg\";\n\nexport interface MultiValueItemContainerProps {\n value: GenericRecord<string>;\n isFirst: boolean;\n isLast: boolean;\n onMoveUp: () => void;\n onMoveDown: () => void;\n onDelete: () => void;\n isExpanded: boolean;\n toggleExpanded: () => void;\n title: string;\n children: React.ReactNode;\n}\n\nexport const MultiValueItemContainer = makeDecoratable(\n \"MultiValueItemContainer\",\n ({ children, ...props }: MultiValueItemContainerProps) => {\n const { onMoveUp, onMoveDown, onDelete, isLast, isFirst } = props;\n\n const actions = (\n <>\n <IconButton\n icon={<ArrowDown />}\n onClick={e => {\n e.stopPropagation();\n onMoveDown();\n }}\n variant=\"ghost\"\n disabled={isLast}\n />\n <IconButton\n icon={<ArrowUp />}\n onClick={e => {\n e.stopPropagation();\n onMoveUp();\n }}\n variant=\"ghost\"\n disabled={isFirst}\n />\n <Accordion.Item.Action.Separator />\n <IconButton\n icon={<DeleteIcon />}\n onClick={e => {\n e.stopPropagation();\n onDelete();\n }}\n variant=\"ghost\"\n />\n </>\n );\n\n return (\n <Accordion\n background={\"base\"}\n variant={\"container\"}\n openClosedIndicatorPosition={\"left\"}\n >\n <Accordion.Item\n title={props.title}\n actions={actions}\n defaultOpen={props.isExpanded}\n >\n {children}\n </Accordion.Item>\n </Accordion>\n );\n }\n);\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,2BAA2B;AAC3D,SAASC,SAAS,EAAEC,UAAU,QAAQ,kBAAkB;AAExD,SAASC,cAAc,IAAIC,UAAU,QAAQ,kCAAkC;AAC/E,SAASD,cAAc,IAAIE,OAAO,QAAQ,gCAAgC;AAC1E,SAASF,cAAc,IAAIG,SAAS,QAAQ,kCAAkC;AAe9E,OAAO,MAAMC,uBAAuB,GAAGP,eAAe,CAClD,yBAAyB,EACzB,CAAC;EAAEQ,QAAQ;EAAE,GAAGC;AAAoC,CAAC,KAAK;EACtD,MAAM;IAAEC,QAAQ;IAAEC,UAAU;IAAEC,QAAQ;IAAEC,MAAM;IAAEC;EAAQ,CAAC,GAAGL,KAAK;EAEjE,MAAMM,OAAO,gBACThB,KAAA,CAAAiB,aAAA,CAAAjB,KAAA,CAAAkB,QAAA,qBACIlB,KAAA,CAAAiB,aAAA,CAACd,UAAU;IACPgB,IAAI,eAAEnB,KAAA,CAAAiB,aAAA,CAACV,SAAS,MAAE,CAAE;IACpBa,OAAO,EAAEC,CAAC,IAAI;MACVA,CAAC,CAACC,eAAe,CAAC,CAAC;MACnBV,UAAU,CAAC,CAAC;IAChB,CAAE;IACFW,OAAO,EAAC,OAAO;IACfC,QAAQ,EAAEV;EAAO,CACpB,CAAC,eACFd,KAAA,CAAAiB,aAAA,CAACd,UAAU;IACPgB,IAAI,eAAEnB,KAAA,CAAAiB,aAAA,CAACX,OAAO,MAAE,CAAE;IAClBc,OAAO,EAAEC,CAAC,IAAI;MACVA,CAAC,CAACC,eAAe,CAAC,CAAC;MACnBX,QAAQ,CAAC,CAAC;IACd,CAAE;IACFY,OAAO,EAAC,OAAO;IACfC,QAAQ,EAAET;EAAQ,CACrB,CAAC,eACFf,KAAA,CAAAiB,aAAA,CAACf,SAAS,CAACuB,IAAI,CAACC,MAAM,CAACC,SAAS,MAAE,CAAC,eACnC3B,KAAA,CAAAiB,aAAA,CAACd,UAAU;IACPgB,IAAI,eAAEnB,KAAA,CAAAiB,aAAA,CAACZ,UAAU,MAAE,CAAE;IACrBe,OAAO,EAAEC,CAAC,IAAI;MACVA,CAAC,CAACC,eAAe,CAAC,CAAC;MACnBT,QAAQ,CAAC,CAAC;IACd,CAAE;IACFU,OAAO,EAAC;EAAO,CAClB,CACH,CACL;EAED,oBACIvB,KAAA,CAAAiB,aAAA,CAACf,SAAS;IACN0B,UAAU,EAAE,MAAO;IACnBL,OAAO,EAAE,WAAY;IACrBM,2BAA2B,EAAE;EAAO,gBAEpC7B,KAAA,CAAAiB,aAAA,CAACf,SAAS,CAACuB,IAAI;IACXK,KAAK,EAAEpB,KAAK,CAACoB,KAAM;IACnBd,OAAO,EAAEA,OAAQ;IACjBe,WAAW,EAAErB,KAAK,CAACsB;EAAW,GAE7BvB,QACW,CACT,CAAC;AAEpB,CACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","makeDecoratable","Accordion","IconButton","ReactComponent","DeleteIcon","ArrowUp","ArrowDown","MultiValueItemContainer","children","props","onMoveUp","onMoveDown","onDelete","isLast","isFirst","disabled","actions","createElement","Fragment","icon","onClick","e","stopPropagation","variant","Item","Action","Separator","background","openClosedIndicatorPosition","title","defaultOpen","isExpanded"],"sources":["MultiValueItemContainer.tsx"],"sourcesContent":["import React from \"react\";\nimport { makeDecoratable } from \"@webiny/react-composition\";\nimport { Accordion, IconButton } from \"@webiny/admin-ui\";\nimport type { GenericRecord } from \"@webiny/app/types.js\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete_outline.svg\";\nimport { ReactComponent as ArrowUp } from \"@webiny/icons/arrow_upward.svg\";\nimport { ReactComponent as ArrowDown } from \"@webiny/icons/arrow_downward.svg\";\n\nexport interface MultiValueItemContainerProps {\n value: GenericRecord<string>;\n isFirst: boolean;\n isLast: boolean;\n disabled?: boolean;\n onMoveUp: () => void;\n onMoveDown: () => void;\n onDelete: () => void;\n isExpanded: boolean;\n toggleExpanded: () => void;\n title: string;\n children: React.ReactNode;\n}\n\nexport const MultiValueItemContainer = makeDecoratable(\n \"MultiValueItemContainer\",\n ({ children, ...props }: MultiValueItemContainerProps) => {\n const { onMoveUp, onMoveDown, onDelete, isLast, isFirst, disabled = false } = props;\n\n const actions = (\n <>\n <IconButton\n icon={<ArrowDown />}\n onClick={e => {\n e.stopPropagation();\n onMoveDown();\n }}\n variant=\"ghost\"\n disabled={isLast}\n />\n <IconButton\n icon={<ArrowUp />}\n onClick={e => {\n e.stopPropagation();\n onMoveUp();\n }}\n variant=\"ghost\"\n disabled={isFirst}\n />\n <Accordion.Item.Action.Separator />\n <IconButton\n icon={<DeleteIcon />}\n onClick={e => {\n e.stopPropagation();\n onDelete();\n }}\n variant=\"ghost\"\n />\n </>\n );\n\n return (\n <Accordion\n background={\"base\"}\n variant={\"container\"}\n openClosedIndicatorPosition={\"left\"}\n >\n <Accordion.Item\n title={props.title}\n actions={disabled ? null : actions}\n defaultOpen={props.isExpanded}\n >\n {children}\n </Accordion.Item>\n </Accordion>\n );\n }\n);\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,2BAA2B;AAC3D,SAASC,SAAS,EAAEC,UAAU,QAAQ,kBAAkB;AAExD,SAASC,cAAc,IAAIC,UAAU,QAAQ,kCAAkC;AAC/E,SAASD,cAAc,IAAIE,OAAO,QAAQ,gCAAgC;AAC1E,SAASF,cAAc,IAAIG,SAAS,QAAQ,kCAAkC;AAgB9E,OAAO,MAAMC,uBAAuB,GAAGP,eAAe,CAClD,yBAAyB,EACzB,CAAC;EAAEQ,QAAQ;EAAE,GAAGC;AAAoC,CAAC,KAAK;EACtD,MAAM;IAAEC,QAAQ;IAAEC,UAAU;IAAEC,QAAQ;IAAEC,MAAM;IAAEC,OAAO;IAAEC,QAAQ,GAAG;EAAM,CAAC,GAAGN,KAAK;EAEnF,MAAMO,OAAO,gBACTjB,KAAA,CAAAkB,aAAA,CAAAlB,KAAA,CAAAmB,QAAA,qBACInB,KAAA,CAAAkB,aAAA,CAACf,UAAU;IACPiB,IAAI,eAAEpB,KAAA,CAAAkB,aAAA,CAACX,SAAS,MAAE,CAAE;IACpBc,OAAO,EAAEC,CAAC,IAAI;MACVA,CAAC,CAACC,eAAe,CAAC,CAAC;MACnBX,UAAU,CAAC,CAAC;IAChB,CAAE;IACFY,OAAO,EAAC,OAAO;IACfR,QAAQ,EAAEF;EAAO,CACpB,CAAC,eACFd,KAAA,CAAAkB,aAAA,CAACf,UAAU;IACPiB,IAAI,eAAEpB,KAAA,CAAAkB,aAAA,CAACZ,OAAO,MAAE,CAAE;IAClBe,OAAO,EAAEC,CAAC,IAAI;MACVA,CAAC,CAACC,eAAe,CAAC,CAAC;MACnBZ,QAAQ,CAAC,CAAC;IACd,CAAE;IACFa,OAAO,EAAC,OAAO;IACfR,QAAQ,EAAED;EAAQ,CACrB,CAAC,eACFf,KAAA,CAAAkB,aAAA,CAAChB,SAAS,CAACuB,IAAI,CAACC,MAAM,CAACC,SAAS,MAAE,CAAC,eACnC3B,KAAA,CAAAkB,aAAA,CAACf,UAAU;IACPiB,IAAI,eAAEpB,KAAA,CAAAkB,aAAA,CAACb,UAAU,MAAE,CAAE;IACrBgB,OAAO,EAAEC,CAAC,IAAI;MACVA,CAAC,CAACC,eAAe,CAAC,CAAC;MACnBV,QAAQ,CAAC,CAAC;IACd,CAAE;IACFW,OAAO,EAAC;EAAO,CAClB,CACH,CACL;EAED,oBACIxB,KAAA,CAAAkB,aAAA,CAAChB,SAAS;IACN0B,UAAU,EAAE,MAAO;IACnBJ,OAAO,EAAE,WAAY;IACrBK,2BAA2B,EAAE;EAAO,gBAEpC7B,KAAA,CAAAkB,aAAA,CAAChB,SAAS,CAACuB,IAAI;IACXK,KAAK,EAAEpB,KAAK,CAACoB,KAAM;IACnBb,OAAO,EAAED,QAAQ,GAAG,IAAI,GAAGC,OAAQ;IACnCc,WAAW,EAAErB,KAAK,CAACsB;EAAW,GAE7BvB,QACW,CACT,CAAC;AAEpB,CACJ,CAAC","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 { RadioGroup } 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 plugin = {
7
8
  type: "cms-editor-field-renderer",
@@ -16,9 +17,13 @@ const plugin = {
16
17
  return !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);
26
+ const disabled = !rules.canEdit || rules.disabled;
22
27
  const Bind = getBind();
23
28
  const {
24
29
  values: options = []
@@ -33,6 +38,7 @@ const plugin = {
33
38
  value,
34
39
  ...bind
35
40
  }) => /*#__PURE__*/React.createElement(Bind.ValidationContainer, null, /*#__PURE__*/React.createElement(RadioGroup, Object.assign({}, bind, {
41
+ disabled: disabled,
36
42
  label: field.label,
37
43
  description: field.description,
38
44
  note: field.note,
@@ -1 +1 @@
1
- {"version":3,"names":["React","get","i18n","RadioGroup","t","ns","plugin","type","name","renderer","rendererName","description","canUse","field","list","render","getBind","Bind","values","options","predefinedValues","defaultOption","find","opt","selected","createElement","defaultValue","value","undefined","onChange","bind","ValidationContainer","Object","assign","label","note","hint","help","items","map","option","String","Number"],"sources":["radioButtons.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 { RadioGroup } from \"@webiny/admin-ui\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/text\");\n\nconst plugin: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-radio-buttons\",\n renderer: {\n rendererName: \"radio-buttons\",\n name: t`Radio Buttons`,\n description: t`Renders radio buttons, allowing selection of a single value.`,\n canUse({ field }) {\n return !field.list && !!get(field, \"predefinedValues.enabled\");\n },\n render({ field, getBind }) {\n const Bind = getBind();\n\n const { values: options = [] } = field.predefinedValues || {\n options: []\n };\n\n const defaultOption = options.find(opt => opt.selected === true);\n\n return (\n <Bind defaultValue={defaultOption ? defaultOption.value : undefined}>\n {({ onChange, value, ...bind }) => (\n <Bind.ValidationContainer>\n <RadioGroup\n {...bind}\n label={field.label}\n description={field.description}\n note={field.note}\n hint={field.help}\n items={options.map(option => ({\n label: option.label,\n value: String(option.value),\n selected: option.selected\n }))}\n value={typeof value !== \"undefined\" ? String(value) : undefined}\n onChange={value => {\n if (field.type === \"number\") {\n onChange(Number(value));\n } else {\n onChange(String(value));\n }\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,UAAU,QAAQ,kBAAkB;AAE7C,MAAMC,CAAC,GAAGF,IAAI,CAACG,EAAE,CAAC,oCAAoC,CAAC;AAEvD,MAAMC,MAAmC,GAAG;EACxCC,IAAI,EAAE,2BAA2B;EACjCC,IAAI,EAAE,yCAAyC;EAC/CC,QAAQ,EAAE;IACNC,YAAY,EAAE,eAAe;IAC7BF,IAAI,EAAEJ,CAAC,eAAe;IACtBO,WAAW,EAAEP,CAAC,8DAA8D;IAC5EQ,MAAMA,CAAC;MAAEC;IAAM,CAAC,EAAE;MACd,OAAO,CAACA,KAAK,CAACC,IAAI,IAAI,CAAC,CAACb,GAAG,CAACY,KAAK,EAAE,0BAA0B,CAAC;IAClE,CAAC;IACDE,MAAMA,CAAC;MAAEF,KAAK;MAAEG;IAAQ,CAAC,EAAE;MACvB,MAAMC,IAAI,GAAGD,OAAO,CAAC,CAAC;MAEtB,MAAM;QAAEE,MAAM,EAAEC,OAAO,GAAG;MAAG,CAAC,GAAGN,KAAK,CAACO,gBAAgB,IAAI;QACvDD,OAAO,EAAE;MACb,CAAC;MAED,MAAME,aAAa,GAAGF,OAAO,CAACG,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,QAAQ,KAAK,IAAI,CAAC;MAEhE,oBACIxB,KAAA,CAAAyB,aAAA,CAACR,IAAI;QAACS,YAAY,EAAEL,aAAa,GAAGA,aAAa,CAACM,KAAK,GAAGC;MAAU,GAC/D,CAAC;QAAEC,QAAQ;QAAEF,KAAK;QAAE,GAAGG;MAAK,CAAC,kBAC1B9B,KAAA,CAAAyB,aAAA,CAACR,IAAI,CAACc,mBAAmB,qBACrB/B,KAAA,CAAAyB,aAAA,CAACtB,UAAU,EAAA6B,MAAA,CAAAC,MAAA,KACHH,IAAI;QACRI,KAAK,EAAErB,KAAK,CAACqB,KAAM;QACnBvB,WAAW,EAAEE,KAAK,CAACF,WAAY;QAC/BwB,IAAI,EAAEtB,KAAK,CAACsB,IAAK;QACjBC,IAAI,EAAEvB,KAAK,CAACwB,IAAK;QACjBC,KAAK,EAAEnB,OAAO,CAACoB,GAAG,CAACC,MAAM,KAAK;UAC1BN,KAAK,EAAEM,MAAM,CAACN,KAAK;UACnBP,KAAK,EAAEc,MAAM,CAACD,MAAM,CAACb,KAAK,CAAC;UAC3BH,QAAQ,EAAEgB,MAAM,CAAChB;QACrB,CAAC,CAAC,CAAE;QACJG,KAAK,EAAE,OAAOA,KAAK,KAAK,WAAW,GAAGc,MAAM,CAACd,KAAK,CAAC,GAAGC,SAAU;QAChEC,QAAQ,EAAEF,KAAK,IAAI;UACf,IAAId,KAAK,CAACN,IAAI,KAAK,QAAQ,EAAE;YACzBsB,QAAQ,CAACa,MAAM,CAACf,KAAK,CAAC,CAAC;UAC3B,CAAC,MAAM;YACHE,QAAQ,CAACY,MAAM,CAACd,KAAK,CAAC,CAAC;UAC3B;QACJ;MAAE,EACL,CACqB,CAE5B,CAAC;IAEf;EACJ;AACJ,CAAC;AAED,eAAerB,MAAM","ignoreList":[]}
1
+ {"version":3,"names":["React","get","i18n","RadioGroup","useEffectiveRules","useModelField","t","ns","plugin","type","name","renderer","rendererName","description","canUse","field","list","render","getBind","rules","disabled","canEdit","Bind","values","options","predefinedValues","defaultOption","find","opt","selected","createElement","defaultValue","value","undefined","onChange","bind","ValidationContainer","Object","assign","label","note","hint","help","items","map","option","String","Number"],"sources":["radioButtons.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 { RadioGroup } 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 plugin: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-radio-buttons\",\n renderer: {\n rendererName: \"radio-buttons\",\n name: t`Radio Buttons`,\n description: t`Renders radio buttons, allowing selection of a single value.`,\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 disabled = !rules.canEdit || rules.disabled;\n const Bind = getBind();\n\n const { values: options = [] } = field.predefinedValues || {\n options: []\n };\n\n const defaultOption = options.find(opt => opt.selected === true);\n\n return (\n <Bind defaultValue={defaultOption ? defaultOption.value : undefined}>\n {({ onChange, value, ...bind }) => (\n <Bind.ValidationContainer>\n <RadioGroup\n {...bind}\n disabled={disabled}\n label={field.label}\n description={field.description}\n note={field.note}\n hint={field.help}\n items={options.map(option => ({\n label: option.label,\n value: String(option.value),\n selected: option.selected\n }))}\n value={typeof value !== \"undefined\" ? String(value) : undefined}\n onChange={value => {\n if (field.type === \"number\") {\n onChange(Number(value));\n } else {\n onChange(String(value));\n }\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,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,iBAAiB,EAAEC,aAAa,QAAQ,iCAAiC;AAElF,MAAMC,CAAC,GAAGJ,IAAI,CAACK,EAAE,CAAC,oCAAoC,CAAC;AAEvD,MAAMC,MAAmC,GAAG;EACxCC,IAAI,EAAE,2BAA2B;EACjCC,IAAI,EAAE,yCAAyC;EAC/CC,QAAQ,EAAE;IACNC,YAAY,EAAE,eAAe;IAC7BF,IAAI,EAAEJ,CAAC,eAAe;IACtBO,WAAW,EAAEP,CAAC,8DAA8D;IAC5EQ,MAAMA,CAAC;MAAEC;IAAM,CAAC,EAAE;MACd,OAAO,CAACA,KAAK,CAACC,IAAI,IAAI,CAAC,CAACf,GAAG,CAACc,KAAK,EAAE,0BAA0B,CAAC;IAClE,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,QAAQ,GAAG,CAACD,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACC,QAAQ;MACjD,MAAME,IAAI,GAAGJ,OAAO,CAAC,CAAC;MAEtB,MAAM;QAAEK,MAAM,EAAEC,OAAO,GAAG;MAAG,CAAC,GAAGT,KAAK,CAACU,gBAAgB,IAAI;QACvDD,OAAO,EAAE;MACb,CAAC;MAED,MAAME,aAAa,GAAGF,OAAO,CAACG,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,QAAQ,KAAK,IAAI,CAAC;MAEhE,oBACI7B,KAAA,CAAA8B,aAAA,CAACR,IAAI;QAACS,YAAY,EAAEL,aAAa,GAAGA,aAAa,CAACM,KAAK,GAAGC;MAAU,GAC/D,CAAC;QAAEC,QAAQ;QAAEF,KAAK;QAAE,GAAGG;MAAK,CAAC,kBAC1BnC,KAAA,CAAA8B,aAAA,CAACR,IAAI,CAACc,mBAAmB,qBACrBpC,KAAA,CAAA8B,aAAA,CAAC3B,UAAU,EAAAkC,MAAA,CAAAC,MAAA,KACHH,IAAI;QACRf,QAAQ,EAAEA,QAAS;QACnBmB,KAAK,EAAExB,KAAK,CAACwB,KAAM;QACnB1B,WAAW,EAAEE,KAAK,CAACF,WAAY;QAC/B2B,IAAI,EAAEzB,KAAK,CAACyB,IAAK;QACjBC,IAAI,EAAE1B,KAAK,CAAC2B,IAAK;QACjBC,KAAK,EAAEnB,OAAO,CAACoB,GAAG,CAACC,MAAM,KAAK;UAC1BN,KAAK,EAAEM,MAAM,CAACN,KAAK;UACnBP,KAAK,EAAEc,MAAM,CAACD,MAAM,CAACb,KAAK,CAAC;UAC3BH,QAAQ,EAAEgB,MAAM,CAAChB;QACrB,CAAC,CAAC,CAAE;QACJG,KAAK,EAAE,OAAOA,KAAK,KAAK,WAAW,GAAGc,MAAM,CAACd,KAAK,CAAC,GAAGC,SAAU;QAChEC,QAAQ,EAAEF,KAAK,IAAI;UACf,IAAIjB,KAAK,CAACN,IAAI,KAAK,QAAQ,EAAE;YACzByB,QAAQ,CAACa,MAAM,CAACf,KAAK,CAAC,CAAC;UAC3B,CAAC,MAAM;YACHE,QAAQ,CAACY,MAAM,CAACd,KAAK,CAAC,CAAC;UAC3B;QACJ;MAAE,EACL,CACqB,CAE5B,CAAC;IAEf;EACJ;AACJ,CAAC;AAED,eAAexB,MAAM","ignoreList":[]}
@@ -5,21 +5,26 @@ import { Options } from "./Options.js";
5
5
  import { useReferences } from "../hooks/useReferences.js";
6
6
  import { Entry } from "./Entry.js";
7
7
  import { ReferencesDialog } from "./ReferencesDialog.js";
8
- import { useModelFieldGraphqlContext, useQuery } from "../../../../../hooks/index.js";
8
+ import { useModelField, useModelFieldGraphqlContext, useQuery } from "../../../../../hooks/index.js";
9
9
  import { useSnackbar } from "@webiny/app-admin";
10
10
  import { parseIdentifier } from "@webiny/utils";
11
11
  import { Entries } from "./Entries.js";
12
12
  import { NewReferencedEntryDialog } from "../../components/NewReferencedEntryDialog.js";
13
13
  import { FormComponentErrorMessage, FormComponentLabel } from "@webiny/admin-ui";
14
+ import { CanEditField, useEffectiveRules } from "@webiny/app-headless-cms-common";
14
15
  export const AdvancedMultipleReferenceField = props => {
15
16
  const {
16
- bind,
17
- field
17
+ bind
18
18
  } = props;
19
19
  const {
20
20
  showSnackbar
21
21
  } = useSnackbar();
22
+ const {
23
+ field
24
+ } = useModelField();
25
+ const rules = useEffectiveRules(field);
22
26
  const requestContext = useModelFieldGraphqlContext();
27
+ const disabled = !rules.canEdit || rules.disabled;
23
28
  const values = useMemo(() => {
24
29
  return bind.value || [];
25
30
  }, [bind.value]);
@@ -152,7 +157,8 @@ export const AdvancedMultipleReferenceField = props => {
152
157
  className: "flex items-center justify-between"
153
158
  }, /*#__PURE__*/React.createElement(FormComponentLabel, {
154
159
  text: field.label,
155
- invalid: invalid
160
+ invalid: invalid,
161
+ disabled: disabled
156
162
  })), /*#__PURE__*/React.createElement("div", {
157
163
  className: "webiny_ref-field-container"
158
164
  }, /*#__PURE__*/React.createElement(Entries, {
@@ -166,6 +172,7 @@ export const AdvancedMultipleReferenceField = props => {
166
172
  return null;
167
173
  }
168
174
  return /*#__PURE__*/React.createElement(Entry, {
175
+ disabled: disabled,
169
176
  model: model,
170
177
  placement: "multiRef",
171
178
  key: `reference-entry-${entry.id}`,
@@ -177,14 +184,15 @@ export const AdvancedMultipleReferenceField = props => {
177
184
  });
178
185
  })), /*#__PURE__*/React.createElement(FormComponentErrorMessage, {
179
186
  text: validationMessage,
180
- invalid: invalid
187
+ invalid: invalid,
188
+ disabled: disabled
181
189
  }), values.length > 0 && /*#__PURE__*/React.createElement("div", {
182
190
  className: "mb-md"
183
- }), /*#__PURE__*/React.createElement(Options, {
191
+ }), /*#__PURE__*/React.createElement(CanEditField, null, /*#__PURE__*/React.createElement(Options, {
184
192
  models: models,
185
193
  onNewRecord: onNewRecord,
186
194
  onLinkExistingRecord: onExistingRecord
187
- }), newEntryDialogModel && /*#__PURE__*/React.createElement(NewReferencedEntryDialog, {
195
+ })), newEntryDialogModel && /*#__PURE__*/React.createElement(NewReferencedEntryDialog, {
188
196
  model: newEntryDialogModel,
189
197
  onClose: onNewEntryDialogClose,
190
198
  onChange: onNewEntryCreate
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useState","GQL","withoutBeingDeletedModels","Options","useReferences","Entry","ReferencesDialog","useModelFieldGraphqlContext","useQuery","useSnackbar","parseIdentifier","Entries","NewReferencedEntryDialog","FormComponentErrorMessage","FormComponentLabel","AdvancedMultipleReferenceField","props","bind","field","showSnackbar","requestContext","values","value","linkEntryDialogModel","setLinkEntryDialogModel","newEntryDialogModel","setNewEntryDialogModel","loadedModels","setLoadedModels","data","loading","loadingModels","LIST_CONTENT_MODELS","context","listContentModels","error","message","onNewRecord","modelId","model","find","console","log","onNewEntryDialogClose","onExistingRecord","onLinkEntryDialogClose","entries","loadMore","perPage","onRemove","id","Array","isArray","entryId","newValues","filter","valueEntryId","onChange","length","models","settings","reduce","collection","ref","push","storeValues","onNewEntryCreate","concat","onMoveUp","index","toTop","arr","splice","moveValueUp","onMoveDown","toBottom","moveValueDown","validation","isValid","validationIsValid","validationMessage","invalid","createElement","Fragment","className","text","label","entry","isFirst","isLast","placement","key","undefined","onLinkExistingRecord","onClose","Object","assign","multiple","contentModel","onDialogClose"],"sources":["AdvancedMultipleReferenceField.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { ListCmsModelsQueryResponse } from \"~/admin/viewsGraphql.js\";\nimport * as GQL from \"~/admin/viewsGraphql.js\";\nimport { withoutBeingDeletedModels } from \"~/admin/viewsGraphql.js\";\nimport type {\n BindComponentRenderProp,\n CmsContentEntry,\n CmsModel,\n CmsModelFieldRendererProps\n} from \"~/types.js\";\nimport { Options } from \"./Options.js\";\nimport { useReferences } from \"../hooks/useReferences.js\";\nimport { Entry } from \"./Entry.js\";\nimport { ReferencesDialog } from \"./ReferencesDialog.js\";\nimport { useModelFieldGraphqlContext, useQuery } from \"~/admin/hooks/index.js\";\nimport { useSnackbar } from \"@webiny/app-admin\";\nimport type { CmsReferenceValue } from \"~/admin/plugins/fieldRenderers/ref/components/types.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { Entries } from \"./Entries.js\";\nimport { NewReferencedEntryDialog } from \"~/admin/plugins/fieldRenderers/ref/components/NewReferencedEntryDialog.js\";\nimport { FormComponentErrorMessage, FormComponentLabel } from \"@webiny/admin-ui\";\n\ninterface AdvancedMultipleReferenceFieldProps extends CmsModelFieldRendererProps {\n bind: BindComponentRenderProp<CmsReferenceValue[] | undefined | null>;\n}\n\nexport const AdvancedMultipleReferenceField = (props: AdvancedMultipleReferenceFieldProps) => {\n const { bind, field } = props;\n const { showSnackbar } = useSnackbar();\n const requestContext = useModelFieldGraphqlContext();\n\n const values = useMemo(() => {\n return bind.value || [];\n }, [bind.value]);\n\n const [linkEntryDialogModel, setLinkEntryDialogModel] = useState<CmsModel | null>(null);\n const [newEntryDialogModel, setNewEntryDialogModel] = useState<CmsModel | null>(null);\n\n const [loadedModels, setLoadedModels] = useState<CmsModel[]>([]);\n\n const { data, loading: loadingModels } = useQuery<ListCmsModelsQueryResponse>(\n GQL.LIST_CONTENT_MODELS,\n {\n context: requestContext\n }\n );\n\n useEffect(() => {\n if (loadingModels || !data?.listContentModels?.data) {\n return;\n } else if (data.listContentModels.error) {\n setLoadedModels([]);\n showSnackbar(data.listContentModels.error.message);\n return;\n }\n setLoadedModels(withoutBeingDeletedModels(data.listContentModels.data));\n }, [data]);\n\n const onNewRecord = useCallback(\n (modelId: string) => {\n const model = loadedModels.find(model => model.modelId === modelId);\n if (!model) {\n console.log(`Cannot find model by modelId \"${modelId}\".`);\n return;\n }\n setNewEntryDialogModel(model);\n },\n [loadedModels, linkEntryDialogModel]\n );\n\n const onNewEntryDialogClose = useCallback(() => {\n setNewEntryDialogModel(null);\n }, [linkEntryDialogModel]);\n\n const onExistingRecord = useCallback(\n (modelId: string) => {\n const model = loadedModels.find(model => model.modelId === modelId);\n if (!model) {\n console.log(`Cannot find model by modelId \"${modelId}\".`);\n return;\n }\n setLinkEntryDialogModel(model);\n },\n [loadedModels, linkEntryDialogModel]\n );\n\n const onLinkEntryDialogClose = useCallback(() => {\n setLinkEntryDialogModel(null);\n }, []);\n\n const { entries, loadMore } = useReferences({\n values,\n perPage: 10,\n requestContext\n });\n\n const onRemove = useCallback(\n (id: string) => {\n if (!values || !Array.isArray(values)) {\n return;\n }\n const { id: entryId } = parseIdentifier(id);\n const newValues = values.filter(value => {\n const { id: valueEntryId } = parseIdentifier(value.id);\n return valueEntryId !== entryId;\n });\n bind.onChange(newValues.length > 0 ? newValues : null);\n },\n [entries, values]\n );\n\n const models = useMemo(() => {\n if (!loadedModels || !field.settings?.models || !Array.isArray(field.settings.models)) {\n return [];\n }\n\n return field.settings.models.reduce<CmsModel[]>((collection, ref) => {\n const model = loadedModels.find(model => model.modelId === ref.modelId);\n if (!model) {\n return collection;\n }\n collection.push(model);\n\n return collection;\n }, []);\n }, [loadedModels, entries]);\n\n const storeValues = useCallback(\n (values: CmsReferenceValue[]) => {\n bind.onChange(values?.length ? values : null);\n return;\n },\n [values]\n );\n\n const onNewEntryCreate = useCallback(\n (data: Partial<CmsContentEntry> | null) => {\n if (!data) {\n console.log(\n `Could not store new entry to the reference field. Missing whole entry.`\n );\n return;\n } else if (!data.id) {\n console.log(\n `Could not store new entry to the reference field. Missing \"id\" value.`\n );\n return;\n } else if (!data.modelId) {\n console.log(\n `Could not store new entry to the reference field. Missing \"modelId\" value.`\n );\n return;\n }\n storeValues(\n values.concat([\n {\n id: data.id,\n modelId: data.modelId\n }\n ])\n );\n },\n [storeValues]\n );\n\n const onMoveUp = useCallback(\n (index: number, toTop?: boolean) => {\n if (!values?.length) {\n return;\n } else if (toTop) {\n const arr = values.splice(index, 1);\n bind.onChange(arr.concat(values));\n return;\n }\n bind.moveValueUp(index);\n },\n [values]\n );\n const onMoveDown = useCallback(\n (index: number, toBottom?: boolean) => {\n if (!values?.length) {\n return;\n } else if (toBottom === true) {\n const arr = values.splice(index, 1);\n bind.onChange(values.concat(arr));\n return;\n }\n bind.moveValueDown(index);\n },\n [values]\n );\n\n const { validation } = bind;\n const { isValid: validationIsValid, message: validationMessage } = validation || {};\n const invalid = useMemo(() => validationIsValid === false, [validationIsValid]);\n\n return (\n <>\n <div className={\"flex items-center justify-between\"}>\n <FormComponentLabel text={field.label} invalid={invalid} />\n </div>\n <div className={\"webiny_ref-field-container\"}>\n <Entries entries={entries} loadMore={loadMore}>\n {(entry, index) => {\n const isFirst = index === 0;\n const isLast = index >= values.length - 1;\n const model = loadedModels.find(\n model => model.modelId === entry.model.modelId\n );\n if (!model) {\n return null;\n }\n return (\n <Entry\n model={model}\n placement=\"multiRef\"\n key={`reference-entry-${entry.id}`}\n index={index}\n entry={entry}\n onRemove={onRemove}\n onMoveUp={!isFirst ? onMoveUp : undefined}\n onMoveDown={!isLast ? onMoveDown : undefined}\n />\n );\n }}\n </Entries>\n </div>\n <FormComponentErrorMessage text={validationMessage} invalid={invalid} />\n {values.length > 0 && <div className=\"mb-md\" />}\n\n <Options\n models={models}\n onNewRecord={onNewRecord}\n onLinkExistingRecord={onExistingRecord}\n />\n\n {newEntryDialogModel && (\n <NewReferencedEntryDialog\n model={newEntryDialogModel}\n onClose={onNewEntryDialogClose}\n onChange={onNewEntryCreate}\n />\n )}\n\n {linkEntryDialogModel && (\n <ReferencesDialog\n {...props}\n field={field}\n multiple={true}\n values={values}\n contentModel={linkEntryDialogModel}\n storeValues={storeValues}\n onDialogClose={onLinkEntryDialogClose}\n />\n )}\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAExE,OAAO,KAAKC,GAAG;AACf,SAASC,yBAAyB;AAOlC,SAASC,OAAO;AAChB,SAASC,aAAa;AACtB,SAASC,KAAK;AACd,SAASC,gBAAgB;AACzB,SAASC,2BAA2B,EAAEC,QAAQ;AAC9C,SAASC,WAAW,QAAQ,mBAAmB;AAE/C,SAASC,eAAe,QAAQ,eAAe;AAC/C,SAASC,OAAO;AAChB,SAASC,wBAAwB;AACjC,SAASC,yBAAyB,EAAEC,kBAAkB,QAAQ,kBAAkB;AAMhF,OAAO,MAAMC,8BAA8B,GAAIC,KAA0C,IAAK;EAC1F,MAAM;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAGF,KAAK;EAC7B,MAAM;IAAEG;EAAa,CAAC,GAAGV,WAAW,CAAC,CAAC;EACtC,MAAMW,cAAc,GAAGb,2BAA2B,CAAC,CAAC;EAEpD,MAAMc,MAAM,GAAGtB,OAAO,CAAC,MAAM;IACzB,OAAOkB,IAAI,CAACK,KAAK,IAAI,EAAE;EAC3B,CAAC,EAAE,CAACL,IAAI,CAACK,KAAK,CAAC,CAAC;EAEhB,MAAM,CAACC,oBAAoB,EAAEC,uBAAuB,CAAC,GAAGxB,QAAQ,CAAkB,IAAI,CAAC;EACvF,MAAM,CAACyB,mBAAmB,EAAEC,sBAAsB,CAAC,GAAG1B,QAAQ,CAAkB,IAAI,CAAC;EAErF,MAAM,CAAC2B,YAAY,EAAEC,eAAe,CAAC,GAAG5B,QAAQ,CAAa,EAAE,CAAC;EAEhE,MAAM;IAAE6B,IAAI;IAAEC,OAAO,EAAEC;EAAc,CAAC,GAAGvB,QAAQ,CAC7CP,GAAG,CAAC+B,mBAAmB,EACvB;IACIC,OAAO,EAAEb;EACb,CACJ,CAAC;EAEDtB,SAAS,CAAC,MAAM;IACZ,IAAIiC,aAAa,IAAI,CAACF,IAAI,EAAEK,iBAAiB,EAAEL,IAAI,EAAE;MACjD;IACJ,CAAC,MAAM,IAAIA,IAAI,CAACK,iBAAiB,CAACC,KAAK,EAAE;MACrCP,eAAe,CAAC,EAAE,CAAC;MACnBT,YAAY,CAACU,IAAI,CAACK,iBAAiB,CAACC,KAAK,CAACC,OAAO,CAAC;MAClD;IACJ;IACAR,eAAe,CAAC1B,yBAAyB,CAAC2B,IAAI,CAACK,iBAAiB,CAACL,IAAI,CAAC,CAAC;EAC3E,CAAC,EAAE,CAACA,IAAI,CAAC,CAAC;EAEV,MAAMQ,WAAW,GAAGxC,WAAW,CAC1ByC,OAAe,IAAK;IACjB,MAAMC,KAAK,GAAGZ,YAAY,CAACa,IAAI,CAACD,KAAK,IAAIA,KAAK,CAACD,OAAO,KAAKA,OAAO,CAAC;IACnE,IAAI,CAACC,KAAK,EAAE;MACRE,OAAO,CAACC,GAAG,CAAC,iCAAiCJ,OAAO,IAAI,CAAC;MACzD;IACJ;IACAZ,sBAAsB,CAACa,KAAK,CAAC;EACjC,CAAC,EACD,CAACZ,YAAY,EAAEJ,oBAAoB,CACvC,CAAC;EAED,MAAMoB,qBAAqB,GAAG9C,WAAW,CAAC,MAAM;IAC5C6B,sBAAsB,CAAC,IAAI,CAAC;EAChC,CAAC,EAAE,CAACH,oBAAoB,CAAC,CAAC;EAE1B,MAAMqB,gBAAgB,GAAG/C,WAAW,CAC/ByC,OAAe,IAAK;IACjB,MAAMC,KAAK,GAAGZ,YAAY,CAACa,IAAI,CAACD,KAAK,IAAIA,KAAK,CAACD,OAAO,KAAKA,OAAO,CAAC;IACnE,IAAI,CAACC,KAAK,EAAE;MACRE,OAAO,CAACC,GAAG,CAAC,iCAAiCJ,OAAO,IAAI,CAAC;MACzD;IACJ;IACAd,uBAAuB,CAACe,KAAK,CAAC;EAClC,CAAC,EACD,CAACZ,YAAY,EAAEJ,oBAAoB,CACvC,CAAC;EAED,MAAMsB,sBAAsB,GAAGhD,WAAW,CAAC,MAAM;IAC7C2B,uBAAuB,CAAC,IAAI,CAAC;EACjC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM;IAAEsB,OAAO;IAAEC;EAAS,CAAC,GAAG3C,aAAa,CAAC;IACxCiB,MAAM;IACN2B,OAAO,EAAE,EAAE;IACX5B;EACJ,CAAC,CAAC;EAEF,MAAM6B,QAAQ,GAAGpD,WAAW,CACvBqD,EAAU,IAAK;IACZ,IAAI,CAAC7B,MAAM,IAAI,CAAC8B,KAAK,CAACC,OAAO,CAAC/B,MAAM,CAAC,EAAE;MACnC;IACJ;IACA,MAAM;MAAE6B,EAAE,EAAEG;IAAQ,CAAC,GAAG3C,eAAe,CAACwC,EAAE,CAAC;IAC3C,MAAMI,SAAS,GAAGjC,MAAM,CAACkC,MAAM,CAACjC,KAAK,IAAI;MACrC,MAAM;QAAE4B,EAAE,EAAEM;MAAa,CAAC,GAAG9C,eAAe,CAACY,KAAK,CAAC4B,EAAE,CAAC;MACtD,OAAOM,YAAY,KAAKH,OAAO;IACnC,CAAC,CAAC;IACFpC,IAAI,CAACwC,QAAQ,CAACH,SAAS,CAACI,MAAM,GAAG,CAAC,GAAGJ,SAAS,GAAG,IAAI,CAAC;EAC1D,CAAC,EACD,CAACR,OAAO,EAAEzB,MAAM,CACpB,CAAC;EAED,MAAMsC,MAAM,GAAG5D,OAAO,CAAC,MAAM;IACzB,IAAI,CAAC4B,YAAY,IAAI,CAACT,KAAK,CAAC0C,QAAQ,EAAED,MAAM,IAAI,CAACR,KAAK,CAACC,OAAO,CAAClC,KAAK,CAAC0C,QAAQ,CAACD,MAAM,CAAC,EAAE;MACnF,OAAO,EAAE;IACb;IAEA,OAAOzC,KAAK,CAAC0C,QAAQ,CAACD,MAAM,CAACE,MAAM,CAAa,CAACC,UAAU,EAAEC,GAAG,KAAK;MACjE,MAAMxB,KAAK,GAAGZ,YAAY,CAACa,IAAI,CAACD,KAAK,IAAIA,KAAK,CAACD,OAAO,KAAKyB,GAAG,CAACzB,OAAO,CAAC;MACvE,IAAI,CAACC,KAAK,EAAE;QACR,OAAOuB,UAAU;MACrB;MACAA,UAAU,CAACE,IAAI,CAACzB,KAAK,CAAC;MAEtB,OAAOuB,UAAU;IACrB,CAAC,EAAE,EAAE,CAAC;EACV,CAAC,EAAE,CAACnC,YAAY,EAAEmB,OAAO,CAAC,CAAC;EAE3B,MAAMmB,WAAW,GAAGpE,WAAW,CAC1BwB,MAA2B,IAAK;IAC7BJ,IAAI,CAACwC,QAAQ,CAACpC,MAAM,EAAEqC,MAAM,GAAGrC,MAAM,GAAG,IAAI,CAAC;IAC7C;EACJ,CAAC,EACD,CAACA,MAAM,CACX,CAAC;EAED,MAAM6C,gBAAgB,GAAGrE,WAAW,CAC/BgC,IAAqC,IAAK;IACvC,IAAI,CAACA,IAAI,EAAE;MACPY,OAAO,CAACC,GAAG,CACP,wEACJ,CAAC;MACD;IACJ,CAAC,MAAM,IAAI,CAACb,IAAI,CAACqB,EAAE,EAAE;MACjBT,OAAO,CAACC,GAAG,CACP,uEACJ,CAAC;MACD;IACJ,CAAC,MAAM,IAAI,CAACb,IAAI,CAACS,OAAO,EAAE;MACtBG,OAAO,CAACC,GAAG,CACP,4EACJ,CAAC;MACD;IACJ;IACAuB,WAAW,CACP5C,MAAM,CAAC8C,MAAM,CAAC,CACV;MACIjB,EAAE,EAAErB,IAAI,CAACqB,EAAE;MACXZ,OAAO,EAAET,IAAI,CAACS;IAClB,CAAC,CACJ,CACL,CAAC;EACL,CAAC,EACD,CAAC2B,WAAW,CAChB,CAAC;EAED,MAAMG,QAAQ,GAAGvE,WAAW,CACxB,CAACwE,KAAa,EAAEC,KAAe,KAAK;IAChC,IAAI,CAACjD,MAAM,EAAEqC,MAAM,EAAE;MACjB;IACJ,CAAC,MAAM,IAAIY,KAAK,EAAE;MACd,MAAMC,GAAG,GAAGlD,MAAM,CAACmD,MAAM,CAACH,KAAK,EAAE,CAAC,CAAC;MACnCpD,IAAI,CAACwC,QAAQ,CAACc,GAAG,CAACJ,MAAM,CAAC9C,MAAM,CAAC,CAAC;MACjC;IACJ;IACAJ,IAAI,CAACwD,WAAW,CAACJ,KAAK,CAAC;EAC3B,CAAC,EACD,CAAChD,MAAM,CACX,CAAC;EACD,MAAMqD,UAAU,GAAG7E,WAAW,CAC1B,CAACwE,KAAa,EAAEM,QAAkB,KAAK;IACnC,IAAI,CAACtD,MAAM,EAAEqC,MAAM,EAAE;MACjB;IACJ,CAAC,MAAM,IAAIiB,QAAQ,KAAK,IAAI,EAAE;MAC1B,MAAMJ,GAAG,GAAGlD,MAAM,CAACmD,MAAM,CAACH,KAAK,EAAE,CAAC,CAAC;MACnCpD,IAAI,CAACwC,QAAQ,CAACpC,MAAM,CAAC8C,MAAM,CAACI,GAAG,CAAC,CAAC;MACjC;IACJ;IACAtD,IAAI,CAAC2D,aAAa,CAACP,KAAK,CAAC;EAC7B,CAAC,EACD,CAAChD,MAAM,CACX,CAAC;EAED,MAAM;IAAEwD;EAAW,CAAC,GAAG5D,IAAI;EAC3B,MAAM;IAAE6D,OAAO,EAAEC,iBAAiB;IAAE3C,OAAO,EAAE4C;EAAkB,CAAC,GAAGH,UAAU,IAAI,CAAC,CAAC;EACnF,MAAMI,OAAO,GAAGlF,OAAO,CAAC,MAAMgF,iBAAiB,KAAK,KAAK,EAAE,CAACA,iBAAiB,CAAC,CAAC;EAE/E,oBACInF,KAAA,CAAAsF,aAAA,CAAAtF,KAAA,CAAAuF,QAAA,qBACIvF,KAAA,CAAAsF,aAAA;IAAKE,SAAS,EAAE;EAAoC,gBAChDxF,KAAA,CAAAsF,aAAA,CAACpE,kBAAkB;IAACuE,IAAI,EAAEnE,KAAK,CAACoE,KAAM;IAACL,OAAO,EAAEA;EAAQ,CAAE,CACzD,CAAC,eACNrF,KAAA,CAAAsF,aAAA;IAAKE,SAAS,EAAE;EAA6B,gBACzCxF,KAAA,CAAAsF,aAAA,CAACvE,OAAO;IAACmC,OAAO,EAAEA,OAAQ;IAACC,QAAQ,EAAEA;EAAS,GACzC,CAACwC,KAAK,EAAElB,KAAK,KAAK;IACf,MAAMmB,OAAO,GAAGnB,KAAK,KAAK,CAAC;IAC3B,MAAMoB,MAAM,GAAGpB,KAAK,IAAIhD,MAAM,CAACqC,MAAM,GAAG,CAAC;IACzC,MAAMnB,KAAK,GAAGZ,YAAY,CAACa,IAAI,CAC3BD,KAAK,IAAIA,KAAK,CAACD,OAAO,KAAKiD,KAAK,CAAChD,KAAK,CAACD,OAC3C,CAAC;IACD,IAAI,CAACC,KAAK,EAAE;MACR,OAAO,IAAI;IACf;IACA,oBACI3C,KAAA,CAAAsF,aAAA,CAAC7E,KAAK;MACFkC,KAAK,EAAEA,KAAM;MACbmD,SAAS,EAAC,UAAU;MACpBC,GAAG,EAAE,mBAAmBJ,KAAK,CAACrC,EAAE,EAAG;MACnCmB,KAAK,EAAEA,KAAM;MACbkB,KAAK,EAAEA,KAAM;MACbtC,QAAQ,EAAEA,QAAS;MACnBmB,QAAQ,EAAE,CAACoB,OAAO,GAAGpB,QAAQ,GAAGwB,SAAU;MAC1ClB,UAAU,EAAE,CAACe,MAAM,GAAGf,UAAU,GAAGkB;IAAU,CAChD,CAAC;EAEV,CACK,CACR,CAAC,eACNhG,KAAA,CAAAsF,aAAA,CAACrE,yBAAyB;IAACwE,IAAI,EAAEL,iBAAkB;IAACC,OAAO,EAAEA;EAAQ,CAAE,CAAC,EACvE5D,MAAM,CAACqC,MAAM,GAAG,CAAC,iBAAI9D,KAAA,CAAAsF,aAAA;IAAKE,SAAS,EAAC;EAAO,CAAE,CAAC,eAE/CxF,KAAA,CAAAsF,aAAA,CAAC/E,OAAO;IACJwD,MAAM,EAAEA,MAAO;IACftB,WAAW,EAAEA,WAAY;IACzBwD,oBAAoB,EAAEjD;EAAiB,CAC1C,CAAC,EAEDnB,mBAAmB,iBAChB7B,KAAA,CAAAsF,aAAA,CAACtE,wBAAwB;IACrB2B,KAAK,EAAEd,mBAAoB;IAC3BqE,OAAO,EAAEnD,qBAAsB;IAC/Bc,QAAQ,EAAES;EAAiB,CAC9B,CACJ,EAEA3C,oBAAoB,iBACjB3B,KAAA,CAAAsF,aAAA,CAAC5E,gBAAgB,EAAAyF,MAAA,CAAAC,MAAA,KACThF,KAAK;IACTE,KAAK,EAAEA,KAAM;IACb+E,QAAQ,EAAE,IAAK;IACf5E,MAAM,EAAEA,MAAO;IACf6E,YAAY,EAAE3E,oBAAqB;IACnC0C,WAAW,EAAEA,WAAY;IACzBkC,aAAa,EAAEtD;EAAuB,EACzC,CAEP,CAAC;AAEX,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useState","GQL","withoutBeingDeletedModels","Options","useReferences","Entry","ReferencesDialog","useModelField","useModelFieldGraphqlContext","useQuery","useSnackbar","parseIdentifier","Entries","NewReferencedEntryDialog","FormComponentErrorMessage","FormComponentLabel","CanEditField","useEffectiveRules","AdvancedMultipleReferenceField","props","bind","showSnackbar","field","rules","requestContext","disabled","canEdit","values","value","linkEntryDialogModel","setLinkEntryDialogModel","newEntryDialogModel","setNewEntryDialogModel","loadedModels","setLoadedModels","data","loading","loadingModels","LIST_CONTENT_MODELS","context","listContentModels","error","message","onNewRecord","modelId","model","find","console","log","onNewEntryDialogClose","onExistingRecord","onLinkEntryDialogClose","entries","loadMore","perPage","onRemove","id","Array","isArray","entryId","newValues","filter","valueEntryId","onChange","length","models","settings","reduce","collection","ref","push","storeValues","onNewEntryCreate","concat","onMoveUp","index","toTop","arr","splice","moveValueUp","onMoveDown","toBottom","moveValueDown","validation","isValid","validationIsValid","validationMessage","invalid","createElement","Fragment","className","text","label","entry","isFirst","isLast","placement","key","undefined","onLinkExistingRecord","onClose","Object","assign","multiple","contentModel","onDialogClose"],"sources":["AdvancedMultipleReferenceField.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { ListCmsModelsQueryResponse } from \"~/admin/viewsGraphql.js\";\nimport * as GQL from \"~/admin/viewsGraphql.js\";\nimport { withoutBeingDeletedModels } from \"~/admin/viewsGraphql.js\";\nimport type {\n BindComponentRenderProp,\n CmsContentEntry,\n CmsModel,\n CmsModelFieldRendererProps\n} from \"~/types.js\";\nimport { Options } from \"./Options.js\";\nimport { useReferences } from \"../hooks/useReferences.js\";\nimport { Entry } from \"./Entry.js\";\nimport { ReferencesDialog } from \"./ReferencesDialog.js\";\nimport { useModelField, useModelFieldGraphqlContext, useQuery } from \"~/admin/hooks/index.js\";\nimport { useSnackbar } from \"@webiny/app-admin\";\nimport type { CmsReferenceValue } from \"~/admin/plugins/fieldRenderers/ref/components/types.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { Entries } from \"./Entries.js\";\nimport { NewReferencedEntryDialog } from \"~/admin/plugins/fieldRenderers/ref/components/NewReferencedEntryDialog.js\";\nimport { FormComponentErrorMessage, FormComponentLabel } from \"@webiny/admin-ui\";\nimport { CanEditField, useEffectiveRules } from \"@webiny/app-headless-cms-common\";\n\ninterface AdvancedMultipleReferenceFieldProps extends CmsModelFieldRendererProps {\n bind: BindComponentRenderProp<CmsReferenceValue[] | undefined | null>;\n}\n\nexport const AdvancedMultipleReferenceField = (props: AdvancedMultipleReferenceFieldProps) => {\n const { bind } = props;\n const { showSnackbar } = useSnackbar();\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n const requestContext = useModelFieldGraphqlContext();\n const disabled = !rules.canEdit || rules.disabled;\n\n const values = useMemo(() => {\n return bind.value || [];\n }, [bind.value]);\n\n const [linkEntryDialogModel, setLinkEntryDialogModel] = useState<CmsModel | null>(null);\n const [newEntryDialogModel, setNewEntryDialogModel] = useState<CmsModel | null>(null);\n\n const [loadedModels, setLoadedModels] = useState<CmsModel[]>([]);\n\n const { data, loading: loadingModels } = useQuery<ListCmsModelsQueryResponse>(\n GQL.LIST_CONTENT_MODELS,\n {\n context: requestContext\n }\n );\n\n useEffect(() => {\n if (loadingModels || !data?.listContentModels?.data) {\n return;\n } else if (data.listContentModels.error) {\n setLoadedModels([]);\n showSnackbar(data.listContentModels.error.message);\n return;\n }\n setLoadedModels(withoutBeingDeletedModels(data.listContentModels.data));\n }, [data]);\n\n const onNewRecord = useCallback(\n (modelId: string) => {\n const model = loadedModels.find(model => model.modelId === modelId);\n if (!model) {\n console.log(`Cannot find model by modelId \"${modelId}\".`);\n return;\n }\n setNewEntryDialogModel(model);\n },\n [loadedModels, linkEntryDialogModel]\n );\n\n const onNewEntryDialogClose = useCallback(() => {\n setNewEntryDialogModel(null);\n }, [linkEntryDialogModel]);\n\n const onExistingRecord = useCallback(\n (modelId: string) => {\n const model = loadedModels.find(model => model.modelId === modelId);\n if (!model) {\n console.log(`Cannot find model by modelId \"${modelId}\".`);\n return;\n }\n setLinkEntryDialogModel(model);\n },\n [loadedModels, linkEntryDialogModel]\n );\n\n const onLinkEntryDialogClose = useCallback(() => {\n setLinkEntryDialogModel(null);\n }, []);\n\n const { entries, loadMore } = useReferences({\n values,\n perPage: 10,\n requestContext\n });\n\n const onRemove = useCallback(\n (id: string) => {\n if (!values || !Array.isArray(values)) {\n return;\n }\n const { id: entryId } = parseIdentifier(id);\n const newValues = values.filter(value => {\n const { id: valueEntryId } = parseIdentifier(value.id);\n return valueEntryId !== entryId;\n });\n bind.onChange(newValues.length > 0 ? newValues : null);\n },\n [entries, values]\n );\n\n const models = useMemo(() => {\n if (!loadedModels || !field.settings?.models || !Array.isArray(field.settings.models)) {\n return [];\n }\n\n return field.settings.models.reduce<CmsModel[]>((collection, ref) => {\n const model = loadedModels.find(model => model.modelId === ref.modelId);\n if (!model) {\n return collection;\n }\n collection.push(model);\n\n return collection;\n }, []);\n }, [loadedModels, entries]);\n\n const storeValues = useCallback(\n (values: CmsReferenceValue[]) => {\n bind.onChange(values?.length ? values : null);\n return;\n },\n [values]\n );\n\n const onNewEntryCreate = useCallback(\n (data: Partial<CmsContentEntry> | null) => {\n if (!data) {\n console.log(\n `Could not store new entry to the reference field. Missing whole entry.`\n );\n return;\n } else if (!data.id) {\n console.log(\n `Could not store new entry to the reference field. Missing \"id\" value.`\n );\n return;\n } else if (!data.modelId) {\n console.log(\n `Could not store new entry to the reference field. Missing \"modelId\" value.`\n );\n return;\n }\n storeValues(\n values.concat([\n {\n id: data.id,\n modelId: data.modelId\n }\n ])\n );\n },\n [storeValues]\n );\n\n const onMoveUp = useCallback(\n (index: number, toTop?: boolean) => {\n if (!values?.length) {\n return;\n } else if (toTop) {\n const arr = values.splice(index, 1);\n bind.onChange(arr.concat(values));\n return;\n }\n bind.moveValueUp(index);\n },\n [values]\n );\n const onMoveDown = useCallback(\n (index: number, toBottom?: boolean) => {\n if (!values?.length) {\n return;\n } else if (toBottom === true) {\n const arr = values.splice(index, 1);\n bind.onChange(values.concat(arr));\n return;\n }\n bind.moveValueDown(index);\n },\n [values]\n );\n\n const { validation } = bind;\n const { isValid: validationIsValid, message: validationMessage } = validation || {};\n const invalid = useMemo(() => validationIsValid === false, [validationIsValid]);\n\n return (\n <>\n <div className={\"flex items-center justify-between\"}>\n <FormComponentLabel text={field.label} invalid={invalid} disabled={disabled} />\n </div>\n <div className={\"webiny_ref-field-container\"}>\n <Entries entries={entries} loadMore={loadMore}>\n {(entry, index) => {\n const isFirst = index === 0;\n const isLast = index >= values.length - 1;\n const model = loadedModels.find(\n model => model.modelId === entry.model.modelId\n );\n if (!model) {\n return null;\n }\n return (\n <Entry\n disabled={disabled}\n model={model}\n placement=\"multiRef\"\n key={`reference-entry-${entry.id}`}\n index={index}\n entry={entry}\n onRemove={onRemove}\n onMoveUp={!isFirst ? onMoveUp : undefined}\n onMoveDown={!isLast ? onMoveDown : undefined}\n />\n );\n }}\n </Entries>\n </div>\n <FormComponentErrorMessage\n text={validationMessage}\n invalid={invalid}\n disabled={disabled}\n />\n {values.length > 0 && <div className=\"mb-md\" />}\n\n <CanEditField>\n <Options\n models={models}\n onNewRecord={onNewRecord}\n onLinkExistingRecord={onExistingRecord}\n />\n </CanEditField>\n\n {newEntryDialogModel && (\n <NewReferencedEntryDialog\n model={newEntryDialogModel}\n onClose={onNewEntryDialogClose}\n onChange={onNewEntryCreate}\n />\n )}\n\n {linkEntryDialogModel && (\n <ReferencesDialog\n {...props}\n field={field}\n multiple={true}\n values={values}\n contentModel={linkEntryDialogModel}\n storeValues={storeValues}\n onDialogClose={onLinkEntryDialogClose}\n />\n )}\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -3,19 +3,23 @@ import { Options } from "./Options.js";
3
3
  import { useReferences } from "../hooks/useReferences.js";
4
4
  import { Entry } from "./Entry.js";
5
5
  import { ReferencesDialog } from "./ReferencesDialog.js";
6
- import { useQuery, useModelFieldGraphqlContext } from "../../../../../hooks/index.js";
6
+ import { useQuery, useModelFieldGraphqlContext, useModelField } from "../../../../../hooks/index.js";
7
7
  import * as GQL from "../../../../../viewsGraphql.js";
8
8
  import { useSnackbar } from "@webiny/app-admin";
9
9
  import { NewReferencedEntryDialog } from "../../components/NewReferencedEntryDialog.js";
10
10
  import { FormComponentErrorMessage, FormComponentLabel, OverlayLoader } from "@webiny/admin-ui";
11
+ import { CanEditField, useEffectiveRules } from "@webiny/app-headless-cms-common";
11
12
  export const AdvancedSingleReferenceField = props => {
12
13
  const {
13
- bind,
14
- field
14
+ bind
15
15
  } = props;
16
16
  const {
17
17
  showSnackbar
18
18
  } = useSnackbar();
19
+ const {
20
+ field
21
+ } = useModelField();
22
+ const rules = useEffectiveRules(field);
19
23
  const [linkEntryDialogModel, setLinkEntryDialogModel] = useState(null);
20
24
  const [newEntryDialogModel, setNewEntryDialogModel] = useState(null);
21
25
  const [loadedModels, setLoadedModels] = useState([]);
@@ -130,9 +134,11 @@ export const AdvancedSingleReferenceField = props => {
130
134
  message: validationMessage
131
135
  } = validation || {};
132
136
  const invalid = useMemo(() => validationIsValid === false, [validationIsValid]);
137
+ const disabled = !rules.canEdit || rules.disabled;
133
138
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FormComponentLabel, {
134
139
  text: field.label,
135
- invalid: invalid
140
+ invalid: invalid,
141
+ disabled: disabled
136
142
  }), /*#__PURE__*/React.createElement("div", {
137
143
  className: "webiny_ref-field-container"
138
144
  }, loading && /*#__PURE__*/React.createElement(OverlayLoader, {
@@ -145,14 +151,15 @@ export const AdvancedSingleReferenceField = props => {
145
151
  onRemove: onRemove
146
152
  })), /*#__PURE__*/React.createElement(FormComponentErrorMessage, {
147
153
  text: validationMessage,
148
- invalid: invalid
154
+ invalid: invalid,
155
+ disabled: disabled
149
156
  }), initialValue && /*#__PURE__*/React.createElement("div", {
150
157
  className: "mb-md"
151
- }), /*#__PURE__*/React.createElement(Options, {
158
+ }), /*#__PURE__*/React.createElement(CanEditField, null, /*#__PURE__*/React.createElement(Options, {
152
159
  models: models,
153
160
  onNewRecord: onNewRecord,
154
161
  onLinkExistingRecord: onExistingRecord
155
- }), newEntryDialogModel && /*#__PURE__*/React.createElement(NewReferencedEntryDialog, {
162
+ })), newEntryDialogModel && /*#__PURE__*/React.createElement(NewReferencedEntryDialog, {
156
163
  model: newEntryDialogModel,
157
164
  onClose: onNewEntryDialogClose,
158
165
  onChange: onNewEntryCreate
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useState","Options","useReferences","Entry","ReferencesDialog","useQuery","useModelFieldGraphqlContext","GQL","useSnackbar","NewReferencedEntryDialog","FormComponentErrorMessage","FormComponentLabel","OverlayLoader","AdvancedSingleReferenceField","props","bind","field","showSnackbar","linkEntryDialogModel","setLinkEntryDialogModel","newEntryDialogModel","setNewEntryDialogModel","loadedModels","setLoadedModels","requestContext","data","loading","loadingModels","LIST_CONTENT_MODELS","context","listContentModels","error","message","onNewRecord","modelId","model","find","console","log","onNewEntryDialogClose","onExistingRecord","onLinkEntryDialogClose","entries","loadingEntries","values","value","onRemove","onChange","models","settings","map","filter","Boolean","storeValues","length","id","onNewEntryCreate","initialValue","entry","validation","isValid","validationIsValid","validationMessage","invalid","createElement","Fragment","text","label","className","size","placement","index","onLinkExistingRecord","onClose","Object","assign","multiple","contentModel","onDialogClose"],"sources":["AdvancedSingleReferenceField.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type {\n BindComponentRenderProp,\n CmsContentEntry,\n CmsModelFieldRendererProps,\n CmsModel\n} from \"~/types.js\";\nimport { Options } from \"./Options.js\";\nimport { useReferences } from \"../hooks/useReferences.js\";\nimport { Entry } from \"./Entry.js\";\nimport { ReferencesDialog } from \"./ReferencesDialog.js\";\nimport { useQuery, useModelFieldGraphqlContext } from \"~/admin/hooks/index.js\";\nimport type { ListCmsModelsQueryResponse } from \"~/admin/viewsGraphql.js\";\nimport * as GQL from \"~/admin/viewsGraphql.js\";\nimport { useSnackbar } from \"@webiny/app-admin\";\nimport type { CmsReferenceValue } from \"~/admin/plugins/fieldRenderers/ref/components/types.js\";\nimport { NewReferencedEntryDialog } from \"~/admin/plugins/fieldRenderers/ref/components/NewReferencedEntryDialog.js\";\nimport { FormComponentErrorMessage, FormComponentLabel, OverlayLoader } from \"@webiny/admin-ui\";\n\ninterface AdvancedSingleReferenceFieldProps extends CmsModelFieldRendererProps {\n bind: BindComponentRenderProp<CmsReferenceValue | null>;\n}\n\nexport const AdvancedSingleReferenceField = (props: AdvancedSingleReferenceFieldProps) => {\n const { bind, field } = props;\n const { showSnackbar } = useSnackbar();\n\n const [linkEntryDialogModel, setLinkEntryDialogModel] = useState<CmsModel | null>(null);\n const [newEntryDialogModel, setNewEntryDialogModel] = useState<CmsModel | null>(null);\n const [loadedModels, setLoadedModels] = useState<CmsModel[]>([]);\n const requestContext = useModelFieldGraphqlContext();\n\n const { data, loading: loadingModels } = useQuery<ListCmsModelsQueryResponse>(\n GQL.LIST_CONTENT_MODELS,\n {\n context: requestContext\n }\n );\n\n useEffect(() => {\n if (loadingModels || !data?.listContentModels?.data) {\n return;\n } else if (data.listContentModels.error) {\n setLoadedModels([]);\n showSnackbar(data.listContentModels.error.message);\n return;\n }\n setLoadedModels(data.listContentModels.data);\n }, [data]);\n\n const onNewRecord = useCallback(\n (modelId: string) => {\n const model = loadedModels.find(model => model.modelId === modelId);\n if (!model) {\n console.log(`Cannot find model by modelId \"${modelId}\".`);\n return;\n }\n setNewEntryDialogModel(model);\n },\n [loadedModels, linkEntryDialogModel]\n );\n\n const onNewEntryDialogClose = useCallback(() => {\n setNewEntryDialogModel(null);\n }, [linkEntryDialogModel]);\n\n const onExistingRecord = useCallback(\n (modelId: string) => {\n const model = loadedModels.find(model => model.modelId === modelId);\n if (!model) {\n console.log(`Cannot find model by modelId \"${modelId}\".`);\n return;\n }\n setLinkEntryDialogModel(model);\n },\n [loadedModels, linkEntryDialogModel]\n );\n\n const onLinkEntryDialogClose = useCallback(() => {\n setLinkEntryDialogModel(null);\n }, []);\n\n const { entries, loading: loadingEntries } = useReferences({\n values: bind.value,\n requestContext\n });\n\n const onRemove = useCallback(() => {\n bind.onChange(null);\n }, [entries]);\n\n const models = useMemo(() => {\n if (!loadedModels || !field.settings?.models) {\n return [];\n }\n\n return (field.settings?.models || [])\n .map(({ modelId }) => {\n return loadedModels.find(model => model.modelId === modelId);\n })\n .filter(Boolean) as CmsModel[];\n }, [loadedModels, entries]);\n\n const loading = loadingEntries || loadingModels;\n\n const storeValues = useCallback(\n (values: CmsReferenceValue[]) => {\n if (values.length > 1) {\n console.log(\"More than one value selected. This should never happen.\");\n return;\n } else if (values.length === 0 || !values[0]?.id) {\n bind.onChange(null);\n return;\n }\n bind.onChange(values[0]);\n },\n [bind.value, bind.onChange, entries]\n );\n\n const onNewEntryCreate = useCallback(\n (data: CmsContentEntry | null) => {\n if (!data) {\n console.log(\n `Could not store new entry to the reference field. Missing whole entry.`\n );\n return;\n } else if (!data.id) {\n console.log(\n `Could not store new entry to the reference field. Missing \"id\" value.`\n );\n return;\n } else if (!data.modelId) {\n console.log(\n `Could not store new entry to the reference field. Missing \"modelId\" value.`\n );\n return;\n }\n storeValues([\n {\n id: data.id,\n modelId: data.modelId\n }\n ]);\n },\n [storeValues]\n );\n\n const initialValue = useMemo(() => {\n if (entries.length === 0 || loadedModels.length === 0) {\n return null;\n }\n const entry = entries[0];\n if (!entry) {\n return null;\n }\n const model = loadedModels.find(model => model.modelId === entry.model.modelId);\n if (!model) {\n return null;\n }\n return {\n entry,\n model\n };\n }, [entries, loadedModels]);\n\n const { validation } = bind;\n const { isValid: validationIsValid, message: validationMessage } = validation || {};\n const invalid = useMemo(() => validationIsValid === false, [validationIsValid]);\n\n return (\n <>\n <FormComponentLabel text={field.label} invalid={invalid} />\n <div className={\"webiny_ref-field-container\"}>\n {loading && <OverlayLoader size={\"md\"} />}\n {initialValue && (\n <Entry\n model={initialValue.model}\n placement=\"singleRefField\"\n index={0}\n entry={initialValue.entry}\n onRemove={onRemove}\n />\n )}\n </div>\n <FormComponentErrorMessage text={validationMessage} invalid={invalid} />\n {initialValue && <div className=\"mb-md\" />}\n <Options\n models={models}\n onNewRecord={onNewRecord}\n onLinkExistingRecord={onExistingRecord}\n />\n\n {newEntryDialogModel && (\n <NewReferencedEntryDialog\n model={newEntryDialogModel}\n onClose={onNewEntryDialogClose}\n onChange={onNewEntryCreate}\n />\n )}\n\n {linkEntryDialogModel && (\n <ReferencesDialog\n {...props}\n multiple={false}\n values={bind.value ? [bind.value] : []}\n contentModel={linkEntryDialogModel}\n storeValues={storeValues}\n onDialogClose={onLinkEntryDialogClose}\n />\n )}\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useState","Options","useReferences","Entry","ReferencesDialog","useQuery","useModelFieldGraphqlContext","useModelField","GQL","useSnackbar","NewReferencedEntryDialog","FormComponentErrorMessage","FormComponentLabel","OverlayLoader","CanEditField","useEffectiveRules","AdvancedSingleReferenceField","props","bind","showSnackbar","field","rules","linkEntryDialogModel","setLinkEntryDialogModel","newEntryDialogModel","setNewEntryDialogModel","loadedModels","setLoadedModels","requestContext","data","loading","loadingModels","LIST_CONTENT_MODELS","context","listContentModels","error","message","onNewRecord","modelId","model","find","console","log","onNewEntryDialogClose","onExistingRecord","onLinkEntryDialogClose","entries","loadingEntries","values","value","onRemove","onChange","models","settings","map","filter","Boolean","storeValues","length","id","onNewEntryCreate","initialValue","entry","validation","isValid","validationIsValid","validationMessage","invalid","disabled","canEdit","createElement","Fragment","text","label","className","size","placement","index","onLinkExistingRecord","onClose","Object","assign","multiple","contentModel","onDialogClose"],"sources":["AdvancedSingleReferenceField.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type {\n BindComponentRenderProp,\n CmsContentEntry,\n CmsModelFieldRendererProps,\n CmsModel\n} from \"~/types.js\";\nimport { Options } from \"./Options.js\";\nimport { useReferences } from \"../hooks/useReferences.js\";\nimport { Entry } from \"./Entry.js\";\nimport { ReferencesDialog } from \"./ReferencesDialog.js\";\nimport { useQuery, useModelFieldGraphqlContext, useModelField } from \"~/admin/hooks/index.js\";\nimport type { ListCmsModelsQueryResponse } from \"~/admin/viewsGraphql.js\";\nimport * as GQL from \"~/admin/viewsGraphql.js\";\nimport { useSnackbar } from \"@webiny/app-admin\";\nimport type { CmsReferenceValue } from \"~/admin/plugins/fieldRenderers/ref/components/types.js\";\nimport { NewReferencedEntryDialog } from \"~/admin/plugins/fieldRenderers/ref/components/NewReferencedEntryDialog.js\";\nimport { FormComponentErrorMessage, FormComponentLabel, OverlayLoader } from \"@webiny/admin-ui\";\nimport { CanEditField, useEffectiveRules } from \"@webiny/app-headless-cms-common\";\n\ninterface AdvancedSingleReferenceFieldProps extends CmsModelFieldRendererProps {\n bind: BindComponentRenderProp<CmsReferenceValue | null>;\n}\n\nexport const AdvancedSingleReferenceField = (props: AdvancedSingleReferenceFieldProps) => {\n const { bind } = props;\n const { showSnackbar } = useSnackbar();\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n\n const [linkEntryDialogModel, setLinkEntryDialogModel] = useState<CmsModel | null>(null);\n const [newEntryDialogModel, setNewEntryDialogModel] = useState<CmsModel | null>(null);\n const [loadedModels, setLoadedModels] = useState<CmsModel[]>([]);\n const requestContext = useModelFieldGraphqlContext();\n\n const { data, loading: loadingModels } = useQuery<ListCmsModelsQueryResponse>(\n GQL.LIST_CONTENT_MODELS,\n {\n context: requestContext\n }\n );\n\n useEffect(() => {\n if (loadingModels || !data?.listContentModels?.data) {\n return;\n } else if (data.listContentModels.error) {\n setLoadedModels([]);\n showSnackbar(data.listContentModels.error.message);\n return;\n }\n setLoadedModels(data.listContentModels.data);\n }, [data]);\n\n const onNewRecord = useCallback(\n (modelId: string) => {\n const model = loadedModels.find(model => model.modelId === modelId);\n if (!model) {\n console.log(`Cannot find model by modelId \"${modelId}\".`);\n return;\n }\n setNewEntryDialogModel(model);\n },\n [loadedModels, linkEntryDialogModel]\n );\n\n const onNewEntryDialogClose = useCallback(() => {\n setNewEntryDialogModel(null);\n }, [linkEntryDialogModel]);\n\n const onExistingRecord = useCallback(\n (modelId: string) => {\n const model = loadedModels.find(model => model.modelId === modelId);\n if (!model) {\n console.log(`Cannot find model by modelId \"${modelId}\".`);\n return;\n }\n setLinkEntryDialogModel(model);\n },\n [loadedModels, linkEntryDialogModel]\n );\n\n const onLinkEntryDialogClose = useCallback(() => {\n setLinkEntryDialogModel(null);\n }, []);\n\n const { entries, loading: loadingEntries } = useReferences({\n values: bind.value,\n requestContext\n });\n\n const onRemove = useCallback(() => {\n bind.onChange(null);\n }, [entries]);\n\n const models = useMemo(() => {\n if (!loadedModels || !field.settings?.models) {\n return [];\n }\n\n return (field.settings?.models || [])\n .map(({ modelId }) => {\n return loadedModels.find(model => model.modelId === modelId);\n })\n .filter(Boolean) as CmsModel[];\n }, [loadedModels, entries]);\n\n const loading = loadingEntries || loadingModels;\n\n const storeValues = useCallback(\n (values: CmsReferenceValue[]) => {\n if (values.length > 1) {\n console.log(\"More than one value selected. This should never happen.\");\n return;\n } else if (values.length === 0 || !values[0]?.id) {\n bind.onChange(null);\n return;\n }\n bind.onChange(values[0]);\n },\n [bind.value, bind.onChange, entries]\n );\n\n const onNewEntryCreate = useCallback(\n (data: CmsContentEntry | null) => {\n if (!data) {\n console.log(\n `Could not store new entry to the reference field. Missing whole entry.`\n );\n return;\n } else if (!data.id) {\n console.log(\n `Could not store new entry to the reference field. Missing \"id\" value.`\n );\n return;\n } else if (!data.modelId) {\n console.log(\n `Could not store new entry to the reference field. Missing \"modelId\" value.`\n );\n return;\n }\n storeValues([\n {\n id: data.id,\n modelId: data.modelId\n }\n ]);\n },\n [storeValues]\n );\n\n const initialValue = useMemo(() => {\n if (entries.length === 0 || loadedModels.length === 0) {\n return null;\n }\n const entry = entries[0];\n if (!entry) {\n return null;\n }\n const model = loadedModels.find(model => model.modelId === entry.model.modelId);\n if (!model) {\n return null;\n }\n return {\n entry,\n model\n };\n }, [entries, loadedModels]);\n\n const { validation } = bind;\n const { isValid: validationIsValid, message: validationMessage } = validation || {};\n const invalid = useMemo(() => validationIsValid === false, [validationIsValid]);\n\n const disabled = !rules.canEdit || rules.disabled;\n\n return (\n <>\n <FormComponentLabel text={field.label} invalid={invalid} disabled={disabled} />\n <div className={\"webiny_ref-field-container\"}>\n {loading && <OverlayLoader size={\"md\"} />}\n {initialValue && (\n <Entry\n model={initialValue.model}\n placement=\"singleRefField\"\n index={0}\n entry={initialValue.entry}\n onRemove={onRemove}\n />\n )}\n </div>\n <FormComponentErrorMessage\n text={validationMessage}\n invalid={invalid}\n disabled={disabled}\n />\n {initialValue && <div className=\"mb-md\" />}\n <CanEditField>\n <Options\n models={models}\n onNewRecord={onNewRecord}\n onLinkExistingRecord={onExistingRecord}\n />\n </CanEditField>\n\n {newEntryDialogModel && (\n <NewReferencedEntryDialog\n model={newEntryDialogModel}\n onClose={onNewEntryDialogClose}\n onChange={onNewEntryCreate}\n />\n )}\n\n {linkEntryDialogModel && (\n <ReferencesDialog\n {...props}\n multiple={false}\n values={bind.value ? [bind.value] : []}\n contentModel={linkEntryDialogModel}\n storeValues={storeValues}\n onDialogClose={onLinkEntryDialogClose}\n />\n )}\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ interface EntryProps {
6
6
  entry: CmsReferenceContentEntry;
7
7
  onChange: (value: CmsReferenceValue) => void;
8
8
  index?: never;
9
+ disabled?: boolean;
9
10
  selected: boolean;
10
11
  onMoveUp?: never;
11
12
  onMoveDown?: never;
@@ -14,6 +15,7 @@ interface EntryProps {
14
15
  }
15
16
  interface EntryPropsWithRemove {
16
17
  onRemove: (entryId: string) => void;
18
+ disabled?: boolean;
17
19
  model: CmsModel;
18
20
  entry: CmsReferenceContentEntry;
19
21
  index: number;
@@ -23,5 +25,5 @@ interface EntryPropsWithRemove {
23
25
  selected?: never;
24
26
  placement?: string;
25
27
  }
26
- export declare const Entry: ({ entry, onChange, onRemove, selected, index, onMoveUp: onMoveUpClick, onMoveDown: onMoveDownClick, placement }: EntryPropsWithRemove | EntryProps) => React.JSX.Element;
28
+ export declare const Entry: ({ entry, onChange, onRemove, selected, index, onMoveUp: onMoveUpClick, onMoveDown: onMoveDownClick, placement, disabled }: EntryPropsWithRemove | EntryProps) => React.JSX.Element;
27
29
  export {};
@@ -16,7 +16,8 @@ export const Entry = ({
16
16
  index,
17
17
  onMoveUp: onMoveUpClick,
18
18
  onMoveDown: onMoveDownClick,
19
- placement
19
+ placement,
20
+ disabled = false
20
21
  }) => {
21
22
  const {
22
23
  getLink
@@ -64,13 +65,13 @@ export const Entry = ({
64
65
  className: cn("flex items-center justify-between gap-md w-full rounded-md bg-neutral-light p-sm-extra pr-lg hover:bg-neutral-dimmed border-md border-transparent data-[selected=true]:border-accent-dimmed", {
65
66
  "hover:cursor-pointer": !!onChange
66
67
  })
67
- }, onChange && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Checkbox, {
68
+ }, onChange && !disabled ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Checkbox, {
68
69
  checked: selected,
69
70
  onChange: () => {
70
71
  // We're not calling the onSelect callback here because
71
72
  // the parent div already does that on click.
72
73
  }
73
- })), /*#__PURE__*/React.createElement("div", {
74
+ })) : null, /*#__PURE__*/React.createElement("div", {
74
75
  className: "grid grid-cols-[auto_1fr_auto] items-center gap-lg text-sm text-neutral-muted w-full min-w-0"
75
76
  }, /*#__PURE__*/React.createElement(Image, {
76
77
  title: entry.title,
@@ -92,7 +93,7 @@ export const Entry = ({
92
93
  className: "text-neutral-muted"
93
94
  }, "(", entryRevision, ")")),
94
95
  variant: "neutral-base-outline"
95
- }), placement == "multiRef" && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
96
+ }), !disabled && placement == "multiRef" ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
96
97
  className: "flex gap-xs"
97
98
  }, /*#__PURE__*/React.createElement(IconButton, {
98
99
  disabled: !onMoveUpClick,
@@ -106,7 +107,7 @@ export const Entry = ({
106
107
  size: "sm",
107
108
  icon: /*#__PURE__*/React.createElement(ArrowDown, null),
108
109
  onClick: onMoveDown
109
- }))), /*#__PURE__*/React.createElement(DropdownMenu, {
110
+ }))) : null, !disabled ? /*#__PURE__*/React.createElement(DropdownMenu, {
110
111
  trigger: /*#__PURE__*/React.createElement(IconButton, {
111
112
  variant: "ghost",
112
113
  size: "sm",
@@ -121,7 +122,7 @@ export const Entry = ({
121
122
  icon: /*#__PURE__*/React.createElement(RemoveIcon, null),
122
123
  text: placement === "multiRef" ? "Remove from list" : "Remove",
123
124
  onClick: () => onRemove(entry.id)
124
- })))));
125
+ })) : null)));
125
126
  };
126
127
 
127
128
  //# sourceMappingURL=Entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useMemo","Image","Tag","TimeAgo","Text","DropdownMenu","IconButton","Checkbox","cn","ReactComponent","MoreVertIcon","OpenInNewIcon","RemoveIcon","ArrowUp","ArrowDown","useRouter","Routes","Entry","entry","onChange","onRemove","selected","index","onMoveUp","onMoveUpClick","onMoveDown","onMoveDownClick","placement","getLink","onSelect","id","modelId","model","ev","shiftKey","entryStatusLabel","status","charAt","toUpperCase","slice","entryRevision","extractedRevision","split","Number","toString","folderId","wbyAco_location","location","link","ContentEntries","List","createElement","onClick","className","checked","title","src","image","name","createdBy","displayName","datetime","createdOn","content","Fragment","size","variant","disabled","icon","trigger","Link","text","to","target","Item"],"sources":["Entry.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport type {\n CmsReferenceContentEntry,\n CmsReferenceValue\n} from \"~/admin/plugins/fieldRenderers/ref/components/types.js\";\nimport { Image } from \"./entry/Image.js\";\nimport type { CmsModel } from \"~/types.js\";\nimport { Tag, TimeAgo, Text, DropdownMenu, IconButton, Checkbox, cn } from \"@webiny/admin-ui\";\nimport { ReactComponent as MoreVertIcon } from \"@webiny/icons/more_vert.svg\";\nimport { ReactComponent as OpenInNewIcon } from \"@webiny/icons/open_in_new.svg\";\nimport { ReactComponent as RemoveIcon } from \"@webiny/icons/close.svg\";\nimport { ReactComponent as ArrowUp } from \"@webiny/icons/arrow_upward.svg\";\nimport { ReactComponent as ArrowDown } from \"@webiny/icons/arrow_downward.svg\";\nimport { useRouter } from \"@webiny/app\";\nimport { Routes } from \"~/routes.js\";\n\ninterface EntryProps {\n model: CmsModel;\n entry: CmsReferenceContentEntry;\n onChange: (value: CmsReferenceValue) => void;\n index?: never;\n selected: boolean;\n onMoveUp?: never;\n onMoveDown?: never;\n onRemove?: never;\n placement?: string;\n}\n\ninterface EntryPropsWithRemove {\n onRemove: (entryId: string) => void;\n model: CmsModel;\n entry: CmsReferenceContentEntry;\n index: number;\n onMoveUp?: (index: number, toTop: boolean) => void;\n onMoveDown?: (index: number, toBottom: boolean) => void;\n onChange?: never;\n selected?: never;\n placement?: string;\n}\n\nexport const Entry = ({\n entry,\n onChange,\n onRemove,\n selected,\n index,\n onMoveUp: onMoveUpClick,\n onMoveDown: onMoveDownClick,\n placement\n}: EntryPropsWithRemove | EntryProps) => {\n const { getLink } = useRouter();\n\n const onSelect = useCallback(() => {\n if (onChange) {\n onChange({\n id: entry.id,\n modelId: entry.model.modelId\n });\n }\n }, [onChange, entry.id, entry.model.modelId]);\n\n const onMoveUp = useCallback(\n (ev: React.MouseEvent) => {\n if (!onMoveUpClick) {\n return;\n }\n onMoveUpClick(index, ev.shiftKey);\n },\n [onMoveUpClick, index]\n );\n const onMoveDown = useCallback(\n (ev: React.MouseEvent) => {\n if (!onMoveDownClick) {\n return;\n }\n onMoveDownClick(index, ev.shiftKey);\n },\n [onMoveDownClick, index]\n );\n\n const entryStatusLabel = entry.status.charAt(0).toUpperCase() + entry.status.slice(1);\n\n // Did not have `revision` field available in the `getLatestContentEntries`\n // response, hence the manual extraction from the `id` field.\n const entryRevision = useMemo(() => {\n const extractedRevision = entry.id.split(\"#\")[1] || \"0001\";\n\n // Remove leading zeros for correct padding.\n return \"v\" + Number(extractedRevision).toString();\n }, [entry.id]);\n\n const folderId = entry.wbyAco_location?.folderId || entry.location?.folderId || \"\";\n\n const link = getLink(Routes.ContentEntries.List, {\n id: entry.id,\n modelId: entry.model.modelId,\n folderId\n });\n\n return (\n <div\n data-selected={selected}\n onClick={onSelect}\n data-role=\"ref-field-entry\"\n className={cn(\n \"flex items-center justify-between gap-md w-full rounded-md bg-neutral-light p-sm-extra pr-lg hover:bg-neutral-dimmed border-md border-transparent data-[selected=true]:border-accent-dimmed\",\n { \"hover:cursor-pointer\": !!onChange }\n )}\n >\n {onChange && (\n <div>\n <Checkbox\n checked={selected}\n onChange={() => {\n // We're not calling the onSelect callback here because\n // the parent div already does that on click.\n }}\n />\n </div>\n )}\n <div\n className={\n \"grid grid-cols-[auto_1fr_auto] items-center gap-lg text-sm text-neutral-muted w-full min-w-0\"\n }\n >\n <Image title={entry.title} src={entry.image} />\n <div className={\"overflow-hidden\"}>\n <div>{entry.model.name}</div>\n\n <div\n title={entry.title}\n className={\n \"text-md text-neutral-primary font-semibold mb-sm text-ellipsis overflow-hidden whitespace-nowrap block\"\n }\n >\n {entry.title}\n </div>\n\n <div>\n <span className={\"w-[60px] inline-block\"}>Created:</span>\n <span>\n {entry.createdBy.displayName}, <TimeAgo datetime={entry.createdOn} />\n </span>\n </div>\n {/* <div>\n <span className={\"w-[60px] inline-block\"}>Location:</span>\n <span>\n Home / Content / Preview / ... / Manage / Retail / Local / Products\n </span>\n </div>*/}\n </div>\n <div className={\"flex items-center gap-sm\"}>\n <Tag\n content={\n <>\n {entryStatusLabel}&nbsp;\n <Text size={\"sm\"} className={\"text-neutral-muted\"}>\n ({entryRevision})\n </Text>\n </>\n }\n variant={\"neutral-base-outline\"}\n />\n\n {placement == \"multiRef\" && (\n <>\n <div className={\"flex gap-xs\"}>\n <IconButton\n disabled={!onMoveUpClick}\n variant={\"ghost\"}\n size={\"sm\"}\n icon={<ArrowUp />}\n onClick={onMoveUp}\n />\n <IconButton\n disabled={!onMoveDownClick}\n variant={\"ghost\"}\n size={\"sm\"}\n icon={<ArrowDown />}\n onClick={onMoveDown}\n />\n </div>\n </>\n )}\n\n <DropdownMenu\n trigger={\n <IconButton variant={\"ghost\"} size={\"sm\"} icon={<MoreVertIcon />} />\n }\n >\n <DropdownMenu.Link\n icon={<OpenInNewIcon />}\n text={\"Open in new tab\"}\n to={link}\n target={\"_blank\"}\n />\n\n {onRemove && (\n <DropdownMenu.Item\n icon={<RemoveIcon />}\n text={placement === \"multiRef\" ? \"Remove from list\" : \"Remove\"}\n onClick={() => onRemove(entry.id)}\n />\n )}\n </DropdownMenu>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useMemo","Image","Tag","TimeAgo","Text","DropdownMenu","IconButton","Checkbox","cn","ReactComponent","MoreVertIcon","OpenInNewIcon","RemoveIcon","ArrowUp","ArrowDown","useRouter","Routes","Entry","entry","onChange","onRemove","selected","index","onMoveUp","onMoveUpClick","onMoveDown","onMoveDownClick","placement","disabled","getLink","onSelect","id","modelId","model","ev","shiftKey","entryStatusLabel","status","charAt","toUpperCase","slice","entryRevision","extractedRevision","split","Number","toString","folderId","wbyAco_location","location","link","ContentEntries","List","createElement","onClick","className","checked","title","src","image","name","createdBy","displayName","datetime","createdOn","content","Fragment","size","variant","icon","trigger","Link","text","to","target","Item"],"sources":["Entry.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport type {\n CmsReferenceContentEntry,\n CmsReferenceValue\n} from \"~/admin/plugins/fieldRenderers/ref/components/types.js\";\nimport { Image } from \"./entry/Image.js\";\nimport type { CmsModel } from \"~/types.js\";\nimport { Tag, TimeAgo, Text, DropdownMenu, IconButton, Checkbox, cn } from \"@webiny/admin-ui\";\nimport { ReactComponent as MoreVertIcon } from \"@webiny/icons/more_vert.svg\";\nimport { ReactComponent as OpenInNewIcon } from \"@webiny/icons/open_in_new.svg\";\nimport { ReactComponent as RemoveIcon } from \"@webiny/icons/close.svg\";\nimport { ReactComponent as ArrowUp } from \"@webiny/icons/arrow_upward.svg\";\nimport { ReactComponent as ArrowDown } from \"@webiny/icons/arrow_downward.svg\";\nimport { useRouter } from \"@webiny/app\";\nimport { Routes } from \"~/routes.js\";\n\ninterface EntryProps {\n model: CmsModel;\n entry: CmsReferenceContentEntry;\n onChange: (value: CmsReferenceValue) => void;\n index?: never;\n disabled?: boolean;\n selected: boolean;\n onMoveUp?: never;\n onMoveDown?: never;\n onRemove?: never;\n placement?: string;\n}\n\ninterface EntryPropsWithRemove {\n onRemove: (entryId: string) => void;\n disabled?: boolean;\n model: CmsModel;\n entry: CmsReferenceContentEntry;\n index: number;\n onMoveUp?: (index: number, toTop: boolean) => void;\n onMoveDown?: (index: number, toBottom: boolean) => void;\n onChange?: never;\n selected?: never;\n placement?: string;\n}\n\nexport const Entry = ({\n entry,\n onChange,\n onRemove,\n selected,\n index,\n onMoveUp: onMoveUpClick,\n onMoveDown: onMoveDownClick,\n placement,\n disabled = false\n}: EntryPropsWithRemove | EntryProps) => {\n const { getLink } = useRouter();\n\n const onSelect = useCallback(() => {\n if (onChange) {\n onChange({\n id: entry.id,\n modelId: entry.model.modelId\n });\n }\n }, [onChange, entry.id, entry.model.modelId]);\n\n const onMoveUp = useCallback(\n (ev: React.MouseEvent) => {\n if (!onMoveUpClick) {\n return;\n }\n onMoveUpClick(index, ev.shiftKey);\n },\n [onMoveUpClick, index]\n );\n const onMoveDown = useCallback(\n (ev: React.MouseEvent) => {\n if (!onMoveDownClick) {\n return;\n }\n onMoveDownClick(index, ev.shiftKey);\n },\n [onMoveDownClick, index]\n );\n\n const entryStatusLabel = entry.status.charAt(0).toUpperCase() + entry.status.slice(1);\n\n // Did not have `revision` field available in the `getLatestContentEntries`\n // response, hence the manual extraction from the `id` field.\n const entryRevision = useMemo(() => {\n const extractedRevision = entry.id.split(\"#\")[1] || \"0001\";\n\n // Remove leading zeros for correct padding.\n return \"v\" + Number(extractedRevision).toString();\n }, [entry.id]);\n\n const folderId = entry.wbyAco_location?.folderId || entry.location?.folderId || \"\";\n\n const link = getLink(Routes.ContentEntries.List, {\n id: entry.id,\n modelId: entry.model.modelId,\n folderId\n });\n\n return (\n <div\n data-selected={selected}\n onClick={onSelect}\n data-role=\"ref-field-entry\"\n className={cn(\n \"flex items-center justify-between gap-md w-full rounded-md bg-neutral-light p-sm-extra pr-lg hover:bg-neutral-dimmed border-md border-transparent data-[selected=true]:border-accent-dimmed\",\n { \"hover:cursor-pointer\": !!onChange }\n )}\n >\n {onChange && !disabled ? (\n <div>\n <Checkbox\n checked={selected}\n onChange={() => {\n // We're not calling the onSelect callback here because\n // the parent div already does that on click.\n }}\n />\n </div>\n ) : null}\n <div\n className={\n \"grid grid-cols-[auto_1fr_auto] items-center gap-lg text-sm text-neutral-muted w-full min-w-0\"\n }\n >\n <Image title={entry.title} src={entry.image} />\n <div className={\"overflow-hidden\"}>\n <div>{entry.model.name}</div>\n\n <div\n title={entry.title}\n className={\n \"text-md text-neutral-primary font-semibold mb-sm text-ellipsis overflow-hidden whitespace-nowrap block\"\n }\n >\n {entry.title}\n </div>\n\n <div>\n <span className={\"w-[60px] inline-block\"}>Created:</span>\n <span>\n {entry.createdBy.displayName}, <TimeAgo datetime={entry.createdOn} />\n </span>\n </div>\n {/* <div>\n <span className={\"w-[60px] inline-block\"}>Location:</span>\n <span>\n Home / Content / Preview / ... / Manage / Retail / Local / Products\n </span>\n </div>*/}\n </div>\n <div className={\"flex items-center gap-sm\"}>\n <Tag\n content={\n <>\n {entryStatusLabel}&nbsp;\n <Text size={\"sm\"} className={\"text-neutral-muted\"}>\n ({entryRevision})\n </Text>\n </>\n }\n variant={\"neutral-base-outline\"}\n />\n\n {!disabled && placement == \"multiRef\" ? (\n <>\n <div className={\"flex gap-xs\"}>\n <IconButton\n disabled={!onMoveUpClick}\n variant={\"ghost\"}\n size={\"sm\"}\n icon={<ArrowUp />}\n onClick={onMoveUp}\n />\n <IconButton\n disabled={!onMoveDownClick}\n variant={\"ghost\"}\n size={\"sm\"}\n icon={<ArrowDown />}\n onClick={onMoveDown}\n />\n </div>\n </>\n ) : null}\n\n {!disabled ? (\n <DropdownMenu\n trigger={\n <IconButton variant={\"ghost\"} size={\"sm\"} icon={<MoreVertIcon />} />\n }\n >\n <DropdownMenu.Link\n icon={<OpenInNewIcon />}\n text={\"Open in new tab\"}\n to={link}\n target={\"_blank\"}\n />\n\n {onRemove && (\n <DropdownMenu.Item\n icon={<RemoveIcon />}\n text={placement === \"multiRef\" ? \"Remove from list\" : \"Remove\"}\n onClick={() => onRemove(entry.id)}\n />\n )}\n </DropdownMenu>\n ) : null}\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAKnD,SAASC,KAAK;AAEd,SAASC,GAAG,EAAEC,OAAO,EAAEC,IAAI,EAAEC,YAAY,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,EAAE,QAAQ,kBAAkB;AAC7F,SAASC,cAAc,IAAIC,YAAY,QAAQ,6BAA6B;AAC5E,SAASD,cAAc,IAAIE,aAAa,QAAQ,+BAA+B;AAC/E,SAASF,cAAc,IAAIG,UAAU,QAAQ,yBAAyB;AACtE,SAASH,cAAc,IAAII,OAAO,QAAQ,gCAAgC;AAC1E,SAASJ,cAAc,IAAIK,SAAS,QAAQ,kCAAkC;AAC9E,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,MAAM;AA4Bf,OAAO,MAAMC,KAAK,GAAGA,CAAC;EAClBC,KAAK;EACLC,QAAQ;EACRC,QAAQ;EACRC,QAAQ;EACRC,KAAK;EACLC,QAAQ,EAAEC,aAAa;EACvBC,UAAU,EAAEC,eAAe;EAC3BC,SAAS;EACTC,QAAQ,GAAG;AACoB,CAAC,KAAK;EACrC,MAAM;IAAEC;EAAQ,CAAC,GAAGd,SAAS,CAAC,CAAC;EAE/B,MAAMe,QAAQ,GAAG/B,WAAW,CAAC,MAAM;IAC/B,IAAIoB,QAAQ,EAAE;MACVA,QAAQ,CAAC;QACLY,EAAE,EAAEb,KAAK,CAACa,EAAE;QACZC,OAAO,EAAEd,KAAK,CAACe,KAAK,CAACD;MACzB,CAAC,CAAC;IACN;EACJ,CAAC,EAAE,CAACb,QAAQ,EAAED,KAAK,CAACa,EAAE,EAAEb,KAAK,CAACe,KAAK,CAACD,OAAO,CAAC,CAAC;EAE7C,MAAMT,QAAQ,GAAGxB,WAAW,CACvBmC,EAAoB,IAAK;IACtB,IAAI,CAACV,aAAa,EAAE;MAChB;IACJ;IACAA,aAAa,CAACF,KAAK,EAAEY,EAAE,CAACC,QAAQ,CAAC;EACrC,CAAC,EACD,CAACX,aAAa,EAAEF,KAAK,CACzB,CAAC;EACD,MAAMG,UAAU,GAAG1B,WAAW,CACzBmC,EAAoB,IAAK;IACtB,IAAI,CAACR,eAAe,EAAE;MAClB;IACJ;IACAA,eAAe,CAACJ,KAAK,EAAEY,EAAE,CAACC,QAAQ,CAAC;EACvC,CAAC,EACD,CAACT,eAAe,EAAEJ,KAAK,CAC3B,CAAC;EAED,MAAMc,gBAAgB,GAAGlB,KAAK,CAACmB,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGrB,KAAK,CAACmB,MAAM,CAACG,KAAK,CAAC,CAAC,CAAC;;EAErF;EACA;EACA,MAAMC,aAAa,GAAGzC,OAAO,CAAC,MAAM;IAChC,MAAM0C,iBAAiB,GAAGxB,KAAK,CAACa,EAAE,CAACY,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM;;IAE1D;IACA,OAAO,GAAG,GAAGC,MAAM,CAACF,iBAAiB,CAAC,CAACG,QAAQ,CAAC,CAAC;EACrD,CAAC,EAAE,CAAC3B,KAAK,CAACa,EAAE,CAAC,CAAC;EAEd,MAAMe,QAAQ,GAAG5B,KAAK,CAAC6B,eAAe,EAAED,QAAQ,IAAI5B,KAAK,CAAC8B,QAAQ,EAAEF,QAAQ,IAAI,EAAE;EAElF,MAAMG,IAAI,GAAGpB,OAAO,CAACb,MAAM,CAACkC,cAAc,CAACC,IAAI,EAAE;IAC7CpB,EAAE,EAAEb,KAAK,CAACa,EAAE;IACZC,OAAO,EAAEd,KAAK,CAACe,KAAK,CAACD,OAAO;IAC5Bc;EACJ,CAAC,CAAC;EAEF,oBACIhD,KAAA,CAAAsD,aAAA;IACI,iBAAe/B,QAAS;IACxBgC,OAAO,EAAEvB,QAAS;IAClB,aAAU,iBAAiB;IAC3BwB,SAAS,EAAE9C,EAAE,CACT,6LAA6L,EAC7L;MAAE,sBAAsB,EAAE,CAAC,CAACW;IAAS,CACzC;EAAE,GAEDA,QAAQ,IAAI,CAACS,QAAQ,gBAClB9B,KAAA,CAAAsD,aAAA,2BACItD,KAAA,CAAAsD,aAAA,CAAC7C,QAAQ;IACLgD,OAAO,EAAElC,QAAS;IAClBF,QAAQ,EAAEA,CAAA,KAAM;MACZ;MACA;IAAA;EACF,CACL,CACA,CAAC,GACN,IAAI,eACRrB,KAAA,CAAAsD,aAAA;IACIE,SAAS,EACL;EACH,gBAEDxD,KAAA,CAAAsD,aAAA,CAACnD,KAAK;IAACuD,KAAK,EAAEtC,KAAK,CAACsC,KAAM;IAACC,GAAG,EAAEvC,KAAK,CAACwC;EAAM,CAAE,CAAC,eAC/C5D,KAAA,CAAAsD,aAAA;IAAKE,SAAS,EAAE;EAAkB,gBAC9BxD,KAAA,CAAAsD,aAAA,cAAMlC,KAAK,CAACe,KAAK,CAAC0B,IAAU,CAAC,eAE7B7D,KAAA,CAAAsD,aAAA;IACII,KAAK,EAAEtC,KAAK,CAACsC,KAAM;IACnBF,SAAS,EACL;EACH,GAEApC,KAAK,CAACsC,KACN,CAAC,eAEN1D,KAAA,CAAAsD,aAAA,2BACItD,KAAA,CAAAsD,aAAA;IAAME,SAAS,EAAE;EAAwB,GAAC,UAAc,CAAC,eACzDxD,KAAA,CAAAsD,aAAA,eACKlC,KAAK,CAAC0C,SAAS,CAACC,WAAW,EAAC,IAAE,eAAA/D,KAAA,CAAAsD,aAAA,CAACjD,OAAO;IAAC2D,QAAQ,EAAE5C,KAAK,CAAC6C;EAAU,CAAE,CAClE,CACL,CAOJ,CAAC,eACNjE,KAAA,CAAAsD,aAAA;IAAKE,SAAS,EAAE;EAA2B,gBACvCxD,KAAA,CAAAsD,aAAA,CAAClD,GAAG;IACA8D,OAAO,eACHlE,KAAA,CAAAsD,aAAA,CAAAtD,KAAA,CAAAmE,QAAA,QACK7B,gBAAgB,EAAC,MAClB,eAAAtC,KAAA,CAAAsD,aAAA,CAAChD,IAAI;MAAC8D,IAAI,EAAE,IAAK;MAACZ,SAAS,EAAE;IAAqB,GAAC,GAC9C,EAACb,aAAa,EAAC,GACd,CACR,CACL;IACD0B,OAAO,EAAE;EAAuB,CACnC,CAAC,EAED,CAACvC,QAAQ,IAAID,SAAS,IAAI,UAAU,gBACjC7B,KAAA,CAAAsD,aAAA,CAAAtD,KAAA,CAAAmE,QAAA,qBACInE,KAAA,CAAAsD,aAAA;IAAKE,SAAS,EAAE;EAAc,gBAC1BxD,KAAA,CAAAsD,aAAA,CAAC9C,UAAU;IACPsB,QAAQ,EAAE,CAACJ,aAAc;IACzB2C,OAAO,EAAE,OAAQ;IACjBD,IAAI,EAAE,IAAK;IACXE,IAAI,eAAEtE,KAAA,CAAAsD,aAAA,CAACvC,OAAO,MAAE,CAAE;IAClBwC,OAAO,EAAE9B;EAAS,CACrB,CAAC,eACFzB,KAAA,CAAAsD,aAAA,CAAC9C,UAAU;IACPsB,QAAQ,EAAE,CAACF,eAAgB;IAC3ByC,OAAO,EAAE,OAAQ;IACjBD,IAAI,EAAE,IAAK;IACXE,IAAI,eAAEtE,KAAA,CAAAsD,aAAA,CAACtC,SAAS,MAAE,CAAE;IACpBuC,OAAO,EAAE5B;EAAW,CACvB,CACA,CACP,CAAC,GACH,IAAI,EAEP,CAACG,QAAQ,gBACN9B,KAAA,CAAAsD,aAAA,CAAC/C,YAAY;IACTgE,OAAO,eACHvE,KAAA,CAAAsD,aAAA,CAAC9C,UAAU;MAAC6D,OAAO,EAAE,OAAQ;MAACD,IAAI,EAAE,IAAK;MAACE,IAAI,eAAEtE,KAAA,CAAAsD,aAAA,CAAC1C,YAAY,MAAE;IAAE,CAAE;EACtE,gBAEDZ,KAAA,CAAAsD,aAAA,CAAC/C,YAAY,CAACiE,IAAI;IACdF,IAAI,eAAEtE,KAAA,CAAAsD,aAAA,CAACzC,aAAa,MAAE,CAAE;IACxB4D,IAAI,EAAE,iBAAkB;IACxBC,EAAE,EAAEvB,IAAK;IACTwB,MAAM,EAAE;EAAS,CACpB,CAAC,EAEDrD,QAAQ,iBACLtB,KAAA,CAAAsD,aAAA,CAAC/C,YAAY,CAACqE,IAAI;IACdN,IAAI,eAAEtE,KAAA,CAAAsD,aAAA,CAACxC,UAAU,MAAE,CAAE;IACrB2D,IAAI,EAAE5C,SAAS,KAAK,UAAU,GAAG,kBAAkB,GAAG,QAAS;IAC/D0B,OAAO,EAAEA,CAAA,KAAMjC,QAAQ,CAACF,KAAK,CAACa,EAAE;EAAE,CACrC,CAEK,CAAC,GACf,IACH,CACJ,CACJ,CAAC;AAEd,CAAC","ignoreList":[]}
@@ -5,5 +5,5 @@ interface ContentEntriesAutocompleteProps {
5
5
  bind: BindComponentRenderProp;
6
6
  field: CmsModelField;
7
7
  }
8
- declare const ContentEntriesAutocomplete: ({ bind, field }: ContentEntriesAutocompleteProps) => React.JSX.Element;
8
+ declare const ContentEntriesAutocomplete: ({ bind }: ContentEntriesAutocompleteProps) => React.JSX.Element;
9
9
  export default ContentEntriesAutocomplete;
@@ -8,15 +8,19 @@ import { useNewRefEntry } from "../hooks/useNewRefEntry.js";
8
8
  import { useReference } from "./useReference.js";
9
9
  import { renderItem } from "./renderItem.js";
10
10
  import { createEntryUrl } from "./createEntryUrl.js";
11
- import { useModels } from "../../../../hooks/index.js";
11
+ import { useEffectiveRules } from "@webiny/app-headless-cms-common";
12
+ import { useModelField, useModels } from "../../../../hooks/index.js";
12
13
  import { NewReferencedEntryDialog } from "./NewReferencedEntryDialog.js";
13
14
  const t = i18n.ns("app-headless-cms/admin/fields/ref");
14
15
  const unpublishedLabel = t`Selected content entry is not published. Make sure to {publishItLink} before publishing the main content entry.`;
15
16
  const publishedLabel = t`Selected content entry is published. You can view it {here}.`;
16
17
  const ContentEntriesAutocomplete = ({
17
- bind,
18
- field
18
+ bind
19
19
  }) => {
20
+ const {
21
+ field
22
+ } = useModelField();
23
+ const rules = useEffectiveRules(field);
20
24
  const {
21
25
  models
22
26
  } = useModels();
@@ -31,6 +35,7 @@ const ContentEntriesAutocomplete = ({
31
35
  bind,
32
36
  field
33
37
  });
38
+ const disabled = !rules.canEdit || rules.disabled;
34
39
  let entryInfo = null;
35
40
  if (value && !value.published) {
36
41
  const link = createEntryUrl(value);
@@ -83,6 +88,7 @@ const ContentEntriesAutocomplete = ({
83
88
  })));
84
89
  }
85
90
  return /*#__PURE__*/React.createElement(AutoComplete, Object.assign({}, bind, {
91
+ disabled: disabled,
86
92
  renderItem: renderItem,
87
93
  onChange: onChange,
88
94
  loading: loading,