@strapi/content-manager 5.42.0 → 5.42.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/ConfigurationForm/Fields.js +21 -13
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.mjs +21 -13
- package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.js +35 -17
- package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.mjs +36 -18
- package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +13 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +13 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +17 -4
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +17 -4
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +1 -1
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/translations/pl.json.js +184 -34
- package/dist/admin/translations/pl.json.js.map +1 -1
- package/dist/admin/translations/pl.json.mjs +184 -34
- package/dist/admin/translations/pl.json.mjs.map +1 -1
- package/package.json +6 -6
|
@@ -261,18 +261,26 @@ const Fields = ({ attributes, fieldSizes, components, metadatas = {} })=>{
|
|
|
261
261
|
// If there is absolutely no space left in the target row and the
|
|
262
262
|
// dragged item comes from a different row, add it to a new row
|
|
263
263
|
if (canCreateNewRowForItem) {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
264
|
+
// Default: insert a new row after the row being hovered (between that row and the
|
|
265
|
+
// next). For row 0, use index 0 instead so fields that are not full-width can still
|
|
266
|
+
// be moved above the first row—there is no separate drop area above it in the UI.
|
|
267
|
+
const insertIndex = overContainerIndex === 0 ? 0 : overContainerIndex + 1;
|
|
268
|
+
/**
|
|
269
|
+
* When inserting *after* the hovered row, reuse the following row if it only
|
|
270
|
+
* contains spacers. Skip when inserting at index 0 — draft[0] is the hovered row.
|
|
271
|
+
*/ if (insertIndex > overContainerIndex) {
|
|
272
|
+
const existingRow = draft[insertIndex];
|
|
273
|
+
if (existingRow) {
|
|
274
|
+
const nonTempChildren = existingRow.children.filter((child)=>child.name !== TEMP_FIELD_NAME);
|
|
275
|
+
const isNextRowEmpty = nonTempChildren.length === 0;
|
|
276
|
+
// If the row directly after is empty (only spacers), reuse it
|
|
277
|
+
// instead of creating yet another row.
|
|
278
|
+
if (isNextRowEmpty) {
|
|
279
|
+
existingRow.children = [
|
|
280
|
+
draggedItem
|
|
281
|
+
];
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
276
284
|
}
|
|
277
285
|
}
|
|
278
286
|
const newContainerPrototype = draft[overContainerIndex];
|
|
@@ -311,7 +319,7 @@ const Fields = ({ attributes, fieldSizes, components, metadatas = {} })=>{
|
|
|
311
319
|
const activeIndex = containersAsDictionary[activeContainer].children.findIndex((children)=>children.dndId === id);
|
|
312
320
|
const overIndex = containersAsDictionary[overContainer].children.findIndex((children)=>children.dndId === overId);
|
|
313
321
|
const movedContainerItems = immer.produce(containersAsDictionary, (draft)=>{
|
|
314
|
-
if (activeIndex !== overIndex && activeContainer === overContainer) {
|
|
322
|
+
if (activeIndex >= 0 && overIndex >= 0 && activeIndex !== overIndex && activeContainer === overContainer) {
|
|
315
323
|
// Move items around inside their own container
|
|
316
324
|
draft[activeContainer].children = sortable.arraySwap(draft[activeContainer].children, activeIndex, overIndex);
|
|
317
325
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fields.js","sources":["../../../../admin/src/components/ConfigurationForm/Fields.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useDroppable, DndContext, UniqueIdentifier, DragOverlay } from '@dnd-kit/core';\nimport { arraySwap, SortableContext, useSortable, rectSwappingStrategy } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { useField, useForm, useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Modal,\n Box,\n Flex,\n Grid,\n IconButton,\n IconButtonComponent,\n Typography,\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 { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\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\nconst GRID_COLUMNS = 12;\n\n/* -------------------------------------------------------------------------------------------------\n * Drag and Drop\n * -----------------------------------------------------------------------------------------------*/\n\nconst DroppableContainer = ({\n id,\n children,\n}: {\n id: string;\n children: (props: ReturnType<typeof useDroppable>) => React.ReactNode;\n}) => {\n const droppable = useDroppable({\n id,\n });\n\n return children(droppable);\n};\n\nexport const SortableItem = ({ id, children }: { id: string; children: React.ReactNode }) => {\n const { attributes, setNodeRef, transform, transition, isDragging } = useSortable({\n id,\n });\n\n const style = {\n transform: CSS.Transform.toString({\n x: transform?.x ?? 0,\n y: transform?.y ?? 0,\n // Avoid any scaling animations which can visually \"squish\" or\n // \"stretch\" neighbouring cards in mixed-width grids (4/8/12 cols).\n scaleX: 1,\n scaleY: 1,\n }),\n transition,\n height: '100%',\n opacity: isDragging ? 0.6 : 1,\n outlineOffset: 2,\n };\n\n return (\n <div ref={setNodeRef} style={style} {...attributes}>\n {children}\n </div>\n );\n};\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\n/**\n * Compute uids and formName for drag and drop items for the incoming layout\n */\nconst createDragAndDropContainersFromLayout = (layout: ConfigurationFormData['layout']) => {\n return layout.map((row, containerIndex) => ({\n ...row,\n // Use unique ids for drag and drop items\n dndId: `container-${containerIndex}`,\n children: row.children.map((child, childIndex) => ({\n ...child,\n dndId: `container-${containerIndex}-child-${childIndex}`,\n\n // The formName must be recomputed each time an item is moved\n formName: `layout.${containerIndex}.children.${childIndex}`,\n })),\n }));\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\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] : GRID_COLUMNS;\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 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`, [\n ...layout[rowIndex].children.slice(0, fieldIndex),\n ...layout[rowIndex].children.slice(fieldIndex + 1),\n ]);\n }\n };\n\n const handleAddField = (field: Field) => () => {\n addFieldRow('layout', { children: [field] });\n };\n\n const [containers, setContainers] = React.useState(() =>\n createDragAndDropContainersFromLayout(layout)\n );\n type Container = (typeof containers)[number];\n const [activeDragItem, setActiveDragItem] = React.useState<Container['children'][number] | null>(\n null\n );\n\n /**\n * Finds either the parent container id or the child id within a container\n */\n function findContainer(id: UniqueIdentifier, containersAsDictionary: Record<string, Container>) {\n // If the id is a key, then it is the parent container\n if (id in containersAsDictionary) {\n return id;\n }\n\n // Otherwise, it is a child inside a container\n return Object.keys(containersAsDictionary).find((key) =>\n containersAsDictionary[key].children.find((child) => child.dndId === id)\n );\n }\n\n /**\n * Gets an item from a container based on its id\n */\n const getItemFromContainer = (id: UniqueIdentifier, container: Container) => {\n return container.children.find((item) => id === item.dndId);\n };\n\n /**\n * Gets the containers as dictionary for quick lookup\n */\n const getContainersAsDictionary = () => {\n return Object.fromEntries(containers.map((container) => [container.dndId, container]));\n };\n\n /**\n * Recomputes the empty space in the grid\n */\n const createContainersWithSpacers = (layout: typeof containers) => {\n return layout\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 < GRID_COLUMNS) {\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: GRID_COLUMNS - totalSpaceTaken,\n __temp_key__: spacerKey,\n } satisfies EditFieldSpacerLayout,\n ],\n };\n }\n\n return row;\n });\n };\n\n /**\n * When layout changes (e.g. when a field size is changed or the containers are reordered)\n * we need to update the ids and form names\n */\n React.useEffect(() => {\n const containers = createDragAndDropContainersFromLayout(layout);\n setContainers(containers);\n }, [layout, setContainers]);\n\n return (\n <DndContext\n onDragStart={(event) => {\n const containersAsDictionary = getContainersAsDictionary();\n\n const activeContainer = findContainer(event.active.id, containersAsDictionary);\n\n if (!activeContainer) return;\n\n const activeItem = getItemFromContainer(\n event.active.id,\n containersAsDictionary[activeContainer]\n );\n\n if (activeItem) {\n setActiveDragItem(activeItem);\n }\n }}\n onDragOver={({ active, over }) => {\n const containersAsDictionary = getContainersAsDictionary();\n const activeContainer = findContainer(active.id, containersAsDictionary);\n const overContainer = findContainer(over?.id ?? '', containersAsDictionary);\n const activeContainerIndex = containers.findIndex(\n (container) => container.dndId === activeContainer\n );\n const overContainerIndex = containers.findIndex(\n (container) => container.dndId === overContainer\n );\n\n if (!activeContainer || !overContainer) {\n return;\n }\n\n const draggedItem = getItemFromContainer(\n active.id,\n containersAsDictionary[activeContainer]\n );\n const overItem = getItemFromContainer(\n over?.id ?? '',\n containersAsDictionary[overContainer]\n );\n const overIndex = containersAsDictionary[overContainer].children.findIndex(\n (item) => item.dndId === over?.id\n );\n const activeIndex = containersAsDictionary[activeContainer].children.findIndex(\n (item) => item.dndId === active.id\n );\n\n if (!draggedItem) return;\n\n // Handle a full width field being dragged\n if (draggedItem?.size === GRID_COLUMNS) {\n // Swap the items in the containers\n const update = produce(containers, (draft) => {\n draft[activeContainerIndex].children = containers[overContainerIndex].children;\n draft[overContainerIndex].children = containers[activeContainerIndex].children;\n });\n setContainers(update);\n return;\n }\n\n /**\n * Handle an item being dragged from one container to another,\n * the item is removed from its current container, and then added to its new container\n * An item can only be added in a container if there is enough space\n */\n const update = produce(containers, (draft) => {\n draft[activeContainerIndex].children = draft[activeContainerIndex].children.filter(\n (item) => item.dndId !== active.id\n );\n\n const targetChildren = draft[overContainerIndex].children;\n const spaceTaken = targetChildren.reduce((acc, curr) => {\n if (curr.name === TEMP_FIELD_NAME) {\n return acc;\n }\n\n return acc + curr.size;\n }, 0);\n const isNotEnoughSpace = spaceTaken + draggedItem.size > GRID_COLUMNS;\n const canSwapSameSizeItem =\n overItem &&\n overItem.name !== TEMP_FIELD_NAME &&\n overItem.size === draggedItem.size &&\n activeIndex !== -1 &&\n overIndex !== -1;\n const canCreateNewRowForItem =\n activeContainerIndex !== overContainerIndex && GRID_COLUMNS - spaceTaken === 0;\n const isHoveringOverSpacer = overItem?.name === TEMP_FIELD_NAME;\n\n /**\n * Not enough space in the hovered row\n *\n * We still want:\n * - ability to swap items of the same size\n * - ability to create a single extra row to host the dragged item\n * when surrounding rows are full\n */\n if (isNotEnoughSpace) {\n // Try a simple swap when target item is of the same size\n if (canSwapSameSizeItem) {\n const sourceChildren = draft[activeContainerIndex].children;\n\n // Put the hovered item back where the dragged item came from\n sourceChildren.splice(activeIndex, 0, overItem);\n\n // Swap the hovered item with the dragged one in the target row\n const draftOverIndex = targetChildren.findIndex(\n (item) => item.dndId === overItem.dndId\n );\n\n if (draftOverIndex !== -1) {\n targetChildren.splice(draftOverIndex, 1, draggedItem);\n }\n\n return;\n }\n\n // If there is absolutely no space left in the target row and the\n // dragged item comes from a different row, add it to a new row\n if (canCreateNewRowForItem) {\n const insertIndex = overContainerIndex + 1;\n const existingRow = draft[insertIndex];\n\n if (existingRow) {\n const nonTempChildren = existingRow.children.filter(\n (child) => child.name !== TEMP_FIELD_NAME\n );\n const isNextRowEmpty = nonTempChildren.length === 0;\n\n // If the row directly after is empty (only spacers), reuse it\n // instead of creating yet another row.\n if (isNextRowEmpty) {\n existingRow.children = [draggedItem];\n return;\n }\n }\n\n const newContainerPrototype = draft[overContainerIndex];\n const newContainerId = `container-${draft.length}`;\n\n draft.splice(insertIndex, 0, {\n ...newContainerPrototype,\n dndId: newContainerId,\n children: [draggedItem],\n });\n\n return;\n }\n }\n\n // There is enough room in the target row\n if (isHoveringOverSpacer) {\n // We are over an invisible spacer, replace it with the dragged item\n targetChildren.splice(overIndex, 1, draggedItem);\n return;\n }\n\n // There is room for the item in the container, drop it\n targetChildren.splice(overIndex, 0, draggedItem);\n });\n\n setContainers(update);\n }}\n onDragEnd={(event) => {\n const { active, over } = event;\n const { id } = active;\n const overId = over?.id;\n const containersAsDictionary = getContainersAsDictionary();\n const activeContainer = findContainer(id, containersAsDictionary);\n const overContainer = findContainer(overId!, containersAsDictionary);\n\n if (!activeContainer || !overContainer) {\n return;\n }\n\n const activeIndex = containersAsDictionary[activeContainer].children.findIndex(\n (children) => children.dndId === id\n );\n const overIndex = containersAsDictionary[overContainer].children.findIndex(\n (children) => children.dndId === overId\n );\n\n const movedContainerItems = produce(containersAsDictionary, (draft) => {\n if (activeIndex !== overIndex && activeContainer === overContainer) {\n // Move items around inside their own container\n draft[activeContainer].children = arraySwap(\n draft[activeContainer].children,\n activeIndex,\n overIndex\n );\n }\n });\n\n // Remove properties the server does not expect before updating the form\n const updatedContainers = Object.values(movedContainerItems);\n const updatedContainersWithSpacers = createContainersWithSpacers(\n updatedContainers\n ) as typeof containers;\n const updatedLayout = updatedContainersWithSpacers.map(\n ({ dndId: _dndId, children, ...container }) => ({\n ...container,\n children: children.map(({ dndId: _dndId, formName: _formName, ...child }) => child),\n })\n );\n\n // Update the layout\n onChange('layout', updatedLayout);\n setActiveDragItem(null);\n }}\n >\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 {containers.map((container, containerIndex) => (\n <SortableContext\n key={container.dndId}\n id={container.dndId}\n items={container.children.map((child) => ({ id: child.dndId }))}\n strategy={rectSwappingStrategy}\n >\n <DroppableContainer id={container.dndId}>\n {({ setNodeRef }) => (\n <Grid.Root key={container.dndId} ref={setNodeRef} gap={2}>\n {container.children.map((child, childIndex) => (\n <Grid.Item\n col={child.size}\n xs={12}\n key={child.dndId}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <SortableItem id={child.dndId}>\n <Field\n attribute={attributes[child.name]}\n components={components}\n name={child.formName}\n onRemoveField={handleRemoveField(containerIndex, childIndex)}\n dndId={child.dndId}\n />\n </SortableItem>\n </Grid.Item>\n ))}\n </Grid.Root>\n )}\n </DroppableContainer>\n </SortableContext>\n ))}\n <DragOverlay>\n {activeDragItem ? (\n <Field\n attribute={attributes[activeDragItem.name]}\n components={components}\n name={activeDragItem.formName}\n dndId={activeDragItem.dndId}\n />\n ) : null}\n </DragOverlay>\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 </DndContext>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FieldProps extends Pick<EditFieldFormProps, 'name' | 'attribute'> {\n components: EditLayout['components'];\n dndId: string;\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, onRemoveField, dndId }: FieldProps) => {\n const isDesktop = useIsDesktop();\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { value } = useField<FormField>(name);\n const { listeners, setActivatorNodeRef } = useSortable({\n id: dndId,\n });\n\n const handleRemoveField: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (onRemoveField) {\n onRemoveField?.(e);\n }\n };\n\n const onEditFieldMeta: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n e.preventDefault();\n e.stopPropagation();\n setIsModalOpen(true);\n };\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 }} />;\n }\n\n if (!attribute) {\n return null;\n }\n\n return (\n <Modal.Root open={isModalOpen} onOpenChange={setIsModalOpen}>\n <Flex\n borderColor=\"neutral150\"\n background=\"neutral100\"\n hasRadius\n gap={3}\n cursor=\"pointer\"\n onClick={() => {\n setIsModalOpen(true);\n }}\n position=\"relative\"\n >\n {isDesktop && (\n <DragButton\n ref={setActivatorNodeRef}\n tag=\"span\"\n withTooltip={false}\n label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.move.field'),\n defaultMessage: 'Move {item}',\n },\n { item: value.label }\n )}\n {...listeners}\n >\n <Drag />\n </DragButton>\n )}\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 position=\"relative\">\n <IconButton\n type=\"button\"\n variant=\"ghost\"\n background=\"transparent\"\n onClick={onEditFieldMeta}\n withTooltip={false}\n 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 type=\"button\"\n variant=\"ghost\"\n onClick={handleRemoveField}\n background=\"transparent\"\n withTooltip={false}\n 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.Root gap={4} width=\"100%\">\n {components[attribute.component].layout.map((row) =>\n row.map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\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 </Grid.Item>\n ))\n )}\n </Grid.Root>\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 wrap=\"wrap\"\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 {value.name !== TEMP_FIELD_NAME && (\n <EditFieldForm attribute={attribute} name={name} onClose={() => setIsModalOpen(false)} />\n )}\n </Modal.Root>\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;\n border: none;\n background-color: transparent;\n border-radius: 0px;\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"],"names":["GRID_COLUMNS","DroppableContainer","id","children","droppable","useDroppable","SortableItem","attributes","setNodeRef","transform","transition","isDragging","useSortable","style","CSS","Transform","toString","x","y","scaleX","scaleY","height","opacity","outlineOffset","_jsx","div","ref","createDragAndDropContainersFromLayout","layout","map","row","containerIndex","dndId","child","childIndex","formName","Fields","fieldSizes","components","metadatas","formatMessage","useIntl","useForm","state","values","onChange","addFieldRow","removeFieldRow","existingFields","field","name","flat","remainingFields","Object","entries","reduce","acc","current","visible","includes","type","size","push","label","handleRemoveField","rowIndex","fieldIndex","length","slice","handleAddField","containers","setContainers","React","useState","activeDragItem","setActiveDragItem","findContainer","containersAsDictionary","keys","find","key","getItemFromContainer","container","item","getContainersAsDictionary","fromEntries","createContainersWithSpacers","filter","TEMP_FIELD_NAME","totalSpaceTaken","curr","spacerKey","generateNKeysBetweenImpl","at","__temp_key__","undefined","useEffect","DndContext","onDragStart","event","activeContainer","active","activeItem","onDragOver","over","overContainer","activeContainerIndex","findIndex","overContainerIndex","draggedItem","overItem","overIndex","activeIndex","update","produce","draft","targetChildren","spaceTaken","isNotEnoughSpace","canSwapSameSizeItem","canCreateNewRowForItem","isHoveringOverSpacer","sourceChildren","splice","draftOverIndex","insertIndex","existingRow","nonTempChildren","isNextRowEmpty","newContainerPrototype","newContainerId","onDragEnd","overId","movedContainerItems","arraySwap","updatedContainers","updatedContainersWithSpacers","updatedLayout","_dndId","_formName","_jsxs","Flex","paddingTop","direction","alignItems","gap","justifyContent","Typography","fontWeight","getTranslation","defaultMessage","variant","textColor","Box","padding","hasRadius","borderStyle","borderWidth","borderColor","SortableContext","items","strategy","rectSwappingStrategy","Grid","Root","Item","col","xs","Field","attribute","onRemoveField","DragOverlay","Menu","Trigger","startIcon","Plus","endIcon","disabled","fullWidth","Content","onSelect","isDesktop","useIsDesktop","isModalOpen","setIsModalOpen","value","useField","listeners","setActivatorNodeRef","e","preventDefault","stopPropagation","onEditFieldMeta","tag","Modal","open","onOpenChange","background","cursor","onClick","position","DragButton","withTooltip","Drag","grow","overflow","width","ellipsis","IconButton","Pencil","Cross","paddingRight","paddingBottom","paddingLeft","component","Link","Cog","NavLink","to","wrap","uid","ComponentLink","ComponentIcon","icon","settings","fontSize","displayName","EditFieldForm","onClose","styled","theme","colors","neutral150","spaces","props","neutral200","neutral0","borderRadius","primary100","primary200","primary600"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Fields.js","sources":["../../../../admin/src/components/ConfigurationForm/Fields.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useDroppable, DndContext, UniqueIdentifier, DragOverlay } from '@dnd-kit/core';\nimport { arraySwap, SortableContext, useSortable, rectSwappingStrategy } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { useField, useForm, useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Modal,\n Box,\n Flex,\n Grid,\n IconButton,\n IconButtonComponent,\n Typography,\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 { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\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\nconst GRID_COLUMNS = 12;\n\n/* -------------------------------------------------------------------------------------------------\n * Drag and Drop\n * -----------------------------------------------------------------------------------------------*/\n\nconst DroppableContainer = ({\n id,\n children,\n}: {\n id: string;\n children: (props: ReturnType<typeof useDroppable>) => React.ReactNode;\n}) => {\n const droppable = useDroppable({\n id,\n });\n\n return children(droppable);\n};\n\nexport const SortableItem = ({ id, children }: { id: string; children: React.ReactNode }) => {\n const { attributes, setNodeRef, transform, transition, isDragging } = useSortable({\n id,\n });\n\n const style = {\n transform: CSS.Transform.toString({\n x: transform?.x ?? 0,\n y: transform?.y ?? 0,\n // Avoid any scaling animations which can visually \"squish\" or\n // \"stretch\" neighbouring cards in mixed-width grids (4/8/12 cols).\n scaleX: 1,\n scaleY: 1,\n }),\n transition,\n height: '100%',\n opacity: isDragging ? 0.6 : 1,\n outlineOffset: 2,\n };\n\n return (\n <div ref={setNodeRef} style={style} {...attributes}>\n {children}\n </div>\n );\n};\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\n/**\n * Compute uids and formName for drag and drop items for the incoming layout\n */\nconst createDragAndDropContainersFromLayout = (layout: ConfigurationFormData['layout']) => {\n return layout.map((row, containerIndex) => ({\n ...row,\n // Use unique ids for drag and drop items\n dndId: `container-${containerIndex}`,\n children: row.children.map((child, childIndex) => ({\n ...child,\n dndId: `container-${containerIndex}-child-${childIndex}`,\n\n // The formName must be recomputed each time an item is moved\n formName: `layout.${containerIndex}.children.${childIndex}`,\n })),\n }));\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\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] : GRID_COLUMNS;\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 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`, [\n ...layout[rowIndex].children.slice(0, fieldIndex),\n ...layout[rowIndex].children.slice(fieldIndex + 1),\n ]);\n }\n };\n\n const handleAddField = (field: Field) => () => {\n addFieldRow('layout', { children: [field] });\n };\n\n const [containers, setContainers] = React.useState(() =>\n createDragAndDropContainersFromLayout(layout)\n );\n type Container = (typeof containers)[number];\n const [activeDragItem, setActiveDragItem] = React.useState<Container['children'][number] | null>(\n null\n );\n\n /**\n * Finds either the parent container id or the child id within a container\n */\n function findContainer(id: UniqueIdentifier, containersAsDictionary: Record<string, Container>) {\n // If the id is a key, then it is the parent container\n if (id in containersAsDictionary) {\n return id;\n }\n\n // Otherwise, it is a child inside a container\n return Object.keys(containersAsDictionary).find((key) =>\n containersAsDictionary[key].children.find((child) => child.dndId === id)\n );\n }\n\n /**\n * Gets an item from a container based on its id\n */\n const getItemFromContainer = (id: UniqueIdentifier, container: Container) => {\n return container.children.find((item) => id === item.dndId);\n };\n\n /**\n * Gets the containers as dictionary for quick lookup\n */\n const getContainersAsDictionary = () => {\n return Object.fromEntries(containers.map((container) => [container.dndId, container]));\n };\n\n /**\n * Recomputes the empty space in the grid\n */\n const createContainersWithSpacers = (layout: typeof containers) => {\n return layout\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 < GRID_COLUMNS) {\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: GRID_COLUMNS - totalSpaceTaken,\n __temp_key__: spacerKey,\n } satisfies EditFieldSpacerLayout,\n ],\n };\n }\n\n return row;\n });\n };\n\n /**\n * When layout changes (e.g. when a field size is changed or the containers are reordered)\n * we need to update the ids and form names\n */\n React.useEffect(() => {\n const containers = createDragAndDropContainersFromLayout(layout);\n setContainers(containers);\n }, [layout, setContainers]);\n\n return (\n <DndContext\n onDragStart={(event) => {\n const containersAsDictionary = getContainersAsDictionary();\n\n const activeContainer = findContainer(event.active.id, containersAsDictionary);\n\n if (!activeContainer) return;\n\n const activeItem = getItemFromContainer(\n event.active.id,\n containersAsDictionary[activeContainer]\n );\n\n if (activeItem) {\n setActiveDragItem(activeItem);\n }\n }}\n onDragOver={({ active, over }) => {\n const containersAsDictionary = getContainersAsDictionary();\n const activeContainer = findContainer(active.id, containersAsDictionary);\n const overContainer = findContainer(over?.id ?? '', containersAsDictionary);\n const activeContainerIndex = containers.findIndex(\n (container) => container.dndId === activeContainer\n );\n const overContainerIndex = containers.findIndex(\n (container) => container.dndId === overContainer\n );\n\n if (!activeContainer || !overContainer) {\n return;\n }\n\n const draggedItem = getItemFromContainer(\n active.id,\n containersAsDictionary[activeContainer]\n );\n const overItem = getItemFromContainer(\n over?.id ?? '',\n containersAsDictionary[overContainer]\n );\n const overIndex = containersAsDictionary[overContainer].children.findIndex(\n (item) => item.dndId === over?.id\n );\n const activeIndex = containersAsDictionary[activeContainer].children.findIndex(\n (item) => item.dndId === active.id\n );\n\n if (!draggedItem) return;\n\n // Handle a full width field being dragged\n if (draggedItem?.size === GRID_COLUMNS) {\n // Swap the items in the containers\n const update = produce(containers, (draft) => {\n draft[activeContainerIndex].children = containers[overContainerIndex].children;\n draft[overContainerIndex].children = containers[activeContainerIndex].children;\n });\n setContainers(update);\n return;\n }\n\n /**\n * Handle an item being dragged from one container to another,\n * the item is removed from its current container, and then added to its new container\n * An item can only be added in a container if there is enough space\n */\n const update = produce(containers, (draft) => {\n draft[activeContainerIndex].children = draft[activeContainerIndex].children.filter(\n (item) => item.dndId !== active.id\n );\n\n const targetChildren = draft[overContainerIndex].children;\n const spaceTaken = targetChildren.reduce((acc, curr) => {\n if (curr.name === TEMP_FIELD_NAME) {\n return acc;\n }\n\n return acc + curr.size;\n }, 0);\n const isNotEnoughSpace = spaceTaken + draggedItem.size > GRID_COLUMNS;\n const canSwapSameSizeItem =\n overItem &&\n overItem.name !== TEMP_FIELD_NAME &&\n overItem.size === draggedItem.size &&\n activeIndex !== -1 &&\n overIndex !== -1;\n const canCreateNewRowForItem =\n activeContainerIndex !== overContainerIndex && GRID_COLUMNS - spaceTaken === 0;\n const isHoveringOverSpacer = overItem?.name === TEMP_FIELD_NAME;\n\n /**\n * Not enough space in the hovered row\n *\n * We still want:\n * - ability to swap items of the same size\n * - ability to create a single extra row to host the dragged item\n * when surrounding rows are full\n */\n if (isNotEnoughSpace) {\n // Try a simple swap when target item is of the same size\n if (canSwapSameSizeItem) {\n const sourceChildren = draft[activeContainerIndex].children;\n\n // Put the hovered item back where the dragged item came from\n sourceChildren.splice(activeIndex, 0, overItem);\n\n // Swap the hovered item with the dragged one in the target row\n const draftOverIndex = targetChildren.findIndex(\n (item) => item.dndId === overItem.dndId\n );\n\n if (draftOverIndex !== -1) {\n targetChildren.splice(draftOverIndex, 1, draggedItem);\n }\n\n return;\n }\n\n // If there is absolutely no space left in the target row and the\n // dragged item comes from a different row, add it to a new row\n if (canCreateNewRowForItem) {\n // Default: insert a new row after the row being hovered (between that row and the\n // next). For row 0, use index 0 instead so fields that are not full-width can still\n // be moved above the first row—there is no separate drop area above it in the UI.\n const insertIndex = overContainerIndex === 0 ? 0 : overContainerIndex + 1;\n\n /**\n * When inserting *after* the hovered row, reuse the following row if it only\n * contains spacers. Skip when inserting at index 0 — draft[0] is the hovered row.\n */\n if (insertIndex > overContainerIndex) {\n const existingRow = draft[insertIndex];\n\n if (existingRow) {\n const nonTempChildren = existingRow.children.filter(\n (child) => child.name !== TEMP_FIELD_NAME\n );\n const isNextRowEmpty = nonTempChildren.length === 0;\n\n // If the row directly after is empty (only spacers), reuse it\n // instead of creating yet another row.\n if (isNextRowEmpty) {\n existingRow.children = [draggedItem];\n return;\n }\n }\n }\n\n const newContainerPrototype = draft[overContainerIndex];\n const newContainerId = `container-${draft.length}`;\n\n draft.splice(insertIndex, 0, {\n ...newContainerPrototype,\n dndId: newContainerId,\n children: [draggedItem],\n });\n\n return;\n }\n }\n\n // There is enough room in the target row\n if (isHoveringOverSpacer) {\n // We are over an invisible spacer, replace it with the dragged item\n targetChildren.splice(overIndex, 1, draggedItem);\n return;\n }\n\n // There is room for the item in the container, drop it\n targetChildren.splice(overIndex, 0, draggedItem);\n });\n\n setContainers(update);\n }}\n onDragEnd={(event) => {\n const { active, over } = event;\n const { id } = active;\n const overId = over?.id;\n const containersAsDictionary = getContainersAsDictionary();\n const activeContainer = findContainer(id, containersAsDictionary);\n const overContainer = findContainer(overId!, containersAsDictionary);\n\n if (!activeContainer || !overContainer) {\n return;\n }\n\n const activeIndex = containersAsDictionary[activeContainer].children.findIndex(\n (children) => children.dndId === id\n );\n const overIndex = containersAsDictionary[overContainer].children.findIndex(\n (children) => children.dndId === overId\n );\n\n const movedContainerItems = produce(containersAsDictionary, (draft) => {\n if (\n activeIndex >= 0 &&\n overIndex >= 0 &&\n activeIndex !== overIndex &&\n activeContainer === overContainer\n ) {\n // Move items around inside their own container\n draft[activeContainer].children = arraySwap(\n draft[activeContainer].children,\n activeIndex,\n overIndex\n );\n }\n });\n\n // Remove properties the server does not expect before updating the form\n const updatedContainers = Object.values(movedContainerItems);\n const updatedContainersWithSpacers = createContainersWithSpacers(\n updatedContainers\n ) as typeof containers;\n const updatedLayout = updatedContainersWithSpacers.map(\n ({ dndId: _dndId, children, ...container }) => ({\n ...container,\n children: children.map(({ dndId: _dndId, formName: _formName, ...child }) => child),\n })\n );\n\n // Update the layout\n onChange('layout', updatedLayout);\n setActiveDragItem(null);\n }}\n >\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 {containers.map((container, containerIndex) => (\n <SortableContext\n key={container.dndId}\n id={container.dndId}\n items={container.children.map((child) => ({ id: child.dndId }))}\n strategy={rectSwappingStrategy}\n >\n <DroppableContainer id={container.dndId}>\n {({ setNodeRef }) => (\n <Grid.Root key={container.dndId} ref={setNodeRef} gap={2}>\n {container.children.map((child, childIndex) => (\n <Grid.Item\n col={child.size}\n xs={12}\n key={child.dndId}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <SortableItem id={child.dndId}>\n <Field\n attribute={attributes[child.name]}\n components={components}\n name={child.formName}\n onRemoveField={handleRemoveField(containerIndex, childIndex)}\n dndId={child.dndId}\n />\n </SortableItem>\n </Grid.Item>\n ))}\n </Grid.Root>\n )}\n </DroppableContainer>\n </SortableContext>\n ))}\n <DragOverlay>\n {activeDragItem ? (\n <Field\n attribute={attributes[activeDragItem.name]}\n components={components}\n name={activeDragItem.formName}\n dndId={activeDragItem.dndId}\n />\n ) : null}\n </DragOverlay>\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 </DndContext>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FieldProps extends Pick<EditFieldFormProps, 'name' | 'attribute'> {\n components: EditLayout['components'];\n dndId: string;\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, onRemoveField, dndId }: FieldProps) => {\n const isDesktop = useIsDesktop();\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { value } = useField<FormField>(name);\n const { listeners, setActivatorNodeRef } = useSortable({\n id: dndId,\n });\n\n const handleRemoveField: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (onRemoveField) {\n onRemoveField?.(e);\n }\n };\n\n const onEditFieldMeta: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n e.preventDefault();\n e.stopPropagation();\n setIsModalOpen(true);\n };\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 }} />;\n }\n\n if (!attribute) {\n return null;\n }\n\n return (\n <Modal.Root open={isModalOpen} onOpenChange={setIsModalOpen}>\n <Flex\n borderColor=\"neutral150\"\n background=\"neutral100\"\n hasRadius\n gap={3}\n cursor=\"pointer\"\n onClick={() => {\n setIsModalOpen(true);\n }}\n position=\"relative\"\n >\n {isDesktop && (\n <DragButton\n ref={setActivatorNodeRef}\n tag=\"span\"\n withTooltip={false}\n label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.move.field'),\n defaultMessage: 'Move {item}',\n },\n { item: value.label }\n )}\n {...listeners}\n >\n <Drag />\n </DragButton>\n )}\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 position=\"relative\">\n <IconButton\n type=\"button\"\n variant=\"ghost\"\n background=\"transparent\"\n onClick={onEditFieldMeta}\n withTooltip={false}\n 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 type=\"button\"\n variant=\"ghost\"\n onClick={handleRemoveField}\n background=\"transparent\"\n withTooltip={false}\n 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.Root gap={4} width=\"100%\">\n {components[attribute.component].layout.map((row) =>\n row.map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\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 </Grid.Item>\n ))\n )}\n </Grid.Root>\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 wrap=\"wrap\"\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 {value.name !== TEMP_FIELD_NAME && (\n <EditFieldForm attribute={attribute} name={name} onClose={() => setIsModalOpen(false)} />\n )}\n </Modal.Root>\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;\n border: none;\n background-color: transparent;\n border-radius: 0px;\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"],"names":["GRID_COLUMNS","DroppableContainer","id","children","droppable","useDroppable","SortableItem","attributes","setNodeRef","transform","transition","isDragging","useSortable","style","CSS","Transform","toString","x","y","scaleX","scaleY","height","opacity","outlineOffset","_jsx","div","ref","createDragAndDropContainersFromLayout","layout","map","row","containerIndex","dndId","child","childIndex","formName","Fields","fieldSizes","components","metadatas","formatMessage","useIntl","useForm","state","values","onChange","addFieldRow","removeFieldRow","existingFields","field","name","flat","remainingFields","Object","entries","reduce","acc","current","visible","includes","type","size","push","label","handleRemoveField","rowIndex","fieldIndex","length","slice","handleAddField","containers","setContainers","React","useState","activeDragItem","setActiveDragItem","findContainer","containersAsDictionary","keys","find","key","getItemFromContainer","container","item","getContainersAsDictionary","fromEntries","createContainersWithSpacers","filter","TEMP_FIELD_NAME","totalSpaceTaken","curr","spacerKey","generateNKeysBetweenImpl","at","__temp_key__","undefined","useEffect","DndContext","onDragStart","event","activeContainer","active","activeItem","onDragOver","over","overContainer","activeContainerIndex","findIndex","overContainerIndex","draggedItem","overItem","overIndex","activeIndex","update","produce","draft","targetChildren","spaceTaken","isNotEnoughSpace","canSwapSameSizeItem","canCreateNewRowForItem","isHoveringOverSpacer","sourceChildren","splice","draftOverIndex","insertIndex","existingRow","nonTempChildren","isNextRowEmpty","newContainerPrototype","newContainerId","onDragEnd","overId","movedContainerItems","arraySwap","updatedContainers","updatedContainersWithSpacers","updatedLayout","_dndId","_formName","_jsxs","Flex","paddingTop","direction","alignItems","gap","justifyContent","Typography","fontWeight","getTranslation","defaultMessage","variant","textColor","Box","padding","hasRadius","borderStyle","borderWidth","borderColor","SortableContext","items","strategy","rectSwappingStrategy","Grid","Root","Item","col","xs","Field","attribute","onRemoveField","DragOverlay","Menu","Trigger","startIcon","Plus","endIcon","disabled","fullWidth","Content","onSelect","isDesktop","useIsDesktop","isModalOpen","setIsModalOpen","value","useField","listeners","setActivatorNodeRef","e","preventDefault","stopPropagation","onEditFieldMeta","tag","Modal","open","onOpenChange","background","cursor","onClick","position","DragButton","withTooltip","Drag","grow","overflow","width","ellipsis","IconButton","Pencil","Cross","paddingRight","paddingBottom","paddingLeft","component","Link","Cog","NavLink","to","wrap","uid","ComponentLink","ComponentIcon","icon","settings","fontSize","displayName","EditFieldForm","onClose","styled","theme","colors","neutral150","spaces","props","neutral200","neutral0","borderRadius","primary100","primary200","primary600"],"mappings":"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"}
|
|
@@ -240,18 +240,26 @@ const Fields = ({ attributes, fieldSizes, components, metadatas = {} })=>{
|
|
|
240
240
|
// If there is absolutely no space left in the target row and the
|
|
241
241
|
// dragged item comes from a different row, add it to a new row
|
|
242
242
|
if (canCreateNewRowForItem) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
243
|
+
// Default: insert a new row after the row being hovered (between that row and the
|
|
244
|
+
// next). For row 0, use index 0 instead so fields that are not full-width can still
|
|
245
|
+
// be moved above the first row—there is no separate drop area above it in the UI.
|
|
246
|
+
const insertIndex = overContainerIndex === 0 ? 0 : overContainerIndex + 1;
|
|
247
|
+
/**
|
|
248
|
+
* When inserting *after* the hovered row, reuse the following row if it only
|
|
249
|
+
* contains spacers. Skip when inserting at index 0 — draft[0] is the hovered row.
|
|
250
|
+
*/ if (insertIndex > overContainerIndex) {
|
|
251
|
+
const existingRow = draft[insertIndex];
|
|
252
|
+
if (existingRow) {
|
|
253
|
+
const nonTempChildren = existingRow.children.filter((child)=>child.name !== TEMP_FIELD_NAME);
|
|
254
|
+
const isNextRowEmpty = nonTempChildren.length === 0;
|
|
255
|
+
// If the row directly after is empty (only spacers), reuse it
|
|
256
|
+
// instead of creating yet another row.
|
|
257
|
+
if (isNextRowEmpty) {
|
|
258
|
+
existingRow.children = [
|
|
259
|
+
draggedItem
|
|
260
|
+
];
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
255
263
|
}
|
|
256
264
|
}
|
|
257
265
|
const newContainerPrototype = draft[overContainerIndex];
|
|
@@ -290,7 +298,7 @@ const Fields = ({ attributes, fieldSizes, components, metadatas = {} })=>{
|
|
|
290
298
|
const activeIndex = containersAsDictionary[activeContainer].children.findIndex((children)=>children.dndId === id);
|
|
291
299
|
const overIndex = containersAsDictionary[overContainer].children.findIndex((children)=>children.dndId === overId);
|
|
292
300
|
const movedContainerItems = produce(containersAsDictionary, (draft)=>{
|
|
293
|
-
if (activeIndex !== overIndex && activeContainer === overContainer) {
|
|
301
|
+
if (activeIndex >= 0 && overIndex >= 0 && activeIndex !== overIndex && activeContainer === overContainer) {
|
|
294
302
|
// Move items around inside their own container
|
|
295
303
|
draft[activeContainer].children = arraySwap(draft[activeContainer].children, activeIndex, overIndex);
|
|
296
304
|
}
|