@webiny/app-headless-cms 6.0.0-rc.4 → 6.0.0-rc.6

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 (132) hide show
  1. package/admin/components/ContentEntryForm/CustomLayout.js +2 -13
  2. package/admin/components/ContentEntryForm/CustomLayout.js.map +1 -1
  3. package/admin/components/ContentModelEditor/ContentModelEditorProvider.js.map +1 -1
  4. package/admin/components/ContentModelEditor/FieldsSidebar.js.map +1 -1
  5. package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js +4 -4
  6. package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js.map +1 -1
  7. package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/FieldPermissionsSelection.js +5 -8
  8. package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/FieldPermissionsSelection.js.map +1 -0
  9. package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.d.ts +2 -0
  10. package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab/PermissionsTab.js → PermissionsEditor/PermissionsEditor.js} +4 -10
  11. package/admin/components/FieldEditor/EditFieldDialog/PermissionsEditor/PermissionsEditor.js.map +1 -0
  12. package/admin/components/FieldEditor/EditFieldDialog/{RulesTab/RulesTab.d.ts → RulesEditor/RulesEditor.d.ts} +1 -2
  13. package/admin/components/FieldEditor/EditFieldDialog/{RulesTab/RulesTab.js → RulesEditor/RulesEditor.js} +3 -6
  14. package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/RulesEditor.js.map +1 -0
  15. package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.d.ts +1 -0
  16. package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.js +3 -0
  17. package/admin/components/FieldEditor/EditFieldDialog/RulesEditor/index.js.map +1 -0
  18. package/admin/components/FieldEditor/EditFieldDialog/getValidators.d.ts +3 -3
  19. package/admin/components/FieldEditor/EditFieldDialog/getValidators.js.map +1 -1
  20. package/admin/components/FieldEditor/FieldEditor.js +10 -10
  21. package/admin/components/FieldEditor/FieldEditor.js.map +1 -1
  22. package/admin/components/FieldEditor/FieldEditorContext.d.ts +11 -11
  23. package/admin/components/FieldEditor/FieldEditorContext.js +41 -41
  24. package/admin/components/FieldEditor/FieldEditorContext.js.map +1 -1
  25. package/admin/components/FieldEditor/LayoutCell.d.ts +3 -3
  26. package/admin/components/FieldEditor/LayoutCell.js +6 -6
  27. package/admin/components/FieldEditor/LayoutCell.js.map +1 -1
  28. package/admin/hooks/useCms.d.ts +1 -1
  29. package/admin/hooks/useCms.js +1 -1
  30. package/admin/hooks/useCms.js.map +1 -1
  31. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js +2 -2
  32. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js.map +1 -1
  33. package/admin/plugins/fieldRenderers/checkboxes.js +2 -2
  34. package/admin/plugins/fieldRenderers/checkboxes.js.map +1 -1
  35. package/admin/plugins/fieldRenderers/dateTime/Input.js +2 -2
  36. package/admin/plugins/fieldRenderers/dateTime/Input.js.map +1 -1
  37. package/admin/plugins/fieldRenderers/dateTime/Select.js +2 -2
  38. package/admin/plugins/fieldRenderers/dateTime/Select.js.map +1 -1
  39. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js +2 -2
  40. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js.map +1 -1
  41. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js +2 -2
  42. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js.map +1 -1
  43. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js +2 -2
  44. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js.map +1 -1
  45. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js +2 -2
  46. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js.map +1 -1
  47. package/admin/plugins/fieldRenderers/longText/longText.js +2 -2
  48. package/admin/plugins/fieldRenderers/longText/longText.js.map +1 -1
  49. package/admin/plugins/fieldRenderers/longText/longTexts.js +2 -2
  50. package/admin/plugins/fieldRenderers/longText/longTexts.js.map +1 -1
  51. package/admin/plugins/fieldRenderers/number/numberInput.js +2 -2
  52. package/admin/plugins/fieldRenderers/number/numberInput.js.map +1 -1
  53. package/admin/plugins/fieldRenderers/number/numberInputs.js +2 -2
  54. package/admin/plugins/fieldRenderers/number/numberInputs.js.map +1 -1
  55. package/admin/plugins/fieldRenderers/object/MultiValueContainer.js +2 -2
  56. package/admin/plugins/fieldRenderers/object/MultiValueContainer.js.map +1 -1
  57. package/admin/plugins/fieldRenderers/radioButtons.js +2 -2
  58. package/admin/plugins/fieldRenderers/radioButtons.js.map +1 -1
  59. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js +2 -2
  60. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js.map +1 -1
  61. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js +2 -2
  62. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js.map +1 -1
  63. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js +2 -2
  64. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
  65. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js +2 -2
  66. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js.map +1 -1
  67. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js +2 -2
  68. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js.map +1 -1
  69. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js +2 -2
  70. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js.map +1 -1
  71. package/admin/plugins/fieldRenderers/select.js +2 -2
  72. package/admin/plugins/fieldRenderers/select.js.map +1 -1
  73. package/admin/plugins/fieldRenderers/text/tags.js +2 -2
  74. package/admin/plugins/fieldRenderers/text/tags.js.map +1 -1
  75. package/admin/plugins/fieldRenderers/text/textInput.js +2 -2
  76. package/admin/plugins/fieldRenderers/text/textInput.js.map +1 -1
  77. package/admin/plugins/fieldRenderers/text/textInputs.js +2 -2
  78. package/admin/plugins/fieldRenderers/text/textInputs.js.map +1 -1
  79. package/admin/plugins/fields/ui/TabsLayoutEditor.d.ts +4 -4
  80. package/admin/plugins/fields/ui/TabsLayoutEditor.js +65 -61
  81. package/admin/plugins/fields/ui/TabsLayoutEditor.js.map +1 -1
  82. package/admin/plugins/fields/ui/alert.d.ts +2 -2
  83. package/admin/plugins/fields/ui/alert.js +25 -22
  84. package/admin/plugins/fields/ui/alert.js.map +1 -1
  85. package/admin/plugins/fields/ui/separator.d.ts +2 -2
  86. package/admin/plugins/fields/ui/separator.js +24 -21
  87. package/admin/plugins/fields/ui/separator.js.map +1 -1
  88. package/admin/plugins/fields/ui/tabs.d.ts +2 -2
  89. package/admin/plugins/fields/ui/tabs.js +10 -10
  90. package/admin/plugins/fields/ui/tabs.js.map +1 -1
  91. package/admin/views/contentModels/importing/ImportContentModelsDialog.js +15 -13
  92. package/admin/views/contentModels/importing/ImportContentModelsDialog.js.map +1 -1
  93. package/allPlugins.d.ts +1 -1
  94. package/exports/admin/cms/model.d.ts +2 -1
  95. package/exports/admin/cms/model.js +2 -1
  96. package/exports/admin/cms/model.js.map +1 -1
  97. package/exports/admin/cms.d.ts +7 -0
  98. package/exports/admin/cms.js +7 -0
  99. package/exports/admin/cms.js.map +1 -1
  100. package/legacyPluginAdapters/CmsContentFormRenderer.d.ts +4 -0
  101. package/legacyPluginAdapters/CmsContentFormRenderer.js +15 -0
  102. package/legacyPluginAdapters/CmsContentFormRenderer.js.map +1 -0
  103. package/legacyPluginAdapters/CmsModelFieldRenderer.d.ts +4 -0
  104. package/legacyPluginAdapters/CmsModelFieldRenderer.js +14 -0
  105. package/legacyPluginAdapters/CmsModelFieldRenderer.js.map +1 -0
  106. package/legacyPluginAdapters/CmsModelFieldType.d.ts +4 -0
  107. package/legacyPluginAdapters/CmsModelFieldType.js +14 -0
  108. package/legacyPluginAdapters/CmsModelFieldType.js.map +1 -0
  109. package/legacyPluginAdapters/CmsModelFieldValidator.d.ts +4 -0
  110. package/legacyPluginAdapters/CmsModelFieldValidator.js +14 -0
  111. package/legacyPluginAdapters/CmsModelFieldValidator.js.map +1 -0
  112. package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.d.ts +13 -0
  113. package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.js +15 -0
  114. package/legacyPluginAdapters/CmsModelLayoutFieldRenderer.js.map +1 -0
  115. package/legacyPluginAdapters/CmsModelLayoutFieldType.d.ts +2 -0
  116. package/legacyPluginAdapters/CmsModelLayoutFieldType.js +14 -0
  117. package/legacyPluginAdapters/CmsModelLayoutFieldType.js.map +1 -0
  118. package/package.json +24 -24
  119. package/types.d.ts +1 -1
  120. package/types.js +1 -1
  121. package/types.js.map +1 -1
  122. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/FieldPermissionsSelection.js.map +0 -1
  123. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.d.ts +0 -4
  124. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.js.map +0 -1
  125. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.js.map +0 -1
  126. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.d.ts +0 -1
  127. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js +0 -3
  128. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js.map +0 -1
  129. /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.d.ts +0 -0
  130. /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.js +0 -0
  131. /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/CannotUsePermissions.js.map +0 -0
  132. /package/admin/components/FieldEditor/EditFieldDialog/{PermissionsTab → PermissionsEditor}/FieldPermissionsSelection.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["React","get","i18n","ReactComponent","DeleteIcon","DynamicSection","MultiValueRendererSettings","DelayedOnChange","IconButton","Textarea","CanEditField","useEffectiveRules","useModelField","t","ns","plugin","type","name","renderer","rendererName","description","canUse","field","list","render","props","rules","disabled","canEdit","createElement","Object","assign","bind","index","className","value","onChange","onBlur","validate","validation","rows","label","number","placeholder","variant","size","icon","onClick","removeValue","renderSettings"],"sources":["longTexts.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 { ReactComponent as DeleteIcon } from \"@webiny/icons/delete_outline.svg\";\nimport DynamicSection from \"../DynamicSection.js\";\nimport { MultiValueRendererSettings } from \"~/admin/plugins/fieldRenderers/MultiValueRendererSettings.js\";\nimport { DelayedOnChange, IconButton, Textarea } from \"@webiny/admin-ui\";\nimport { CanEditField, 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-long-text-inputs\",\n renderer: {\n rendererName: \"long-text-inputs\",\n name: t`Text Areas`,\n description: t`Renders a simple list of text areas.`,\n canUse({ field }) {\n return (\n field.type === \"long-text\" &&\n !!field.list &&\n !get(field, \"predefinedValues.enabled\")\n );\n },\n render(props) {\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n const disabled = !rules.canEdit || rules.disabled;\n\n return (\n <DynamicSection {...props} disabled={disabled}>\n {({ bind, index }) => (\n <div className={\"relative\"}>\n <DelayedOnChange\n value={bind.index.value}\n onChange={bind.index.onChange}\n onBlur={bind.index.validate}\n >\n <Textarea\n disabled={disabled}\n validation={bind.index.validation}\n rows={5}\n label={t`Value {number}`({ number: index + 1 })}\n placeholder={props.field.placeholder}\n data-testid={`fr.input.longTexts.${props.field.label}.${\n index + 1\n }`}\n />\n </DelayedOnChange>\n <CanEditField>\n <div className={\"absolute top-xl right-sm z-10\"}>\n <IconButton\n variant={\"ghost\"}\n size={\"md\"}\n icon={<DeleteIcon />}\n onClick={() => bind.field.removeValue(index)}\n />\n </div>\n </CanEditField>\n </div>\n )}\n </DynamicSection>\n );\n },\n renderSettings(props) {\n return <MultiValueRendererSettings {...props} />;\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,cAAc,IAAIC,UAAU,QAAQ,kCAAkC;AAC/E,OAAOC,cAAc;AACrB,SAASC,0BAA0B;AACnC,SAASC,eAAe,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,kBAAkB;AACxE,SAASC,YAAY,EAAEC,iBAAiB,EAAEC,aAAa,QAAQ,iCAAiC;AAEhG,MAAMC,CAAC,GAAGX,IAAI,CAACY,EAAE,CAAC,oCAAoC,CAAC;AAEvD,MAAMC,MAAmC,GAAG;EACxCC,IAAI,EAAE,2BAA2B;EACjCC,IAAI,EAAE,4CAA4C;EAClDC,QAAQ,EAAE;IACNC,YAAY,EAAE,kBAAkB;IAChCF,IAAI,EAAEJ,CAAC,YAAY;IACnBO,WAAW,EAAEP,CAAC,sCAAsC;IACpDQ,MAAMA,CAAC;MAAEC;IAAM,CAAC,EAAE;MACd,OACIA,KAAK,CAACN,IAAI,KAAK,WAAW,IAC1B,CAAC,CAACM,KAAK,CAACC,IAAI,IACZ,CAACtB,GAAG,CAACqB,KAAK,EAAE,0BAA0B,CAAC;IAE/C,CAAC;IACDE,MAAMA,CAACC,KAAK,EAAE;MACV,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;MAEjD,oBACI3B,KAAA,CAAA6B,aAAA,CAACxB,cAAc,EAAAyB,MAAA,CAAAC,MAAA,KAAKN,KAAK;QAAEE,QAAQ,EAAEA;MAAS,IACzC,CAAC;QAAEK,IAAI;QAAEC;MAAM,CAAC,kBACbjC,KAAA,CAAA6B,aAAA;QAAKK,SAAS,EAAE;MAAW,gBACvBlC,KAAA,CAAA6B,aAAA,CAACtB,eAAe;QACZ4B,KAAK,EAAEH,IAAI,CAACC,KAAK,CAACE,KAAM;QACxBC,QAAQ,EAAEJ,IAAI,CAACC,KAAK,CAACG,QAAS;QAC9BC,MAAM,EAAEL,IAAI,CAACC,KAAK,CAACK;MAAS,gBAE5BtC,KAAA,CAAA6B,aAAA,CAACpB,QAAQ;QACLkB,QAAQ,EAAEA,QAAS;QACnBY,UAAU,EAAEP,IAAI,CAACC,KAAK,CAACM,UAAW;QAClCC,IAAI,EAAE,CAAE;QACRC,KAAK,EAAE5B,CAAC,gBAAgB,CAAC;UAAE6B,MAAM,EAAET,KAAK,GAAG;QAAE,CAAC,CAAE;QAChDU,WAAW,EAAElB,KAAK,CAACH,KAAK,CAACqB,WAAY;QACrC,eAAa,sBAAsBlB,KAAK,CAACH,KAAK,CAACmB,KAAK,IAChDR,KAAK,GAAG,CAAC;MACV,CACN,CACY,CAAC,eAClBjC,KAAA,CAAA6B,aAAA,CAACnB,YAAY,qBACTV,KAAA,CAAA6B,aAAA;QAAKK,SAAS,EAAE;MAAgC,gBAC5ClC,KAAA,CAAA6B,aAAA,CAACrB,UAAU;QACPoC,OAAO,EAAE,OAAQ;QACjBC,IAAI,EAAE,IAAK;QACXC,IAAI,eAAE9C,KAAA,CAAA6B,aAAA,CAACzB,UAAU,MAAE,CAAE;QACrB2C,OAAO,EAAEA,CAAA,KAAMf,IAAI,CAACV,KAAK,CAAC0B,WAAW,CAACf,KAAK;MAAE,CAChD,CACA,CACK,CACb,CAEG,CAAC;IAEzB,CAAC;IACDgB,cAAcA,CAACxB,KAAK,EAAE;MAClB,oBAAOzB,KAAA,CAAA6B,aAAA,CAACvB,0BAA0B,EAAKmB,KAAQ,CAAC;IACpD;EACJ;AACJ,CAAC;AAED,eAAeV,MAAM","ignoreList":[]}
