@strapi/content-manager 5.0.0-beta.6 → 5.0.0-beta.7
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/_chunks/{CardDragPreview-DSVYodBX.js → CardDragPreview-C0QyJgRA.js} +10 -14
- package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -0
- package/dist/_chunks/{CardDragPreview-ikSG4M46.mjs → CardDragPreview-DOxamsuj.mjs} +7 -9
- package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -0
- package/dist/_chunks/{ComponentConfigurationPage-43KmCNQE.js → ComponentConfigurationPage-DMq0wvcL.js} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-43KmCNQE.js.map → ComponentConfigurationPage-DMq0wvcL.js.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage--2aLCv-G.mjs → ComponentConfigurationPage-uTMkLI60.mjs} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage--2aLCv-G.mjs.map → ComponentConfigurationPage-uTMkLI60.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-CUcGHHvQ.mjs → EditConfigurationPage-B2HhCh-b.mjs} +3 -3
- package/dist/_chunks/{EditConfigurationPage-CUcGHHvQ.mjs.map → EditConfigurationPage-B2HhCh-b.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-BfFzJ4Br.js → EditConfigurationPage-BFpQwwbc.js} +3 -3
- package/dist/_chunks/{EditConfigurationPage-BfFzJ4Br.js.map → EditConfigurationPage-BFpQwwbc.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-Bm8lgcm6.mjs → EditViewPage-BVIrgjyG.mjs} +4 -4
- package/dist/_chunks/EditViewPage-BVIrgjyG.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-CzOT5Kpj.js → EditViewPage-CXXue16T.js} +5 -7
- package/dist/_chunks/EditViewPage-CXXue16T.js.map +1 -0
- package/dist/_chunks/{Field-Dlh0uGnL.mjs → Field-0_2h1vuK.mjs} +303 -294
- package/dist/_chunks/Field-0_2h1vuK.mjs.map +1 -0
- package/dist/_chunks/{Field-Caef4JjM.js → Field-ZgzKlgxR.js} +363 -355
- package/dist/_chunks/Field-ZgzKlgxR.js.map +1 -0
- package/dist/_chunks/{Form-EnaQL_6L.mjs → Form-B7TUnQDd.mjs} +14 -14
- package/dist/_chunks/Form-B7TUnQDd.mjs.map +1 -0
- package/dist/_chunks/{Form-BzuAjtRq.js → Form-DgTc2qkx.js} +14 -15
- package/dist/_chunks/Form-DgTc2qkx.js.map +1 -0
- package/dist/_chunks/{History-C17LiyRg.js → History-DtHjQuqM.js} +28 -40
- package/dist/_chunks/History-DtHjQuqM.js.map +1 -0
- package/dist/_chunks/{History-D6sbCJvo.mjs → History-Dug_4HIA.mjs} +28 -39
- package/dist/_chunks/History-Dug_4HIA.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-Dks5SX6f.js → ListConfigurationPage-BuSdTjfa.js} +17 -19
- package/dist/_chunks/ListConfigurationPage-BuSdTjfa.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-Ce4qs7qE.mjs → ListConfigurationPage-CmEeNg6T.mjs} +14 -14
- package/dist/_chunks/ListConfigurationPage-CmEeNg6T.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-BwrZrPsh.js → ListViewPage-CExWwa4S.js} +24 -37
- package/dist/_chunks/ListViewPage-CExWwa4S.js.map +1 -0
- package/dist/_chunks/{ListViewPage-Be7S5aKL.mjs → ListViewPage-Dsoa3wEA.mjs} +21 -33
- package/dist/_chunks/ListViewPage-Dsoa3wEA.mjs.map +1 -0
- package/dist/_chunks/{NoContentTypePage-Cu5r1-JT.js → NoContentTypePage-DCUL8gVi.js} +5 -5
- package/dist/_chunks/NoContentTypePage-DCUL8gVi.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-CIPmYQMm.mjs → NoContentTypePage-Dh38hBXB.mjs} +7 -7
- package/dist/_chunks/NoContentTypePage-Dh38hBXB.mjs.map +1 -0
- package/dist/_chunks/{NoPermissionsPage-C-j6TEUF.js → NoPermissionsPage-BK-XCpIy.js} +4 -5
- package/dist/_chunks/NoPermissionsPage-BK-XCpIy.js.map +1 -0
- package/dist/_chunks/{NoPermissionsPage-DhJ7LYrr.mjs → NoPermissionsPage-Dt2O40ey.mjs} +5 -6
- package/dist/_chunks/NoPermissionsPage-Dt2O40ey.mjs.map +1 -0
- package/dist/_chunks/{Relations-Czs-uZ-s.js → Relations-CNypkp-g.js} +66 -59
- package/dist/_chunks/Relations-CNypkp-g.js.map +1 -0
- package/dist/_chunks/{Relations-CY7AtkDA.mjs → Relations-DZyjWZHl.mjs} +62 -54
- package/dist/_chunks/Relations-DZyjWZHl.mjs.map +1 -0
- package/dist/_chunks/{index-DNVx8ssZ.mjs → index-B3c-4it4.mjs} +54 -41
- package/dist/_chunks/index-B3c-4it4.mjs.map +1 -0
- package/dist/_chunks/{index-X_2tafck.js → index-DFK7LwDW.js} +59 -47
- package/dist/_chunks/index-DFK7LwDW.js.map +1 -0
- package/dist/_chunks/{layout-Dnh0PNp9.mjs → layout-B5cm7cZj.mjs} +10 -10
- package/dist/_chunks/layout-B5cm7cZj.mjs.map +1 -0
- package/dist/_chunks/{layout-dBc7wN7L.js → layout-DLih5-_W.js} +11 -13
- package/dist/_chunks/layout-DLih5-_W.js.map +1 -0
- package/dist/_chunks/{relations-Dx7tMKJN.mjs → relations-BZkrMa2z.mjs} +2 -2
- package/dist/_chunks/{relations-Dx7tMKJN.mjs.map → relations-BZkrMa2z.mjs.map} +1 -1
- package/dist/_chunks/{relations-4pHtBrHJ.js → relations-CTvkuINQ.js} +2 -2
- package/dist/_chunks/{relations-4pHtBrHJ.js.map → relations-CTvkuINQ.js.map} +1 -1
- package/dist/_chunks/useDragAndDrop-DdHgKsqq.mjs.map +1 -1
- package/dist/_chunks/useDragAndDrop-J0TUUbR6.js.map +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/hooks/useDocumentLayout.d.ts +1 -1
- package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
- package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations.d.ts +8 -3
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +3 -49
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +48 -54
- package/dist/admin/src/utils/api.d.ts +6 -7
- package/dist/server/index.js +333 -327
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +340 -334
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/index.d.ts +1 -1
- package/dist/server/src/history/services/history.d.ts +2 -4
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/index.d.ts +6 -2
- package/dist/server/src/history/services/index.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts +9 -0
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -0
- package/dist/server/src/history/services/utils.d.ts +41 -9
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/history/utils.d.ts +6 -2
- package/dist/server/src/history/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +11 -11
- package/dist/server/src/services/document-manager.d.ts +12 -11
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +11 -11
- package/dist/shared/contracts/collection-types.d.ts +3 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/package.json +10 -11
- package/dist/_chunks/CardDragPreview-DSVYodBX.js.map +0 -1
- package/dist/_chunks/CardDragPreview-ikSG4M46.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-Bm8lgcm6.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-CzOT5Kpj.js.map +0 -1
- package/dist/_chunks/Field-Caef4JjM.js.map +0 -1
- package/dist/_chunks/Field-Dlh0uGnL.mjs.map +0 -1
- package/dist/_chunks/Form-BzuAjtRq.js.map +0 -1
- package/dist/_chunks/Form-EnaQL_6L.mjs.map +0 -1
- package/dist/_chunks/History-C17LiyRg.js.map +0 -1
- package/dist/_chunks/History-D6sbCJvo.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-Ce4qs7qE.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-Dks5SX6f.js.map +0 -1
- package/dist/_chunks/ListViewPage-Be7S5aKL.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-BwrZrPsh.js.map +0 -1
- package/dist/_chunks/NoContentTypePage-CIPmYQMm.mjs.map +0 -1
- package/dist/_chunks/NoContentTypePage-Cu5r1-JT.js.map +0 -1
- package/dist/_chunks/NoPermissionsPage-C-j6TEUF.js.map +0 -1
- package/dist/_chunks/NoPermissionsPage-DhJ7LYrr.mjs.map +0 -1
- package/dist/_chunks/Relations-CY7AtkDA.mjs.map +0 -1
- package/dist/_chunks/Relations-Czs-uZ-s.js.map +0 -1
- package/dist/_chunks/index-DNVx8ssZ.mjs.map +0 -1
- package/dist/_chunks/index-X_2tafck.js.map +0 -1
- package/dist/_chunks/layout-Dnh0PNp9.mjs.map +0 -1
- package/dist/_chunks/layout-dBc7wN7L.js.map +0 -1
@@ -1,15 +1,15 @@
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
2
2
|
import * as React from "react";
|
3
|
-
import { useNotification, useField, Form, InputRenderer, useForm, BackButton } from "@strapi/admin/strapi-admin";
|
4
|
-
import { ModalLayout, ModalHeader, Flex, Typography, ModalBody, Grid, GridItem, ModalFooter, Button, IconButton, Box, Menu, useComposedRefs, Link,
|
3
|
+
import { useNotification, useField, Form, InputRenderer, useForm, Layouts, BackButton } from "@strapi/admin/strapi-admin";
|
4
|
+
import { ModalLayout, ModalHeader, Flex, Typography, ModalBody, Grid, GridItem, ModalFooter, Button, IconButton, Box, Menu, useComposedRefs, Link, Main, Divider } from "@strapi/design-system";
|
5
5
|
import { generateNKeysBetween as generateNKeysBetween$1 } from "fractional-indexing";
|
6
6
|
import pipe from "lodash/fp/pipe";
|
7
7
|
import { useIntl } from "react-intl";
|
8
|
-
import { u as useGetInitialDataQuery, A as ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD, y as capitalise, g as getTranslation } from "./index-
|
8
|
+
import { u as useGetInitialDataQuery, A as ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD, y as capitalise, g as getTranslation } from "./index-B3c-4it4.mjs";
|
9
9
|
import { Plus, Drag, Pencil, Cross, Cog } from "@strapi/icons";
|
10
10
|
import { getEmptyImage } from "react-dnd-html5-backend";
|
11
11
|
import { NavLink } from "react-router-dom";
|
12
|
-
import styled from "styled-components";
|
12
|
+
import { styled } from "styled-components";
|
13
13
|
import { u as useDragAndDrop, I as ItemTypes } from "./useDragAndDrop-DdHgKsqq.mjs";
|
14
14
|
import { C as ComponentIcon } from "./ComponentIcon-BOFnK76n.mjs";
|
15
15
|
import * as yup from "yup";
|
@@ -78,7 +78,7 @@ const EditFieldForm = ({ attribute, name, onClose }) => {
|
|
78
78
|
children: [
|
79
79
|
/* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsxs(Flex, { gap: 3, children: [
|
80
80
|
/* @__PURE__ */ jsx(FieldTypeIcon, { type: attribute.type }),
|
81
|
-
/* @__PURE__ */ jsx(Typography, { fontWeight: "bold", textColor: "neutral800",
|
81
|
+
/* @__PURE__ */ jsx(Typography, { fontWeight: "bold", textColor: "neutral800", tag: "h2", id, children: formatMessage(
|
82
82
|
{
|
83
83
|
id: "content-manager.containers.edit-settings.modal-form.label",
|
84
84
|
defaultMessage: "Edit {fieldName}"
|
@@ -365,7 +365,7 @@ const Field = ({ attribute, components, name, index, onMoveField, onRemoveField
|
|
365
365
|
return null;
|
366
366
|
}
|
367
367
|
if (value.name === TEMP_FIELD_NAME) {
|
368
|
-
return /* @__PURE__ */ jsx(Flex, {
|
368
|
+
return /* @__PURE__ */ jsx(Flex, { tag: "span", height: "100%", style: { opacity: 0 }, ref: tempRefs });
|
369
369
|
}
|
370
370
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
371
371
|
/* @__PURE__ */ jsxs(
|
@@ -385,7 +385,7 @@ const Field = ({ attribute, components, name, index, onMoveField, onRemoveField
|
|
385
385
|
/* @__PURE__ */ jsx(
|
386
386
|
DragButton,
|
387
387
|
{
|
388
|
-
|
388
|
+
tag: "span",
|
389
389
|
"aria-label": formatMessage(
|
390
390
|
{
|
391
391
|
id: getTranslation("components.DraggableCard.move.field"),
|
@@ -472,7 +472,7 @@ const Field = ({ attribute, components, name, index, onMoveField, onRemoveField
|
|
472
472
|
{
|
473
473
|
onClick: (e) => e.stopPropagation(),
|
474
474
|
startIcon: /* @__PURE__ */ jsx(Cog, {}),
|
475
|
-
|
475
|
+
tag: NavLink,
|
476
476
|
to: `../components/${attribute.component}/configurations/edit`,
|
477
477
|
children: formatMessage({
|
478
478
|
id: getTranslation("components.FieldItem.linkToComponentLayout"),
|
@@ -585,9 +585,9 @@ const ConfigurationForm = ({
|
|
585
585
|
settings
|
586
586
|
};
|
587
587
|
}, [layout, settings]);
|
588
|
-
return /* @__PURE__ */ jsx(
|
588
|
+
return /* @__PURE__ */ jsx(Layouts.Root, { children: /* @__PURE__ */ jsx(Main, { children: /* @__PURE__ */ jsxs(Form, { initialValues, onSubmit, method: "PUT", children: [
|
589
589
|
/* @__PURE__ */ jsx(Header, { name: settings.displayName ?? "" }),
|
590
|
-
/* @__PURE__ */ jsx(
|
590
|
+
/* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsxs(
|
591
591
|
Flex,
|
592
592
|
{
|
593
593
|
alignItems: "stretch",
|
@@ -601,7 +601,7 @@ const ConfigurationForm = ({
|
|
601
601
|
paddingLeft: 7,
|
602
602
|
paddingRight: 7,
|
603
603
|
children: [
|
604
|
-
/* @__PURE__ */ jsx(Typography, { variant: "delta",
|
604
|
+
/* @__PURE__ */ jsx(Typography, { variant: "delta", tag: "h2", children: formatMessage({
|
605
605
|
id: getTranslation("containers.SettingPage.settings"),
|
606
606
|
defaultMessage: "Settings"
|
607
607
|
}) }),
|
@@ -636,7 +636,7 @@ const ConfigurationForm = ({
|
|
636
636
|
}
|
637
637
|
) }),
|
638
638
|
/* @__PURE__ */ jsx(GridItem, { paddingTop: 6, paddingBottom: 6, col: 12, s: 12, children: /* @__PURE__ */ jsx(Divider, {}) }),
|
639
|
-
/* @__PURE__ */ jsx(GridItem, { col: 12, s: 12, children: /* @__PURE__ */ jsx(Typography, { variant: "delta",
|
639
|
+
/* @__PURE__ */ jsx(GridItem, { col: 12, s: 12, children: /* @__PURE__ */ jsx(Typography, { variant: "delta", tag: "h3", children: formatMessage({
|
640
640
|
id: getTranslation("containers.SettingPage.view"),
|
641
641
|
defaultMessage: "View"
|
642
642
|
}) }) }),
|
@@ -712,7 +712,7 @@ const Header = ({ name }) => {
|
|
712
712
|
const modified = useForm("Header", (state) => state.modified);
|
713
713
|
const isSubmitting = useForm("Header", (state) => state.isSubmitting);
|
714
714
|
return /* @__PURE__ */ jsx(
|
715
|
-
|
715
|
+
Layouts.Header,
|
716
716
|
{
|
717
717
|
title: formatMessage(
|
718
718
|
{
|
@@ -734,4 +734,4 @@ export {
|
|
734
734
|
ConfigurationForm as C,
|
735
735
|
TEMP_FIELD_NAME as T
|
736
736
|
};
|
737
|
-
//# sourceMappingURL=Form-
|
737
|
+
//# sourceMappingURL=Form-B7TUnQDd.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Form-B7TUnQDd.mjs","sources":["../../admin/src/components/ConfigurationForm/EditFieldForm.tsx","../../admin/src/components/ConfigurationForm/Fields.tsx","../../admin/src/components/ConfigurationForm/Form.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useNotification,\n InputRenderer,\n Form,\n InputProps,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Grid,\n GridItem,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n Typography,\n} 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(),\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 id = React.useId();\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 <ModalLayout onClose={onClose} labelledBy={id}>\n <Form\n method=\"PUT\"\n initialValues={value}\n validationSchema={FIELD_SCHEMA}\n onSubmit={(data) => {\n onChange(name, data);\n onClose();\n }}\n >\n <ModalHeader>\n <Flex gap={3}>\n <FieldTypeIcon type={attribute.type} />\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" tag=\"h2\" id={id}>\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 </Typography>\n </Flex>\n </ModalHeader>\n <ModalBody>\n <Grid 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 <GridItem key={field.name} col={size}>\n <InputRenderer {...field} />\n </GridItem>\n ))}\n </Grid>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n }\n />\n </Form>\n </ModalLayout>\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","import * as React from 'react';\n\nimport { useField, useForm } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Grid,\n GridItem,\n IconButton,\n IconButtonComponent,\n Typography,\n useComposedRefs,\n Link,\n Menu,\n} from '@strapi/design-system';\nimport { Cog, Cross, Drag, Pencil, Plus } from '@strapi/icons';\nimport { generateNKeysBetween as generateNKeysBetweenImpl } from 'fractional-indexing';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ItemTypes } from '../../constants/dragAndDrop';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../hooks/useDragAndDrop';\nimport { getTranslation } from '../../utils/translations';\nimport { ComponentIcon } from '../ComponentIcon';\n\nimport { EditFieldForm, EditFieldFormProps } from './EditFieldForm';\n\nimport type { ConfigurationFormData, EditFieldSpacerLayout } from './Form';\nimport type { EditLayout } from '../../hooks/useDocumentLayout';\n\ntype FormField = ConfigurationFormData['layout'][number]['children'][number];\ntype Field = Omit<ConfigurationFormData['layout'][number]['children'][number], '__temp_key__'>;\n\n/* -------------------------------------------------------------------------------------------------\n * Fields\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FieldsProps extends Pick<EditLayout, 'metadatas'>, Pick<FieldProps, 'components'> {\n attributes: {\n [key: string]: FieldProps['attribute'];\n };\n fieldSizes: Record<string, number>;\n components: EditLayout['components'];\n}\n\nconst Fields = ({ attributes, fieldSizes, components, metadatas = {} }: FieldsProps) => {\n const { formatMessage } = useIntl();\n\n const layout = useForm<ConfigurationFormData['layout']>(\n 'Fields',\n (state) => state.values.layout ?? []\n );\n const onChange = useForm('Fields', (state) => state.onChange);\n const addFieldRow = useForm('Fields', (state) => state.addFieldRow);\n const removeFieldRow = useForm('Fields', (state) => state.removeFieldRow);\n\n const existingFields = layout.map((row) => row.children.map((field) => field.name)).flat();\n\n /**\n * Get the fields that are not already in the layout\n * But also check that they are visible before we give users\n * the option to display them. e.g. `id` is not visible.\n */\n const remainingFields = Object.entries(metadatas).reduce<Field[]>((acc, current) => {\n const [name, { visible, ...field }] = current;\n\n if (!existingFields.includes(name) && visible === true) {\n const type = attributes[name]?.type;\n const size = type ? fieldSizes[type] : 12;\n\n acc.push({\n ...field,\n label: field.label ?? name,\n name,\n size,\n });\n }\n\n return acc;\n }, []);\n\n const handleMoveField: FieldProps['onMoveField'] = (\n [newRowIndex, newFieldIndex],\n [currentRowIndex, currentFieldIndex]\n ) => {\n /**\n * Because this view has the constraint that the sum of field sizes cannot be greater\n * than 12, we don't use the form's method to move field rows, instead, we calculate\n * the new layout and set the entire form.\n */\n const newLayout = structuredClone(layout);\n\n /**\n * Remove field from the current layout space using splice so we have the item\n */\n const [field] = newLayout[currentRowIndex].children.splice(currentFieldIndex, 1);\n\n if (!field || field.name === TEMP_FIELD_NAME) {\n return;\n }\n\n const newRow = newLayout[newRowIndex].children;\n const [newFieldKey] = generateNKeysBetween(newRow, 1, currentFieldIndex, newFieldIndex);\n\n /**\n * Next we inject the field into it's new row at it's specified index, we then remove the spaces\n * if they exist and recalculate into potentially two arrays ONLY if the sizing is now over 12,\n * the row and the rest of the row that couldn't fit.\n *\n * for example, if i have a row of `[{size: 4}, {size: 6}]` and i add `{size: 8}` a index 0,\n * the new array will look like `[{size: 8}, {size: 4}, {size: 6}]` which breaks the limit of 12,\n * so instead we make two arrays for the new rows `[[{size: 8}, {size: 4}], [{size: 6}]]` which we\n * then inject at the original row point with spacers included.\n */\n newRow.splice(newFieldIndex, 0, { ...field, __temp_key__: newFieldKey });\n\n if (newLayout[newRowIndex].children.reduce((acc, curr) => acc + curr.size, 0) > 12) {\n const recalculatedRows = chunkArray(\n newLayout[newRowIndex].children.filter((field) => field.name !== TEMP_FIELD_NAME)\n );\n\n const rowKeys = generateNKeysBetween(\n newLayout,\n recalculatedRows.length,\n currentRowIndex,\n newRowIndex\n );\n\n newLayout.splice(\n newRowIndex,\n 1,\n ...recalculatedRows.map((row, index) => ({\n __temp_key__: rowKeys[index],\n children: row,\n }))\n );\n }\n\n /**\n * Now we remove our spacers from the rows so we can understand what dead rows exist:\n * - if there's only spacers left\n * - there's nothing in the row, e.g. a size 12 field left it.\n * These rows are then filtered out.\n * After that, we recalculate the spacers for the rows that need them.\n */\n const newLayoutWithSpacers = newLayout\n .map((row) => ({\n ...row,\n children: row.children.filter((field) => field.name !== TEMP_FIELD_NAME),\n }))\n .filter((row) => row.children.length > 0)\n .map((row) => {\n const totalSpaceTaken = row.children.reduce((acc, curr) => acc + curr.size, 0);\n\n if (totalSpaceTaken < 12) {\n const [spacerKey] = generateNKeysBetweenImpl(\n row.children.at(-1)?.__temp_key__,\n undefined,\n 1\n );\n\n return {\n ...row,\n children: [\n ...row.children,\n {\n name: TEMP_FIELD_NAME,\n size: 12 - totalSpaceTaken,\n __temp_key__: spacerKey,\n } satisfies EditFieldSpacerLayout,\n ],\n };\n }\n\n return row;\n });\n\n onChange('layout', newLayoutWithSpacers);\n };\n\n const handleRemoveField =\n (rowIndex: number, fieldIndex: number): FieldProps['onRemoveField'] =>\n () => {\n if (layout[rowIndex].children.length === 1) {\n removeFieldRow(`layout`, rowIndex);\n } else {\n onChange(`layout.${rowIndex}.children.${fieldIndex}`, undefined);\n }\n };\n\n const handleAddField = (field: Field) => () => {\n addFieldRow('layout', { children: [field] });\n };\n\n return (\n <Flex paddingTop={6} direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex alignItems=\"flex-start\" direction=\"column\" justifyContent=\"space-between\">\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: getTranslation('containers.list.displayedFields'),\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'containers.SettingPage.editSettings.description',\n defaultMessage: 'Drag & drop the fields to build the layout',\n })}\n </Typography>\n </Flex>\n <Box padding={4} hasRadius borderStyle=\"dashed\" borderWidth=\"1px\" borderColor=\"neutral300\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {layout.map((row, rowIndex) => (\n <Grid gap={2} key={row.__temp_key__}>\n {row.children.map(({ size, ...field }, fieldIndex) => (\n <GridItem key={field.name} col={size}>\n <Field\n attribute={attributes[field.name]}\n components={components}\n index={[rowIndex, fieldIndex]}\n name={`layout.${rowIndex}.children.${fieldIndex}`}\n onMoveField={handleMoveField}\n onRemoveField={handleRemoveField(rowIndex, fieldIndex)}\n />\n </GridItem>\n ))}\n </Grid>\n ))}\n <Menu.Root>\n <Menu.Trigger\n startIcon={<Plus />}\n endIcon={null}\n disabled={remainingFields.length === 0}\n fullWidth\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTranslation('containers.SettingPage.add.field'),\n defaultMessage: 'Insert another field',\n })}\n </Menu.Trigger>\n <Menu.Content>\n {remainingFields.map((field) => (\n <Menu.Item key={field.name} onSelect={handleAddField(field)}>\n {field.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Box>\n </Flex>\n );\n};\n\n/**\n * @internal\n * @description Small abstraction to solve within an array of fields where you can\n * add a field to the beginning or start, move back and forth what it's index range\n * should be when calculating it's new temp key\n */\nconst generateNKeysBetween = <Field extends { __temp_key__: string }>(\n field: Field[],\n count: number,\n currInd: number,\n newInd: number\n) => {\n const startKey = currInd > newInd ? field[newInd - 1]?.__temp_key__ : field[newInd]?.__temp_key__;\n const endKey = currInd > newInd ? field[newInd]?.__temp_key__ : field[newInd + 1]?.__temp_key__;\n\n return generateNKeysBetweenImpl(startKey, endKey, count);\n};\n\n/**\n * @internal\n * @description chunks a row of layouts by the max size we allow, 12. It does not add the\n * spacers again, that should be added separately.\n */\nconst chunkArray = (array: FormField[]) => {\n const result: Array<FormField[]> = [];\n let temp: FormField[] = [];\n\n array.reduce((acc, field) => {\n if (acc + field.size > 12) {\n result.push(temp);\n temp = [field];\n return field.size;\n } else {\n temp.push(field);\n return acc + field.size;\n }\n }, 0);\n\n if (temp.length > 0) {\n result.push(temp);\n }\n\n return result;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FieldProps extends Pick<EditFieldFormProps, 'name' | 'attribute'> {\n components: EditLayout['components'];\n index: [row: number, index: number];\n onMoveField: UseDragAndDropOptions<number[]>['onMoveItem'];\n onRemoveField: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nconst TEMP_FIELD_NAME = '_TEMP_';\n\n/**\n * Displays a field in the layout with drag options, also\n * opens a modal to edit the details of said field.\n */\nconst Field = ({ attribute, components, name, index, onMoveField, onRemoveField }: FieldProps) => {\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const { value } = useField<FormField>(name);\n\n const [{ isDragging }, objectRef, dropRef, dragRef, dragPreviewRef] = useDragAndDrop<\n Array<number>\n >(true, {\n dropSensitivity: 'immediate',\n type: ItemTypes.EDIT_FIELD,\n item: { index, label: value?.label, name },\n index,\n onMoveItem: onMoveField,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef]);\n\n const composedRefs = useComposedRefs<HTMLSpanElement>(dragRef, objectRef);\n\n const handleRemoveField: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n e.stopPropagation();\n onRemoveField(e);\n };\n\n const tempRefs = useComposedRefs<HTMLSpanElement>(dropRef, objectRef);\n\n if (!value) {\n return null;\n }\n\n if (value.name === TEMP_FIELD_NAME) {\n return <Flex tag=\"span\" height=\"100%\" style={{ opacity: 0 }} ref={tempRefs} />;\n }\n\n return (\n <>\n <Flex\n borderColor=\"neutral150\"\n background=\"neutral100\"\n hasRadius\n style={{ opacity: isDragging ? 0.5 : 1 }}\n ref={dropRef}\n gap={3}\n cursor=\"pointer\"\n onClick={() => {\n setIsModalOpen(true);\n }}\n >\n <DragButton\n tag=\"span\"\n aria-label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.move.field'),\n defaultMessage: 'Move {item}',\n },\n { item: value.label }\n )}\n onClick={(e) => e.stopPropagation()}\n ref={composedRefs}\n >\n <Drag />\n </DragButton>\n <Flex direction=\"column\" alignItems=\"flex-start\" grow={1} overflow=\"hidden\">\n <Flex gap={3} justifyContent=\"space-between\" width=\"100%\">\n <Typography ellipsis fontWeight=\"bold\">\n {value.label}\n </Typography>\n <Flex>\n <IconButton\n borderWidth={0}\n background=\"transparent\"\n onClick={(e) => {\n e.stopPropagation();\n setIsModalOpen(true);\n }}\n aria-label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.edit.field'),\n defaultMessage: 'Edit {item}',\n },\n { item: value.label }\n )}\n >\n <Pencil />\n </IconButton>\n <IconButton\n borderWidth={0}\n onClick={handleRemoveField}\n background=\"transparent\"\n aria-label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.delete.field'),\n defaultMessage: 'Delete {item}',\n },\n { item: value.label }\n )}\n >\n <Cross />\n </IconButton>\n </Flex>\n </Flex>\n {attribute?.type === 'component' ? (\n <Flex\n paddingTop={3}\n paddingRight={3}\n paddingBottom={3}\n paddingLeft={0}\n alignItems=\"flex-start\"\n direction=\"column\"\n gap={2}\n width=\"100%\"\n >\n <Grid gap={4} width=\"100%\">\n {components[attribute.component].layout.map((row) =>\n row.map(({ size, ...field }) => (\n <GridItem key={field.name} col={size}>\n <Flex\n alignItems=\"center\"\n background=\"neutral0\"\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={3}\n paddingRight={3}\n hasRadius\n borderColor=\"neutral200\"\n >\n <Typography textColor=\"neutral800\">{field.name}</Typography>\n </Flex>\n </GridItem>\n ))\n )}\n </Grid>\n <Link\n // used to stop the edit form from appearing when we click here.\n onClick={(e) => e.stopPropagation()}\n startIcon={<Cog />}\n tag={NavLink}\n to={`../components/${attribute.component}/configurations/edit`}\n >\n {formatMessage({\n id: getTranslation('components.FieldItem.linkToComponentLayout'),\n defaultMessage: \"Set the component's layout\",\n })}\n </Link>\n </Flex>\n ) : null}\n {attribute?.type === 'dynamiczone' ? (\n <Flex\n paddingTop={3}\n paddingRight={3}\n paddingBottom={3}\n paddingLeft={0}\n alignItems=\"flex-start\"\n gap={2}\n width=\"100%\"\n >\n {attribute?.components.map((uid) => (\n <ComponentLink\n // used to stop the edit form from appearing when we click here.\n onClick={(e) => e.stopPropagation()}\n key={uid}\n to={`../components/${uid}/configurations/edit`}\n >\n <ComponentIcon icon={components[uid].settings.icon} />\n <Typography fontSize={1} textColor=\"neutral600\" fontWeight=\"bold\">\n {components[uid].settings.displayName}\n </Typography>\n </ComponentLink>\n ))}\n </Flex>\n ) : null}\n </Flex>\n </Flex>\n {isModalOpen && value.name !== TEMP_FIELD_NAME && (\n <EditFieldForm attribute={attribute} name={name} onClose={() => setIsModalOpen(false)} />\n )}\n </>\n );\n};\n\nconst DragButton = styled<IconButtonComponent<'span'>>(IconButton)`\n height: unset;\n align-self: stretch;\n display: flex;\n align-items: center;\n padding: 0 ${({ theme }) => theme.spaces[3]};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n cursor: all-scroll;\n\n svg {\n width: 1.2rem;\n height: 1.2rem;\n }\n`;\n\nconst ComponentLink = styled(NavLink)`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${({ theme }) => theme.spaces[1]};\n padding: ${(props) => props.theme.spaces[2]};\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n background: ${({ theme }) => theme.colors.neutral0};\n width: 14rem;\n border-radius: ${({ theme }) => theme.borderRadius};\n text-decoration: none;\n\n &:focus,\n &:hover {\n ${({ theme }) => `\n background-color: ${theme.colors.primary100};\n border-color: ${theme.colors.primary200};\n\n ${Typography} {\n color: ${theme.colors.primary600};\n }\n `}\n\n /* > ComponentIcon */\n > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\nexport { Fields, TEMP_FIELD_NAME };\nexport type { FieldsProps };\n","import * as React from 'react';\n\nimport {\n Form,\n FormProps,\n useForm,\n InputRenderer,\n BackButton,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Divider, Flex, Grid, GridItem, Main, Typography } from '@strapi/design-system';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport pipe from 'lodash/fp/pipe';\nimport { useIntl } from 'react-intl';\n\nimport { ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD } from '../../constants/attributes';\nimport { capitalise } from '../../utils/strings';\nimport { getTranslation } from '../../utils/translations';\n\nimport { Fields, FieldsProps, TEMP_FIELD_NAME } from './Fields';\n\nimport type { EditFieldLayout, EditLayout } from '../../hooks/useDocumentLayout';\n\n/* -------------------------------------------------------------------------------------------------\n * ConfigurationForm\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConfigurationFormProps extends Pick<FieldsProps, 'attributes' | 'fieldSizes'> {\n layout: EditLayout;\n onSubmit: FormProps<ConfigurationFormData>['onSubmit'];\n}\n\n/**\n * Every key in EditFieldLayout is turned to optional never and then we overwrite the ones we are using.\n */\n\ntype EditFieldSpacerLayout = {\n [key in keyof Omit<EditFieldLayout, 'name' | 'size'>]?: never;\n} & {\n description?: never;\n editable?: never;\n name: '_TEMP_';\n size: number;\n __temp_key__: string;\n};\n\ninterface ConfigurationFormData extends Pick<EditLayout, 'settings'> {\n layout: Array<{\n __temp_key__: string;\n children: Array<\n | (Pick<EditFieldLayout, 'label' | 'size' | 'name' | 'placeholder' | 'mainField'> & {\n description: EditFieldLayout['hint'];\n editable: EditFieldLayout['disabled'];\n __temp_key__: string;\n })\n | EditFieldSpacerLayout\n >;\n }>;\n}\n\nconst ConfigurationForm = ({\n attributes,\n fieldSizes,\n layout: editLayout,\n onSubmit,\n}: ConfigurationFormProps) => {\n const { components, settings, layout, metadatas } = editLayout;\n\n const { formatMessage } = useIntl();\n\n const initialValues: ConfigurationFormData = React.useMemo(() => {\n const transformations = pipe(\n flattenPanels,\n replaceMainFieldWithNameOnly,\n extractMetadata,\n addTmpSpaceToLayout,\n addTmpKeysToLayout\n );\n\n return {\n layout: transformations(layout),\n settings,\n };\n }, [layout, settings]);\n\n return (\n <Layouts.Root>\n <Main>\n <Form initialValues={initialValues} onSubmit={onSubmit} method=\"PUT\">\n <Header name={settings.displayName ?? ''} />\n <Layouts.Content>\n <Flex\n alignItems=\"stretch\"\n background=\"neutral0\"\n direction=\"column\"\n gap={6}\n hasRadius\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid>\n <GridItem col={6} s={12}>\n <InputRenderer\n type=\"enumeration\"\n label={formatMessage({\n id: getTranslation('containers.SettingPage.editSettings.entry.title'),\n defaultMessage: 'Entry title',\n })}\n hint={formatMessage({\n id: getTranslation(\n 'containers.SettingPage.editSettings.entry.title.description'\n ),\n defaultMessage: 'Set the display field of your entry',\n })}\n name=\"settings.mainField\"\n options={Object.entries(attributes).reduce<\n Array<{ label: string; value: string }>\n >((acc, [key, attribute]) => {\n if (!attribute) {\n return acc;\n }\n\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 </GridItem>\n <GridItem paddingTop={6} paddingBottom={6} col={12} s={12}>\n <Divider />\n </GridItem>\n <GridItem col={12} s={12}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n </GridItem>\n <GridItem col={12} s={12}>\n <Fields\n attributes={attributes}\n components={components}\n fieldSizes={fieldSizes}\n metadatas={metadatas}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Layouts.Content>\n </Form>\n </Main>\n </Layouts.Root>\n );\n};\n\n/**\n * @internal\n * @description Panels don't exist in the layout, so we flatten by one.\n */\nconst flattenPanels = (layout: EditLayout['layout']): EditLayout['layout'][number] =>\n layout.flat(1);\n\n/**\n * @internal\n * @description We don't need the mainField object in the layout, we only need the name.\n */\nconst replaceMainFieldWithNameOnly = (layout: EditLayout['layout'][number]) =>\n layout.map((row) =>\n row.map((field) => ({\n ...field,\n mainField: field.mainField?.name,\n }))\n );\n\n/**\n * @internal\n * @description We extract the metadata values from the field layout, because these are editable by the user.\n */\nconst extractMetadata = (\n layout: EditLayout['layout'][number]\n): Array<Exclude<ConfigurationFormData['layout'], { name: '_TEMP_' }>[number]['children']> => {\n return layout.map((row) =>\n row.map(({ label, disabled, hint, placeholder, size, name, mainField }) => ({\n label,\n editable: !disabled,\n description: hint,\n mainField,\n placeholder,\n size,\n name,\n __temp_key__: '',\n }))\n );\n};\n\n/**\n * @internal\n * @description Each row of the layout has a max size of 12 (based on bootstrap grid system)\n * So in order to offer a better drop zone we add the _TEMP_ div to complete the remaining substract (12 - existing)\n */\nconst addTmpSpaceToLayout = (\n layout: ReturnType<typeof extractMetadata>\n): Array<ConfigurationFormData['layout'][number]['children']> => [\n ...layout.map((row) => {\n const totalSpaceTaken = row.reduce((acc, field) => acc + field.size, 0);\n\n if (totalSpaceTaken < 12) {\n return [\n ...row,\n {\n name: TEMP_FIELD_NAME,\n size: 12 - totalSpaceTaken,\n __temp_key__: '',\n } satisfies EditFieldSpacerLayout,\n ];\n }\n\n return row;\n }),\n];\n\n/**\n * @internal\n * @description At this point of the transformations we have Field[][], but each row for the form should have a __temp_key__\n * applied. This means we need to change it so `Field` is nested under the children property.\n */\nconst addTmpKeysToLayout = (\n layout: ReturnType<typeof addTmpSpaceToLayout>\n): ConfigurationFormData['layout'] => {\n const keys = generateNKeysBetween(undefined, undefined, layout.length);\n\n return layout.map((row, rowIndex) => {\n const fieldKeys = generateNKeysBetween(undefined, undefined, row.length);\n\n return {\n __temp_key__: keys[rowIndex],\n children: row.map((field, fieldIndex) => {\n return {\n ...field,\n __temp_key__: fieldKeys[fieldIndex],\n };\n }),\n };\n });\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n name: string;\n}\n\nconst Header = ({ name }: HeaderProps) => {\n const { formatMessage } = useIntl();\n const modified = useForm('Header', (state) => state.modified);\n const isSubmitting = useForm('Header', (state) => state.isSubmitting);\n\n return (\n <Layouts.Header\n title={formatMessage(\n {\n id: getTranslation('components.SettingsViewWrapper.pluginHeader.title'),\n defaultMessage: `Configure the view - {name}`,\n },\n { name: capitalise(name) }\n )}\n subtitle={formatMessage({\n id: getTranslation('components.SettingsViewWrapper.pluginHeader.description.edit-settings'),\n defaultMessage: 'Customize how the edit view will look like.',\n })}\n navigationAction={<BackButton />}\n primaryAction={\n <Button disabled={!modified} loading={isSubmitting} type=\"submit\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n );\n};\n\nexport { ConfigurationForm };\nexport type { ConfigurationFormProps, ConfigurationFormData, EditFieldSpacerLayout };\n"],"names":["attribute","field","generateNKeysBetweenImpl","generateNKeysBetween"],"mappings":"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"}
|
@@ -6,11 +6,11 @@ const designSystem = require("@strapi/design-system");
|
|
6
6
|
const fractionalIndexing = require("fractional-indexing");
|
7
7
|
const pipe = require("lodash/fp/pipe");
|
8
8
|
const reactIntl = require("react-intl");
|
9
|
-
const index = require("./index-
|
9
|
+
const index = require("./index-DFK7LwDW.js");
|
10
10
|
const Icons = require("@strapi/icons");
|
11
11
|
const reactDndHtml5Backend = require("react-dnd-html5-backend");
|
12
12
|
const reactRouterDom = require("react-router-dom");
|
13
|
-
const
|
13
|
+
const styledComponents = require("styled-components");
|
14
14
|
const useDragAndDrop = require("./useDragAndDrop-J0TUUbR6.js");
|
15
15
|
const ComponentIcon = require("./ComponentIcon-BBQsYCVn.js");
|
16
16
|
const yup = require("yup");
|
@@ -36,7 +36,6 @@ function _interopNamespace(e) {
|
|
36
36
|
}
|
37
37
|
const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
38
38
|
const pipe__default = /* @__PURE__ */ _interopDefault(pipe);
|
39
|
-
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
40
39
|
const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
|
41
40
|
const FIELD_SCHEMA = yup__namespace.object().shape({
|
42
41
|
label: yup__namespace.string().required(),
|
@@ -102,7 +101,7 @@ const EditFieldForm = ({ attribute, name, onClose }) => {
|
|
102
101
|
children: [
|
103
102
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.ModalHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 3, children: [
|
104
103
|
/* @__PURE__ */ jsxRuntime.jsx(FieldTypeIcon.FieldTypeIcon, { type: attribute.type }),
|
105
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", textColor: "neutral800",
|
104
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", textColor: "neutral800", tag: "h2", id, children: formatMessage(
|
106
105
|
{
|
107
106
|
id: "content-manager.containers.edit-settings.modal-form.label",
|
108
107
|
defaultMessage: "Edit {fieldName}"
|
@@ -389,7 +388,7 @@ const Field = ({ attribute, components, name, index: index$1, onMoveField, onRem
|
|
389
388
|
return null;
|
390
389
|
}
|
391
390
|
if (value.name === TEMP_FIELD_NAME) {
|
392
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, {
|
391
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { tag: "span", height: "100%", style: { opacity: 0 }, ref: tempRefs });
|
393
392
|
}
|
394
393
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
395
394
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
@@ -409,7 +408,7 @@ const Field = ({ attribute, components, name, index: index$1, onMoveField, onRem
|
|
409
408
|
/* @__PURE__ */ jsxRuntime.jsx(
|
410
409
|
DragButton,
|
411
410
|
{
|
412
|
-
|
411
|
+
tag: "span",
|
413
412
|
"aria-label": formatMessage(
|
414
413
|
{
|
415
414
|
id: index.getTranslation("components.DraggableCard.move.field"),
|
@@ -496,7 +495,7 @@ const Field = ({ attribute, components, name, index: index$1, onMoveField, onRem
|
|
496
495
|
{
|
497
496
|
onClick: (e) => e.stopPropagation(),
|
498
497
|
startIcon: /* @__PURE__ */ jsxRuntime.jsx(Icons.Cog, {}),
|
499
|
-
|
498
|
+
tag: reactRouterDom.NavLink,
|
500
499
|
to: `../components/${attribute.component}/configurations/edit`,
|
501
500
|
children: formatMessage({
|
502
501
|
id: index.getTranslation("components.FieldItem.linkToComponentLayout"),
|
@@ -538,7 +537,7 @@ const Field = ({ attribute, components, name, index: index$1, onMoveField, onRem
|
|
538
537
|
isModalOpen && value.name !== TEMP_FIELD_NAME && /* @__PURE__ */ jsxRuntime.jsx(EditFieldForm, { attribute, name, onClose: () => setIsModalOpen(false) })
|
539
538
|
] });
|
540
539
|
};
|
541
|
-
const DragButton =
|
540
|
+
const DragButton = styledComponents.styled(designSystem.IconButton)`
|
542
541
|
height: unset;
|
543
542
|
align-self: stretch;
|
544
543
|
display: flex;
|
@@ -552,7 +551,7 @@ const DragButton = styled__default.default(designSystem.IconButton)`
|
|
552
551
|
height: 1.2rem;
|
553
552
|
}
|
554
553
|
`;
|
555
|
-
const ComponentLink =
|
554
|
+
const ComponentLink = styledComponents.styled(reactRouterDom.NavLink)`
|
556
555
|
display: flex;
|
557
556
|
flex-direction: column;
|
558
557
|
align-items: center;
|
@@ -609,9 +608,9 @@ const ConfigurationForm = ({
|
|
609
608
|
settings
|
610
609
|
};
|
611
610
|
}, [layout, settings]);
|
612
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
611
|
+
return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Layouts.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { children: /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Form, { initialValues, onSubmit, method: "PUT", children: [
|
613
612
|
/* @__PURE__ */ jsxRuntime.jsx(Header, { name: settings.displayName ?? "" }),
|
614
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
613
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Layouts.Content, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
615
614
|
designSystem.Flex,
|
616
615
|
{
|
617
616
|
alignItems: "stretch",
|
@@ -625,7 +624,7 @@ const ConfigurationForm = ({
|
|
625
624
|
paddingLeft: 7,
|
626
625
|
paddingRight: 7,
|
627
626
|
children: [
|
628
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta",
|
627
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", tag: "h2", children: formatMessage({
|
629
628
|
id: index.getTranslation("containers.SettingPage.settings"),
|
630
629
|
defaultMessage: "Settings"
|
631
630
|
}) }),
|
@@ -660,7 +659,7 @@ const ConfigurationForm = ({
|
|
660
659
|
}
|
661
660
|
) }),
|
662
661
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.GridItem, { paddingTop: 6, paddingBottom: 6, col: 12, s: 12, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Divider, {}) }),
|
663
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.GridItem, { col: 12, s: 12, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta",
|
662
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.GridItem, { col: 12, s: 12, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", tag: "h3", children: formatMessage({
|
664
663
|
id: index.getTranslation("containers.SettingPage.view"),
|
665
664
|
defaultMessage: "View"
|
666
665
|
}) }) }),
|
@@ -736,7 +735,7 @@ const Header = ({ name }) => {
|
|
736
735
|
const modified = strapiAdmin.useForm("Header", (state) => state.modified);
|
737
736
|
const isSubmitting = strapiAdmin.useForm("Header", (state) => state.isSubmitting);
|
738
737
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
739
|
-
|
738
|
+
strapiAdmin.Layouts.Header,
|
740
739
|
{
|
741
740
|
title: formatMessage(
|
742
741
|
{
|
@@ -756,4 +755,4 @@ const Header = ({ name }) => {
|
|
756
755
|
};
|
757
756
|
exports.ConfigurationForm = ConfigurationForm;
|
758
757
|
exports.TEMP_FIELD_NAME = TEMP_FIELD_NAME;
|
759
|
-
//# sourceMappingURL=Form-
|
758
|
+
//# sourceMappingURL=Form-DgTc2qkx.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Form-DgTc2qkx.js","sources":["../../admin/src/components/ConfigurationForm/EditFieldForm.tsx","../../admin/src/components/ConfigurationForm/Fields.tsx","../../admin/src/components/ConfigurationForm/Form.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useNotification,\n InputRenderer,\n Form,\n InputProps,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Grid,\n GridItem,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n Typography,\n} 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(),\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 id = React.useId();\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 <ModalLayout onClose={onClose} labelledBy={id}>\n <Form\n method=\"PUT\"\n initialValues={value}\n validationSchema={FIELD_SCHEMA}\n onSubmit={(data) => {\n onChange(name, data);\n onClose();\n }}\n >\n <ModalHeader>\n <Flex gap={3}>\n <FieldTypeIcon type={attribute.type} />\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" tag=\"h2\" id={id}>\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 </Typography>\n </Flex>\n </ModalHeader>\n <ModalBody>\n <Grid 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 <GridItem key={field.name} col={size}>\n <InputRenderer {...field} />\n </GridItem>\n ))}\n </Grid>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n }\n />\n </Form>\n </ModalLayout>\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","import * as React from 'react';\n\nimport { useField, useForm } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Grid,\n GridItem,\n IconButton,\n IconButtonComponent,\n Typography,\n useComposedRefs,\n Link,\n Menu,\n} from '@strapi/design-system';\nimport { Cog, Cross, Drag, Pencil, Plus } from '@strapi/icons';\nimport { generateNKeysBetween as generateNKeysBetweenImpl } from 'fractional-indexing';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ItemTypes } from '../../constants/dragAndDrop';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../hooks/useDragAndDrop';\nimport { getTranslation } from '../../utils/translations';\nimport { ComponentIcon } from '../ComponentIcon';\n\nimport { EditFieldForm, EditFieldFormProps } from './EditFieldForm';\n\nimport type { ConfigurationFormData, EditFieldSpacerLayout } from './Form';\nimport type { EditLayout } from '../../hooks/useDocumentLayout';\n\ntype FormField = ConfigurationFormData['layout'][number]['children'][number];\ntype Field = Omit<ConfigurationFormData['layout'][number]['children'][number], '__temp_key__'>;\n\n/* -------------------------------------------------------------------------------------------------\n * Fields\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FieldsProps extends Pick<EditLayout, 'metadatas'>, Pick<FieldProps, 'components'> {\n attributes: {\n [key: string]: FieldProps['attribute'];\n };\n fieldSizes: Record<string, number>;\n components: EditLayout['components'];\n}\n\nconst Fields = ({ attributes, fieldSizes, components, metadatas = {} }: FieldsProps) => {\n const { formatMessage } = useIntl();\n\n const layout = useForm<ConfigurationFormData['layout']>(\n 'Fields',\n (state) => state.values.layout ?? []\n );\n const onChange = useForm('Fields', (state) => state.onChange);\n const addFieldRow = useForm('Fields', (state) => state.addFieldRow);\n const removeFieldRow = useForm('Fields', (state) => state.removeFieldRow);\n\n const existingFields = layout.map((row) => row.children.map((field) => field.name)).flat();\n\n /**\n * Get the fields that are not already in the layout\n * But also check that they are visible before we give users\n * the option to display them. e.g. `id` is not visible.\n */\n const remainingFields = Object.entries(metadatas).reduce<Field[]>((acc, current) => {\n const [name, { visible, ...field }] = current;\n\n if (!existingFields.includes(name) && visible === true) {\n const type = attributes[name]?.type;\n const size = type ? fieldSizes[type] : 12;\n\n acc.push({\n ...field,\n label: field.label ?? name,\n name,\n size,\n });\n }\n\n return acc;\n }, []);\n\n const handleMoveField: FieldProps['onMoveField'] = (\n [newRowIndex, newFieldIndex],\n [currentRowIndex, currentFieldIndex]\n ) => {\n /**\n * Because this view has the constraint that the sum of field sizes cannot be greater\n * than 12, we don't use the form's method to move field rows, instead, we calculate\n * the new layout and set the entire form.\n */\n const newLayout = structuredClone(layout);\n\n /**\n * Remove field from the current layout space using splice so we have the item\n */\n const [field] = newLayout[currentRowIndex].children.splice(currentFieldIndex, 1);\n\n if (!field || field.name === TEMP_FIELD_NAME) {\n return;\n }\n\n const newRow = newLayout[newRowIndex].children;\n const [newFieldKey] = generateNKeysBetween(newRow, 1, currentFieldIndex, newFieldIndex);\n\n /**\n * Next we inject the field into it's new row at it's specified index, we then remove the spaces\n * if they exist and recalculate into potentially two arrays ONLY if the sizing is now over 12,\n * the row and the rest of the row that couldn't fit.\n *\n * for example, if i have a row of `[{size: 4}, {size: 6}]` and i add `{size: 8}` a index 0,\n * the new array will look like `[{size: 8}, {size: 4}, {size: 6}]` which breaks the limit of 12,\n * so instead we make two arrays for the new rows `[[{size: 8}, {size: 4}], [{size: 6}]]` which we\n * then inject at the original row point with spacers included.\n */\n newRow.splice(newFieldIndex, 0, { ...field, __temp_key__: newFieldKey });\n\n if (newLayout[newRowIndex].children.reduce((acc, curr) => acc + curr.size, 0) > 12) {\n const recalculatedRows = chunkArray(\n newLayout[newRowIndex].children.filter((field) => field.name !== TEMP_FIELD_NAME)\n );\n\n const rowKeys = generateNKeysBetween(\n newLayout,\n recalculatedRows.length,\n currentRowIndex,\n newRowIndex\n );\n\n newLayout.splice(\n newRowIndex,\n 1,\n ...recalculatedRows.map((row, index) => ({\n __temp_key__: rowKeys[index],\n children: row,\n }))\n );\n }\n\n /**\n * Now we remove our spacers from the rows so we can understand what dead rows exist:\n * - if there's only spacers left\n * - there's nothing in the row, e.g. a size 12 field left it.\n * These rows are then filtered out.\n * After that, we recalculate the spacers for the rows that need them.\n */\n const newLayoutWithSpacers = newLayout\n .map((row) => ({\n ...row,\n children: row.children.filter((field) => field.name !== TEMP_FIELD_NAME),\n }))\n .filter((row) => row.children.length > 0)\n .map((row) => {\n const totalSpaceTaken = row.children.reduce((acc, curr) => acc + curr.size, 0);\n\n if (totalSpaceTaken < 12) {\n const [spacerKey] = generateNKeysBetweenImpl(\n row.children.at(-1)?.__temp_key__,\n undefined,\n 1\n );\n\n return {\n ...row,\n children: [\n ...row.children,\n {\n name: TEMP_FIELD_NAME,\n size: 12 - totalSpaceTaken,\n __temp_key__: spacerKey,\n } satisfies EditFieldSpacerLayout,\n ],\n };\n }\n\n return row;\n });\n\n onChange('layout', newLayoutWithSpacers);\n };\n\n const handleRemoveField =\n (rowIndex: number, fieldIndex: number): FieldProps['onRemoveField'] =>\n () => {\n if (layout[rowIndex].children.length === 1) {\n removeFieldRow(`layout`, rowIndex);\n } else {\n onChange(`layout.${rowIndex}.children.${fieldIndex}`, undefined);\n }\n };\n\n const handleAddField = (field: Field) => () => {\n addFieldRow('layout', { children: [field] });\n };\n\n return (\n <Flex paddingTop={6} direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex alignItems=\"flex-start\" direction=\"column\" justifyContent=\"space-between\">\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: getTranslation('containers.list.displayedFields'),\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'containers.SettingPage.editSettings.description',\n defaultMessage: 'Drag & drop the fields to build the layout',\n })}\n </Typography>\n </Flex>\n <Box padding={4} hasRadius borderStyle=\"dashed\" borderWidth=\"1px\" borderColor=\"neutral300\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {layout.map((row, rowIndex) => (\n <Grid gap={2} key={row.__temp_key__}>\n {row.children.map(({ size, ...field }, fieldIndex) => (\n <GridItem key={field.name} col={size}>\n <Field\n attribute={attributes[field.name]}\n components={components}\n index={[rowIndex, fieldIndex]}\n name={`layout.${rowIndex}.children.${fieldIndex}`}\n onMoveField={handleMoveField}\n onRemoveField={handleRemoveField(rowIndex, fieldIndex)}\n />\n </GridItem>\n ))}\n </Grid>\n ))}\n <Menu.Root>\n <Menu.Trigger\n startIcon={<Plus />}\n endIcon={null}\n disabled={remainingFields.length === 0}\n fullWidth\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTranslation('containers.SettingPage.add.field'),\n defaultMessage: 'Insert another field',\n })}\n </Menu.Trigger>\n <Menu.Content>\n {remainingFields.map((field) => (\n <Menu.Item key={field.name} onSelect={handleAddField(field)}>\n {field.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Box>\n </Flex>\n );\n};\n\n/**\n * @internal\n * @description Small abstraction to solve within an array of fields where you can\n * add a field to the beginning or start, move back and forth what it's index range\n * should be when calculating it's new temp key\n */\nconst generateNKeysBetween = <Field extends { __temp_key__: string }>(\n field: Field[],\n count: number,\n currInd: number,\n newInd: number\n) => {\n const startKey = currInd > newInd ? field[newInd - 1]?.__temp_key__ : field[newInd]?.__temp_key__;\n const endKey = currInd > newInd ? field[newInd]?.__temp_key__ : field[newInd + 1]?.__temp_key__;\n\n return generateNKeysBetweenImpl(startKey, endKey, count);\n};\n\n/**\n * @internal\n * @description chunks a row of layouts by the max size we allow, 12. It does not add the\n * spacers again, that should be added separately.\n */\nconst chunkArray = (array: FormField[]) => {\n const result: Array<FormField[]> = [];\n let temp: FormField[] = [];\n\n array.reduce((acc, field) => {\n if (acc + field.size > 12) {\n result.push(temp);\n temp = [field];\n return field.size;\n } else {\n temp.push(field);\n return acc + field.size;\n }\n }, 0);\n\n if (temp.length > 0) {\n result.push(temp);\n }\n\n return result;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FieldProps extends Pick<EditFieldFormProps, 'name' | 'attribute'> {\n components: EditLayout['components'];\n index: [row: number, index: number];\n onMoveField: UseDragAndDropOptions<number[]>['onMoveItem'];\n onRemoveField: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nconst TEMP_FIELD_NAME = '_TEMP_';\n\n/**\n * Displays a field in the layout with drag options, also\n * opens a modal to edit the details of said field.\n */\nconst Field = ({ attribute, components, name, index, onMoveField, onRemoveField }: FieldProps) => {\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const { value } = useField<FormField>(name);\n\n const [{ isDragging }, objectRef, dropRef, dragRef, dragPreviewRef] = useDragAndDrop<\n Array<number>\n >(true, {\n dropSensitivity: 'immediate',\n type: ItemTypes.EDIT_FIELD,\n item: { index, label: value?.label, name },\n index,\n onMoveItem: onMoveField,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef]);\n\n const composedRefs = useComposedRefs<HTMLSpanElement>(dragRef, objectRef);\n\n const handleRemoveField: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n e.stopPropagation();\n onRemoveField(e);\n };\n\n const tempRefs = useComposedRefs<HTMLSpanElement>(dropRef, objectRef);\n\n if (!value) {\n return null;\n }\n\n if (value.name === TEMP_FIELD_NAME) {\n return <Flex tag=\"span\" height=\"100%\" style={{ opacity: 0 }} ref={tempRefs} />;\n }\n\n return (\n <>\n <Flex\n borderColor=\"neutral150\"\n background=\"neutral100\"\n hasRadius\n style={{ opacity: isDragging ? 0.5 : 1 }}\n ref={dropRef}\n gap={3}\n cursor=\"pointer\"\n onClick={() => {\n setIsModalOpen(true);\n }}\n >\n <DragButton\n tag=\"span\"\n aria-label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.move.field'),\n defaultMessage: 'Move {item}',\n },\n { item: value.label }\n )}\n onClick={(e) => e.stopPropagation()}\n ref={composedRefs}\n >\n <Drag />\n </DragButton>\n <Flex direction=\"column\" alignItems=\"flex-start\" grow={1} overflow=\"hidden\">\n <Flex gap={3} justifyContent=\"space-between\" width=\"100%\">\n <Typography ellipsis fontWeight=\"bold\">\n {value.label}\n </Typography>\n <Flex>\n <IconButton\n borderWidth={0}\n background=\"transparent\"\n onClick={(e) => {\n e.stopPropagation();\n setIsModalOpen(true);\n }}\n aria-label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.edit.field'),\n defaultMessage: 'Edit {item}',\n },\n { item: value.label }\n )}\n >\n <Pencil />\n </IconButton>\n <IconButton\n borderWidth={0}\n onClick={handleRemoveField}\n background=\"transparent\"\n aria-label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.delete.field'),\n defaultMessage: 'Delete {item}',\n },\n { item: value.label }\n )}\n >\n <Cross />\n </IconButton>\n </Flex>\n </Flex>\n {attribute?.type === 'component' ? (\n <Flex\n paddingTop={3}\n paddingRight={3}\n paddingBottom={3}\n paddingLeft={0}\n alignItems=\"flex-start\"\n direction=\"column\"\n gap={2}\n width=\"100%\"\n >\n <Grid gap={4} width=\"100%\">\n {components[attribute.component].layout.map((row) =>\n row.map(({ size, ...field }) => (\n <GridItem key={field.name} col={size}>\n <Flex\n alignItems=\"center\"\n background=\"neutral0\"\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={3}\n paddingRight={3}\n hasRadius\n borderColor=\"neutral200\"\n >\n <Typography textColor=\"neutral800\">{field.name}</Typography>\n </Flex>\n </GridItem>\n ))\n )}\n </Grid>\n <Link\n // used to stop the edit form from appearing when we click here.\n onClick={(e) => e.stopPropagation()}\n startIcon={<Cog />}\n tag={NavLink}\n to={`../components/${attribute.component}/configurations/edit`}\n >\n {formatMessage({\n id: getTranslation('components.FieldItem.linkToComponentLayout'),\n defaultMessage: \"Set the component's layout\",\n })}\n </Link>\n </Flex>\n ) : null}\n {attribute?.type === 'dynamiczone' ? (\n <Flex\n paddingTop={3}\n paddingRight={3}\n paddingBottom={3}\n paddingLeft={0}\n alignItems=\"flex-start\"\n gap={2}\n width=\"100%\"\n >\n {attribute?.components.map((uid) => (\n <ComponentLink\n // used to stop the edit form from appearing when we click here.\n onClick={(e) => e.stopPropagation()}\n key={uid}\n to={`../components/${uid}/configurations/edit`}\n >\n <ComponentIcon icon={components[uid].settings.icon} />\n <Typography fontSize={1} textColor=\"neutral600\" fontWeight=\"bold\">\n {components[uid].settings.displayName}\n </Typography>\n </ComponentLink>\n ))}\n </Flex>\n ) : null}\n </Flex>\n </Flex>\n {isModalOpen && value.name !== TEMP_FIELD_NAME && (\n <EditFieldForm attribute={attribute} name={name} onClose={() => setIsModalOpen(false)} />\n )}\n </>\n );\n};\n\nconst DragButton = styled<IconButtonComponent<'span'>>(IconButton)`\n height: unset;\n align-self: stretch;\n display: flex;\n align-items: center;\n padding: 0 ${({ theme }) => theme.spaces[3]};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n cursor: all-scroll;\n\n svg {\n width: 1.2rem;\n height: 1.2rem;\n }\n`;\n\nconst ComponentLink = styled(NavLink)`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${({ theme }) => theme.spaces[1]};\n padding: ${(props) => props.theme.spaces[2]};\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n background: ${({ theme }) => theme.colors.neutral0};\n width: 14rem;\n border-radius: ${({ theme }) => theme.borderRadius};\n text-decoration: none;\n\n &:focus,\n &:hover {\n ${({ theme }) => `\n background-color: ${theme.colors.primary100};\n border-color: ${theme.colors.primary200};\n\n ${Typography} {\n color: ${theme.colors.primary600};\n }\n `}\n\n /* > ComponentIcon */\n > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\nexport { Fields, TEMP_FIELD_NAME };\nexport type { FieldsProps };\n","import * as React from 'react';\n\nimport {\n Form,\n FormProps,\n useForm,\n InputRenderer,\n BackButton,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Divider, Flex, Grid, GridItem, Main, Typography } from '@strapi/design-system';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport pipe from 'lodash/fp/pipe';\nimport { useIntl } from 'react-intl';\n\nimport { ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD } from '../../constants/attributes';\nimport { capitalise } from '../../utils/strings';\nimport { getTranslation } from '../../utils/translations';\n\nimport { Fields, FieldsProps, TEMP_FIELD_NAME } from './Fields';\n\nimport type { EditFieldLayout, EditLayout } from '../../hooks/useDocumentLayout';\n\n/* -------------------------------------------------------------------------------------------------\n * ConfigurationForm\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConfigurationFormProps extends Pick<FieldsProps, 'attributes' | 'fieldSizes'> {\n layout: EditLayout;\n onSubmit: FormProps<ConfigurationFormData>['onSubmit'];\n}\n\n/**\n * Every key in EditFieldLayout is turned to optional never and then we overwrite the ones we are using.\n */\n\ntype EditFieldSpacerLayout = {\n [key in keyof Omit<EditFieldLayout, 'name' | 'size'>]?: never;\n} & {\n description?: never;\n editable?: never;\n name: '_TEMP_';\n size: number;\n __temp_key__: string;\n};\n\ninterface ConfigurationFormData extends Pick<EditLayout, 'settings'> {\n layout: Array<{\n __temp_key__: string;\n children: Array<\n | (Pick<EditFieldLayout, 'label' | 'size' | 'name' | 'placeholder' | 'mainField'> & {\n description: EditFieldLayout['hint'];\n editable: EditFieldLayout['disabled'];\n __temp_key__: string;\n })\n | EditFieldSpacerLayout\n >;\n }>;\n}\n\nconst ConfigurationForm = ({\n attributes,\n fieldSizes,\n layout: editLayout,\n onSubmit,\n}: ConfigurationFormProps) => {\n const { components, settings, layout, metadatas } = editLayout;\n\n const { formatMessage } = useIntl();\n\n const initialValues: ConfigurationFormData = React.useMemo(() => {\n const transformations = pipe(\n flattenPanels,\n replaceMainFieldWithNameOnly,\n extractMetadata,\n addTmpSpaceToLayout,\n addTmpKeysToLayout\n );\n\n return {\n layout: transformations(layout),\n settings,\n };\n }, [layout, settings]);\n\n return (\n <Layouts.Root>\n <Main>\n <Form initialValues={initialValues} onSubmit={onSubmit} method=\"PUT\">\n <Header name={settings.displayName ?? ''} />\n <Layouts.Content>\n <Flex\n alignItems=\"stretch\"\n background=\"neutral0\"\n direction=\"column\"\n gap={6}\n hasRadius\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid>\n <GridItem col={6} s={12}>\n <InputRenderer\n type=\"enumeration\"\n label={formatMessage({\n id: getTranslation('containers.SettingPage.editSettings.entry.title'),\n defaultMessage: 'Entry title',\n })}\n hint={formatMessage({\n id: getTranslation(\n 'containers.SettingPage.editSettings.entry.title.description'\n ),\n defaultMessage: 'Set the display field of your entry',\n })}\n name=\"settings.mainField\"\n options={Object.entries(attributes).reduce<\n Array<{ label: string; value: string }>\n >((acc, [key, attribute]) => {\n if (!attribute) {\n return acc;\n }\n\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 </GridItem>\n <GridItem paddingTop={6} paddingBottom={6} col={12} s={12}>\n <Divider />\n </GridItem>\n <GridItem col={12} s={12}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n </GridItem>\n <GridItem col={12} s={12}>\n <Fields\n attributes={attributes}\n components={components}\n fieldSizes={fieldSizes}\n metadatas={metadatas}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Layouts.Content>\n </Form>\n </Main>\n </Layouts.Root>\n );\n};\n\n/**\n * @internal\n * @description Panels don't exist in the layout, so we flatten by one.\n */\nconst flattenPanels = (layout: EditLayout['layout']): EditLayout['layout'][number] =>\n layout.flat(1);\n\n/**\n * @internal\n * @description We don't need the mainField object in the layout, we only need the name.\n */\nconst replaceMainFieldWithNameOnly = (layout: EditLayout['layout'][number]) =>\n layout.map((row) =>\n row.map((field) => ({\n ...field,\n mainField: field.mainField?.name,\n }))\n );\n\n/**\n * @internal\n * @description We extract the metadata values from the field layout, because these are editable by the user.\n */\nconst extractMetadata = (\n layout: EditLayout['layout'][number]\n): Array<Exclude<ConfigurationFormData['layout'], { name: '_TEMP_' }>[number]['children']> => {\n return layout.map((row) =>\n row.map(({ label, disabled, hint, placeholder, size, name, mainField }) => ({\n label,\n editable: !disabled,\n description: hint,\n mainField,\n placeholder,\n size,\n name,\n __temp_key__: '',\n }))\n );\n};\n\n/**\n * @internal\n * @description Each row of the layout has a max size of 12 (based on bootstrap grid system)\n * So in order to offer a better drop zone we add the _TEMP_ div to complete the remaining substract (12 - existing)\n */\nconst addTmpSpaceToLayout = (\n layout: ReturnType<typeof extractMetadata>\n): Array<ConfigurationFormData['layout'][number]['children']> => [\n ...layout.map((row) => {\n const totalSpaceTaken = row.reduce((acc, field) => acc + field.size, 0);\n\n if (totalSpaceTaken < 12) {\n return [\n ...row,\n {\n name: TEMP_FIELD_NAME,\n size: 12 - totalSpaceTaken,\n __temp_key__: '',\n } satisfies EditFieldSpacerLayout,\n ];\n }\n\n return row;\n }),\n];\n\n/**\n * @internal\n * @description At this point of the transformations we have Field[][], but each row for the form should have a __temp_key__\n * applied. This means we need to change it so `Field` is nested under the children property.\n */\nconst addTmpKeysToLayout = (\n layout: ReturnType<typeof addTmpSpaceToLayout>\n): ConfigurationFormData['layout'] => {\n const keys = generateNKeysBetween(undefined, undefined, layout.length);\n\n return layout.map((row, rowIndex) => {\n const fieldKeys = generateNKeysBetween(undefined, undefined, row.length);\n\n return {\n __temp_key__: keys[rowIndex],\n children: row.map((field, fieldIndex) => {\n return {\n ...field,\n __temp_key__: fieldKeys[fieldIndex],\n };\n }),\n };\n });\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n name: string;\n}\n\nconst Header = ({ name }: HeaderProps) => {\n const { formatMessage } = useIntl();\n const modified = useForm('Header', (state) => state.modified);\n const isSubmitting = useForm('Header', (state) => state.isSubmitting);\n\n return (\n <Layouts.Header\n title={formatMessage(\n {\n id: getTranslation('components.SettingsViewWrapper.pluginHeader.title'),\n defaultMessage: `Configure the view - {name}`,\n },\n { name: capitalise(name) }\n )}\n subtitle={formatMessage({\n id: getTranslation('components.SettingsViewWrapper.pluginHeader.description.edit-settings'),\n defaultMessage: 'Customize how the edit view will look like.',\n })}\n navigationAction={<BackButton />}\n primaryAction={\n <Button disabled={!modified} loading={isSubmitting} type=\"submit\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n );\n};\n\nexport { ConfigurationForm };\nexport type { ConfigurationFormProps, ConfigurationFormData, EditFieldSpacerLayout };\n"],"names":["yup","useIntl","React","useNotification","useField","useGetInitialDataQuery","attribute","ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD","jsx","ModalLayout","jsxs","Form","ModalHeader","Flex","FieldTypeIcon","Typography","capitalise","ModalBody","Grid","getTranslation","GridItem","InputRenderer","ModalFooter","Button","useForm","field","index","generateNKeysBetweenImpl","Box","Menu","Plus","useDragAndDrop","ItemTypes","getEmptyImage","useComposedRefs","Fragment","Drag","IconButton","Pencil","Cross","Link","Cog","NavLink","ComponentIcon","styled","pipe","Layouts","Main","Divider","generateNKeysBetween","BackButton"],"mappings":"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"}
|