@strapi/content-manager 5.30.1 → 5.31.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js +2 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +2 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +7 -6
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +7 -6
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +128 -45
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +128 -45
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js +6 -16
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +6 -16
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +18 -31
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +19 -32
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +8 -4
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +8 -4
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/utils/data.d.ts +4 -4
- package/dist/admin/src/pages/ListView/components/TableCells/Relations.d.ts +0 -3
- package/dist/server/controllers/single-types.js +3 -1
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +3 -1
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/controllers/validation/model-configuration.js +2 -2
- package/dist/server/controllers/validation/model-configuration.js.map +1 -1
- package/dist/server/controllers/validation/model-configuration.mjs +2 -2
- package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +2 -1
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +2 -1
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -35,7 +35,8 @@ var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
|
|
|
35
35
|
* Constants
|
|
36
36
|
* -----------------------------------------------------------------------------------------------*/ const FIELD_SCHEMA = yup__namespace.object().shape({
|
|
37
37
|
label: yup__namespace.string().required().nullable(),
|
|
38
|
-
description: yup__namespace.string(),
|
|
38
|
+
description: yup__namespace.string().nullable(),
|
|
39
|
+
placeholder: yup__namespace.string().nullable(),
|
|
39
40
|
editable: yup__namespace.boolean(),
|
|
40
41
|
size: yup__namespace.number().required()
|
|
41
42
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditFieldForm.js","sources":["../../../../admin/src/components/ConfigurationForm/EditFieldForm.tsx"],"sourcesContent":["import {\n useNotification,\n InputRenderer,\n Form,\n InputProps,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Grid, Modal } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD } from '../../constants/attributes';\nimport { useGetInitialDataQuery } from '../../services/init';\nimport { capitalise } from '../../utils/strings';\nimport { getTranslation } from '../../utils/translations';\nimport { FieldTypeIcon } from '../FieldTypeIcon';\n\nimport { TEMP_FIELD_NAME } from './Fields';\n\nimport type { ConfigurationFormData } from './Form';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst FIELD_SCHEMA = yup.object().shape({\n label: yup.string().required().nullable(),\n description: yup.string(),\n editable: yup.boolean(),\n size: yup.number().required(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * EditFieldForm\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EditFieldFormProps {\n attribute?: Schema.Attribute.AnyAttribute;\n name: string;\n onClose: () => void;\n}\n\nconst EditFieldForm = ({ attribute, name, onClose }: EditFieldFormProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const { value, onChange } =\n useField<ConfigurationFormData['layout'][number]['children'][number]>(name);\n\n const { data: mainFieldOptions } = useGetInitialDataQuery(undefined, {\n selectFromResult: (res) => {\n if (attribute?.type !== 'relation' || !res.data) {\n return { data: [] };\n }\n\n if ('targetModel' in attribute && typeof attribute.targetModel === 'string') {\n const targetSchema = res.data.contentTypes.find(\n (schema) => schema.uid === attribute.targetModel\n );\n\n if (targetSchema) {\n return {\n data: Object.entries(targetSchema.attributes).reduce<\n Array<{ label: string; value: string }>\n >((acc, [key, attribute]) => {\n /**\n * Create the list of attributes from the schema as to which can\n * be our `mainField` and dictate the display name of the schema\n * we're editing.\n */\n if (!ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD.includes(attribute.type)) {\n acc.push({\n label: key,\n value: key,\n });\n }\n\n return acc;\n }, []),\n };\n }\n }\n\n return { data: [] };\n },\n skip: attribute?.type !== 'relation',\n });\n\n if (!value || value.name === TEMP_FIELD_NAME || !attribute) {\n // This is very unlikely to happen, but it ensures the form is not opened without a value.\n console.error(\n \"You've opened a field to edit without it being part of the form, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.containers.edit-settings.modal-form.error',\n defaultMessage: 'An error occurred while trying to open the form.',\n }),\n type: 'danger',\n });\n\n return null;\n }\n\n return (\n <Modal.Content>\n <Form\n method=\"PUT\"\n initialValues={value}\n validationSchema={FIELD_SCHEMA}\n onSubmit={(data) => {\n onChange(name, data);\n onClose();\n }}\n >\n <Modal.Header>\n <Flex gap={3}>\n <FieldTypeIcon type={attribute.type} />\n <Modal.Title>\n {formatMessage(\n {\n id: 'content-manager.containers.edit-settings.modal-form.label',\n defaultMessage: 'Edit {fieldName}',\n },\n { fieldName: capitalise(value.name) }\n )}\n </Modal.Title>\n </Flex>\n </Modal.Header>\n <Modal.Body>\n <Grid.Root gap={4}>\n {[\n {\n name: 'label',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.label'),\n defaultMessage: 'Label',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'description',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.description'),\n defaultMessage: 'Description',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'placeholder',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.placeholder'),\n defaultMessage: 'Placeholder',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'editable',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.editable'),\n defaultMessage: 'Editable',\n }),\n size: 6,\n type: 'boolean' as const,\n },\n {\n name: 'mainField',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.mainField'),\n defaultMessage: 'Entry title',\n }),\n hint: formatMessage({\n id: getTranslation(\n 'containers.SettingPage.edit-settings.modal-form.mainField.hint'\n ),\n defaultMessage: 'Set the displayed field',\n }),\n size: 6,\n options: mainFieldOptions,\n type: 'enumeration' as const,\n },\n {\n name: 'size',\n label: formatMessage({\n id: getTranslation('containers.ListSettingsView.modal-form.size'),\n defaultMessage: 'Size',\n }),\n size: 6,\n options: [\n { value: '4', label: '33%' },\n { value: '6', label: '50%' },\n { value: '8', label: '66%' },\n { value: '12', label: '100%' },\n ],\n type: 'enumeration' as const,\n },\n ]\n .filter(filterFieldsBasedOnAttributeType(attribute.type))\n .map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Modal.Footer>\n </Form>\n </Modal.Content>\n );\n};\n\n/**\n * @internal\n * @description not all edit fields have the same editable properties, it depends on the type\n * e.g. a dynamic zone can only change it's label.\n */\nconst filterFieldsBasedOnAttributeType = (type: Schema.Attribute.Kind) => (field: InputProps) => {\n switch (type) {\n case 'blocks':\n case 'richtext':\n return field.name !== 'size' && field.name !== 'mainField';\n case 'boolean':\n case 'media':\n return field.name !== 'placeholder' && field.name !== 'mainField';\n case 'component':\n return field.name === 'label' || field.name === 'editable';\n case 'dynamiczone':\n case 'json':\n return field.name !== 'placeholder' && field.name !== 'mainField' && field.name !== 'size';\n case 'relation':\n return true;\n default:\n return field.name !== 'mainField';\n }\n};\n\nexport { EditFieldForm };\nexport type { EditFieldFormProps };\n"],"names":["FIELD_SCHEMA","yup","object","shape","label","string","required","nullable","description","editable","boolean","size","number","EditFieldForm","attribute","name","onClose","formatMessage","useIntl","toggleNotification","useNotification","value","onChange","useField","data","mainFieldOptions","useGetInitialDataQuery","undefined","selectFromResult","res","type","targetModel","targetSchema","contentTypes","find","schema","uid","Object","entries","attributes","reduce","acc","key","ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD","includes","push","skip","TEMP_FIELD_NAME","console","error","message","id","defaultMessage","_jsx","Modal","Content","_jsxs","Form","method","initialValues","validationSchema","onSubmit","Header","Flex","gap","FieldTypeIcon","Title","fieldName","capitalise","Body","Grid","Root","getTranslation","hint","options","filter","filterFieldsBasedOnAttributeType","map","field","Item","col","direction","alignItems","InputRenderer","Footer","Close","Button","variant"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditFieldForm.js","sources":["../../../../admin/src/components/ConfigurationForm/EditFieldForm.tsx"],"sourcesContent":["import {\n useNotification,\n InputRenderer,\n Form,\n InputProps,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Grid, Modal } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD } from '../../constants/attributes';\nimport { useGetInitialDataQuery } from '../../services/init';\nimport { capitalise } from '../../utils/strings';\nimport { getTranslation } from '../../utils/translations';\nimport { FieldTypeIcon } from '../FieldTypeIcon';\n\nimport { TEMP_FIELD_NAME } from './Fields';\n\nimport type { ConfigurationFormData } from './Form';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst FIELD_SCHEMA = yup.object().shape({\n label: yup.string().required().nullable(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n size: yup.number().required(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * EditFieldForm\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EditFieldFormProps {\n attribute?: Schema.Attribute.AnyAttribute;\n name: string;\n onClose: () => void;\n}\n\nconst EditFieldForm = ({ attribute, name, onClose }: EditFieldFormProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const { value, onChange } =\n useField<ConfigurationFormData['layout'][number]['children'][number]>(name);\n\n const { data: mainFieldOptions } = useGetInitialDataQuery(undefined, {\n selectFromResult: (res) => {\n if (attribute?.type !== 'relation' || !res.data) {\n return { data: [] };\n }\n\n if ('targetModel' in attribute && typeof attribute.targetModel === 'string') {\n const targetSchema = res.data.contentTypes.find(\n (schema) => schema.uid === attribute.targetModel\n );\n\n if (targetSchema) {\n return {\n data: Object.entries(targetSchema.attributes).reduce<\n Array<{ label: string; value: string }>\n >((acc, [key, attribute]) => {\n /**\n * Create the list of attributes from the schema as to which can\n * be our `mainField` and dictate the display name of the schema\n * we're editing.\n */\n if (!ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD.includes(attribute.type)) {\n acc.push({\n label: key,\n value: key,\n });\n }\n\n return acc;\n }, []),\n };\n }\n }\n\n return { data: [] };\n },\n skip: attribute?.type !== 'relation',\n });\n\n if (!value || value.name === TEMP_FIELD_NAME || !attribute) {\n // This is very unlikely to happen, but it ensures the form is not opened without a value.\n console.error(\n \"You've opened a field to edit without it being part of the form, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.containers.edit-settings.modal-form.error',\n defaultMessage: 'An error occurred while trying to open the form.',\n }),\n type: 'danger',\n });\n\n return null;\n }\n\n return (\n <Modal.Content>\n <Form\n method=\"PUT\"\n initialValues={value}\n validationSchema={FIELD_SCHEMA}\n onSubmit={(data) => {\n onChange(name, data);\n onClose();\n }}\n >\n <Modal.Header>\n <Flex gap={3}>\n <FieldTypeIcon type={attribute.type} />\n <Modal.Title>\n {formatMessage(\n {\n id: 'content-manager.containers.edit-settings.modal-form.label',\n defaultMessage: 'Edit {fieldName}',\n },\n { fieldName: capitalise(value.name) }\n )}\n </Modal.Title>\n </Flex>\n </Modal.Header>\n <Modal.Body>\n <Grid.Root gap={4}>\n {[\n {\n name: 'label',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.label'),\n defaultMessage: 'Label',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'description',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.description'),\n defaultMessage: 'Description',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'placeholder',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.placeholder'),\n defaultMessage: 'Placeholder',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'editable',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.editable'),\n defaultMessage: 'Editable',\n }),\n size: 6,\n type: 'boolean' as const,\n },\n {\n name: 'mainField',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.mainField'),\n defaultMessage: 'Entry title',\n }),\n hint: formatMessage({\n id: getTranslation(\n 'containers.SettingPage.edit-settings.modal-form.mainField.hint'\n ),\n defaultMessage: 'Set the displayed field',\n }),\n size: 6,\n options: mainFieldOptions,\n type: 'enumeration' as const,\n },\n {\n name: 'size',\n label: formatMessage({\n id: getTranslation('containers.ListSettingsView.modal-form.size'),\n defaultMessage: 'Size',\n }),\n size: 6,\n options: [\n { value: '4', label: '33%' },\n { value: '6', label: '50%' },\n { value: '8', label: '66%' },\n { value: '12', label: '100%' },\n ],\n type: 'enumeration' as const,\n },\n ]\n .filter(filterFieldsBasedOnAttributeType(attribute.type))\n .map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Modal.Footer>\n </Form>\n </Modal.Content>\n );\n};\n\n/**\n * @internal\n * @description not all edit fields have the same editable properties, it depends on the type\n * e.g. a dynamic zone can only change it's label.\n */\nconst filterFieldsBasedOnAttributeType = (type: Schema.Attribute.Kind) => (field: InputProps) => {\n switch (type) {\n case 'blocks':\n case 'richtext':\n return field.name !== 'size' && field.name !== 'mainField';\n case 'boolean':\n case 'media':\n return field.name !== 'placeholder' && field.name !== 'mainField';\n case 'component':\n return field.name === 'label' || field.name === 'editable';\n case 'dynamiczone':\n case 'json':\n return field.name !== 'placeholder' && field.name !== 'mainField' && field.name !== 'size';\n case 'relation':\n return true;\n default:\n return field.name !== 'mainField';\n }\n};\n\nexport { EditFieldForm };\nexport type { EditFieldFormProps };\n"],"names":["FIELD_SCHEMA","yup","object","shape","label","string","required","nullable","description","placeholder","editable","boolean","size","number","EditFieldForm","attribute","name","onClose","formatMessage","useIntl","toggleNotification","useNotification","value","onChange","useField","data","mainFieldOptions","useGetInitialDataQuery","undefined","selectFromResult","res","type","targetModel","targetSchema","contentTypes","find","schema","uid","Object","entries","attributes","reduce","acc","key","ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD","includes","push","skip","TEMP_FIELD_NAME","console","error","message","id","defaultMessage","_jsx","Modal","Content","_jsxs","Form","method","initialValues","validationSchema","onSubmit","Header","Flex","gap","FieldTypeIcon","Title","fieldName","capitalise","Body","Grid","Root","getTranslation","hint","options","filter","filterFieldsBasedOnAttributeType","map","field","Item","col","direction","alignItems","InputRenderer","Footer","Close","Button","variant"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA;;AAEkG,qGAElG,MAAMA,YAAeC,GAAAA,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AACtCC,IAAAA,KAAAA,EAAOH,cAAII,CAAAA,MAAM,EAAGC,CAAAA,QAAQ,GAAGC,QAAQ,EAAA;IACvCC,WAAaP,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGE,QAAQ,EAAA;IAClCE,WAAaR,EAAAA,cAAAA,CAAII,MAAM,EAAA,CAAGE,QAAQ,EAAA;AAClCG,IAAAA,QAAAA,EAAUT,eAAIU,OAAO,EAAA;IACrBC,IAAMX,EAAAA,cAAAA,CAAIY,MAAM,EAAA,CAAGP,QAAQ;AAC7B,CAAA,CAAA;AAYMQ,MAAAA,aAAAA,GAAgB,CAAC,EAAEC,SAAS,EAAEC,IAAI,EAAEC,OAAO,EAAsB,GAAA;IACrE,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAE/B,IAAA,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GACvBC,oBAAsER,CAAAA,IAAAA,CAAAA;AAExE,IAAA,MAAM,EAAES,IAAMC,EAAAA,gBAAgB,EAAE,GAAGC,4BAAuBC,SAAW,EAAA;AACnEC,QAAAA,gBAAAA,EAAkB,CAACC,GAAAA,GAAAA;AACjB,YAAA,IAAIf,WAAWgB,IAAS,KAAA,UAAA,IAAc,CAACD,GAAAA,CAAIL,IAAI,EAAE;gBAC/C,OAAO;AAAEA,oBAAAA,IAAAA,EAAM;AAAG,iBAAA;AACpB;AAEA,YAAA,IAAI,iBAAiBV,SAAa,IAAA,OAAOA,SAAUiB,CAAAA,WAAW,KAAK,QAAU,EAAA;AAC3E,gBAAA,MAAMC,YAAeH,GAAAA,GAAAA,CAAIL,IAAI,CAACS,YAAY,CAACC,IAAI,CAC7C,CAACC,MAAWA,GAAAA,MAAAA,CAAOC,GAAG,KAAKtB,UAAUiB,WAAW,CAAA;AAGlD,gBAAA,IAAIC,YAAc,EAAA;oBAChB,OAAO;AACLR,wBAAAA,IAAAA,EAAMa,MAAOC,CAAAA,OAAO,CAACN,YAAAA,CAAaO,UAAU,CAAA,CAAEC,MAAM,CAElD,CAACC,GAAAA,EAAK,CAACC,GAAAA,EAAK5B,SAAU,CAAA,GAAA;AACtB;;;;AAIC,kBACD,IAAI,CAAC6B,oDAAAA,CAA0CC,QAAQ,CAAC9B,SAAAA,CAAUgB,IAAI,CAAG,EAAA;AACvEW,gCAAAA,GAAAA,CAAII,IAAI,CAAC;oCACP1C,KAAOuC,EAAAA,GAAAA;oCACPrB,KAAOqB,EAAAA;AACT,iCAAA,CAAA;AACF;4BAEA,OAAOD,GAAAA;AACT,yBAAA,EAAG,EAAE;AACP,qBAAA;AACF;AACF;YAEA,OAAO;AAAEjB,gBAAAA,IAAAA,EAAM;AAAG,aAAA;AACpB,SAAA;AACAsB,QAAAA,IAAAA,EAAMhC,WAAWgB,IAAS,KAAA;AAC5B,KAAA,CAAA;AAEA,IAAA,IAAI,CAACT,KAASA,IAAAA,KAAAA,CAAMN,IAAI,KAAKgC,sBAAAA,IAAmB,CAACjC,SAAW,EAAA;;AAE1DkC,QAAAA,OAAAA,CAAQC,KAAK,CACX,0HAAA,CAAA;QAGF9B,kBAAmB,CAAA;AACjB+B,YAAAA,OAAAA,EAASjC,aAAc,CAAA;gBACrBkC,EAAI,EAAA,2DAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA,CAAA;YACAtB,IAAM,EAAA;AACR,SAAA,CAAA;QAEA,OAAO,IAAA;AACT;IAEA,qBACEuB,cAAA,CAACC,mBAAMC,OAAO,EAAA;AACZ,QAAA,QAAA,gBAAAC,eAACC,CAAAA,gBAAAA,EAAAA;YACCC,MAAO,EAAA,KAAA;YACPC,aAAetC,EAAAA,KAAAA;YACfuC,gBAAkB7D,EAAAA,YAAAA;AAClB8D,YAAAA,QAAAA,EAAU,CAACrC,IAAAA,GAAAA;AACTF,gBAAAA,QAAAA,CAASP,IAAMS,EAAAA,IAAAA,CAAAA;AACfR,gBAAAA,OAAAA,EAAAA;AACF,aAAA;;AAEA,8BAAAqC,cAAA,CAACC,mBAAMQ,MAAM,EAAA;AACX,oBAAA,QAAA,gBAAAN,eAACO,CAAAA,iBAAAA,EAAAA;wBAAKC,GAAK,EAAA,CAAA;;0CACTX,cAACY,CAAAA,2BAAAA,EAAAA;AAAcnC,gCAAAA,IAAAA,EAAMhB,UAAUgB;;AAC/B,0CAAAuB,cAAA,CAACC,mBAAMY,KAAK,EAAA;0CACTjD,aACC,CAAA;oCACEkC,EAAI,EAAA,2DAAA;oCACJC,cAAgB,EAAA;iCAElB,EAAA;oCAAEe,SAAWC,EAAAA,kBAAAA,CAAW/C,MAAMN,IAAI;AAAE,iCAAA;;;;;AAK5C,8BAAAsC,cAAA,CAACC,mBAAMe,IAAI,EAAA;4CACThB,cAAA,CAACiB,kBAAKC,IAAI,EAAA;wBAACP,GAAK,EAAA,CAAA;AACb,wBAAA,QAAA,EAAA;AACC,4BAAA;gCACEjD,IAAM,EAAA,OAAA;AACNZ,gCAAAA,KAAAA,EAAOc,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,2BAAe,CAAA,2CAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACNmB,IAAM,EAAA;AACR,6BAAA;AACA,4BAAA;gCACEf,IAAM,EAAA,aAAA;AACNZ,gCAAAA,KAAAA,EAAOc,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,2BAAe,CAAA,iDAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACNmB,IAAM,EAAA;AACR,6BAAA;AACA,4BAAA;gCACEf,IAAM,EAAA,aAAA;AACNZ,gCAAAA,KAAAA,EAAOc,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,2BAAe,CAAA,iDAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACNmB,IAAM,EAAA;AACR,6BAAA;AACA,4BAAA;gCACEf,IAAM,EAAA,UAAA;AACNZ,gCAAAA,KAAAA,EAAOc,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,2BAAe,CAAA,8CAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACNmB,IAAM,EAAA;AACR,6BAAA;AACA,4BAAA;gCACEf,IAAM,EAAA,WAAA;AACNZ,gCAAAA,KAAAA,EAAOc,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,2BAAe,CAAA,+CAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;AACAqB,gCAAAA,IAAAA,EAAMxD,aAAc,CAAA;AAClBkC,oCAAAA,EAAAA,EAAIqB,2BACF,CAAA,gEAAA,CAAA;oCAEFpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACN+D,OAASjD,EAAAA,gBAAAA;gCACTK,IAAM,EAAA;AACR,6BAAA;AACA,4BAAA;gCACEf,IAAM,EAAA,MAAA;AACNZ,gCAAAA,KAAAA,EAAOc,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,2BAAe,CAAA,6CAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACN+D,OAAS,EAAA;AACP,oCAAA;wCAAErD,KAAO,EAAA,GAAA;wCAAKlB,KAAO,EAAA;AAAM,qCAAA;AAC3B,oCAAA;wCAAEkB,KAAO,EAAA,GAAA;wCAAKlB,KAAO,EAAA;AAAM,qCAAA;AAC3B,oCAAA;wCAAEkB,KAAO,EAAA,GAAA;wCAAKlB,KAAO,EAAA;AAAM,qCAAA;AAC3B,oCAAA;wCAAEkB,KAAO,EAAA,IAAA;wCAAMlB,KAAO,EAAA;AAAO;AAC9B,iCAAA;gCACD2B,IAAM,EAAA;AACR;AACD,yBAAA,CACE6C,MAAM,CAACC,gCAAAA,CAAiC9D,SAAUgB,CAAAA,IAAI,GACtD+C,GAAG,CAAC,CAAC,EAAElE,IAAI,EAAE,GAAGmE,OAAO,iBACtBzB,cAAA,CAACiB,kBAAKS,IAAI,EAAA;gCAAkBC,GAAKrE,EAAAA,IAAAA;gCAAMsE,SAAU,EAAA,QAAA;gCAASC,UAAW,EAAA,SAAA;AACnE,gCAAA,QAAA,gBAAA7B,cAAC8B,CAAAA,yBAAAA,EAAAA;AAAe,oCAAA,GAAGL;;AADLA,6BAAAA,EAAAA,KAAAA,CAAM/D,IAAI,CAAA;;;AAMlC,8BAAAyC,eAAA,CAACF,mBAAM8B,MAAM,EAAA;;AACX,sCAAA/B,cAAA,CAACC,mBAAM+B,KAAK,EAAA;AACV,4BAAA,QAAA,gBAAAhC,cAACiC,CAAAA,mBAAAA,EAAAA;gCAAOC,OAAQ,EAAA,UAAA;0CACbtE,aAAc,CAAA;oCAAEkC,EAAI,EAAA,8BAAA;oCAAgCC,cAAgB,EAAA;AAAS,iCAAA;;;sCAGlFC,cAACiC,CAAAA,mBAAAA,EAAAA;4BAAOxD,IAAK,EAAA,QAAA;sCACVb,aAAc,CAAA;gCAAEkC,EAAI,EAAA,eAAA;gCAAiBC,cAAgB,EAAA;AAAS,6BAAA;;;;;;;AAM3E;AAEA;;;;AAIC,IACD,MAAMwB,gCAAAA,GAAmC,CAAC9C,IAAAA,GAAgC,CAACgD,KAAAA,GAAAA;QACzE,OAAQhD,IAAAA;YACN,KAAK,QAAA;YACL,KAAK,UAAA;AACH,gBAAA,OAAOgD,MAAM/D,IAAI,KAAK,MAAU+D,IAAAA,KAAAA,CAAM/D,IAAI,KAAK,WAAA;YACjD,KAAK,SAAA;YACL,KAAK,OAAA;AACH,gBAAA,OAAO+D,MAAM/D,IAAI,KAAK,aAAiB+D,IAAAA,KAAAA,CAAM/D,IAAI,KAAK,WAAA;YACxD,KAAK,WAAA;AACH,gBAAA,OAAO+D,MAAM/D,IAAI,KAAK,OAAW+D,IAAAA,KAAAA,CAAM/D,IAAI,KAAK,UAAA;YAClD,KAAK,aAAA;YACL,KAAK,MAAA;gBACH,OAAO+D,KAAAA,CAAM/D,IAAI,KAAK,aAAiB+D,IAAAA,KAAAA,CAAM/D,IAAI,KAAK,WAAA,IAAe+D,KAAM/D,CAAAA,IAAI,KAAK,MAAA;YACtF,KAAK,UAAA;gBACH,OAAO,IAAA;AACT,YAAA;gBACE,OAAO+D,KAAAA,CAAM/D,IAAI,KAAK,WAAA;AAC1B;AACF,KAAA;;;;"}
|
|
@@ -14,7 +14,8 @@ import { TEMP_FIELD_NAME } from './Fields.mjs';
|
|
|
14
14
|
* Constants
|
|
15
15
|
* -----------------------------------------------------------------------------------------------*/ const FIELD_SCHEMA = yup.object().shape({
|
|
16
16
|
label: yup.string().required().nullable(),
|
|
17
|
-
description: yup.string(),
|
|
17
|
+
description: yup.string().nullable(),
|
|
18
|
+
placeholder: yup.string().nullable(),
|
|
18
19
|
editable: yup.boolean(),
|
|
19
20
|
size: yup.number().required()
|
|
20
21
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditFieldForm.mjs","sources":["../../../../admin/src/components/ConfigurationForm/EditFieldForm.tsx"],"sourcesContent":["import {\n useNotification,\n InputRenderer,\n Form,\n InputProps,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Grid, Modal } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD } from '../../constants/attributes';\nimport { useGetInitialDataQuery } from '../../services/init';\nimport { capitalise } from '../../utils/strings';\nimport { getTranslation } from '../../utils/translations';\nimport { FieldTypeIcon } from '../FieldTypeIcon';\n\nimport { TEMP_FIELD_NAME } from './Fields';\n\nimport type { ConfigurationFormData } from './Form';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst FIELD_SCHEMA = yup.object().shape({\n label: yup.string().required().nullable(),\n description: yup.string(),\n editable: yup.boolean(),\n size: yup.number().required(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * EditFieldForm\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EditFieldFormProps {\n attribute?: Schema.Attribute.AnyAttribute;\n name: string;\n onClose: () => void;\n}\n\nconst EditFieldForm = ({ attribute, name, onClose }: EditFieldFormProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const { value, onChange } =\n useField<ConfigurationFormData['layout'][number]['children'][number]>(name);\n\n const { data: mainFieldOptions } = useGetInitialDataQuery(undefined, {\n selectFromResult: (res) => {\n if (attribute?.type !== 'relation' || !res.data) {\n return { data: [] };\n }\n\n if ('targetModel' in attribute && typeof attribute.targetModel === 'string') {\n const targetSchema = res.data.contentTypes.find(\n (schema) => schema.uid === attribute.targetModel\n );\n\n if (targetSchema) {\n return {\n data: Object.entries(targetSchema.attributes).reduce<\n Array<{ label: string; value: string }>\n >((acc, [key, attribute]) => {\n /**\n * Create the list of attributes from the schema as to which can\n * be our `mainField` and dictate the display name of the schema\n * we're editing.\n */\n if (!ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD.includes(attribute.type)) {\n acc.push({\n label: key,\n value: key,\n });\n }\n\n return acc;\n }, []),\n };\n }\n }\n\n return { data: [] };\n },\n skip: attribute?.type !== 'relation',\n });\n\n if (!value || value.name === TEMP_FIELD_NAME || !attribute) {\n // This is very unlikely to happen, but it ensures the form is not opened without a value.\n console.error(\n \"You've opened a field to edit without it being part of the form, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.containers.edit-settings.modal-form.error',\n defaultMessage: 'An error occurred while trying to open the form.',\n }),\n type: 'danger',\n });\n\n return null;\n }\n\n return (\n <Modal.Content>\n <Form\n method=\"PUT\"\n initialValues={value}\n validationSchema={FIELD_SCHEMA}\n onSubmit={(data) => {\n onChange(name, data);\n onClose();\n }}\n >\n <Modal.Header>\n <Flex gap={3}>\n <FieldTypeIcon type={attribute.type} />\n <Modal.Title>\n {formatMessage(\n {\n id: 'content-manager.containers.edit-settings.modal-form.label',\n defaultMessage: 'Edit {fieldName}',\n },\n { fieldName: capitalise(value.name) }\n )}\n </Modal.Title>\n </Flex>\n </Modal.Header>\n <Modal.Body>\n <Grid.Root gap={4}>\n {[\n {\n name: 'label',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.label'),\n defaultMessage: 'Label',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'description',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.description'),\n defaultMessage: 'Description',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'placeholder',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.placeholder'),\n defaultMessage: 'Placeholder',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'editable',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.editable'),\n defaultMessage: 'Editable',\n }),\n size: 6,\n type: 'boolean' as const,\n },\n {\n name: 'mainField',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.mainField'),\n defaultMessage: 'Entry title',\n }),\n hint: formatMessage({\n id: getTranslation(\n 'containers.SettingPage.edit-settings.modal-form.mainField.hint'\n ),\n defaultMessage: 'Set the displayed field',\n }),\n size: 6,\n options: mainFieldOptions,\n type: 'enumeration' as const,\n },\n {\n name: 'size',\n label: formatMessage({\n id: getTranslation('containers.ListSettingsView.modal-form.size'),\n defaultMessage: 'Size',\n }),\n size: 6,\n options: [\n { value: '4', label: '33%' },\n { value: '6', label: '50%' },\n { value: '8', label: '66%' },\n { value: '12', label: '100%' },\n ],\n type: 'enumeration' as const,\n },\n ]\n .filter(filterFieldsBasedOnAttributeType(attribute.type))\n .map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Modal.Footer>\n </Form>\n </Modal.Content>\n );\n};\n\n/**\n * @internal\n * @description not all edit fields have the same editable properties, it depends on the type\n * e.g. a dynamic zone can only change it's label.\n */\nconst filterFieldsBasedOnAttributeType = (type: Schema.Attribute.Kind) => (field: InputProps) => {\n switch (type) {\n case 'blocks':\n case 'richtext':\n return field.name !== 'size' && field.name !== 'mainField';\n case 'boolean':\n case 'media':\n return field.name !== 'placeholder' && field.name !== 'mainField';\n case 'component':\n return field.name === 'label' || field.name === 'editable';\n case 'dynamiczone':\n case 'json':\n return field.name !== 'placeholder' && field.name !== 'mainField' && field.name !== 'size';\n case 'relation':\n return true;\n default:\n return field.name !== 'mainField';\n }\n};\n\nexport { EditFieldForm };\nexport type { EditFieldFormProps };\n"],"names":["FIELD_SCHEMA","yup","object","shape","label","string","required","nullable","description","editable","boolean","size","number","EditFieldForm","attribute","name","onClose","formatMessage","useIntl","toggleNotification","useNotification","value","onChange","useField","data","mainFieldOptions","useGetInitialDataQuery","undefined","selectFromResult","res","type","targetModel","targetSchema","contentTypes","find","schema","uid","Object","entries","attributes","reduce","acc","key","ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD","includes","push","skip","TEMP_FIELD_NAME","console","error","message","id","defaultMessage","_jsx","Modal","Content","_jsxs","Form","method","initialValues","validationSchema","onSubmit","Header","Flex","gap","FieldTypeIcon","Title","fieldName","capitalise","Body","Grid","Root","getTranslation","hint","options","filter","filterFieldsBasedOnAttributeType","map","field","Item","col","direction","alignItems","InputRenderer","Footer","Close","Button","variant"],"mappings":";;;;;;;;;;;;AAsBA;;AAEkG,qGAElG,MAAMA,YAAeC,GAAAA,GAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AACtCC,IAAAA,KAAAA,EAAOH,GAAII,CAAAA,MAAM,EAAGC,CAAAA,QAAQ,GAAGC,QAAQ,EAAA;AACvCC,IAAAA,WAAAA,EAAaP,IAAII,MAAM,EAAA;AACvBI,IAAAA,QAAAA,EAAUR,IAAIS,OAAO,EAAA;IACrBC,IAAMV,EAAAA,GAAAA,CAAIW,MAAM,EAAA,CAAGN,QAAQ;AAC7B,CAAA,CAAA;AAYMO,MAAAA,aAAAA,GAAgB,CAAC,EAAEC,SAAS,EAAEC,IAAI,EAAEC,OAAO,EAAsB,GAAA;IACrE,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAE/B,IAAA,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GACvBC,QAAsER,CAAAA,IAAAA,CAAAA;AAExE,IAAA,MAAM,EAAES,IAAMC,EAAAA,gBAAgB,EAAE,GAAGC,uBAAuBC,SAAW,EAAA;AACnEC,QAAAA,gBAAAA,EAAkB,CAACC,GAAAA,GAAAA;AACjB,YAAA,IAAIf,WAAWgB,IAAS,KAAA,UAAA,IAAc,CAACD,GAAAA,CAAIL,IAAI,EAAE;gBAC/C,OAAO;AAAEA,oBAAAA,IAAAA,EAAM;AAAG,iBAAA;AACpB;AAEA,YAAA,IAAI,iBAAiBV,SAAa,IAAA,OAAOA,SAAUiB,CAAAA,WAAW,KAAK,QAAU,EAAA;AAC3E,gBAAA,MAAMC,YAAeH,GAAAA,GAAAA,CAAIL,IAAI,CAACS,YAAY,CAACC,IAAI,CAC7C,CAACC,MAAWA,GAAAA,MAAAA,CAAOC,GAAG,KAAKtB,UAAUiB,WAAW,CAAA;AAGlD,gBAAA,IAAIC,YAAc,EAAA;oBAChB,OAAO;AACLR,wBAAAA,IAAAA,EAAMa,MAAOC,CAAAA,OAAO,CAACN,YAAAA,CAAaO,UAAU,CAAA,CAAEC,MAAM,CAElD,CAACC,GAAAA,EAAK,CAACC,GAAAA,EAAK5B,SAAU,CAAA,GAAA;AACtB;;;;AAIC,kBACD,IAAI,CAAC6B,yCAAAA,CAA0CC,QAAQ,CAAC9B,SAAAA,CAAUgB,IAAI,CAAG,EAAA;AACvEW,gCAAAA,GAAAA,CAAII,IAAI,CAAC;oCACPzC,KAAOsC,EAAAA,GAAAA;oCACPrB,KAAOqB,EAAAA;AACT,iCAAA,CAAA;AACF;4BAEA,OAAOD,GAAAA;AACT,yBAAA,EAAG,EAAE;AACP,qBAAA;AACF;AACF;YAEA,OAAO;AAAEjB,gBAAAA,IAAAA,EAAM;AAAG,aAAA;AACpB,SAAA;AACAsB,QAAAA,IAAAA,EAAMhC,WAAWgB,IAAS,KAAA;AAC5B,KAAA,CAAA;AAEA,IAAA,IAAI,CAACT,KAASA,IAAAA,KAAAA,CAAMN,IAAI,KAAKgC,eAAAA,IAAmB,CAACjC,SAAW,EAAA;;AAE1DkC,QAAAA,OAAAA,CAAQC,KAAK,CACX,0HAAA,CAAA;QAGF9B,kBAAmB,CAAA;AACjB+B,YAAAA,OAAAA,EAASjC,aAAc,CAAA;gBACrBkC,EAAI,EAAA,2DAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA,CAAA;YACAtB,IAAM,EAAA;AACR,SAAA,CAAA;QAEA,OAAO,IAAA;AACT;IAEA,qBACEuB,GAAA,CAACC,MAAMC,OAAO,EAAA;AACZ,QAAA,QAAA,gBAAAC,IAACC,CAAAA,IAAAA,EAAAA;YACCC,MAAO,EAAA,KAAA;YACPC,aAAetC,EAAAA,KAAAA;YACfuC,gBAAkB5D,EAAAA,YAAAA;AAClB6D,YAAAA,QAAAA,EAAU,CAACrC,IAAAA,GAAAA;AACTF,gBAAAA,QAAAA,CAASP,IAAMS,EAAAA,IAAAA,CAAAA;AACfR,gBAAAA,OAAAA,EAAAA;AACF,aAAA;;AAEA,8BAAAqC,GAAA,CAACC,MAAMQ,MAAM,EAAA;AACX,oBAAA,QAAA,gBAAAN,IAACO,CAAAA,IAAAA,EAAAA;wBAAKC,GAAK,EAAA,CAAA;;0CACTX,GAACY,CAAAA,aAAAA,EAAAA;AAAcnC,gCAAAA,IAAAA,EAAMhB,UAAUgB;;AAC/B,0CAAAuB,GAAA,CAACC,MAAMY,KAAK,EAAA;0CACTjD,aACC,CAAA;oCACEkC,EAAI,EAAA,2DAAA;oCACJC,cAAgB,EAAA;iCAElB,EAAA;oCAAEe,SAAWC,EAAAA,UAAAA,CAAW/C,MAAMN,IAAI;AAAE,iCAAA;;;;;AAK5C,8BAAAsC,GAAA,CAACC,MAAMe,IAAI,EAAA;4CACThB,GAAA,CAACiB,KAAKC,IAAI,EAAA;wBAACP,GAAK,EAAA,CAAA;AACb,wBAAA,QAAA,EAAA;AACC,4BAAA;gCACEjD,IAAM,EAAA,OAAA;AACNX,gCAAAA,KAAAA,EAAOa,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,cAAe,CAAA,2CAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACNmB,IAAM,EAAA;AACR,6BAAA;AACA,4BAAA;gCACEf,IAAM,EAAA,aAAA;AACNX,gCAAAA,KAAAA,EAAOa,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,cAAe,CAAA,iDAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACNmB,IAAM,EAAA;AACR,6BAAA;AACA,4BAAA;gCACEf,IAAM,EAAA,aAAA;AACNX,gCAAAA,KAAAA,EAAOa,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,cAAe,CAAA,iDAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACNmB,IAAM,EAAA;AACR,6BAAA;AACA,4BAAA;gCACEf,IAAM,EAAA,UAAA;AACNX,gCAAAA,KAAAA,EAAOa,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,cAAe,CAAA,8CAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACNmB,IAAM,EAAA;AACR,6BAAA;AACA,4BAAA;gCACEf,IAAM,EAAA,WAAA;AACNX,gCAAAA,KAAAA,EAAOa,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,cAAe,CAAA,+CAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;AACAqB,gCAAAA,IAAAA,EAAMxD,aAAc,CAAA;AAClBkC,oCAAAA,EAAAA,EAAIqB,cACF,CAAA,gEAAA,CAAA;oCAEFpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACN+D,OAASjD,EAAAA,gBAAAA;gCACTK,IAAM,EAAA;AACR,6BAAA;AACA,4BAAA;gCACEf,IAAM,EAAA,MAAA;AACNX,gCAAAA,KAAAA,EAAOa,aAAc,CAAA;AACnBkC,oCAAAA,EAAAA,EAAIqB,cAAe,CAAA,6CAAA,CAAA;oCACnBpB,cAAgB,EAAA;AAClB,iCAAA,CAAA;gCACAzC,IAAM,EAAA,CAAA;gCACN+D,OAAS,EAAA;AACP,oCAAA;wCAAErD,KAAO,EAAA,GAAA;wCAAKjB,KAAO,EAAA;AAAM,qCAAA;AAC3B,oCAAA;wCAAEiB,KAAO,EAAA,GAAA;wCAAKjB,KAAO,EAAA;AAAM,qCAAA;AAC3B,oCAAA;wCAAEiB,KAAO,EAAA,GAAA;wCAAKjB,KAAO,EAAA;AAAM,qCAAA;AAC3B,oCAAA;wCAAEiB,KAAO,EAAA,IAAA;wCAAMjB,KAAO,EAAA;AAAO;AAC9B,iCAAA;gCACD0B,IAAM,EAAA;AACR;AACD,yBAAA,CACE6C,MAAM,CAACC,gCAAAA,CAAiC9D,SAAUgB,CAAAA,IAAI,GACtD+C,GAAG,CAAC,CAAC,EAAElE,IAAI,EAAE,GAAGmE,OAAO,iBACtBzB,GAAA,CAACiB,KAAKS,IAAI,EAAA;gCAAkBC,GAAKrE,EAAAA,IAAAA;gCAAMsE,SAAU,EAAA,QAAA;gCAASC,UAAW,EAAA,SAAA;AACnE,gCAAA,QAAA,gBAAA7B,GAAC8B,CAAAA,aAAAA,EAAAA;AAAe,oCAAA,GAAGL;;AADLA,6BAAAA,EAAAA,KAAAA,CAAM/D,IAAI,CAAA;;;AAMlC,8BAAAyC,IAAA,CAACF,MAAM8B,MAAM,EAAA;;AACX,sCAAA/B,GAAA,CAACC,MAAM+B,KAAK,EAAA;AACV,4BAAA,QAAA,gBAAAhC,GAACiC,CAAAA,MAAAA,EAAAA;gCAAOC,OAAQ,EAAA,UAAA;0CACbtE,aAAc,CAAA;oCAAEkC,EAAI,EAAA,8BAAA;oCAAgCC,cAAgB,EAAA;AAAS,iCAAA;;;sCAGlFC,GAACiC,CAAAA,MAAAA,EAAAA;4BAAOxD,IAAK,EAAA,QAAA;sCACVb,aAAc,CAAA;gCAAEkC,EAAI,EAAA,eAAA;gCAAiBC,cAAgB,EAAA;AAAS,6BAAA;;;;;;;AAM3E;AAEA;;;;AAIC,IACD,MAAMwB,gCAAAA,GAAmC,CAAC9C,IAAAA,GAAgC,CAACgD,KAAAA,GAAAA;QACzE,OAAQhD,IAAAA;YACN,KAAK,QAAA;YACL,KAAK,UAAA;AACH,gBAAA,OAAOgD,MAAM/D,IAAI,KAAK,MAAU+D,IAAAA,KAAAA,CAAM/D,IAAI,KAAK,WAAA;YACjD,KAAK,SAAA;YACL,KAAK,OAAA;AACH,gBAAA,OAAO+D,MAAM/D,IAAI,KAAK,aAAiB+D,IAAAA,KAAAA,CAAM/D,IAAI,KAAK,WAAA;YACxD,KAAK,WAAA;AACH,gBAAA,OAAO+D,MAAM/D,IAAI,KAAK,OAAW+D,IAAAA,KAAAA,CAAM/D,IAAI,KAAK,UAAA;YAClD,KAAK,aAAA;YACL,KAAK,MAAA;gBACH,OAAO+D,KAAAA,CAAM/D,IAAI,KAAK,aAAiB+D,IAAAA,KAAAA,CAAM/D,IAAI,KAAK,WAAA,IAAe+D,KAAM/D,CAAAA,IAAI,KAAK,MAAA;YACtF,KAAK,UAAA;gBACH,OAAO,IAAA;AACT,YAAA;gBACE,OAAO+D,KAAAA,CAAM/D,IAAI,KAAK,WAAA;AAC1B;AACF,KAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"EditFieldForm.mjs","sources":["../../../../admin/src/components/ConfigurationForm/EditFieldForm.tsx"],"sourcesContent":["import {\n useNotification,\n InputRenderer,\n Form,\n InputProps,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Grid, Modal } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD } from '../../constants/attributes';\nimport { useGetInitialDataQuery } from '../../services/init';\nimport { capitalise } from '../../utils/strings';\nimport { getTranslation } from '../../utils/translations';\nimport { FieldTypeIcon } from '../FieldTypeIcon';\n\nimport { TEMP_FIELD_NAME } from './Fields';\n\nimport type { ConfigurationFormData } from './Form';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst FIELD_SCHEMA = yup.object().shape({\n label: yup.string().required().nullable(),\n description: yup.string().nullable(),\n placeholder: yup.string().nullable(),\n editable: yup.boolean(),\n size: yup.number().required(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * EditFieldForm\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EditFieldFormProps {\n attribute?: Schema.Attribute.AnyAttribute;\n name: string;\n onClose: () => void;\n}\n\nconst EditFieldForm = ({ attribute, name, onClose }: EditFieldFormProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const { value, onChange } =\n useField<ConfigurationFormData['layout'][number]['children'][number]>(name);\n\n const { data: mainFieldOptions } = useGetInitialDataQuery(undefined, {\n selectFromResult: (res) => {\n if (attribute?.type !== 'relation' || !res.data) {\n return { data: [] };\n }\n\n if ('targetModel' in attribute && typeof attribute.targetModel === 'string') {\n const targetSchema = res.data.contentTypes.find(\n (schema) => schema.uid === attribute.targetModel\n );\n\n if (targetSchema) {\n return {\n data: Object.entries(targetSchema.attributes).reduce<\n Array<{ label: string; value: string }>\n >((acc, [key, attribute]) => {\n /**\n * Create the list of attributes from the schema as to which can\n * be our `mainField` and dictate the display name of the schema\n * we're editing.\n */\n if (!ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD.includes(attribute.type)) {\n acc.push({\n label: key,\n value: key,\n });\n }\n\n return acc;\n }, []),\n };\n }\n }\n\n return { data: [] };\n },\n skip: attribute?.type !== 'relation',\n });\n\n if (!value || value.name === TEMP_FIELD_NAME || !attribute) {\n // This is very unlikely to happen, but it ensures the form is not opened without a value.\n console.error(\n \"You've opened a field to edit without it being part of the form, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.containers.edit-settings.modal-form.error',\n defaultMessage: 'An error occurred while trying to open the form.',\n }),\n type: 'danger',\n });\n\n return null;\n }\n\n return (\n <Modal.Content>\n <Form\n method=\"PUT\"\n initialValues={value}\n validationSchema={FIELD_SCHEMA}\n onSubmit={(data) => {\n onChange(name, data);\n onClose();\n }}\n >\n <Modal.Header>\n <Flex gap={3}>\n <FieldTypeIcon type={attribute.type} />\n <Modal.Title>\n {formatMessage(\n {\n id: 'content-manager.containers.edit-settings.modal-form.label',\n defaultMessage: 'Edit {fieldName}',\n },\n { fieldName: capitalise(value.name) }\n )}\n </Modal.Title>\n </Flex>\n </Modal.Header>\n <Modal.Body>\n <Grid.Root gap={4}>\n {[\n {\n name: 'label',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.label'),\n defaultMessage: 'Label',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'description',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.description'),\n defaultMessage: 'Description',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'placeholder',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.placeholder'),\n defaultMessage: 'Placeholder',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'editable',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.editable'),\n defaultMessage: 'Editable',\n }),\n size: 6,\n type: 'boolean' as const,\n },\n {\n name: 'mainField',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.mainField'),\n defaultMessage: 'Entry title',\n }),\n hint: formatMessage({\n id: getTranslation(\n 'containers.SettingPage.edit-settings.modal-form.mainField.hint'\n ),\n defaultMessage: 'Set the displayed field',\n }),\n size: 6,\n options: mainFieldOptions,\n type: 'enumeration' as const,\n },\n {\n name: 'size',\n label: formatMessage({\n id: getTranslation('containers.ListSettingsView.modal-form.size'),\n defaultMessage: 'Size',\n }),\n size: 6,\n options: [\n { value: '4', label: '33%' },\n { value: '6', label: '50%' },\n { value: '8', label: '66%' },\n { value: '12', label: '100%' },\n ],\n type: 'enumeration' as const,\n },\n ]\n .filter(filterFieldsBasedOnAttributeType(attribute.type))\n .map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Modal.Footer>\n </Form>\n </Modal.Content>\n );\n};\n\n/**\n * @internal\n * @description not all edit fields have the same editable properties, it depends on the type\n * e.g. a dynamic zone can only change it's label.\n */\nconst filterFieldsBasedOnAttributeType = (type: Schema.Attribute.Kind) => (field: InputProps) => {\n switch (type) {\n case 'blocks':\n case 'richtext':\n return field.name !== 'size' && field.name !== 'mainField';\n case 'boolean':\n case 'media':\n return field.name !== 'placeholder' && field.name !== 'mainField';\n case 'component':\n return field.name === 'label' || field.name === 'editable';\n case 'dynamiczone':\n case 'json':\n return field.name !== 'placeholder' && field.name !== 'mainField' && field.name !== 'size';\n case 'relation':\n return true;\n default:\n return field.name !== 'mainField';\n }\n};\n\nexport { EditFieldForm };\nexport type { EditFieldFormProps };\n"],"names":["FIELD_SCHEMA","yup","object","shape","label","string","required","nullable","description","placeholder","editable","boolean","size","number","EditFieldForm","attribute","name","onClose","formatMessage","useIntl","toggleNotification","useNotification","value","onChange","useField","data","mainFieldOptions","useGetInitialDataQuery","undefined","selectFromResult","res","type","targetModel","targetSchema","contentTypes","find","schema","uid","Object","entries","attributes","reduce","acc","key","ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD","includes","push","skip","TEMP_FIELD_NAME","console","error","message","id","defaultMessage","_jsx","Modal","Content","_jsxs","Form","method","initialValues","validationSchema","onSubmit","Header","Flex","gap","FieldTypeIcon","Title","fieldName","capitalise","Body","Grid","Root","getTranslation","hint","options","filter","filterFieldsBasedOnAttributeType","map","field","Item","col","direction","alignItems","InputRenderer","Footer","Close","Button","variant"],"mappings":"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"}
|
|
@@ -210,12 +210,13 @@ const useFieldHint = (hint = undefined, attribute)=>{
|
|
|
210
210
|
if (!maximum && !minimum) {
|
|
211
211
|
return hint;
|
|
212
212
|
}
|
|
213
|
-
const units =
|
|
214
|
-
'
|
|
215
|
-
'
|
|
216
|
-
'
|
|
217
|
-
'
|
|
218
|
-
'
|
|
213
|
+
const units = [
|
|
214
|
+
'string',
|
|
215
|
+
'uid',
|
|
216
|
+
'richtext',
|
|
217
|
+
'email',
|
|
218
|
+
'password',
|
|
219
|
+
'text'
|
|
219
220
|
].includes(attribute.type) ? formatMessage({
|
|
220
221
|
id: 'content-manager.form.Input.hint.character.unit',
|
|
221
222
|
defaultMessage: '{maxValue, plural, one { character} other { characters}}'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputRenderer.js","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { type UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\nimport { useHasInputPopoverParent } from '../../../preview/components/InputPopover';\nimport { usePreviewInputManager } from '../../../preview/hooks/usePreviewInputManager';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({\n visible,\n hint: providedHint,\n document,\n ...inputProps\n}: InputRendererProps) => {\n const localeKey = document?.document?.locale || 'default';\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n const isInPreviewPopover = useHasInputPopoverParent();\n const shouldIgnorePermissions = isInDynamicZone || isInPreviewPopover;\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n // Everything preview related\n const previewProps = usePreviewInputManager(inputProps.name, inputProps.attribute);\n const props = { ...inputProps, ...previewProps };\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !shouldIgnorePermissions) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !shouldIgnorePermissions) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n {...field}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return (\n <BlocksInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'component':\n return (\n <ComponentInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(componentInputProps) => (\n <InputRenderer\n key={`input-${componentInputProps.name}-${localeKey}`}\n {...componentInputProps}\n />\n )}\n </ComponentInput>\n );\n case 'dynamiczone':\n return (\n <DynamicZone\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'relation':\n return (\n <RelationsInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n return (\n <UIDInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...restProps}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = !['biginteger', 'integer', 'number', 'dynamiczone', 'component'].includes(\n attribute.type\n )\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = React.memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","document","inputProps","localeKey","locale","currentDocumentMeta","useDocumentContext","edit","components","useDocumentLayout","model","collectionType","schema","kind","isInDynamicZone","useDynamicZone","state","isInPreviewPopover","useHasInputPopoverParent","shouldIgnorePermissions","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","previewProps","usePreviewInputManager","name","attribute","props","canUserReadField","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","componentInputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","React","memo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputRenderer.js","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { type UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\nimport { useHasInputPopoverParent } from '../../../preview/components/InputPopover';\nimport { usePreviewInputManager } from '../../../preview/hooks/usePreviewInputManager';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({\n visible,\n hint: providedHint,\n document,\n ...inputProps\n}: InputRendererProps) => {\n const localeKey = document?.document?.locale || 'default';\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n const isInPreviewPopover = useHasInputPopoverParent();\n const shouldIgnorePermissions = isInDynamicZone || isInPreviewPopover;\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n // Everything preview related\n const previewProps = usePreviewInputManager(inputProps.name, inputProps.attribute);\n const props = { ...inputProps, ...previewProps };\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !shouldIgnorePermissions) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !shouldIgnorePermissions) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n {...field}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return (\n <BlocksInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'component':\n return (\n <ComponentInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(componentInputProps) => (\n <InputRenderer\n key={`input-${componentInputProps.name}-${localeKey}`}\n {...componentInputProps}\n />\n )}\n </ComponentInput>\n );\n case 'dynamiczone':\n return (\n <DynamicZone\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'relation':\n return (\n <RelationsInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n return (\n <UIDInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...restProps}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = ['string', 'uid', 'richtext', 'email', 'password', 'text'].includes(attribute.type)\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = React.memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","document","inputProps","localeKey","locale","currentDocumentMeta","useDocumentContext","edit","components","useDocumentLayout","model","collectionType","schema","kind","isInDynamicZone","useDynamicZone","state","isInPreviewPopover","useHasInputPopoverParent","shouldIgnorePermissions","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","previewProps","usePreviewInputManager","name","attribute","props","canUserReadField","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","componentInputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","React","memo"],"mappings":"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"}
|
|
@@ -189,12 +189,13 @@ const useFieldHint = (hint = undefined, attribute)=>{
|
|
|
189
189
|
if (!maximum && !minimum) {
|
|
190
190
|
return hint;
|
|
191
191
|
}
|
|
192
|
-
const units =
|
|
193
|
-
'
|
|
194
|
-
'
|
|
195
|
-
'
|
|
196
|
-
'
|
|
197
|
-
'
|
|
192
|
+
const units = [
|
|
193
|
+
'string',
|
|
194
|
+
'uid',
|
|
195
|
+
'richtext',
|
|
196
|
+
'email',
|
|
197
|
+
'password',
|
|
198
|
+
'text'
|
|
198
199
|
].includes(attribute.type) ? formatMessage({
|
|
199
200
|
id: 'content-manager.form.Input.hint.character.unit',
|
|
200
201
|
defaultMessage: '{maxValue, plural, one { character} other { characters}}'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputRenderer.mjs","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { type UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\nimport { useHasInputPopoverParent } from '../../../preview/components/InputPopover';\nimport { usePreviewInputManager } from '../../../preview/hooks/usePreviewInputManager';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({\n visible,\n hint: providedHint,\n document,\n ...inputProps\n}: InputRendererProps) => {\n const localeKey = document?.document?.locale || 'default';\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n const isInPreviewPopover = useHasInputPopoverParent();\n const shouldIgnorePermissions = isInDynamicZone || isInPreviewPopover;\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n // Everything preview related\n const previewProps = usePreviewInputManager(inputProps.name, inputProps.attribute);\n const props = { ...inputProps, ...previewProps };\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !shouldIgnorePermissions) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !shouldIgnorePermissions) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n {...field}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return (\n <BlocksInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'component':\n return (\n <ComponentInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(componentInputProps) => (\n <InputRenderer\n key={`input-${componentInputProps.name}-${localeKey}`}\n {...componentInputProps}\n />\n )}\n </ComponentInput>\n );\n case 'dynamiczone':\n return (\n <DynamicZone\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'relation':\n return (\n <RelationsInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n return (\n <UIDInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...restProps}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = !['biginteger', 'integer', 'number', 'dynamiczone', 'component'].includes(\n attribute.type\n )\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = React.memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","document","inputProps","localeKey","locale","currentDocumentMeta","useDocumentContext","edit","components","useDocumentLayout","model","collectionType","schema","kind","isInDynamicZone","useDynamicZone","state","isInPreviewPopover","useHasInputPopoverParent","shouldIgnorePermissions","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","previewProps","usePreviewInputManager","name","attribute","props","canUserReadField","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","componentInputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","React","memo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputRenderer.mjs","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { type UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\nimport { useHasInputPopoverParent } from '../../../preview/components/InputPopover';\nimport { usePreviewInputManager } from '../../../preview/hooks/usePreviewInputManager';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({\n visible,\n hint: providedHint,\n document,\n ...inputProps\n}: InputRendererProps) => {\n const localeKey = document?.document?.locale || 'default';\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n const isInPreviewPopover = useHasInputPopoverParent();\n const shouldIgnorePermissions = isInDynamicZone || isInPreviewPopover;\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n // Everything preview related\n const previewProps = usePreviewInputManager(inputProps.name, inputProps.attribute);\n const props = { ...inputProps, ...previewProps };\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !shouldIgnorePermissions) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !shouldIgnorePermissions) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n {...field}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return (\n <BlocksInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'component':\n return (\n <ComponentInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(componentInputProps) => (\n <InputRenderer\n key={`input-${componentInputProps.name}-${localeKey}`}\n {...componentInputProps}\n />\n )}\n </ComponentInput>\n );\n case 'dynamiczone':\n return (\n <DynamicZone\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'relation':\n return (\n <RelationsInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n return (\n <UIDInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...restProps}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = ['string', 'uid', 'richtext', 'email', 'password', 'text'].includes(attribute.type)\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = React.memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","document","inputProps","localeKey","locale","currentDocumentMeta","useDocumentContext","edit","components","useDocumentLayout","model","collectionType","schema","kind","isInDynamicZone","useDynamicZone","state","isInPreviewPopover","useHasInputPopoverParent","shouldIgnorePermissions","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","previewProps","usePreviewInputManager","name","attribute","props","canUserReadField","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","componentInputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","React","memo"],"mappings":";;;;;;;;;;;;;;;;;;;AAmCA;;;;;;;AAOC,IACD,MAAMA,aAAAA,GAAgB,CAAC,EACrBC,OAAO,EACPC,IAAMC,EAAAA,YAAY,EAClBC,QAAQ,EACR,GAAGC,UACgB,EAAA,GAAA;IACnB,MAAMC,SAAAA,GAAYF,QAAUA,EAAAA,QAAAA,EAAUG,MAAU,IAAA,SAAA;AAChD,IAAA,MAAM,EAAEC,mBAAmB,EAAE,GAAGC,kBAAmB,CAAA,kBAAA,CAAA;IACnD,MAAM,EACJC,MAAM,EAAEC,UAAU,EAAE,EACrB,GAAGC,iBAAkBJ,CAAAA,mBAAAA,CAAoBK,KAAK,CAAA;AAE/C,IAAA,MAAMC,iBACJV,QAASW,CAAAA,MAAM,EAAEC,IAAAA,KAAS,mBAAmB,kBAAqB,GAAA,cAAA;AAEpE,IAAA,MAAMC,kBAAkBC,cAAe,CAAA,iBAAA,EAAmB,CAACC,KAAAA,GAAUA,MAAMF,eAAe,CAAA;AAC1F,IAAA,MAAMG,kBAAqBC,GAAAA,wBAAAA,EAAAA;AAC3B,IAAA,MAAMC,0BAA0BL,eAAmBG,IAAAA,kBAAAA;AAEnD,IAAA,MAAMG,iBAAiBC,OAAQ,CAAA,eAAA,EAAiB,CAACL,KAAAA,GAAUA,MAAMM,QAAQ,CAAA;AACzE,IAAA,MAAMC,kBAAkBC,eAAgB,CAAA,eAAA,EAAiB,CAACC,IAAAA,GAASA,KAAKF,eAAe,CAAA;AACvF,IAAA,MAAMG,gBAAgBF,eAAgB,CAAA,eAAA,EAAiB,CAACC,IAAAA,GAASA,KAAKC,aAAa,CAAA;AACnF,IAAA,MAAMC,kBAAkBH,eAAgB,CAAA,eAAA,EAAiB,CAACC,IAAAA,GAASA,KAAKE,eAAe,CAAA;AACvF,IAAA,MAAMC,gBAAgBJ,eAAgB,CAAA,eAAA,EAAiB,CAACC,IAAAA,GAASA,KAAKG,aAAa,CAAA;IAEnF,IAAIC,SAAAA,GAAY5B,QAASA,CAAAA,QAAQ,EAAE6B,UAAAA;AACnC,IAAA,IAAInB,mBAAmBoB,YAAc,EAAA;AACnCF,QAAAA,SAAAA,GAAY5B,UAAUA,QAAU6B,EAAAA,UAAAA;AAClC;IAEA,MAAME,cAAAA,GAAiBH,YAAYF,eAAkBJ,GAAAA,eAAAA;IACrD,MAAMU,cAAAA,GAAiBJ,YAAYH,aAAgBH,GAAAA,eAAAA;;AAGnD,IAAA,MAAMW,eAAeC,sBAAuBjC,CAAAA,UAAAA,CAAWkC,IAAI,EAAElC,WAAWmC,SAAS,CAAA;AACjF,IAAA,MAAMC,KAAQ,GAAA;AAAE,QAAA,GAAGpC,UAAU;AAAE,QAAA,GAAGgC;AAAa,KAAA;AAE/C;;;MAIA,MAAMK,mBAAmBX,aAAcU,CAAAA,KAAAA,CAAMF,IAAI,EAAEH,cAAAA,EAAgBK,MAAME,IAAI,CAAA;AAC7E,IAAA,MAAMC,mBAAmBb,aAAcU,CAAAA,KAAAA,CAAMF,IAAI,EAAEJ,cAAAA,EAAgBM,MAAME,IAAI,CAAA;AAE7E,IAAA,MAAME,SAASC,YAAa,CAAA,eAAA,EAAiB,CAACC,GAAAA,GAAQA,IAAIF,MAAM,CAAA;IAChE,MAAM,EAAEG,kBAAkB,EAAE,GAAGC,kBAC7BC,+BAAgCT,CAAAA,KAAAA,CAAMD,SAAS,CAAI,GAAA;QAACC,KAAMD,CAAAA,SAAS,CAACW;KAAY,GAAGC,SAAAA,CAAAA;AAGrF,IAAA,MAAMlD,IAAOmD,GAAAA,YAAAA,CAAalD,YAAcsC,EAAAA,KAAAA,CAAMD,SAAS,CAAA;;IAGvD,MAAMc,KAAAA,GAAQC,QAASd,CAAAA,KAAAA,CAAMF,IAAI,CAAA;AAEjC,IAAA,IAAI,CAACtC,OAAS,EAAA;QACZ,OAAO,IAAA;AACT;AAEA;;AAEC,MACD,IAAI,CAACyC,gBAAoB,IAAA,CAACpB,uBAAyB,EAAA;AACjD,QAAA,qBAAOkC,GAACC,CAAAA,eAAAA,EAAAA;YAAgBvD,IAAMA,EAAAA,IAAAA;AAAO,YAAA,GAAGuC;;AAC1C;IAEA,MAAMiB,eAAAA,GACJ,CAAEd,gBAAAA,IAAoB,CAACtB,uBAA4BmB,IAAAA,KAAAA,CAAMhB,QAAQ,IAAIF,cAAAA;AAEvE;;;AAGC,MACD,IAAI2B,+BAAAA,CAAgCT,KAAMD,CAAAA,SAAS,CAAG,EAAA;AACpD,QAAA,MAAMmB,cAAcX,kBAAkB,CAACP,MAAMD,SAAS,CAACW,WAAW,CAAC;AAEnE,QAAA,IAAIQ,WAAa,EAAA;AACf,YAAA,qBACEH,GAACG,CAAAA,WAAAA,EAAAA;AACE,gBAAA,GAAGlB,KAAK;AACR,gBAAA,GAAGa,KAAK;;gBAETpD,IAAMA,EAAAA,IAAAA;gBACNuB,QAAUiC,EAAAA;;AAGhB;AAEA,QAAA,qBACEF,GAACI,CAAAA,eAAAA,EAAAA;AAEE,YAAA,GAAGnB,KAAK;AACR,YAAA,GAAGJ,YAAY;YAChBnC,IAAMA,EAAAA,IAAAA;;YAENyC,IAAMF,EAAAA,KAAAA,CAAMD,SAAS,CAACW,WAAW;YACjC1B,QAAUiC,EAAAA;AANL,SAAA,EAAA,CAAC,MAAM,EAAEjB,KAAAA,CAAMF,IAAI,CAAC,CAAC,EAAEjC,SAAW,CAAA,CAAA,CAAA;AAS7C;AAEA;;AAEC,MACD,MAAMuD,eAAAA,GAAkBC,MAAOC,CAAAA,IAAI,CAAClB,MAAAA,CAAAA;IACpC,IAAI,CAACK,+BAAgCT,CAAAA,KAAAA,CAAMD,SAAS,CAAA,IAAKqB,gBAAgBG,QAAQ,CAACvB,KAAME,CAAAA,IAAI,CAAG,EAAA;AAC7F,QAAA,MAAMgB,WAAcd,GAAAA,MAAM,CAACJ,KAAAA,CAAME,IAAI,CAAC;AACtC,QAAA,qBACEa,GAACG,CAAAA,WAAAA,EAAAA;AAEE,YAAA,GAAGlB,KAAK;;YAETvC,IAAMA,EAAAA,IAAAA;YACNuB,QAAUiC,EAAAA;AAJL,SAAA,EAAA,CAAC,MAAM,EAAEjB,KAAAA,CAAMF,IAAI,CAAC,CAAC,EAAEjC,SAAW,CAAA,CAAA,CAAA;AAO7C;AAEA;;;MAIA,OAAQmC,MAAME,IAAI;QAChB,KAAK,QAAA;AACH,YAAA,qBACEa,GAACS,CAAAA,mBAAAA,EAAAA;AAEE,gBAAA,GAAGxB,KAAK;gBACTvC,IAAMA,EAAAA,IAAAA;AACNyC,gBAAAA,IAAAA,EAAMF,MAAME,IAAI;gBAChBlB,QAAUiC,EAAAA;AAJL,aAAA,EAAA,CAAC,MAAM,EAAEjB,KAAAA,CAAMF,IAAI,CAAC,CAAC,EAAEjC,SAAW,CAAA,CAAA,CAAA;QAO7C,KAAK,WAAA;AACH,YAAA,qBACEkD,GAACU,CAAAA,sBAAAA,EAAAA;AAEE,gBAAA,GAAGzB,KAAK;gBACTvC,IAAMA,EAAAA,IAAAA;gBACNiE,MAAQxD,EAAAA,UAAU,CAAC8B,KAAMD,CAAAA,SAAS,CAAC4B,SAAS,CAAC,CAACD,MAAM;gBACpD1C,QAAUiC,EAAAA,eAAAA;AAET,gBAAA,QAAA,EAAA,CAACW,oCACAb,GAACxD,CAAAA,aAAAA,EAAAA;AAEE,wBAAA,GAAGqE;AADC,qBAAA,EAAA,CAAC,MAAM,EAAEA,mBAAAA,CAAoB9B,IAAI,CAAC,CAAC,EAAEjC,SAAW,CAAA,CAAA;AARpD,aAAA,EAAA,CAAC,MAAM,EAAEmC,KAAAA,CAAMF,IAAI,CAAC,CAAC,EAAEjC,SAAW,CAAA,CAAA,CAAA;QAc7C,KAAK,aAAA;AACH,YAAA,qBACEkD,GAACc,CAAAA,WAAAA,EAAAA;AAEE,gBAAA,GAAG7B,KAAK;gBACTvC,IAAMA,EAAAA,IAAAA;gBACNuB,QAAUiC,EAAAA;AAHL,aAAA,EAAA,CAAC,MAAM,EAAEjB,KAAAA,CAAMF,IAAI,CAAC,CAAC,EAAEjC,SAAW,CAAA,CAAA,CAAA;QAM7C,KAAK,UAAA;AACH,YAAA,qBACEkD,GAACe,CAAAA,sBAAAA,EAAAA;AAEE,gBAAA,GAAG9B,KAAK;gBACTvC,IAAMA,EAAAA,IAAAA;gBACNuB,QAAUiC,EAAAA;AAHL,aAAA,EAAA,CAAC,MAAM,EAAEjB,KAAAA,CAAMF,IAAI,CAAC,CAAC,EAAEjC,SAAW,CAAA,CAAA,CAAA;QAM7C,KAAK,UAAA;AACH,YAAA,qBACEkD,GAACgB,CAAAA,eAAAA,EAAAA;AAEE,gBAAA,GAAG/B,KAAK;gBACTvC,IAAMA,EAAAA,IAAAA;AACNyC,gBAAAA,IAAAA,EAAMF,MAAME,IAAI;gBAChBlB,QAAUiC,EAAAA;AAJL,aAAA,EAAA,CAAC,MAAM,EAAEjB,KAAAA,CAAMF,IAAI,CAAC,CAAC,EAAEjC,SAAW,CAAA,CAAA,CAAA;QAO7C,KAAK,KAAA;AACH,YAAA,qBACEkD,GAACiB,CAAAA,gBAAAA,EAAAA;AAEE,gBAAA,GAAGhC,KAAK;gBACTvC,IAAMA,EAAAA,IAAAA;AACNyC,gBAAAA,IAAAA,EAAMF,MAAME,IAAI;gBAChBlB,QAAUiC,EAAAA;AAJL,aAAA,EAAA,CAAC,MAAM,EAAEjB,KAAAA,CAAMF,IAAI,CAAC,CAAC,EAAEjC,SAAW,CAAA,CAAA,CAAA;AAO7C;;AAEC,QACD,KAAK,aAAA;AACH,YAAA,qBACEkD,GAACI,CAAAA,eAAAA,EAAAA;AAEE,gBAAA,GAAGnB,KAAK;AACR,gBAAA,GAAGJ,YAAY;gBAChBnC,IAAMA,EAAAA,IAAAA;gBACNwE,OAASjC,EAAAA,KAAAA,CAAMD,SAAS,CAACmC,IAAI,CAACC,GAAG,CAAC,CAACC,KAAAA,IAAW;AAAEA,wBAAAA;qBAAM,CAAA,CAAA;;AAEtDlC,gBAAAA,IAAAA,EAAMF,KAAMU,CAAAA,WAAW,GAAG,cAAA,GAAiBV,MAAME,IAAI;gBACrDlB,QAAUiC,EAAAA;AAPL,aAAA,EAAA,CAAC,MAAM,EAAEjB,KAAAA,CAAMF,IAAI,CAAC,CAAC,EAAEjC,SAAW,CAAA,CAAA,CAAA;AAU7C,QAAA;;YAEE,MAAM,EAAEwE,QAAQC,OAAO,EAAEC,WAAWC,UAAU,EAAE,GAAGC,SAAAA,EAAW,GAAGzC,KAAAA;AACjE,YAAA,qBACEe,GAACI,CAAAA,eAAAA,EAAAA;AAEE,gBAAA,GAAGsB,SAAS;AACZ,gBAAA,GAAG7C,YAAY;gBAChBnC,IAAMA,EAAAA,IAAAA;;AAENyC,gBAAAA,IAAAA,EAAMF,KAAMU,CAAAA,WAAW,GAAG,cAAA,GAAiBV,MAAME,IAAI;gBACrDlB,QAAUiC,EAAAA;AANL,aAAA,EAAA,CAAC,MAAM,EAAEjB,KAAAA,CAAMF,IAAI,CAAC,CAAC,EAAEjC,SAAW,CAAA,CAAA,CAAA;AAS/C;AACF,CAAA;AAEA,MAAM4C,+BAAAA,GAAkC,CACtCV,SAEA,GAAA,aAAA,IAAiBA,aAAa,OAAOA,SAAAA,CAAUW,WAAW,KAAK,QAAA;AAEjE,MAAME,YAAe,GAAA,CACnBnD,IAAwBkD,GAAAA,SAAS,EACjCZ,SAAAA,GAAAA;IAEA,MAAM,EAAE2C,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAE,GAAGC,SAAU/C,CAAAA,SAAAA,CAAAA;IAEvC,IAAI,CAAC6C,OAAW,IAAA,CAACC,OAAS,EAAA;QACxB,OAAOpF,IAAAA;AACT;AAEA,IAAA,MAAMsF,KAAQ,GAAA;AAAC,QAAA,QAAA;AAAU,QAAA,KAAA;AAAO,QAAA,UAAA;AAAY,QAAA,OAAA;AAAS,QAAA,UAAA;AAAY,QAAA;AAAO,KAAA,CAACxB,QAAQ,CAACxB,SAAUG,CAAAA,IAAI,IAC5FwC,aACE,CAAA;QACEM,EAAI,EAAA,gDAAA;QACJC,cAAgB,EAAA;KAElB,EAAA;AACEC,QAAAA,QAAAA,EAAUC,IAAKC,CAAAA,GAAG,CAACP,OAAAA,IAAW,GAAGD,OAAW,IAAA,CAAA;KAGhD,CAAA,GAAA,IAAA;AAEJ,IAAA,MAAMS,YAAe,GAAA,OAAOR,OAAY,KAAA,QAAA,IAAY,OAAOD,OAAY,KAAA,QAAA;AAEvE,IAAA,OAAOF,aACL,CAAA;QACEM,EAAI,EAAA,sCAAA;QACJC,cACE,EAAA;KAEJ,EAAA;QACEK,GAAKT,EAAAA,OAAAA;QACLO,GAAKR,EAAAA,OAAAA;QACLW,WAAa9F,EAAAA,IAAAA;QACb+F,IAAMT,EAAAA,KAAAA;AACNU,QAAAA,OAAAA,EAASJ,eACLX,aAAc,CAAA;YACZM,EAAI,EAAA,+CAAA;YACJC,cAAgB,EAAA;SAElB,CAAA,GAAA,IAAA;AACJS,QAAAA,EAAAA,gBAAI3C,GAAC2C,CAAAA,IAAAA,EAAAA,EAAAA;AACP,KAAA,CAAA;AAEJ;AAEA,MAAMZ,YAAY,CAAC/C,SAAAA,GAAAA;IACjB,IAAI,KAAA,IAASA,SAAa,IAAA,KAAA,IAASA,SAAW,EAAA;QAC5C,OAAO;YACL6C,OAAS,EAAA,CAACe,MAAOC,CAAAA,KAAK,CAACD,MAAAA,CAAO5D,SAAUqD,CAAAA,GAAG,CAAKO,CAAAA,GAAAA,MAAAA,CAAO5D,SAAUqD,CAAAA,GAAG,CAAIzC,GAAAA,SAAAA;YACxEkC,OAAS,EAAA,CAACc,MAAOC,CAAAA,KAAK,CAACD,MAAAA,CAAO5D,SAAUuD,CAAAA,GAAG,CAAKK,CAAAA,GAAAA,MAAAA,CAAO5D,SAAUuD,CAAAA,GAAG,CAAI3C,GAAAA;AAC1E,SAAA;AACF,KAAA,MAAO,IAAI,WAAA,IAAeZ,SAAa,IAAA,WAAA,IAAeA,SAAW,EAAA;QAC/D,OAAO;AAAE6C,YAAAA,OAAAA,EAAS7C,UAAU8D,SAAS;AAAEhB,YAAAA,OAAAA,EAAS9C,UAAU+D;AAAU,SAAA;KAC/D,MAAA;QACL,OAAO;YAAElB,OAASjC,EAAAA,SAAAA;YAAWkC,OAASlC,EAAAA;AAAU,SAAA;AAClD;AACF,CAAA;AAEMoD,MAAAA,qBAAAA,iBAAwBC,KAAMC,CAAAA,IAAI,CAAC1G,aAAAA;;;;"}
|