1 line
24 KiB
Plaintext
1 line
24 KiB
Plaintext
{"version":3,"file":"useDocumentLayout.mjs","sources":["../../../admin/src/hooks/useDocumentLayout.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\n\nimport { HOOKS } from '../constants/hooks';\nimport { useGetContentTypeConfigurationQuery } from '../services/contentTypes';\nimport { BaseQueryError } from '../utils/api';\nimport { getMainField } from '../utils/attributes';\n\nimport { useContentTypeSchema } from './useContentTypeSchema';\nimport {\n type ComponentsDictionary,\n type Document,\n type Schema,\n useDoc,\n useDocument,\n} from './useDocument';\n\nimport type { ComponentConfiguration } from '../../../shared/contracts/components';\nimport type {\n Metadatas,\n FindContentTypeConfiguration,\n Settings,\n} from '../../../shared/contracts/content-types';\nimport type { Filters, InputProps, Table } from '@strapi/admin/strapi-admin';\nimport type { Schema as SchemaUtils } from '@strapi/types';\n\ntype LayoutOptions = Schema['options'] & Schema['pluginOptions'] & object;\n\ninterface LayoutSettings extends Settings {\n displayName?: string;\n icon?: never;\n}\n\ninterface ListFieldLayout\n extends Table.Header<Document, ListFieldLayout>,\n Pick<Filters.Filter, 'mainField'> {\n attribute: SchemaUtils.Attribute.AnyAttribute | { type: 'custom' };\n}\n\ninterface ListLayout {\n layout: ListFieldLayout[];\n components?: never;\n metadatas: {\n [K in keyof Metadatas]: Metadatas[K]['list'];\n };\n options: LayoutOptions;\n settings: LayoutSettings;\n}\ninterface EditFieldSharedProps\n extends Omit<InputProps, 'hint' | 'label' | 'type'>,\n Pick<Filters.Filter, 'mainField'> {\n hint?: string;\n label: string;\n size: number;\n unique?: boolean;\n visible?: boolean;\n}\n\n/**\n * Map over all the types in Attribute Types and use that to create a union of new types where the attribute type\n * is under the property attribute and the type is under the property type.\n */\ntype EditFieldLayout = {\n [K in SchemaUtils.Attribute.Kind]: EditFieldSharedProps & {\n attribute: Extract<SchemaUtils.Attribute.AnyAttribute, { type: K }>;\n type: K;\n };\n}[SchemaUtils.Attribute.Kind];\n\ninterface EditLayout {\n layout: Array<Array<EditFieldLayout[]>>;\n components: {\n [uid: string]: {\n layout: Array<EditFieldLayout[]>;\n settings: ComponentConfiguration['settings'] & {\n displayName?: string;\n icon?: string;\n };\n };\n };\n metadatas: {\n [K in keyof Metadatas]: Metadatas[K]['edit'];\n };\n options: LayoutOptions;\n settings: LayoutSettings;\n}\n\ntype UseDocumentLayout = (model: string) => {\n error?: BaseQueryError | SerializedError;\n isLoading: boolean;\n /**\n * This is the layout for the edit view,\n */\n edit: EditLayout;\n list: ListLayout;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocumentLayout\n * -----------------------------------------------------------------------------------------------*/\n\nconst DEFAULT_SETTINGS = {\n bulkable: false,\n filterable: false,\n searchable: false,\n pagination: false,\n defaultSortBy: '',\n defaultSortOrder: 'asc',\n mainField: 'id',\n pageSize: 10,\n};\n\n/**\n * @alpha\n * @description This hook is used to get the layouts for either the edit view or list view of a specific content-type\n * including the layouts for the components used in the content-type. It also runs the mutation hook waterfall so the data\n * is consistent wherever it is used. It's a light wrapper around the `useDocument` hook, but provides the `skip` option a document\n * is not fetched, however, it does fetch the schemas & components if they do not already exist in the cache.\n *\n * If the fetch fails, it will display a notification to the user.\n *\n * @example\n * ```tsx\n * const { model } = useParams<{ model: string }>();\n * const { edit: { schema: layout } } = useDocumentLayout(model);\n *\n * return layout.map(panel => panel.map(row => row.map(field => <Field.Root {...field} />)))\n * ```\n *\n */\nconst useDocumentLayout: UseDocumentLayout = (model) => {\n const { schema, components } = useDocument({ model, collectionType: '' }, { skip: true });\n const [{ query }] = useQueryParams();\n const runHookWaterfall = useStrapiApp('useDocumentLayout', (state) => state.runHookWaterfall);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { isLoading: isLoadingSchemas, schemas } = useContentTypeSchema();\n\n const {\n data,\n isLoading: isLoadingConfigs,\n error,\n isFetching: isFetchingConfigs,\n } = useGetContentTypeConfigurationQuery(model);\n\n const isLoading = isLoadingSchemas || isFetchingConfigs || isLoadingConfigs;\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const editLayout = React.useMemo(\n () =>\n data && !isLoading\n ? formatEditLayout(data, { schemas, schema, components })\n : ({\n layout: [],\n components: {},\n metadatas: {},\n options: {},\n settings: DEFAULT_SETTINGS,\n } as EditLayout),\n [data, isLoading, schemas, schema, components]\n );\n\n const listLayout = React.useMemo(() => {\n return data && !isLoading\n ? formatListLayout(data, { schemas, schema, components })\n : ({\n layout: [],\n metadatas: {},\n options: {},\n settings: DEFAULT_SETTINGS,\n } as ListLayout);\n }, [data, isLoading, schemas, schema, components]);\n\n const { layout: edit } = React.useMemo(\n () =>\n runHookWaterfall(HOOKS.MUTATE_EDIT_VIEW_LAYOUT, {\n layout: editLayout,\n query,\n }),\n [editLayout, query, runHookWaterfall]\n );\n\n return {\n error,\n isLoading,\n edit,\n list: listLayout,\n } satisfies ReturnType<UseDocumentLayout>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * useDocLayout\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal this hook uses the internal useDoc hook, as such it shouldn't be used outside of the\n * content-manager because it won't work as intended.\n */\nconst useDocLayout = () => {\n const { model } = useDoc();\n return useDocumentLayout(model);\n};\n\n/* -------------------------------------------------------------------------------------------------\n * formatEditLayout\n * -----------------------------------------------------------------------------------------------*/\ntype LayoutData = FindContentTypeConfiguration.Response['data'];\n\n/**\n * @internal\n * @description takes the configuration data, the schema & the components used in the schema and formats the edit view\n * versions of the schema & components. This is then used to render the edit view of the content-type.\n */\nconst formatEditLayout = (\n data: LayoutData,\n {\n schemas,\n schema,\n components,\n }: { schemas: Schema[]; schema?: Schema; components: ComponentsDictionary }\n): EditLayout => {\n let currentPanelIndex = 0;\n /**\n * The fields arranged by the panels, new panels are made for dynamic zones only.\n */\n const panelledEditAttributes = convertEditLayoutToFieldLayouts(\n data.contentType.layouts.edit,\n schema?.attributes,\n data.contentType.metadatas,\n { configurations: data.components, schemas: components },\n schemas\n ).reduce<Array<EditFieldLayout[][]>>((panels, row) => {\n if (row.some((field) => field.type === 'dynamiczone')) {\n panels.push([row]);\n currentPanelIndex += 2;\n } else {\n if (!panels[currentPanelIndex]) {\n panels.push([row]);\n } else {\n panels[currentPanelIndex].push(row);\n }\n }\n\n return panels;\n }, []);\n\n const componentEditAttributes = Object.entries(data.components).reduce<EditLayout['components']>(\n (acc, [uid, configuration]) => {\n acc[uid] = {\n layout: convertEditLayoutToFieldLayouts(\n configuration.layouts.edit,\n components[uid].attributes,\n configuration.metadatas,\n { configurations: data.components, schemas: components }\n ),\n settings: {\n ...configuration.settings,\n icon: components[uid].info.icon,\n displayName: components[uid].info.displayName,\n },\n };\n return acc;\n },\n {}\n );\n\n const editMetadatas = Object.entries(data.contentType.metadatas).reduce<EditLayout['metadatas']>(\n (acc, [attribute, metadata]) => {\n return {\n ...acc,\n [attribute]: metadata.edit,\n };\n },\n {}\n );\n\n return {\n layout: panelledEditAttributes,\n components: componentEditAttributes,\n metadatas: editMetadatas,\n settings: {\n ...data.contentType.settings,\n displayName: schema?.info.displayName,\n },\n options: {\n ...schema?.options,\n ...schema?.pluginOptions,\n ...data.contentType.options,\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * convertEditLayoutToFieldLayouts\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the edit layout from either a content-type or a component\n * and formats it into a generic object that can be used to correctly render\n * the form fields.\n */\nconst convertEditLayoutToFieldLayouts = (\n rows: LayoutData['contentType']['layouts']['edit'],\n attributes: Schema['attributes'] = {},\n metadatas: Metadatas,\n components?: {\n configurations: Record<string, ComponentConfiguration>;\n schemas: ComponentsDictionary;\n },\n schemas: Schema[] = []\n) => {\n return rows.map((row) =>\n row\n .map((field) => {\n const attribute = attributes[field.name];\n\n if (!attribute) {\n return null;\n }\n\n const { edit: metadata } = metadatas[field.name];\n\n const settings: Partial<Settings> =\n attribute.type === 'component' && components\n ? components.configurations[attribute.component].settings\n : {};\n\n return {\n attribute,\n disabled: !metadata.editable,\n hint: metadata.description,\n label: metadata.label ?? '',\n name: field.name,\n // @ts-expect-error – mainField does exist on the metadata for a relation.\n mainField: getMainField(attribute, metadata.mainField || settings.mainField, {\n schemas,\n components: components?.schemas ?? {},\n }),\n placeholder: metadata.placeholder ?? '',\n required: attribute.required ?? false,\n size: field.size,\n unique: 'unique' in attribute ? attribute.unique : false,\n visible: metadata.visible ?? true,\n type: attribute.type,\n };\n })\n .filter((field) => field !== null)\n ) as EditFieldLayout[][];\n};\n\n/* -------------------------------------------------------------------------------------------------\n * formatListLayout\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the complete configuration data, the schema & the components used in the schema and\n * formats a list view layout for the content-type. This is much simpler than the edit view layout as there\n * are less options to consider.\n */\nconst formatListLayout = (\n data: LayoutData,\n {\n schemas,\n schema,\n components,\n }: { schemas: Schema[]; schema?: Schema; components: ComponentsDictionary }\n): ListLayout => {\n const listMetadatas = Object.entries(data.contentType.metadatas).reduce<ListLayout['metadatas']>(\n (acc, [attribute, metadata]) => {\n return {\n ...acc,\n [attribute]: metadata.list,\n };\n },\n {}\n );\n /**\n * The fields arranged by the panels, new panels are made for dynamic zones only.\n */\n const listAttributes = convertListLayoutToFieldLayouts(\n data.contentType.layouts.list,\n schema?.attributes,\n listMetadatas,\n { configurations: data.components, schemas: components },\n schemas\n );\n\n return {\n layout: listAttributes,\n settings: { ...data.contentType.settings, displayName: schema?.info.displayName },\n metadatas: listMetadatas,\n options: {\n ...schema?.options,\n ...schema?.pluginOptions,\n ...data.contentType.options,\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * convertListLayoutToFieldLayouts\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description takes the columns from the list view configuration and formats them into a generic object\n * combinining metadata and attribute data.\n *\n * @note We do use this to reformat the list of strings when updating the displayed headers for the list view.\n */\nconst convertListLayoutToFieldLayouts = (\n columns: LayoutData['contentType']['layouts']['list'],\n attributes: Schema['attributes'] = {},\n metadatas: ListLayout['metadatas'],\n components?: {\n configurations: Record<string, ComponentConfiguration>;\n schemas: ComponentsDictionary;\n },\n schemas: Schema[] = []\n) => {\n return columns\n .map((name) => {\n const attribute = attributes[name];\n\n if (!attribute) {\n return null;\n }\n\n const metadata = metadatas[name];\n\n const settings: Partial<Settings> =\n attribute.type === 'component' && components\n ? components.configurations[attribute.component].settings\n : {};\n\n return {\n attribute,\n label: metadata.label ?? '',\n mainField: getMainField(attribute, metadata.mainField || settings.mainField, {\n schemas,\n components: components?.schemas ?? {},\n }),\n name: name,\n searchable: metadata.searchable ?? true,\n sortable: metadata.sortable ?? true,\n } satisfies ListFieldLayout;\n })\n .filter((field) => field !== null) as ListFieldLayout[];\n};\n\nexport {\n useDocLayout,\n useDocumentLayout,\n convertListLayoutToFieldLayouts,\n convertEditLayoutToFieldLayouts,\n DEFAULT_SETTINGS,\n};\nexport type { EditLayout, EditFieldLayout, ListLayout, ListFieldLayout, UseDocumentLayout };\n"],"names":["DEFAULT_SETTINGS","bulkable","filterable","searchable","pagination","defaultSortBy","defaultSortOrder","mainField","pageSize","useDocumentLayout","model","schema","components","useDocument","collectionType","skip","query","useQueryParams","runHookWaterfall","useStrapiApp","state","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isLoading","isLoadingSchemas","schemas","useContentTypeSchema","data","isLoadingConfigs","error","isFetching","isFetchingConfigs","useGetContentTypeConfigurationQuery","React","useEffect","type","message","editLayout","useMemo","formatEditLayout","layout","metadatas","options","settings","listLayout","formatListLayout","edit","HOOKS","MUTATE_EDIT_VIEW_LAYOUT","list","useDocLayout","useDoc","currentPanelIndex","panelledEditAttributes","convertEditLayoutToFieldLayouts","contentType","layouts","attributes","configurations","reduce","panels","row","some","field","push","componentEditAttributes","Object","entries","acc","uid","configuration","icon","info","displayName","editMetadatas","attribute","metadata","pluginOptions","rows","map","name","component","disabled","editable","hint","description","label","getMainField","placeholder","required","size","unique","visible","filter","listMetadatas","listAttributes","convertListLayoutToFieldLayouts","columns","sortable"],"mappings":"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"} |