@strapi/content-manager 5.28.0 → 5.29.0
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 +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js +3 -3
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +3 -3
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +6 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +6 -0
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +63 -18
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +65 -20
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
- package/dist/admin/services/documents.js +9 -1
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +9 -1
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/components/Header.d.ts +4 -0
- package/package.json +5 -5
|
@@ -244,8 +244,8 @@ const EditFieldForm = ({ attribute, name, onClose })=>{
|
|
|
244
244
|
case 'media':
|
|
245
245
|
return field.name !== 'placeholder' && field.name !== 'mainField';
|
|
246
246
|
case 'component':
|
|
247
|
-
case 'dynamiczone':
|
|
248
247
|
return field.name === 'label' || field.name === 'editable';
|
|
248
|
+
case 'dynamiczone':
|
|
249
249
|
case 'json':
|
|
250
250
|
return field.name !== 'placeholder' && field.name !== 'mainField' && field.name !== 'size';
|
|
251
251
|
case 'relation':
|
|
@@ -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 case 'dynamiczone':\n return field.name === 'label' || field.name === 'editable';\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(),\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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"}
|
|
@@ -223,8 +223,8 @@ const EditFieldForm = ({ attribute, name, onClose })=>{
|
|
|
223
223
|
case 'media':
|
|
224
224
|
return field.name !== 'placeholder' && field.name !== 'mainField';
|
|
225
225
|
case 'component':
|
|
226
|
-
case 'dynamiczone':
|
|
227
226
|
return field.name === 'label' || field.name === 'editable';
|
|
227
|
+
case 'dynamiczone':
|
|
228
228
|
case 'json':
|
|
229
229
|
return field.name !== 'placeholder' && field.name !== 'mainField' && field.name !== 'size';
|
|
230
230
|
case 'relation':
|
|
@@ -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 case 'dynamiczone':\n return field.name === 'label' || field.name === 'editable';\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.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":"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"}
|
|
@@ -39,7 +39,7 @@ const LeftMenu = ({ isFullPage = false })=>{
|
|
|
39
39
|
const collectionTypeLinks = hooks.useTypedSelector((state)=>state['content-manager'].app.collectionTypeLinks);
|
|
40
40
|
const singleTypeLinks = hooks.useTypedSelector((state)=>state['content-manager'].app.singleTypeLinks);
|
|
41
41
|
const { schemas } = useContentTypeSchema.useContentTypeSchema();
|
|
42
|
-
const {
|
|
42
|
+
const { contains } = designSystem.useFilter(locale, {
|
|
43
43
|
sensitivity: 'base'
|
|
44
44
|
});
|
|
45
45
|
const formatter = designSystem.useCollator(locale, {
|
|
@@ -68,7 +68,7 @@ const LeftMenu = ({ isFullPage = false })=>{
|
|
|
68
68
|
...section,
|
|
69
69
|
links: section.links/**
|
|
70
70
|
* Filter by the search value
|
|
71
|
-
*/ .filter((link)=>
|
|
71
|
+
*/ .filter((link)=>contains(link.title, search.trim()))/**
|
|
72
72
|
* Sort correctly using the language
|
|
73
73
|
*/ .sort((a, b)=>formatter.compare(a.title, b.title))/**
|
|
74
74
|
* Apply the formated strings to the links from react-intl
|
|
@@ -85,7 +85,7 @@ const LeftMenu = ({ isFullPage = false })=>{
|
|
|
85
85
|
collectionTypeLinks,
|
|
86
86
|
search,
|
|
87
87
|
singleTypeLinks,
|
|
88
|
-
|
|
88
|
+
contains,
|
|
89
89
|
formatMessage,
|
|
90
90
|
formatter
|
|
91
91
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeftMenu.js","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Flex, Searchbar, useCollator, useFilter, Divider, Loader } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentManagerInitData } from '../hooks/useContentManagerInitData';\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = ({ isFullPage = false }: { isFullPage?: boolean }) => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n // Initialize Content Manager data to ensure links are available\n const { isLoading } = useContentManagerInitData();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search.trim()))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(event.target.value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n // Show loading state while data is being fetched\n if (isLoading) {\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider />\n <Flex padding={4} justifyContent=\"center\">\n <Loader />\n </Flex>\n </SubNav.Main>\n );\n }\n\n return (\n <SubNav.Main aria-label={label}>\n {!isFullPage && (\n <>\n <SubNav.Header label={label} />\n <Divider />\n </>\n )}\n <SubNav.Content>\n {isFullPage && <SubNav.Header label={label} />}\n <Flex\n paddingLeft={{\n initial: 4,\n large: 5,\n }}\n paddingRight={{\n initial: 4,\n large: 5,\n }}\n paddingTop={\n isFullPage\n ? 0\n : {\n initial: 4,\n large: 5,\n }\n }\n paddingBottom={0}\n gap={3}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'search.placeholder',\n defaultMessage: 'Search',\n })}\n size=\"S\"\n // eslint-disable-next-line react/no-children-prop\n children={undefined}\n name={'search_contentType'}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Content>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","isFullPage","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","isLoading","useContentManagerInitData","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","trim","sort","a","b","compare","handleClear","handleChangeSearch","event","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","Flex","padding","justifyContent","Loader","_Fragment","Content","paddingLeft","initial","large","paddingRight","paddingTop","paddingBottom","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","badgeLabel","length","toString","Link","to","pathname","stringify","parse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LeftMenu.js","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Flex, Searchbar, useCollator, useFilter, Divider, Loader } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentManagerInitData } from '../hooks/useContentManagerInitData';\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = ({ isFullPage = false }: { isFullPage?: boolean }) => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n // Initialize Content Manager data to ensure links are available\n const { isLoading } = useContentManagerInitData();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { contains } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => contains(link.title, search.trim()))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, contains, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(event.target.value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n // Show loading state while data is being fetched\n if (isLoading) {\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider />\n <Flex padding={4} justifyContent=\"center\">\n <Loader />\n </Flex>\n </SubNav.Main>\n );\n }\n\n return (\n <SubNav.Main aria-label={label}>\n {!isFullPage && (\n <>\n <SubNav.Header label={label} />\n <Divider />\n </>\n )}\n <SubNav.Content>\n {isFullPage && <SubNav.Header label={label} />}\n <Flex\n paddingLeft={{\n initial: 4,\n large: 5,\n }}\n paddingRight={{\n initial: 4,\n large: 5,\n }}\n paddingTop={\n isFullPage\n ? 0\n : {\n initial: 4,\n large: 5,\n }\n }\n paddingBottom={0}\n gap={3}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'search.placeholder',\n defaultMessage: 'Search',\n })}\n size=\"S\"\n // eslint-disable-next-line react/no-children-prop\n children={undefined}\n name={'search_contentType'}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Content>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","isFullPage","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","isLoading","useContentManagerInitData","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","contains","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","trim","sort","a","b","compare","handleClear","handleChangeSearch","event","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","Flex","padding","justifyContent","Loader","_Fragment","Content","paddingLeft","initial","large","paddingRight","paddingTop","paddingBottom","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","badgeLabel","length","toString","Link","to","pathname","stringify","parse"],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ const LeftMenu = ({ isFullPage = false })=>{
|
|
|
18
18
|
const collectionTypeLinks = useTypedSelector((state)=>state['content-manager'].app.collectionTypeLinks);
|
|
19
19
|
const singleTypeLinks = useTypedSelector((state)=>state['content-manager'].app.singleTypeLinks);
|
|
20
20
|
const { schemas } = useContentTypeSchema();
|
|
21
|
-
const {
|
|
21
|
+
const { contains } = useFilter(locale, {
|
|
22
22
|
sensitivity: 'base'
|
|
23
23
|
});
|
|
24
24
|
const formatter = useCollator(locale, {
|
|
@@ -47,7 +47,7 @@ const LeftMenu = ({ isFullPage = false })=>{
|
|
|
47
47
|
...section,
|
|
48
48
|
links: section.links/**
|
|
49
49
|
* Filter by the search value
|
|
50
|
-
*/ .filter((link)=>
|
|
50
|
+
*/ .filter((link)=>contains(link.title, search.trim()))/**
|
|
51
51
|
* Sort correctly using the language
|
|
52
52
|
*/ .sort((a, b)=>formatter.compare(a.title, b.title))/**
|
|
53
53
|
* Apply the formated strings to the links from react-intl
|
|
@@ -64,7 +64,7 @@ const LeftMenu = ({ isFullPage = false })=>{
|
|
|
64
64
|
collectionTypeLinks,
|
|
65
65
|
search,
|
|
66
66
|
singleTypeLinks,
|
|
67
|
-
|
|
67
|
+
contains,
|
|
68
68
|
formatMessage,
|
|
69
69
|
formatter
|
|
70
70
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeftMenu.mjs","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Flex, Searchbar, useCollator, useFilter, Divider, Loader } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentManagerInitData } from '../hooks/useContentManagerInitData';\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = ({ isFullPage = false }: { isFullPage?: boolean }) => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n // Initialize Content Manager data to ensure links are available\n const { isLoading } = useContentManagerInitData();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search.trim()))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(event.target.value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n // Show loading state while data is being fetched\n if (isLoading) {\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider />\n <Flex padding={4} justifyContent=\"center\">\n <Loader />\n </Flex>\n </SubNav.Main>\n );\n }\n\n return (\n <SubNav.Main aria-label={label}>\n {!isFullPage && (\n <>\n <SubNav.Header label={label} />\n <Divider />\n </>\n )}\n <SubNav.Content>\n {isFullPage && <SubNav.Header label={label} />}\n <Flex\n paddingLeft={{\n initial: 4,\n large: 5,\n }}\n paddingRight={{\n initial: 4,\n large: 5,\n }}\n paddingTop={\n isFullPage\n ? 0\n : {\n initial: 4,\n large: 5,\n }\n }\n paddingBottom={0}\n gap={3}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'search.placeholder',\n defaultMessage: 'Search',\n })}\n size=\"S\"\n // eslint-disable-next-line react/no-children-prop\n children={undefined}\n name={'search_contentType'}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Content>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","isFullPage","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","isLoading","useContentManagerInitData","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","trim","sort","a","b","compare","handleClear","handleChangeSearch","event","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","Flex","padding","justifyContent","Loader","_Fragment","Content","paddingLeft","initial","large","paddingRight","paddingTop","paddingBottom","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","badgeLabel","length","toString","Link","to","pathname","stringify","parse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LeftMenu.mjs","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Flex, Searchbar, useCollator, useFilter, Divider, Loader } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentManagerInitData } from '../hooks/useContentManagerInitData';\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = ({ isFullPage = false }: { isFullPage?: boolean }) => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n // Initialize Content Manager data to ensure links are available\n const { isLoading } = useContentManagerInitData();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { contains } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => contains(link.title, search.trim()))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, contains, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(event.target.value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n // Show loading state while data is being fetched\n if (isLoading) {\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider />\n <Flex padding={4} justifyContent=\"center\">\n <Loader />\n </Flex>\n </SubNav.Main>\n );\n }\n\n return (\n <SubNav.Main aria-label={label}>\n {!isFullPage && (\n <>\n <SubNav.Header label={label} />\n <Divider />\n </>\n )}\n <SubNav.Content>\n {isFullPage && <SubNav.Header label={label} />}\n <Flex\n paddingLeft={{\n initial: 4,\n large: 5,\n }}\n paddingRight={{\n initial: 4,\n large: 5,\n }}\n paddingTop={\n isFullPage\n ? 0\n : {\n initial: 4,\n large: 5,\n }\n }\n paddingBottom={0}\n gap={3}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'search.placeholder',\n defaultMessage: 'Search',\n })}\n size=\"S\"\n // eslint-disable-next-line react/no-children-prop\n children={undefined}\n name={'search_contentType'}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Content>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","isFullPage","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","isLoading","useContentManagerInitData","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","contains","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","trim","sort","a","b","compare","handleClear","handleChangeSearch","event","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","Flex","padding","justifyContent","Loader","_Fragment","Content","paddingLeft","initial","large","paddingRight","paddingTop","paddingBottom","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","badgeLabel","length","toString","Link","to","pathname","stringify","parse"],"mappings":"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"}
|
|
@@ -526,6 +526,12 @@ const transformData = (data)=>{
|
|
|
526
526
|
if (errors) {
|
|
527
527
|
const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
|
|
528
528
|
const attribute = schema.attributes[fieldName];
|
|
529
|
+
// For components, check if any of the component fields are readable
|
|
530
|
+
if (attribute.type === 'component') {
|
|
531
|
+
const componentFields = (canReadFields ?? []).filter((field)=>field.startsWith(`${fieldName}.`));
|
|
532
|
+
return componentFields.length === 0;
|
|
533
|
+
}
|
|
534
|
+
// For regular fields, check if the field itself is readable
|
|
529
535
|
return attribute?.required && !(canReadFields ?? []).includes(fieldName);
|
|
530
536
|
});
|
|
531
537
|
if (hasUnreadableRequiredField) {
|