1
+ {"version":3,"names":["React","get","i18n","ReactComponent","DeleteIcon","DynamicSection","MultiValueRendererSettings","DelayedOnChange","IconButton","Textarea","CanEditField","useFieldEffectiveRules","useModelField","t","ns","plugin","type","name","renderer","rendererName","description","canUse","field","list","render","props","rules","disabled","canEdit","createElement","Object","assign","bind","index","className","value","onChange","onBlur","validate","validation","rows","label","number","placeholder","variant","size","icon","onClick","removeValue","renderSettings"],"sources":["longTexts.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 { ReactComponent as DeleteIcon } from \"@webiny/icons/delete_outline.svg\";\nimport DynamicSection from \"../DynamicSection.js\";\nimport { MultiValueRendererSettings } from \"~/admin/plugins/fieldRenderers/MultiValueRendererSettings.js\";\nimport { DelayedOnChange, IconButton, Textarea } from \"@webiny/admin-ui\";\nimport {\n CanEditField,\n useFieldEffectiveRules,\n useModelField\n} 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-long-text-inputs\",\n renderer: {\n rendererName: \"long-text-inputs\",\n name: t`Text Areas`,\n description: t`Renders a simple list of text areas.`,\n canUse({ field }) {\n return (\n field.type === \"long-text\" &&\n !!field.list &&\n !get(field, \"predefinedValues.enabled\")\n );\n },\n render(props) {\n const { field } = useModelField();\n const rules = useFieldEffectiveRules(field);\n const disabled = !rules.canEdit || rules.disabled;\n\n return (\n <DynamicSection {...props} disabled={disabled}>\n {({ bind, index }) => (\n <div className={\"relative\"}>\n <DelayedOnChange\n value={bind.index.value}\n onChange={bind.index.onChange}\n onBlur={bind.index.validate}\n >\n <Textarea\n disabled={disabled}\n validation={bind.index.validation}\n rows={5}\n label={t`Value {number}`({ number: index + 1 })}\n placeholder={props.field.placeholder}\n data-testid={`fr.input.longTexts.${props.field.label}.${\n index + 1\n }`}\n />\n </DelayedOnChange>\n <CanEditField>\n <div className={\"absolute top-xl right-sm z-10\"}>\n <IconButton\n variant={\"ghost\"}\n size={\"md\"}\n icon={<DeleteIcon />}\n onClick={() => bind.field.removeValue(index)}\n />\n </div>\n </CanEditField>\n </div>\n )}\n </DynamicSection>\n );\n },\n renderSettings(props) {\n return <MultiValueRendererSettings {...props} />;\n }\n }\n};\n\nexport default plugin;\n"],"mappings":"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","ignoreList":[]}
@@ -2,7 +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 { DelayedOnChange, Input } from "@webiny/admin-ui";
5
- import { useEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
5
+ import { useFieldEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
6
6
  const t = i18n.ns("app-headless-cms/admin/fields/number");
7
7
  const plugin = {
8
8
  type: "cms-editor-field-renderer",
@@ -22,7 +22,7 @@ const plugin = {
22
22
  const {
23
23
  field
24
24
  } = useModelField();
25
- const rules = useEffectiveRules(field);
25
+ const rules = useFieldEffectiveRules(field);
26
26
  const disabled = !rules.canEdit || rules.disabled;
27
27
  const Bind = getBind();
28
28
  return /*#__PURE__*/React.createElement(Bind, null, bind => /*#__PURE__*/React.createElement(Bind.ValidationContainer, null, /*#__PURE__*/React.createElement(DelayedOnChange, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","get","i18n","DelayedOnChange","Input","useEffectiveRules","useModelField","t","ns","plugin","type","name","renderer","rendererName","description","canUse","field","list","render","getBind","rules","disabled","canEdit","Bind","createElement","bind","ValidationContainer","value","onChange","onBlur","validate","label","placeholder","note","hint","help","validation"],"sources":["numberInput.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 { DelayedOnChange, Input } from \"@webiny/admin-ui\";\nimport { useEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/number\");\n\nconst plugin: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-number\",\n renderer: {\n rendererName: \"number-input\",\n name: t`Number Input`,\n description: t`Renders a simple input with its type set to \"number\".`,\n canUse({ field }) {\n return (\n field.type === \"number\" && !field.list && !get(field, \"predefinedValues.enabled\")\n );\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 return (\n <Bind>\n {bind => (\n <Bind.ValidationContainer>\n <DelayedOnChange\n value={bind.value}\n onChange={bind.onChange}\n onBlur={bind.validate}\n >\n <Input\n disabled={disabled}\n label={field.label}\n placeholder={field.placeholder}\n description={field.description}\n note={field.note}\n hint={field.help}\n type=\"number\"\n data-testid={`fr.input.number.${field.label}`}\n validation={bind.validation}\n />\n </DelayedOnChange>\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,eAAe,EAAEC,KAAK,QAAQ,kBAAkB;AACzD,SAASC,iBAAiB,EAAEC,aAAa,QAAQ,iCAAiC;AAElF,MAAMC,CAAC,GAAGL,IAAI,CAACM,EAAE,CAAC,sCAAsC,CAAC;AAEzD,MAAMC,MAAmC,GAAG;EACxCC,IAAI,EAAE,2BAA2B;EACjCC,IAAI,EAAE,kCAAkC;EACxCC,QAAQ,EAAE;IACNC,YAAY,EAAE,cAAc;IAC5BF,IAAI,EAAEJ,CAAC,cAAc;IACrBO,WAAW,EAAEP,CAAC,uDAAuD;IACrEQ,MAAMA,CAAC;MAAEC;IAAM,CAAC,EAAE;MACd,OACIA,KAAK,CAACN,IAAI,KAAK,QAAQ,IAAI,CAACM,KAAK,CAACC,IAAI,IAAI,CAAChB,GAAG,CAACe,KAAK,EAAE,0BAA0B,CAAC;IAEzF,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,oBACInB,KAAA,CAAAwB,aAAA,CAACD,IAAI,QACAE,IAAI,iBACDzB,KAAA,CAAAwB,aAAA,CAACD,IAAI,CAACG,mBAAmB,qBACrB1B,KAAA,CAAAwB,aAAA,CAACrB,eAAe;QACZwB,KAAK,EAAEF,IAAI,CAACE,KAAM;QAClBC,QAAQ,EAAEH,IAAI,CAACG,QAAS;QACxBC,MAAM,EAAEJ,IAAI,CAACK;MAAS,gBAEtB9B,KAAA,CAAAwB,aAAA,CAACpB,KAAK;QACFiB,QAAQ,EAAEA,QAAS;QACnBU,KAAK,EAAEf,KAAK,CAACe,KAAM;QACnBC,WAAW,EAAEhB,KAAK,CAACgB,WAAY;QAC/BlB,WAAW,EAAEE,KAAK,CAACF,WAAY;QAC/BmB,IAAI,EAAEjB,KAAK,CAACiB,IAAK;QACjBC,IAAI,EAAElB,KAAK,CAACmB,IAAK;QACjBzB,IAAI,EAAC,QAAQ;QACb,eAAa,mBAAmBM,KAAK,CAACe,KAAK,EAAG;QAC9CK,UAAU,EAAEX,IAAI,CAACW;MAAW,CAC/B,CACY,CACK,CAE5B,CAAC;IAEf;EACJ;AACJ,CAAC;AAED,eAAe3B,MAAM","ignoreList":[]}
1
+ {"version":3,"names":["React","get","i18n","DelayedOnChange","Input","useFieldEffectiveRules","useModelField","t","ns","plugin","type","name","renderer","rendererName","description","canUse","field","list","render","getBind","rules","disabled","canEdit","Bind","createElement","bind","ValidationContainer","value","onChange","onBlur","validate","label","placeholder","note","hint","help","validation"],"sources":["numberInput.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 { DelayedOnChange, Input } from \"@webiny/admin-ui\";\nimport { useFieldEffectiveRules, useModelField } from \"@webiny/app-headless-cms-common\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/number\");\n\nconst plugin: CmsModelFieldRendererPlugin = {\n type: \"cms-editor-field-renderer\",\n name: \"cms-editor-field-renderer-number\",\n renderer: {\n rendererName: \"number-input\",\n name: t`Number Input`,\n description: t`Renders a simple input with its type set to \"number\".`,\n canUse({ field }) {\n return (\n field.type === \"number\" && !field.list && !get(field, \"predefinedValues.enabled\")\n );\n },\n render({ getBind }) {\n const { field } = useModelField();\n const rules = useFieldEffectiveRules(field);\n const disabled = !rules.canEdit || rules.disabled;\n const Bind = getBind();\n\n return (\n <Bind>\n {bind => (\n <Bind.ValidationContainer>\n <DelayedOnChange\n value={bind.value}\n onChange={bind.onChange}\n onBlur={bind.validate}\n >\n <Input\n disabled={disabled}\n label={field.label}\n placeholder={field.placeholder}\n description={field.description}\n note={field.note}\n hint={field.help}\n type=\"number\"\n data-testid={`fr.input.number.${field.label}`}\n validation={bind.validation}\n />\n </DelayedOnChange>\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,eAAe,EAAEC,KAAK,QAAQ,kBAAkB;AACzD,SAASC,sBAAsB,EAAEC,aAAa,QAAQ,iCAAiC;AAEvF,MAAMC,CAAC,GAAGL,IAAI,CAACM,EAAE,CAAC,sCAAsC,CAAC;AAEzD,MAAMC,MAAmC,GAAG;EACxCC,IAAI,EAAE,2BAA2B;EACjCC,IAAI,EAAE,kCAAkC;EACxCC,QAAQ,EAAE;IACNC,YAAY,EAAE,cAAc;IAC5BF,IAAI,EAAEJ,CAAC,cAAc;IACrBO,WAAW,EAAEP,CAAC,uDAAuD;IACrEQ,MAAMA,CAAC;MAAEC;IAAM,CAAC,EAAE;MACd,OACIA,KAAK,CAACN,IAAI,KAAK,QAAQ,IAAI,CAACM,KAAK,CAACC,IAAI,IAAI,CAAChB,GAAG,CAACe,KAAK,EAAE,0BAA0B,CAAC;IAEzF,CAAC;IACDE,MAAMA,CAAC;MAAEC;IAAQ,CAAC,EAAE;MAChB,MAAM;QAAEH;MAAM,CAAC,GAAGV,aAAa,CAAC,CAAC;MACjC,MAAMc,KAAK,GAAGf,sBAAsB,CAACW,KAAK,CAAC;MAC3C,MAAMK,QAAQ,GAAG,CAACD,KAAK,CAACE,OAAO,IAAIF,KAAK,CAACC,QAAQ;MACjD,MAAME,IAAI,GAAGJ,OAAO,CAAC,CAAC;MAEtB,oBACInB,KAAA,CAAAwB,aAAA,CAACD,IAAI,QACAE,IAAI,iBACDzB,KAAA,CAAAwB,aAAA,CAACD,IAAI,CAACG,mBAAmB,qBACrB1B,KAAA,CAAAwB,aAAA,CAACrB,eAAe;QACZwB,KAAK,EAAEF,IAAI,CAACE,KAAM;QAClBC,QAAQ,EAAEH,IAAI,CAACG,QAAS;QACxBC,MAAM,EAAEJ,IAAI,CAACK;MAAS,gBAEtB9B,KAAA,CAAAwB,aAAA,CAACpB,KAAK;QACFiB,QAAQ,EAAEA,QAAS;QACnBU,KAAK,EAAEf,KAAK,CAACe,KAAM;QACnBC,WAAW,EAAEhB,KAAK,CAACgB,WAAY;QAC/BlB,WAAW,EAAEE,KAAK,CAACF,WAAY;QAC/BmB,IAAI,EAAEjB,KAAK,CAACiB,IAAK;QACjBC,IAAI,EAAElB,KAAK,CAACmB,IAAK;QACjBzB,IAAI,EAAC,QAAQ;QACb,eAAa,mBAAmBM,KAAK,CAACe,KAAK,EAAG;QAC9CK,UAAU,EAAEX,IAAI,CAACW;MAAW,CAC/B,CACY,CACK,CAE5B,CAAC;IAEf;EACJ;AACJ,CAAC;AAED,eAAe3B,MAAM","ignoreList":[]}
@@ -5,7 +5,7 @@ import { ReactComponent as DeleteIcon } from "@webiny/icons/delete.svg";
5
5
  import DynamicSection from "../DynamicSection.js";
6
6
  import { MultiValueRendererSettings } from "../MultiValueRendererSettings.js";
7
7
  import { DelayedOnChange, Icon, Input } from "@webiny/admin-ui";
8
- import { CanEditField, useEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
8
+ import { CanEditField, useFieldEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
9
9
  const t = i18n.ns("app-headless-cms/admin/fields/text");
10
10
  const plugin = {
11
11
  type: "cms-editor-field-renderer",
@@ -23,7 +23,7 @@ const plugin = {
23
23
  const {
24
24
  field
25
25
  } = useModelField();
26
- const rules = useEffectiveRules(field);
26
+ const rules = useFieldEffectiveRules(field);
27
27
  return /*#__PURE__*/React.createElement(DynamicSection, Object.assign({}, props, {
28
28
  disabled: !rules.canEdit
29
29
  }), ({
@@ -1 +1 @@
1
- {"version":3,"names":["React","get","i18n","ReactComponent","DeleteIcon","DynamicSection","MultiValueRendererSettings","DelayedOnChange","Icon","Input","CanEditField","useEffectiveRules","useModelField","t","ns","plugin","type","name","renderer","rendererName","description","canUse","field","list","render","props","rules","createElement","Object","assign","disabled","canEdit","bind","index","value","onChange","onBlur","validate","validation","onEnter","appendValue","label","number","placeholder","endIcon","icon","onClick","removeValue","className","renderSettings"],"sources":["numberInputs.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 { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport DynamicSection from \"../DynamicSection.js\";\nimport { MultiValueRendererSettings } from \"~/admin/plugins/fieldRenderers/MultiValueRendererSettings.js\";\nimport { DelayedOnChange, Icon, Input } from \"@webiny/admin-ui\";\nimport { CanEditField, 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-number-inputs\",\n renderer: {\n rendererName: \"number-inputs\",\n name: t`Number Inputs`,\n description: t`Renders a simple list of number inputs.`,\n canUse({ field }) {\n return (\n field.type === \"number\" && !!field.list && !get(field, \"predefinedValues.enabled\")\n );\n },\n render(props) {\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n\n return (\n <DynamicSection {...props} disabled={!rules.canEdit}>\n {({ bind, index }) => (\n <DelayedOnChange\n value={bind.index.value}\n onChange={bind.index.onChange}\n onBlur={bind.index.validate}\n >\n <Input\n disabled={!rules.canEdit}\n validation={bind.index.validation}\n onEnter={() => bind.field.appendValue(\"\")}\n label={t`Value {number}`({ number: index + 1 })}\n placeholder={props.field.placeholder}\n data-testid={`fr.input.numbers.${props.field.label}.${index + 1}`}\n type=\"number\"\n endIcon={\n <CanEditField>\n <Icon\n icon={<DeleteIcon />}\n label={\"Delete\"}\n onClick={() => bind.field.removeValue(index)}\n className={\"cursor-pointer\"}\n />\n </CanEditField>\n }\n />\n </DelayedOnChange>\n )}\n </DynamicSection>\n );\n },\n renderSettings(props) {\n return <MultiValueRendererSettings {...props} />;\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,cAAc,IAAIC,UAAU,QAAQ,0BAA0B;AACvE,OAAOC,cAAc;AACrB,SAASC,0BAA0B;AACnC,SAASC,eAAe,EAAEC,IAAI,EAAEC,KAAK,QAAQ,kBAAkB;AAC/D,SAASC,YAAY,EAAEC,iBAAiB,EAAEC,aAAa,QAAQ,iCAAiC;AAEhG,MAAMC,CAAC,GAAGX,IAAI,CAACY,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,yCAAyC;IACvDQ,MAAMA,CAAC;MAAEC;IAAM,CAAC,EAAE;MACd,OACIA,KAAK,CAACN,IAAI,KAAK,QAAQ,IAAI,CAAC,CAACM,KAAK,CAACC,IAAI,IAAI,CAACtB,GAAG,CAACqB,KAAK,EAAE,0BAA0B,CAAC;IAE1F,CAAC;IACDE,MAAMA,CAACC,KAAK,EAAE;MACV,MAAM;QAAEH;MAAM,CAAC,GAAGV,aAAa,CAAC,CAAC;MACjC,MAAMc,KAAK,GAAGf,iBAAiB,CAACW,KAAK,CAAC;MAEtC,oBACItB,KAAA,CAAA2B,aAAA,CAACtB,cAAc,EAAAuB,MAAA,CAAAC,MAAA,KAAKJ,KAAK;QAAEK,QAAQ,EAAE,CAACJ,KAAK,CAACK;MAAQ,IAC/C,CAAC;QAAEC,IAAI;QAAEC;MAAM,CAAC,kBACbjC,KAAA,CAAA2B,aAAA,CAACpB,eAAe;QACZ2B,KAAK,EAAEF,IAAI,CAACC,KAAK,CAACC,KAAM;QACxBC,QAAQ,EAAEH,IAAI,CAACC,KAAK,CAACE,QAAS;QAC9BC,MAAM,EAAEJ,IAAI,CAACC,KAAK,CAACI;MAAS,gBAE5BrC,KAAA,CAAA2B,aAAA,CAAClB,KAAK;QACFqB,QAAQ,EAAE,CAACJ,KAAK,CAACK,OAAQ;QACzBO,UAAU,EAAEN,IAAI,CAACC,KAAK,CAACK,UAAW;QAClCC,OAAO,EAAEA,CAAA,KAAMP,IAAI,CAACV,KAAK,CAACkB,WAAW,CAAC,EAAE,CAAE;QAC1CC,KAAK,EAAE5B,CAAC,gBAAgB,CAAC;UAAE6B,MAAM,EAAET,KAAK,GAAG;QAAE,CAAC,CAAE;QAChDU,WAAW,EAAElB,KAAK,CAACH,KAAK,CAACqB,WAAY;QACrC,eAAa,oBAAoBlB,KAAK,CAACH,KAAK,CAACmB,KAAK,IAAIR,KAAK,GAAG,CAAC,EAAG;QAClEjB,IAAI,EAAC,QAAQ;QACb4B,OAAO,eACH5C,KAAA,CAAA2B,aAAA,CAACjB,YAAY,qBACTV,KAAA,CAAA2B,aAAA,CAACnB,IAAI;UACDqC,IAAI,eAAE7C,KAAA,CAAA2B,aAAA,CAACvB,UAAU,MAAE,CAAE;UACrBqC,KAAK,EAAE,QAAS;UAChBK,OAAO,EAAEA,CAAA,KAAMd,IAAI,CAACV,KAAK,CAACyB,WAAW,CAACd,KAAK,CAAE;UAC7Ce,SAAS,EAAE;QAAiB,CAC/B,CACS;MACjB,CACJ,CACY,CAET,CAAC;IAEzB,CAAC;IACDC,cAAcA,CAACxB,KAAK,EAAE;MAClB,oBAAOzB,KAAA,CAAA2B,aAAA,CAACrB,0BAA0B,EAAKmB,KAAQ,CAAC;IACpD;EACJ;AACJ,CAAC;AAED,eAAeV,MAAM","ignoreList":[]}
1
+ {"version":3,"names":["React","get","i18n","ReactComponent","DeleteIcon","DynamicSection","MultiValueRendererSettings","DelayedOnChange","Icon","Input","CanEditField","useFieldEffectiveRules","useModelField","t","ns","plugin","type","name","renderer","rendererName","description","canUse","field","list","render","props","rules","createElement","Object","assign","disabled","canEdit","bind","index","value","onChange","onBlur","validate","validation","onEnter","appendValue","label","number","placeholder","endIcon","icon","onClick","removeValue","className","renderSettings"],"sources":["numberInputs.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 { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport DynamicSection from \"../DynamicSection.js\";\nimport { MultiValueRendererSettings } from \"~/admin/plugins/fieldRenderers/MultiValueRendererSettings.js\";\nimport { DelayedOnChange, Icon, Input } from \"@webiny/admin-ui\";\nimport {\n CanEditField,\n useFieldEffectiveRules,\n useModelField\n} 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-number-inputs\",\n renderer: {\n rendererName: \"number-inputs\",\n name: t`Number Inputs`,\n description: t`Renders a simple list of number inputs.`,\n canUse({ field }) {\n return (\n field.type === \"number\" && !!field.list && !get(field, \"predefinedValues.enabled\")\n );\n },\n render(props) {\n const { field } = useModelField();\n const rules = useFieldEffectiveRules(field);\n\n return (\n <DynamicSection {...props} disabled={!rules.canEdit}>\n {({ bind, index }) => (\n <DelayedOnChange\n value={bind.index.value}\n onChange={bind.index.onChange}\n onBlur={bind.index.validate}\n >\n <Input\n disabled={!rules.canEdit}\n validation={bind.index.validation}\n onEnter={() => bind.field.appendValue(\"\")}\n label={t`Value {number}`({ number: index + 1 })}\n placeholder={props.field.placeholder}\n data-testid={`fr.input.numbers.${props.field.label}.${index + 1}`}\n type=\"number\"\n endIcon={\n <CanEditField>\n <Icon\n icon={<DeleteIcon />}\n label={\"Delete\"}\n onClick={() => bind.field.removeValue(index)}\n className={\"cursor-pointer\"}\n />\n </CanEditField>\n }\n />\n </DelayedOnChange>\n )}\n </DynamicSection>\n );\n },\n renderSettings(props) {\n return <MultiValueRendererSettings {...props} />;\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,cAAc,IAAIC,UAAU,QAAQ,0BAA0B;AACvE,OAAOC,cAAc;AACrB,SAASC,0BAA0B;AACnC,SAASC,eAAe,EAAEC,IAAI,EAAEC,KAAK,QAAQ,kBAAkB;AAC/D,SACIC,YAAY,EACZC,sBAAsB,EACtBC,aAAa,QACV,iCAAiC;AAExC,MAAMC,CAAC,GAAGX,IAAI,CAACY,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,yCAAyC;IACvDQ,MAAMA,CAAC;MAAEC;IAAM,CAAC,EAAE;MACd,OACIA,KAAK,CAACN,IAAI,KAAK,QAAQ,IAAI,CAAC,CAACM,KAAK,CAACC,IAAI,IAAI,CAACtB,GAAG,CAACqB,KAAK,EAAE,0BAA0B,CAAC;IAE1F,CAAC;IACDE,MAAMA,CAACC,KAAK,EAAE;MACV,MAAM;QAAEH;MAAM,CAAC,GAAGV,aAAa,CAAC,CAAC;MACjC,MAAMc,KAAK,GAAGf,sBAAsB,CAACW,KAAK,CAAC;MAE3C,oBACItB,KAAA,CAAA2B,aAAA,CAACtB,cAAc,EAAAuB,MAAA,CAAAC,MAAA,KAAKJ,KAAK;QAAEK,QAAQ,EAAE,CAACJ,KAAK,CAACK;MAAQ,IAC/C,CAAC;QAAEC,IAAI;QAAEC;MAAM,CAAC,kBACbjC,KAAA,CAAA2B,aAAA,CAACpB,eAAe;QACZ2B,KAAK,EAAEF,IAAI,CAACC,KAAK,CAACC,KAAM;QACxBC,QAAQ,EAAEH,IAAI,CAACC,KAAK,CAACE,QAAS;QAC9BC,MAAM,EAAEJ,IAAI,CAACC,KAAK,CAACI;MAAS,gBAE5BrC,KAAA,CAAA2B,aAAA,CAAClB,KAAK;QACFqB,QAAQ,EAAE,CAACJ,KAAK,CAACK,OAAQ;QACzBO,UAAU,EAAEN,IAAI,CAACC,KAAK,CAACK,UAAW;QAClCC,OAAO,EAAEA,CAAA,KAAMP,IAAI,CAACV,KAAK,CAACkB,WAAW,CAAC,EAAE,CAAE;QAC1CC,KAAK,EAAE5B,CAAC,gBAAgB,CAAC;UAAE6B,MAAM,EAAET,KAAK,GAAG;QAAE,CAAC,CAAE;QAChDU,WAAW,EAAElB,KAAK,CAACH,KAAK,CAACqB,WAAY;QACrC,eAAa,oBAAoBlB,KAAK,CAACH,KAAK,CAACmB,KAAK,IAAIR,KAAK,GAAG,CAAC,EAAG;QAClEjB,IAAI,EAAC,QAAQ;QACb4B,OAAO,eACH5C,KAAA,CAAA2B,aAAA,CAACjB,YAAY,qBACTV,KAAA,CAAA2B,aAAA,CAACnB,IAAI;UACDqC,IAAI,eAAE7C,KAAA,CAAA2B,aAAA,CAACvB,UAAU,MAAE,CAAE;UACrBqC,KAAK,EAAE,QAAS;UAChBK,OAAO,EAAEA,CAAA,KAAMd,IAAI,CAACV,KAAK,CAACyB,WAAW,CAACd,KAAK,CAAE;UAC7Ce,SAAS,EAAE;QAAiB,CAC/B,CACS;MACjB,CACJ,CACY,CAET,CAAC;IAEzB,CAAC;IACDC,cAAcA,CAACxB,KAAK,EAAE;MAClB,oBAAOzB,KAAA,CAAA2B,aAAA,CAACrB,0BAA0B,EAAKmB,KAAQ,CAAC;IACpD;EACJ;AACJ,CAAC;AAED,eAAeV,MAAM","ignoreList":[]}
@@ -7,7 +7,7 @@ import { Fields } from "../../../components/ContentEntryForm/Fields.js";
7
7
  import DynamicSection from "../DynamicSection.js";
8
8
  import { dynamicSectionGridStyle, fieldsGridStyle, ItemHighLight, ObjectItem } from "./StyledComponents.js";
9
9
  import { FieldSettings } from "./FieldSettings.js";
10
- import { useEffectiveRules } from "@webiny/app-headless-cms-common";
10
+ import { useFieldEffectiveRules } from "@webiny/app-headless-cms-common";
11
11
  import { useModelField } from "../../../components/ModelFieldProvider/index.js";
12
12
  import { useModel } from "../../../components/ModelProvider/index.js";
13
13
  export const MultiValueContainer = props => {
@@ -19,7 +19,7 @@ export const MultiValueContainer = props => {
19
19
  const {
20
20
  field
21
21
  } = useModelField();
22
- const rules = useEffectiveRules(field);
22
+ const rules = useFieldEffectiveRules(field);
23
23
  const disabled = !rules.canEdit || rules.disabled;
24
24
  const {
25
25
  showConfirmation
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","generateAlphaNumericLowerCaseId","Cell","useConfirmationDialog","MultiValueItemContainer","Fields","DynamicSection","dynamicSectionGridStyle","fieldsGridStyle","ItemHighLight","ObjectItem","FieldSettings","useEffectiveRules","useModelField","useModel","MultiValueContainer","props","highlightMap","setHighlightIndex","itemState","setItemState","model","field","rules","disabled","canEdit","showConfirmation","message","acceptLabel","cancelLabel","fieldSettings","createFrom","hasFields","logMissingFields","toggleItemState","index","state","onAddItem","settings","getSettings","createElement","Object","assign","showLabel","showTitle","emptyValue","gridClassName","Bind","bind","onMoveDown","moveValueDown","map","onMoveUp","moveValueUp","onDelete","removeValue","key","value","title","label","isFirst","isLast","length","isExpanded","toggleExpanded","span","contentModel","fields","layout"],"sources":["MultiValueContainer.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils\";\nimport { Cell } from \"@webiny/ui/Grid/index.js\";\nimport { useConfirmationDialog } from \"@webiny/app-admin\";\nimport type {\n BindComponentRenderProp,\n CmsModelFieldRendererProps\n} from \"@webiny/app-headless-cms-common/types/index.js\";\nimport { MultiValueItemContainer } from \"~/admin/plugins/fieldRenderers/object/MultiValueItemContainer.js\";\nimport { Fields } from \"~/admin/components/ContentEntryForm/Fields.js\";\nimport DynamicSection from \"~/admin/plugins/fieldRenderers/DynamicSection.js\";\nimport {\n dynamicSectionGridStyle,\n fieldsGridStyle,\n ItemHighLight,\n ObjectItem\n} from \"~/admin/plugins/fieldRenderers/object/StyledComponents.js\";\nimport { FieldSettings } from \"~/admin/plugins/fieldRenderers/object/FieldSettings.js\";\nimport { useEffectiveRules } from \"@webiny/app-headless-cms-common\";\nimport { useModelField } from \"~/admin/components/ModelFieldProvider/index.js\";\nimport { useModel } from \"~/admin/components/ModelProvider/index.js\";\n\ntype GetBind = CmsModelFieldRendererProps[\"getBind\"];\n\nexport interface MultiValueContainerProps {\n bind: BindComponentRenderProp;\n getBind: GetBind;\n showTitle?: boolean;\n}\n\nexport const MultiValueContainer = (props: MultiValueContainerProps) => {\n const [highlightMap, setHighlightIndex] = useState<{ [key: number]: string }>({});\n const [itemState, setItemState] = useState<{ [key: number]: boolean }>({});\n\n const { model } = useModel();\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n const disabled = !rules.canEdit || rules.disabled;\n\n const { showConfirmation } = useConfirmationDialog({\n message: `Are you sure you want to delete this item? This action is not reversible.`,\n acceptLabel: `Yes, I'm sure!`,\n cancelLabel: `No, leave it.`\n });\n\n const fieldSettings = FieldSettings.createFrom(field);\n\n if (!fieldSettings.hasFields()) {\n fieldSettings.logMissingFields();\n return null;\n }\n\n const toggleItemState = (index: number) => {\n setItemState(state => ({ ...state, [index]: !state[index] }));\n };\n\n const onAddItem = (index: number) => {\n setItemState(state => ({ ...state, [index]: true }));\n };\n\n const settings = fieldSettings.getSettings();\n\n return (\n <DynamicSection\n {...props}\n disabled={disabled}\n showLabel={props.showTitle}\n field={field}\n emptyValue={{}}\n onAddItem={onAddItem}\n gridClassName={dynamicSectionGridStyle}\n >\n {({ Bind, bind, index }) => {\n const onMoveDown = () => {\n bind.field.moveValueDown(index);\n\n setHighlightIndex(map => ({\n ...map,\n [index + 1]: generateAlphaNumericLowerCaseId(12)\n }));\n\n setItemState(state => {\n return {\n ...state,\n [index + 1]: state[index] ?? false,\n [index]: state[index + 1] ?? false\n };\n });\n };\n\n const onMoveUp = () => {\n bind.field.moveValueUp(index);\n\n setHighlightIndex(map => ({\n ...map,\n [index - 1]: generateAlphaNumericLowerCaseId(12)\n }));\n\n setItemState(state => {\n return {\n ...state,\n [index - 1]: state[index] ?? false,\n [index]: state[index - 1] ?? false\n };\n });\n };\n\n const onDelete = () => {\n showConfirmation(() => {\n bind.field.removeValue(index);\n });\n };\n\n return (\n <ObjectItem>\n {highlightMap[index] ? <ItemHighLight key={highlightMap[index]} /> : null}\n <MultiValueItemContainer\n disabled={disabled}\n value={bind.index.value}\n title={`${field.label} #${index + 1}`}\n isFirst={index === 0}\n isLast={index === bind.field.value.length - 1}\n onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n onDelete={onDelete}\n isExpanded={itemState[index] ?? false}\n toggleExpanded={() => toggleItemState(index)}\n >\n <Cell span={12}>\n <Fields\n Bind={Bind}\n contentModel={model}\n fields={settings.fields}\n layout={settings.layout}\n gridClassName={fieldsGridStyle}\n />\n </Cell>\n </MultiValueItemContainer>\n </ObjectItem>\n );\n }}\n </DynamicSection>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","generateAlphaNumericLowerCaseId","Cell","useConfirmationDialog","MultiValueItemContainer","Fields","DynamicSection","dynamicSectionGridStyle","fieldsGridStyle","ItemHighLight","ObjectItem","FieldSettings","useFieldEffectiveRules","useModelField","useModel","MultiValueContainer","props","highlightMap","setHighlightIndex","itemState","setItemState","model","field","rules","disabled","canEdit","showConfirmation","message","acceptLabel","cancelLabel","fieldSettings","createFrom","hasFields","logMissingFields","toggleItemState","index","state","onAddItem","settings","getSettings","createElement","Object","assign","showLabel","showTitle","emptyValue","gridClassName","Bind","bind","onMoveDown","moveValueDown","map","onMoveUp","moveValueUp","onDelete","removeValue","key","value","title","label","isFirst","isLast","length","isExpanded","toggleExpanded","span","contentModel","fields","layout"],"sources":["MultiValueContainer.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils\";\nimport { Cell } from \"@webiny/ui/Grid/index.js\";\nimport { useConfirmationDialog } from \"@webiny/app-admin\";\nimport type {\n BindComponentRenderProp,\n CmsModelFieldRendererProps\n} from \"@webiny/app-headless-cms-common/types/index.js\";\nimport { MultiValueItemContainer } from \"~/admin/plugins/fieldRenderers/object/MultiValueItemContainer.js\";\nimport { Fields } from \"~/admin/components/ContentEntryForm/Fields.js\";\nimport DynamicSection from \"~/admin/plugins/fieldRenderers/DynamicSection.js\";\nimport {\n dynamicSectionGridStyle,\n fieldsGridStyle,\n ItemHighLight,\n ObjectItem\n} from \"~/admin/plugins/fieldRenderers/object/StyledComponents.js\";\nimport { FieldSettings } from \"~/admin/plugins/fieldRenderers/object/FieldSettings.js\";\nimport { useFieldEffectiveRules } from \"@webiny/app-headless-cms-common\";\nimport { useModelField } from \"~/admin/components/ModelFieldProvider/index.js\";\nimport { useModel } from \"~/admin/components/ModelProvider/index.js\";\n\ntype GetBind = CmsModelFieldRendererProps[\"getBind\"];\n\nexport interface MultiValueContainerProps {\n bind: BindComponentRenderProp;\n getBind: GetBind;\n showTitle?: boolean;\n}\n\nexport const MultiValueContainer = (props: MultiValueContainerProps) => {\n const [highlightMap, setHighlightIndex] = useState<{ [key: number]: string }>({});\n const [itemState, setItemState] = useState<{ [key: number]: boolean }>({});\n\n const { model } = useModel();\n const { field } = useModelField();\n const rules = useFieldEffectiveRules(field);\n const disabled = !rules.canEdit || rules.disabled;\n\n const { showConfirmation } = useConfirmationDialog({\n message: `Are you sure you want to delete this item? This action is not reversible.`,\n acceptLabel: `Yes, I'm sure!`,\n cancelLabel: `No, leave it.`\n });\n\n const fieldSettings = FieldSettings.createFrom(field);\n\n if (!fieldSettings.hasFields()) {\n fieldSettings.logMissingFields();\n return null;\n }\n\n const toggleItemState = (index: number) => {\n setItemState(state => ({ ...state, [index]: !state[index] }));\n };\n\n const onAddItem = (index: number) => {\n setItemState(state => ({ ...state, [index]: true }));\n };\n\n const settings = fieldSettings.getSettings();\n\n return (\n <DynamicSection\n {...props}\n disabled={disabled}\n showLabel={props.showTitle}\n field={field}\n emptyValue={{}}\n onAddItem={onAddItem}\n gridClassName={dynamicSectionGridStyle}\n >\n {({ Bind, bind, index }) => {\n const onMoveDown = () => {\n bind.field.moveValueDown(index);\n\n setHighlightIndex(map => ({\n ...map,\n [index + 1]: generateAlphaNumericLowerCaseId(12)\n }));\n\n setItemState(state => {\n return {\n ...state,\n [index + 1]: state[index] ?? false,\n [index]: state[index + 1] ?? false\n };\n });\n };\n\n const onMoveUp = () => {\n bind.field.moveValueUp(index);\n\n setHighlightIndex(map => ({\n ...map,\n [index - 1]: generateAlphaNumericLowerCaseId(12)\n }));\n\n setItemState(state => {\n return {\n ...state,\n [index - 1]: state[index] ?? false,\n [index]: state[index - 1] ?? false\n };\n });\n };\n\n const onDelete = () => {\n showConfirmation(() => {\n bind.field.removeValue(index);\n });\n };\n\n return (\n <ObjectItem>\n {highlightMap[index] ? <ItemHighLight key={highlightMap[index]} /> : null}\n <MultiValueItemContainer\n disabled={disabled}\n value={bind.index.value}\n title={`${field.label} #${index + 1}`}\n isFirst={index === 0}\n isLast={index === bind.field.value.length - 1}\n onMoveUp={onMoveUp}\n onMoveDown={onMoveDown}\n onDelete={onDelete}\n isExpanded={itemState[index] ?? false}\n toggleExpanded={() => toggleItemState(index)}\n >\n <Cell span={12}>\n <Fields\n Bind={Bind}\n contentModel={model}\n fields={settings.fields}\n layout={settings.layout}\n gridClassName={fieldsGridStyle}\n />\n </Cell>\n </MultiValueItemContainer>\n </ObjectItem>\n );\n }}\n </DynamicSection>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -2,7 +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
+ import { useFieldEffectiveRules, useModelField } from "@webiny/app-headless-cms-common";
6
6
  const t = i18n.ns("app-headless-cms/admin/fields/text");
7
7
  const plugin = {
8
8
  type: "cms-editor-field-renderer",
@@ -22,7 +22,7 @@ const plugin = {
22
22
  const {
23
23
  field
24
24
  } = useModelField();
25
- const rules = useEffectiveRules(field);
25
+ const rules = useFieldEffectiveRules(field);
26
26
  const disabled = !rules.canEdit || rules.disabled;
27
27
  const Bind = getBind();
28
28
  const {
@@ -1 +1 @@
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":[]}
1
+ {"version":3,"names":["React","get","i18n","RadioGroup","useFieldEffectiveRules","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 { useFieldEffectiveRules, 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 = useFieldEffectiveRules(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,sBAAsB,EAAEC,aAAa,QAAQ,iCAAiC;AAEvF,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,sBAAsB,CAACW,KAAK,CAAC;MAC3C,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":[]}
@@ -11,7 +11,7 @@ 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
+ import { CanEditField, useFieldEffectiveRules } from "@webiny/app-headless-cms-common";
15
15
  export const AdvancedMultipleReferenceField = props => {
16
16
  const {
17
17
  bind
@@ -22,7 +22,7 @@ export const AdvancedMultipleReferenceField = props => {
22
22
  const {
23
23
  field
24
24
  } = useModelField();
25
- const rules = useEffectiveRules(field);
25
+ const rules = useFieldEffectiveRules(field);
26
26
  const requestContext = useModelFieldGraphqlContext();
27
27
  const disabled = !rules.canEdit || rules.disabled;
28
28
  const values = useMemo(() => {
@@ -1 +1 @@
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":[]}
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","useFieldEffectiveRules","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, useFieldEffectiveRules } 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 = useFieldEffectiveRules(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":[]}
@@ -8,7 +8,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
+ import { CanEditField, useFieldEffectiveRules } from "@webiny/app-headless-cms-common";
12
12
  export const AdvancedSingleReferenceField = props => {
13
13
  const {
14
14
  bind
@@ -19,7 +19,7 @@ export const AdvancedSingleReferenceField = props => {
19
19
  const {
20
20
  field
21
21
  } = useModelField();
22
- const rules = useEffectiveRules(field);
22
+ const rules = useFieldEffectiveRules(field);
23
23
  const [linkEntryDialogModel, setLinkEntryDialogModel] = useState(null);
24
24
  const [newEntryDialogModel, setNewEntryDialogModel] = useState(null);
25
25
  const [loadedModels, setLoadedModels] = useState([]);
@@ -1 +1 @@
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":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useState","Options","useReferences","Entry","ReferencesDialog","useQuery","useModelFieldGraphqlContext","useModelField","GQL","useSnackbar","NewReferencedEntryDialog","FormComponentErrorMessage","FormComponentLabel","OverlayLoader","CanEditField","useFieldEffectiveRules","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, useFieldEffectiveRules } 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 = useFieldEffectiveRules(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":[]}
@@ -8,7 +8,7 @@ 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 { useEffectiveRules } from "@webiny/app-headless-cms-common";
11
+ import { useFieldEffectiveRules } from "@webiny/app-headless-cms-common";
12
12
  import { useModelField, useModels } from "../../../../hooks/index.js";
13
13
  import { NewReferencedEntryDialog } from "./NewReferencedEntryDialog.js";
14
14
  const t = i18n.ns("app-headless-cms/admin/fields/ref");
@@ -20,7 +20,7 @@ const ContentEntriesAutocomplete = ({
20
20
  const {
21
21
  field
22
22
  } = useModelField();
23
- const rules = useEffectiveRules(field);
23
+ const rules = useFieldEffectiveRules(field);
24
24
  const {
25
25
  models
26
26
  } = useModels();
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","debounce","NewEntryButton","AutoComplete","i18n","SimpleLink","useNewRefEntry","useReference","renderItem","createEntryUrl","useEffectiveRules","useModelField","useModels","NewReferencedEntryDialog","t","ns","unpublishedLabel","publishedLabel","ContentEntriesAutocomplete","bind","field","rules","models","showNewEntryModal","setShowNewEntryModal","options","setSearch","value","loading","onChange","disabled","canEdit","entryInfo","published","link","publishItLink","createElement","to","here","renderNewEntryModal","refModelId","help","model","find","modelId","Fragment","onClose","entry","Object","assign","undefined","label","note","description","onInput","search","noResultFound","onClick"],"sources":["ContentEntriesAutocomplete.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport debounce from \"lodash/debounce.js\";\nimport { NewEntryButton } from \"./NewEntryButton.js\";\nimport { AutoComplete } from \"@webiny/ui/AutoComplete/index.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { SimpleLink } from \"@webiny/app-admin\";\nimport { useNewRefEntry } from \"../hooks/useNewRefEntry.js\";\nimport { useReference } from \"./useReference.js\";\nimport { renderItem } from \"./renderItem.js\";\nimport { createEntryUrl } from \"./createEntryUrl.js\";\nimport type { CmsModelField } from \"~/types.js\";\nimport type { BindComponentRenderProp } from \"@webiny/form\";\nimport { useEffectiveRules } from \"@webiny/app-headless-cms-common\";\nimport { useModelField, useModels } from \"~/admin/hooks/index.js\";\nimport { NewReferencedEntryDialog } from \"~/admin/plugins/fieldRenderers/ref/components/NewReferencedEntryDialog.js\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/ref\");\n\nconst unpublishedLabel = t`Selected content entry is not published. Make sure to {publishItLink} before publishing the main content entry.`;\nconst publishedLabel = t`Selected content entry is published. You can view it {here}.`;\n\ninterface ContentEntriesAutocompleteProps {\n bind: BindComponentRenderProp;\n field: CmsModelField;\n}\nconst ContentEntriesAutocomplete = ({ bind }: ContentEntriesAutocompleteProps) => {\n const { field } = useModelField();\n const rules = useEffectiveRules(field);\n const { models } = useModels();\n const [showNewEntryModal, setShowNewEntryModal] = useState(false);\n const { options, setSearch, value, loading, onChange } = useReference({\n bind,\n field\n });\n\n const disabled = !rules.canEdit || rules.disabled;\n\n let entryInfo: string | null = null;\n if (value && !value.published) {\n const link = createEntryUrl(value);\n entryInfo = unpublishedLabel({\n publishItLink: <SimpleLink to={link}>{t`publish it`}</SimpleLink>\n });\n } else if (value) {\n const link = createEntryUrl(value);\n entryInfo = publishedLabel({\n here: <SimpleLink to={link}>{t`here`}</SimpleLink>\n });\n }\n const { renderNewEntryModal, refModelId, help } = useNewRefEntry({ field });\n const model = models.find(model => model.modelId === refModelId);\n\n /*\n * Wrap AutoComplete input in NewRefEntry modal.\n */\n if (renderNewEntryModal) {\n return (\n <>\n {showNewEntryModal && model ? (\n <NewReferencedEntryDialog\n onClose={() => setShowNewEntryModal(false)}\n model={model}\n onChange={entry => {\n return onChange(entry, entry);\n }}\n />\n ) : null}\n\n <AutoComplete\n {...bind}\n renderItem={renderItem}\n onChange={onChange}\n loading={loading}\n value={value || undefined}\n options={options}\n label={field.label}\n note={entryInfo}\n data-testid={`fr.input.autocomplete.${field.label}`}\n description={<>{field.help}</>}\n onInput={debounce(search => setSearch(search), 250)}\n noResultFound={<NewEntryButton onClick={() => setShowNewEntryModal(true)} />}\n />\n </>\n );\n }\n\n return (\n <AutoComplete\n {...bind}\n disabled={disabled}\n renderItem={renderItem}\n onChange={onChange}\n loading={loading}\n value={value || undefined}\n options={options}\n label={field.label}\n description={<>{field.help}</>}\n note={entryInfo}\n onInput={debounce(search => setSearch(search), 250)}\n noResultFound={help}\n />\n );\n};\n\nexport default ContentEntriesAutocomplete;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","debounce","NewEntryButton","AutoComplete","i18n","SimpleLink","useNewRefEntry","useReference","renderItem","createEntryUrl","useFieldEffectiveRules","useModelField","useModels","NewReferencedEntryDialog","t","ns","unpublishedLabel","publishedLabel","ContentEntriesAutocomplete","bind","field","rules","models","showNewEntryModal","setShowNewEntryModal","options","setSearch","value","loading","onChange","disabled","canEdit","entryInfo","published","link","publishItLink","createElement","to","here","renderNewEntryModal","refModelId","help","model","find","modelId","Fragment","onClose","entry","Object","assign","undefined","label","note","description","onInput","search","noResultFound","onClick"],"sources":["ContentEntriesAutocomplete.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport debounce from \"lodash/debounce.js\";\nimport { NewEntryButton } from \"./NewEntryButton.js\";\nimport { AutoComplete } from \"@webiny/ui/AutoComplete/index.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { SimpleLink } from \"@webiny/app-admin\";\nimport { useNewRefEntry } from \"../hooks/useNewRefEntry.js\";\nimport { useReference } from \"./useReference.js\";\nimport { renderItem } from \"./renderItem.js\";\nimport { createEntryUrl } from \"./createEntryUrl.js\";\nimport type { CmsModelField } from \"~/types.js\";\nimport type { BindComponentRenderProp } from \"@webiny/form\";\nimport { useFieldEffectiveRules } from \"@webiny/app-headless-cms-common\";\nimport { useModelField, useModels } from \"~/admin/hooks/index.js\";\nimport { NewReferencedEntryDialog } from \"~/admin/plugins/fieldRenderers/ref/components/NewReferencedEntryDialog.js\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/fields/ref\");\n\nconst unpublishedLabel = t`Selected content entry is not published. Make sure to {publishItLink} before publishing the main content entry.`;\nconst publishedLabel = t`Selected content entry is published. You can view it {here}.`;\n\ninterface ContentEntriesAutocompleteProps {\n bind: BindComponentRenderProp;\n field: CmsModelField;\n}\nconst ContentEntriesAutocomplete = ({ bind }: ContentEntriesAutocompleteProps) => {\n const { field } = useModelField();\n const rules = useFieldEffectiveRules(field);\n const { models } = useModels();\n const [showNewEntryModal, setShowNewEntryModal] = useState(false);\n const { options, setSearch, value, loading, onChange } = useReference({\n bind,\n field\n });\n\n const disabled = !rules.canEdit || rules.disabled;\n\n let entryInfo: string | null = null;\n if (value && !value.published) {\n const link = createEntryUrl(value);\n entryInfo = unpublishedLabel({\n publishItLink: <SimpleLink to={link}>{t`publish it`}</SimpleLink>\n });\n } else if (value) {\n const link = createEntryUrl(value);\n entryInfo = publishedLabel({\n here: <SimpleLink to={link}>{t`here`}</SimpleLink>\n });\n }\n const { renderNewEntryModal, refModelId, help } = useNewRefEntry({ field });\n const model = models.find(model => model.modelId === refModelId);\n\n /*\n * Wrap AutoComplete input in NewRefEntry modal.\n */\n if (renderNewEntryModal) {\n return (\n <>\n {showNewEntryModal && model ? (\n <NewReferencedEntryDialog\n onClose={() => setShowNewEntryModal(false)}\n model={model}\n onChange={entry => {\n return onChange(entry, entry);\n }}\n />\n ) : null}\n\n <AutoComplete\n {...bind}\n renderItem={renderItem}\n onChange={onChange}\n loading={loading}\n value={value || undefined}\n options={options}\n label={field.label}\n note={entryInfo}\n data-testid={`fr.input.autocomplete.${field.label}`}\n description={<>{field.help}</>}\n onInput={debounce(search => setSearch(search), 250)}\n noResultFound={<NewEntryButton onClick={() => setShowNewEntryModal(true)} />}\n />\n </>\n );\n }\n\n return (\n <AutoComplete\n {...bind}\n disabled={disabled}\n renderItem={renderItem}\n onChange={onChange}\n loading={loading}\n value={value || undefined}\n options={options}\n label={field.label}\n description={<>{field.help}</>}\n note={entryInfo}\n onInput={debounce(search => setSearch(search), 250)}\n noResultFound={help}\n />\n );\n};\n\nexport default ContentEntriesAutocomplete;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,OAAOC,QAAQ,MAAM,oBAAoB;AACzC,SAASC,cAAc;AACvB,SAASC,YAAY,QAAQ,kCAAkC;AAC/D,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,UAAU,QAAQ,mBAAmB;AAC9C,SAASC,cAAc;AACvB,SAASC,YAAY;AACrB,SAASC,UAAU;AACnB,SAASC,cAAc;AAGvB,SAASC,sBAAsB,QAAQ,iCAAiC;AACxE,SAASC,aAAa,EAAEC,SAAS;AACjC,SAASC,wBAAwB;AAEjC,MAAMC,CAAC,GAAGV,IAAI,CAACW,EAAE,CAAC,mCAAmC,CAAC;AAEtD,MAAMC,gBAAgB,GAAGF,CAAC,iHAAiH;AAC3I,MAAMG,cAAc,GAAGH,CAAC,8DAA8D;AAMtF,MAAMI,0BAA0B,GAAGA,CAAC;EAAEC;AAAsC,CAAC,KAAK;EAC9E,MAAM;IAAEC;EAAM,CAAC,GAAGT,aAAa,CAAC,CAAC;EACjC,MAAMU,KAAK,GAAGX,sBAAsB,CAACU,KAAK,CAAC;EAC3C,MAAM;IAAEE;EAAO,CAAC,GAAGV,SAAS,CAAC,CAAC;EAC9B,MAAM,CAACW,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGxB,QAAQ,CAAC,KAAK,CAAC;EACjE,MAAM;IAAEyB,OAAO;IAAEC,SAAS;IAAEC,KAAK;IAAEC,OAAO;IAAEC;EAAS,CAAC,GAAGtB,YAAY,CAAC;IAClEY,IAAI;IACJC;EACJ,CAAC,CAAC;EAEF,MAAMU,QAAQ,GAAG,CAACT,KAAK,CAACU,OAAO,IAAIV,KAAK,CAACS,QAAQ;EAEjD,IAAIE,SAAwB,GAAG,IAAI;EACnC,IAAIL,KAAK,IAAI,CAACA,KAAK,CAACM,SAAS,EAAE;IAC3B,MAAMC,IAAI,GAAGzB,cAAc,CAACkB,KAAK,CAAC;IAClCK,SAAS,GAAGhB,gBAAgB,CAAC;MACzBmB,aAAa,eAAEpC,KAAA,CAAAqC,aAAA,CAAC/B,UAAU;QAACgC,EAAE,EAAEH;MAAK,GAAEpB,CAAC,YAAyB;IACpE,CAAC,CAAC;EACN,CAAC,MAAM,IAAIa,KAAK,EAAE;IACd,MAAMO,IAAI,GAAGzB,cAAc,CAACkB,KAAK,CAAC;IAClCK,SAAS,GAAGf,cAAc,CAAC;MACvBqB,IAAI,eAAEvC,KAAA,CAAAqC,aAAA,CAAC/B,UAAU;QAACgC,EAAE,EAAEH;MAAK,GAAEpB,CAAC,MAAmB;IACrD,CAAC,CAAC;EACN;EACA,MAAM;IAAEyB,mBAAmB;IAAEC,UAAU;IAAEC;EAAK,CAAC,GAAGnC,cAAc,CAAC;IAAEc;EAAM,CAAC,CAAC;EAC3E,MAAMsB,KAAK,GAAGpB,MAAM,CAACqB,IAAI,CAACD,KAAK,IAAIA,KAAK,CAACE,OAAO,KAAKJ,UAAU,CAAC;;EAEhE;AACJ;AACA;EACI,IAAID,mBAAmB,EAAE;IACrB,oBACIxC,KAAA,CAAAqC,aAAA,CAAArC,KAAA,CAAA8C,QAAA,QACKtB,iBAAiB,IAAImB,KAAK,gBACvB3C,KAAA,CAAAqC,aAAA,CAACvB,wBAAwB;MACrBiC,OAAO,EAAEA,CAAA,KAAMtB,oBAAoB,CAAC,KAAK,CAAE;MAC3CkB,KAAK,EAAEA,KAAM;MACbb,QAAQ,EAAEkB,KAAK,IAAI;QACf,OAAOlB,QAAQ,CAACkB,KAAK,EAAEA,KAAK,CAAC;MACjC;IAAE,CACL,CAAC,GACF,IAAI,eAERhD,KAAA,CAAAqC,aAAA,CAACjC,YAAY,EAAA6C,MAAA,CAAAC,MAAA,KACL9B,IAAI;MACRX,UAAU,EAAEA,UAAW;MACvBqB,QAAQ,EAAEA,QAAS;MACnBD,OAAO,EAAEA,OAAQ;MACjBD,KAAK,EAAEA,KAAK,IAAIuB,SAAU;MAC1BzB,OAAO,EAAEA,OAAQ;MACjB0B,KAAK,EAAE/B,KAAK,CAAC+B,KAAM;MACnBC,IAAI,EAAEpB,SAAU;MAChB,eAAa,yBAAyBZ,KAAK,CAAC+B,KAAK,EAAG;MACpDE,WAAW,eAAEtD,KAAA,CAAAqC,aAAA,CAAArC,KAAA,CAAA8C,QAAA,QAAGzB,KAAK,CAACqB,IAAO,CAAE;MAC/Ba,OAAO,EAAErD,QAAQ,CAACsD,MAAM,IAAI7B,SAAS,CAAC6B,MAAM,CAAC,EAAE,GAAG,CAAE;MACpDC,aAAa,eAAEzD,KAAA,CAAAqC,aAAA,CAAClC,cAAc;QAACuD,OAAO,EAAEA,CAAA,KAAMjC,oBAAoB,CAAC,IAAI;MAAE,CAAE;IAAE,EAChF,CACH,CAAC;EAEX;EAEA,oBACIzB,KAAA,CAAAqC,aAAA,CAACjC,YAAY,EAAA6C,MAAA,CAAAC,MAAA,KACL9B,IAAI;IACRW,QAAQ,EAAEA,QAAS;IACnBtB,UAAU,EAAEA,UAAW;IACvBqB,QAAQ,EAAEA,QAAS;IACnBD,OAAO,EAAEA,OAAQ;IACjBD,KAAK,EAAEA,KAAK,IAAIuB,SAAU;IAC1BzB,OAAO,EAAEA,OAAQ;IACjB0B,KAAK,EAAE/B,KAAK,CAAC+B,KAAM;IACnBE,WAAW,eAAEtD,KAAA,CAAAqC,aAAA,CAAArC,KAAA,CAAA8C,QAAA,QAAGzB,KAAK,CAACqB,IAAO,CAAE;IAC/BW,IAAI,EAAEpB,SAAU;IAChBsB,OAAO,EAAErD,QAAQ,CAACsD,MAAM,IAAI7B,SAAS,CAAC6B,MAAM,CAAC,EAAE,GAAG,CAAE;IACpDC,aAAa,EAAEf;EAAK,EACvB,CAAC;AAEV,CAAC;AAED,eAAevB,0BAA0B","ignoreList":[]}
@@ -7,7 +7,7 @@ import { useReferences } from "./useReferences.js";
7
7
  import { renderItem, renderListItemOptions } from "./renderItem.js";
8
8
  import { NewEntryButton } from "./NewEntryButton.js";
9
9
  import { useNewRefEntry } from "../hooks/useNewRefEntry.js";
10
- import { useEffectiveRules } from "@webiny/app-headless-cms-common";
10
+ import { useFieldEffectiveRules } from "@webiny/app-headless-cms-common";
11
11
  import { useModelField, useModels } from "../../../../hooks/index.js";
12
12
  import { NewReferencedEntryDialog } from "./NewReferencedEntryDialog.js";
13
13
  import { Routes } from "../../../../../routes.js";
@@ -19,7 +19,7 @@ const ContentEntriesMultiAutocomplete = ({
19
19
  const {
20
20
  field
21
21
  } = useModelField();
22
- const rules = useEffectiveRules(field);
22
+ const rules = useFieldEffectiveRules(field);
23
23
  const {
24
24
  models
25
25
  } = useModels();