@strapi/content-manager 5.39.0 → 5.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/hooks/useDocument.js +21 -5
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs +22 -6
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +1 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +3 -2
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +4 -4
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +71 -44
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +54 -46
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +107 -88
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +109 -90
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +91 -106
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +94 -109
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +43 -23
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +45 -25
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +30 -19
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +34 -23
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +23 -3
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +4 -3
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +59 -9
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +63 -13
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +19 -7
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +20 -8
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +47 -0
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +50 -3
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +15 -19
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +15 -20
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/Repeatable.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +3 -3
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +3 -0
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +3 -0
- package/dist/admin/translations/en.json.js +3 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +3 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +25 -28
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +20 -23
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +2 -1
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +2 -1
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/services/document-manager.js +10 -9
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +10 -9
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +84 -41
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +85 -42
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/populate-builder.js +11 -0
- package/dist/server/services/populate-builder.js.map +1 -1
- package/dist/server/services/populate-builder.mjs +12 -1
- package/dist/server/services/populate-builder.mjs.map +1 -1
- package/dist/server/services/utils/configuration/attributes.js +2 -1
- package/dist/server/services/utils/configuration/attributes.js.map +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs +2 -1
- package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
- package/dist/server/services/utils/draft.js +8 -1
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs +8 -1
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +73 -8
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +73 -9
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/single-types.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +2 -2
- package/dist/server/src/index.d.ts +18 -3
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts +9 -3
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +8 -0
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +18 -3
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/populate-builder.d.ts +7 -0
- package/dist/server/src/services/populate-builder.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/attributes.d.ts.map +1 -1
- package/dist/server/src/services/utils/draft.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts +21 -17
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputRenderer.mjs","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n createRulesEngine,\n type JsonLogicCondition,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { type UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\nimport { useHasInputPopoverParent } from '../../../preview/components/InputPopover';\nimport { usePreviewInputManager } from '../../../preview/hooks/usePreviewInputManager';\nimport {\n getConditionDependencyPaths,\n getConditionDependencySubscriptionValue,\n} from '../../../utils/conditionalFields';\nimport { getDirectParent } from '../utils/data';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst BaseInputRenderer = ({\n visible,\n hint: providedHint,\n document,\n ...inputProps\n}: InputRendererProps) => {\n const localeKey = document?.document?.locale || 'default';\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n const isInPreviewPopover = useHasInputPopoverParent();\n const shouldIgnorePermissions = isInDynamicZone || isInPreviewPopover;\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n // Everything preview related\n const previewProps = usePreviewInputManager(inputProps.name, inputProps.attribute);\n const props = { ...inputProps, ...previewProps };\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !shouldIgnorePermissions) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !shouldIgnorePermissions) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n {...field}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return (\n <BlocksInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'component':\n return (\n <ComponentInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(componentInputProps) => (\n <MemoizedInputRenderer\n key={`input-${componentInputProps.name}-${localeKey}`}\n {...componentInputProps}\n />\n )}\n </ComponentInput>\n );\n case 'dynamiczone':\n return (\n <DynamicZone\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'relation':\n return (\n <RelationsInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n // These props are not needed for the generic form input renderer.\n const { unique: _uniqueUID, ...restUIDProps } = props;\n return (\n <UIDInput\n key={`input-${props.name}-${localeKey}`}\n {...restUIDProps}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...restProps}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\n// Reuse one rules engine instance instead of recreating it for every field render.\nconst rulesEngine = createRulesEngine();\n\n/**\n * A wrapper around BaseInputRenderer that conditionally renders it depending on the attribute's condition.\n */\nconst ConditionAwareInputRenderer = ({\n condition,\n ...props\n}: InputRendererProps & { condition: JsonLogicCondition }) => {\n // Extract only the field paths the visibility rule depends on so unrelated form changes\n // do not force this conditional field to re-render.\n const conditionDependencyPaths = React.useMemo(\n () => getConditionDependencyPaths(condition),\n [condition]\n );\n const getValues = useForm(\n 'ConditionalInputRenderer',\n (state) => (state as typeof state & { getValues: () => unknown }).getValues\n );\n const conditionSubscriptionValue = useForm('ConditionalInputRenderer', (state) => {\n // Subscribe to a small, comparable snapshot of the parent scope instead of all form values.\n return getConditionDependencySubscriptionValue(\n getDirectParent(state.values, props.name),\n conditionDependencyPaths\n );\n });\n\n // When dependencies are known, read the latest parent scope lazily via getValues() so the\n // rule still evaluates against fresh data without subscribing to every form change.\n const targetValues =\n conditionDependencyPaths === null\n ? conditionSubscriptionValue\n : getDirectParent(getValues(), props.name);\n\n const isVisible = rulesEngine.evaluate(condition, targetValues);\n\n if (!isVisible) {\n return null;\n }\n\n return <BaseInputRenderer {...props} />;\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = ['string', 'uid', 'richtext', 'email', 'password', 'text'].includes(attribute.type)\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\n/**\n * Conditionally routes the exported InputRender component towards ConditionalInputRenderer\n * (when there's a JSON logic condition on the attribute, or BaseInputRenderer otherwise.\n * We do this because rendering a conditional field requires access to the values of\n * other form fields, which causes many re-renders and performance issues on complex content\n * types. By splitting the component into two, we isolate the performance issue to\n * conditional fields only, not all edit view fields.\n */\nconst MemoizedInputRenderer = React.memo((props: InputRendererProps) => {\n const condition = props.attribute.conditions?.visible;\n if (condition) {\n return <ConditionAwareInputRenderer {...props} condition={condition} />;\n }\n\n return <BaseInputRenderer {...props} />;\n});\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["BaseInputRenderer","visible","hint","providedHint","document","inputProps","localeKey","locale","currentDocumentMeta","useDocumentContext","edit","components","useDocumentLayout","model","collectionType","schema","kind","isInDynamicZone","useDynamicZone","state","isInPreviewPopover","useHasInputPopoverParent","shouldIgnorePermissions","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","previewProps","usePreviewInputManager","name","attribute","props","canUserReadField","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","componentInputProps","MemoizedInputRenderer","DynamicZone","RelationsInput","Wysiwyg","unique","_uniqueUID","restUIDProps","UIDInput","options","enum","map","value","_unique","mainField","_mainField","restProps","rulesEngine","createRulesEngine","ConditionAwareInputRenderer","condition","conditionDependencyPaths","React","useMemo","getConditionDependencyPaths","getValues","conditionSubscriptionValue","getConditionDependencySubscriptionValue","getDirectParent","values","targetValues","isVisible","evaluate","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","memo","conditions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputRenderer.mjs","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n createRulesEngine,\n type JsonLogicCondition,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { type UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\nimport { useHasInputPopoverParent } from '../../../preview/components/InputPopover';\nimport { usePreviewInputManager } from '../../../preview/hooks/usePreviewInputManager';\nimport {\n getConditionDependencyPaths,\n getConditionDependencySubscriptionValue,\n} from '../../../utils/conditionalFields';\nimport { getDirectParent } from '../utils/data';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document?: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst BaseInputRenderer = ({\n visible,\n hint: providedHint,\n document: providedDocument,\n ...inputProps\n}: InputRendererProps) => {\n const { currentDocument, currentDocumentMeta } = useDocumentContext('DynamicComponent');\n // Most edit-view fields can read the document from context, which avoids threading a\n // frequently-changing `document` prop through nested component/DZ trees and reduces churn.\n // Keep `providedDocument` as an explicit override for callers outside that default flow.\n const document = providedDocument ?? currentDocument;\n const localeKey = document?.document?.locale || 'default';\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n const isInPreviewPopover = useHasInputPopoverParent();\n const shouldIgnorePermissions = isInDynamicZone || isInPreviewPopover;\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n // Everything preview related\n const previewProps = usePreviewInputManager(inputProps.name, inputProps.attribute);\n const props = { ...inputProps, ...previewProps };\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const renderComponentInput = React.useCallback(\n (componentInputProps: InputRendererProps) => (\n <MemoizedInputRenderer\n key={`input-${componentInputProps.name}-${localeKey}`}\n {...componentInputProps}\n />\n ),\n [localeKey]\n );\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !shouldIgnorePermissions) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !shouldIgnorePermissions) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n {...field}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return (\n <BlocksInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'component':\n // Preview focus/blur handlers are not used for data-structure roots (component/dynamic zone).\n // Dropping them avoids unstable function props cascading through memoized component trees.\n const { onBlur: _onComponentBlur, onFocus: _onComponentFocus, ...componentProps } = props;\n\n return (\n <ComponentInput\n key={`input-${props.name}-${localeKey}`}\n {...componentProps}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {renderComponentInput}\n </ComponentInput>\n );\n case 'dynamiczone':\n // Same rationale as `component` above: keep data-structure root props stable.\n const { onBlur: _onDzBlur, onFocus: _onDzFocus, ...dynamicZoneProps } = props;\n\n return (\n <DynamicZone\n key={`input-${props.name}-${localeKey}`}\n {...dynamicZoneProps}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'relation':\n return (\n <RelationsInput\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n key={`input-${props.name}-${localeKey}`}\n {...props}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n // These props are not needed for the generic form input renderer.\n const { unique: _uniqueUID, ...restUIDProps } = props;\n return (\n <UIDInput\n key={`input-${props.name}-${localeKey}`}\n {...restUIDProps}\n hint={hint}\n type={props.type}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...props}\n {...previewProps}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n key={`input-${props.name}-${localeKey}`}\n {...restProps}\n {...previewProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\n// Reuse one rules engine instance instead of recreating it for every field render.\nconst rulesEngine = createRulesEngine();\n\n/**\n * A wrapper around BaseInputRenderer that conditionally renders it depending on the attribute's condition.\n */\nconst ConditionAwareInputRenderer = ({\n condition,\n ...props\n}: InputRendererProps & { condition: JsonLogicCondition }) => {\n // Extract only the field paths the visibility rule depends on so unrelated form changes\n // do not force this conditional field to re-render.\n const conditionDependencyPaths = React.useMemo(\n () => getConditionDependencyPaths(condition),\n [condition]\n );\n const getValues = useForm(\n 'ConditionalInputRenderer',\n (state) => (state as typeof state & { getValues: () => unknown }).getValues\n );\n const conditionSubscriptionValue = useForm('ConditionalInputRenderer', (state) => {\n // Subscribe to a small, comparable snapshot of the parent scope instead of all form values.\n return getConditionDependencySubscriptionValue(\n getDirectParent(state.values, props.name),\n conditionDependencyPaths\n );\n });\n\n // When dependencies are known, read the latest parent scope lazily via getValues() so the\n // rule still evaluates against fresh data without subscribing to every form change.\n const targetValues =\n conditionDependencyPaths === null\n ? conditionSubscriptionValue\n : getDirectParent(getValues(), props.name);\n\n const isVisible = rulesEngine.evaluate(condition, targetValues);\n\n if (!isVisible) {\n return null;\n }\n\n return <BaseInputRenderer {...props} />;\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = ['string', 'uid', 'richtext', 'email', 'password', 'text'].includes(attribute.type)\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\n/**\n * Conditionally routes the exported InputRender component towards ConditionalInputRenderer\n * (when there's a JSON logic condition on the attribute, or BaseInputRenderer otherwise.\n * We do this because rendering a conditional field requires access to the values of\n * other form fields, which causes many re-renders and performance issues on complex content\n * types. By splitting the component into two, we isolate the performance issue to\n * conditional fields only, not all edit view fields.\n */\nconst MemoizedInputRenderer = React.memo((props: InputRendererProps) => {\n const condition = props.attribute.conditions?.visible;\n if (condition) {\n return <ConditionAwareInputRenderer {...props} condition={condition} />;\n }\n\n return <BaseInputRenderer {...props} />;\n});\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["BaseInputRenderer","visible","hint","providedHint","document","providedDocument","inputProps","currentDocument","currentDocumentMeta","useDocumentContext","localeKey","locale","edit","components","useDocumentLayout","model","collectionType","schema","kind","isInDynamicZone","useDynamicZone","state","isInPreviewPopover","useHasInputPopoverParent","shouldIgnorePermissions","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","previewProps","usePreviewInputManager","name","attribute","props","canUserReadField","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","renderComponentInput","React","useCallback","componentInputProps","_jsx","MemoizedInputRenderer","field","useField","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","onBlur","_onComponentBlur","onFocus","_onComponentFocus","componentProps","ComponentInput","layout","component","_onDzBlur","_onDzFocus","dynamicZoneProps","DynamicZone","RelationsInput","Wysiwyg","unique","_uniqueUID","restUIDProps","UIDInput","options","enum","map","value","_unique","mainField","_mainField","restProps","rulesEngine","createRulesEngine","ConditionAwareInputRenderer","condition","conditionDependencyPaths","useMemo","getConditionDependencyPaths","getValues","conditionSubscriptionValue","getConditionDependencySubscriptionValue","getDirectParent","values","targetValues","isVisible","evaluate","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","memo","conditions"],"mappings":"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"}
|
|
@@ -59,9 +59,28 @@ const ListViewPage = ()=>{
|
|
|
59
59
|
const navigate = reactRouterDom.useNavigate();
|
|
60
60
|
const { formatMessage } = reactIntl.useIntl();
|
|
61
61
|
const { toggleNotification } = strapiAdmin.useNotification();
|
|
62
|
+
const { copy } = strapiAdmin.useClipboard();
|
|
62
63
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler(translations.getTranslation);
|
|
63
64
|
const isMobile = strapiAdmin.useIsMobile();
|
|
64
65
|
strapiAdmin.useIsDesktop();
|
|
66
|
+
const handleCopyDocumentId = React__namespace.useCallback(async (e, documentId)=>{
|
|
67
|
+
e.stopPropagation();
|
|
68
|
+
if (!documentId) return;
|
|
69
|
+
const didCopy = await copy(documentId);
|
|
70
|
+
if (didCopy) {
|
|
71
|
+
toggleNotification({
|
|
72
|
+
type: 'success',
|
|
73
|
+
message: formatMessage({
|
|
74
|
+
id: 'content-manager.actions.copy-documentId.success',
|
|
75
|
+
defaultMessage: 'Document ID copied to clipboard'
|
|
76
|
+
})
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}, [
|
|
80
|
+
copy,
|
|
81
|
+
formatMessage,
|
|
82
|
+
toggleNotification
|
|
83
|
+
]);
|
|
65
84
|
usePersistentQueryParams.usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', [
|
|
66
85
|
'sort',
|
|
67
86
|
'filters',
|
|
@@ -387,6 +406,34 @@ const ListViewPage = ()=>{
|
|
|
387
406
|
})
|
|
388
407
|
}, header.name);
|
|
389
408
|
}
|
|
409
|
+
if (header.name === 'documentId') {
|
|
410
|
+
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
|
|
411
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
412
|
+
gap: 2,
|
|
413
|
+
alignItems: "center",
|
|
414
|
+
width: "100%",
|
|
415
|
+
minWidth: 0,
|
|
416
|
+
children: [
|
|
417
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
418
|
+
textColor: "neutral800",
|
|
419
|
+
maxWidth: "30rem",
|
|
420
|
+
ellipsis: true,
|
|
421
|
+
children: row.documentId || '-'
|
|
422
|
+
}),
|
|
423
|
+
row.documentId && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
424
|
+
variant: "ghost",
|
|
425
|
+
size: "S",
|
|
426
|
+
label: formatMessage({
|
|
427
|
+
id: 'content-manager.actions.copy-documentId.label',
|
|
428
|
+
defaultMessage: 'Copy'
|
|
429
|
+
}),
|
|
430
|
+
onClick: (e)=>handleCopyDocumentId(e, row.documentId),
|
|
431
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Duplicate, {})
|
|
432
|
+
})
|
|
433
|
+
]
|
|
434
|
+
})
|
|
435
|
+
}, header.name);
|
|
436
|
+
}
|
|
390
437
|
if (typeof cellFormatter === 'function') {
|
|
391
438
|
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
|
|
392
439
|
children: cellFormatter(row, header, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListViewPage.js","sources":["../../../../admin/src/pages/ListView/ListViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n SearchInput,\n Table,\n BackButton,\n useNotification,\n useStrapiApp,\n useTracking,\n useAPIErrorHandler,\n useQueryParams,\n useScopedPersistentState,\n useRBAC,\n Layouts,\n useTable,\n useIsMobile,\n useIsDesktop,\n tours,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Typography,\n ButtonProps,\n Box,\n EmptyStateLayout,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, Link as ReactRouterLink, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { HOOKS } from '../../constants/hooks';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport {\n ListFieldLayout,\n convertListLayoutToFieldLayouts,\n useDocumentLayout,\n} from '../../hooks/useDocumentLayout';\nimport { usePersistentPartialQueryParams } from '../../hooks/usePersistentQueryParams';\nimport { usePrev } from '../../hooks/usePrev';\nimport { useGetAllDocumentsQuery } from '../../services/documents';\nimport { buildValidParams } from '../../utils/api';\nimport { getTranslation } from '../../utils/translations';\nimport { getDisplayName } from '../../utils/users';\nimport { DocumentStatus } from '../EditView/components/DocumentStatus';\n\nimport { BulkActionsRenderer } from './components/BulkActions/Actions';\nimport { listViewFilters as Filters } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\n\nimport type { Modules } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\n`;\n\nconst ListViewPage = () => {\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const isMobile = useIsMobile();\n const isDesktop = useIsDesktop();\n\n usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', ['sort', 'filters', 'pageSize']);\n usePersistentPartialQueryParams('STRAPI_LOCALE', ['plugins.i18n.locale'], false);\n\n const { collectionType, model, schema } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const [displayedHeaderNames, setDisplayedHeaderNames] = useScopedPersistentState<string[] | null>(\n `STRAPI_LIST_VIEW_DISPLAYED_HEADERS:${model}`,\n null\n );\n\n const mapDisplayedHeaders = (headers: ListFieldLayout[]) => headers.map((header) => header.name);\n\n const displayedHeaders: ListFieldLayout[] = React.useMemo(() => {\n if (\n !displayedHeaderNames ||\n !list.metadatas ||\n Object.keys(list.metadatas).length <= 0 ||\n !schema?.attributes\n )\n return [];\n\n return convertListLayoutToFieldLayouts(displayedHeaderNames, schema.attributes, list.metadatas);\n }, [displayedHeaderNames, schema, list]);\n\n const handleSetHeaders = (headers: string[]) => {\n setDisplayedHeaderNames(headers);\n };\n\n const handleResetHeaders = () => {\n setDisplayedHeaderNames(mapDisplayedHeaders(list.layout));\n };\n\n /**\n * If the persistent displayedHeaders are not yet initialized, set them to list.layout\n */\n React.useEffect(() => {\n // wait for list.layout to be loaded\n if (list.layout.length === 0) {\n return;\n }\n\n if (!displayedHeaderNames) {\n handleResetHeaders();\n }\n }, [list.layout]);\n\n React.useEffect(() => {\n if (!schema?.attributes) return;\n if (!displayedHeaderNames || displayedHeaderNames.length === 0) return;\n if (schema.uid !== model) return;\n\n const allowedDisplayHeaders = displayedHeaderNames.filter((header) =>\n Object.keys(schema?.attributes).includes(header)\n );\n\n if (allowedDisplayHeaders.length !== displayedHeaderNames.length) {\n handleSetHeaders(allowedDisplayHeaders);\n }\n }, [displayedHeaderNames]);\n\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n }>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: list.settings.defaultSortBy\n ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}`\n : '',\n });\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const hasAppliedFilters = Boolean((query as any)?.filters?.$and?.length);\n\n const { data, error, isLoading, isFetching } = useGetAllDocumentsQuery({\n model,\n params,\n });\n\n /**\n * If the API returns an error, display a notification\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 { results = [], pagination } = data ?? {};\n\n React.useEffect(() => {\n if (pagination && pagination.pageCount > 0 && pagination.page > pagination.pageCount) {\n navigate(\n {\n search: stringify({\n ...query,\n page: pagination.pageCount,\n }),\n },\n { replace: true }\n );\n }\n }, [pagination, formatMessage, query, navigate]);\n\n const { canCreate } = useDocumentRBAC('ListViewPage', ({ canCreate }) => ({\n canCreate,\n }));\n\n const runHookWaterfall = useStrapiApp('ListViewPage', ({ runHookWaterfall }) => runHookWaterfall);\n /**\n * Run the waterfall and then inject our additional table headers.\n */\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout: list,\n });\n\n const formattedHeaders = headers.displayedHeaders.map<ListFieldLayout>((header) => {\n /**\n * When the header label is a string, it is an attribute on the current content-type:\n * Use the attribute name value to compute the translation.\n * Otherwise, it should be a translation object coming from a plugin that injects into the table (ie i18n, content-releases, review-workflows):\n * Use the translation object as is.\n */\n const translation =\n typeof header.label === 'string'\n ? {\n id: `content-manager.content-types.${model}.${header.name}`,\n defaultMessage: header.label,\n }\n : header.label;\n\n return {\n ...header,\n label: formatMessage(translation),\n name: `${header.name}${header.mainField?.name ? `.${header.mainField.name}` : ''}`,\n };\n });\n\n if (schema?.options?.draftAndPublish) {\n formattedHeaders.push({\n attribute: {\n type: 'custom',\n },\n name: 'status',\n label: formatMessage({\n id: getTranslation(`containers.list.table-headers.status`),\n defaultMessage: 'status',\n }),\n searchable: false,\n sortable: false,\n } satisfies ListFieldLayout);\n }\n\n return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n const contentTypeTitle = schema?.info.displayName\n ? formatMessage({ id: schema.info.displayName, defaultMessage: schema.info.displayName })\n : formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n\n const handleRowClick = (id: Modules.Documents.ID) => () => {\n trackUsage('willEditEntryFromList');\n navigate({\n pathname: id.toString(),\n search: stringify({ plugins: query.plugins }),\n });\n };\n\n const isEmptyState = !isFetching && results.length === 0;\n\n const endActions = (\n <>\n {isMobile && list.settings.filterable && schema && <Filters.Trigger />}\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={handleResetHeaders}\n headers={displayedHeaderNames ?? []}\n />\n </>\n );\n\n const searchInput = (\n <>\n {list.settings.searchable && (\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: contentTypeTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n </>\n );\n\n const startActions = (\n <>\n {searchInput}\n {!isMobile && list.settings.filterable && schema && (\n <>\n <Filters.Trigger />\n <Filters.List />\n </>\n )}\n </>\n );\n\n const actions =\n list.settings.filterable && schema ? (\n <Filters.Root schema={schema}>\n <Layouts.Action\n endActions={endActions}\n startActions={startActions}\n bottomActions={isMobile && hasAppliedFilters ? <Filters.List /> : null}\n />\n <Filters.Popover />\n </Filters.Root>\n ) : (\n <Layouts.Action endActions={endActions} startActions={startActions} />\n );\n\n return (\n <>\n <tours.contentManager.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentManager.Introduction>\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={\n canCreate ? (\n <tours.contentManager.CreateNewEntry>\n <CreateButton />\n </tours.contentManager.CreateNewEntry>\n ) : null\n }\n subtitle={formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: pagination?.total }\n )}\n title={contentTypeTitle}\n navigationAction={<BackButton />}\n />\n {actions}\n <Layouts.Content>\n {isEmptyState ? (\n <Box background=\"neutral0\" shadow=\"filterShadow\" hasRadius>\n <EmptyStateLayout\n action={\n canCreate && (\n <Box>\n <CreateButton variant=\"secondary\" />\n </Box>\n )\n }\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Box>\n ) : (\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <Table.Root rows={results} headers={tableHeaders} isLoading={isFetching}>\n <TableActionsBar />\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {tableHeaders.map((header: ListFieldLayout) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Empty action={canCreate ? <CreateButton variant=\"secondary\" /> : null} />\n <Table.Body>\n {results.map((row) => {\n return (\n <Table.Row\n cursor=\"pointer\"\n key={row.id}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\n if (header.name === 'status') {\n const { status } = row;\n\n return (\n <Table.Cell key={header.name}>\n <DocumentStatus status={status} maxWidth={'min-content'} />\n </Table.Cell>\n );\n }\n if (['createdBy', 'updatedBy'].includes(header.name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Table.Cell key={header.name}>\n <Typography textColor=\"neutral800\">\n {row[header.name.split('.')[0]]\n ? getDisplayName(row[header.name.split('.')[0]])\n : '-'}\n </Typography>\n </Table.Cell>\n );\n }\n if (typeof cellFormatter === 'function') {\n return (\n <Table.Cell key={header.name}>\n {/* @ts-expect-error – TODO: fix this TS error */}\n {cellFormatter(row, header, { collectionType, model })}\n </Table.Cell>\n );\n }\n return (\n <Table.Cell key={header.name}>\n <CellContent\n content={row[header.name.split('.')[0]]}\n rowId={row.documentId}\n {...header}\n />\n </Table.Cell>\n );\n })}\n {/* we stop propagation here to allow the menu to trigger it's events without triggering the row redirect */}\n <ActionsCell onClick={(e) => e.stopPropagation()}>\n <TableActions document={row} />\n </ActionsCell>\n </Table.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root\n {...pagination}\n onPageSizeChange={() => trackUsage('willChangeNumberOfEntriesPerPage')}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n )}\n </Layouts.Content>\n </Page.Main>\n </>\n );\n};\n\nconst ActionsCell = styled(Table.Cell)`\n display: flex;\n justify-content: flex-end;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionsBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst TableActionsBar = () => {\n const selectRow = useTable('TableActionsBar', (state) => state.selectRow);\n const [{ query }] = useQueryParams<{ plugins: { i18n: { locale: string } } }>();\n const locale = query?.plugins?.i18n?.locale;\n const prevLocale = usePrev(locale);\n\n // TODO: find a better way to reset the selected rows when the locale changes across all the app\n React.useEffect(() => {\n if (prevLocale !== locale) {\n selectRow([]);\n }\n }, [selectRow, prevLocale, locale]);\n\n return (\n <Table.ActionBar>\n <BulkActionsRenderer />\n </Table.ActionBar>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CreateButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CreateButtonProps extends Pick<ButtonProps, 'variant'> {}\n\nconst CreateButton = ({ variant }: CreateButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }] = useQueryParams<{ plugins: object }>();\n\n return (\n <Button\n variant={variant}\n tag={ReactRouterLink}\n onClick={() => {\n trackUsage('willCreateEntry', { status: 'draft' });\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n to={{\n pathname: 'create',\n search: stringify({ plugins: query.plugins }),\n }}\n minWidth=\"max-content\"\n fullWidth\n >\n {formatMessage({\n id: getTranslation('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <ListViewPage key={slug} />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { ListViewPage, ProtectedListViewPage };\n"],"names":["INJECT_COLUMN_IN_TABLE","HOOKS","LayoutsHeaderCustom","styled","Layouts","Header","ListViewPage","trackUsage","useTracking","navigate","useNavigate","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","isMobile","useIsMobile","useIsDesktop","usePersistentPartialQueryParams","collectionType","model","schema","useDoc","list","useDocumentLayout","displayedHeaderNames","setDisplayedHeaderNames","useScopedPersistentState","mapDisplayedHeaders","headers","map","header","name","displayedHeaders","React","useMemo","metadatas","Object","keys","length","attributes","convertListLayoutToFieldLayouts","handleSetHeaders","handleResetHeaders","layout","useEffect","uid","allowedDisplayHeaders","filter","includes","query","useQueryParams","page","pageSize","settings","toString","sort","defaultSortBy","defaultSortOrder","params","buildValidParams","hasAppliedFilters","Boolean","filters","$and","data","error","isLoading","isFetching","useGetAllDocumentsQuery","type","message","results","pagination","pageCount","search","stringify","replace","canCreate","useDocumentRBAC","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","translation","label","id","defaultMessage","mainField","options","draftAndPublish","push","attribute","searchable","sortable","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","isEmptyState","endActions","_jsxs","_Fragment","filterable","Filters","Trigger","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","searchInput","SearchInput","target","placeholder","trackedEvent","startActions","List","actions","Root","Action","bottomActions","Popover","tours","contentManager","Introduction","Box","Main","Title","primaryAction","CreateNewEntry","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Content","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","Flex","gap","direction","alignItems","Table","rows","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Body","row","Row","cursor","onClick","documentId","CheckboxCell","cellFormatter","status","Cell","DocumentStatus","maxWidth","split","Typography","textColor","getDisplayName","CellContent","rowId","ActionsCell","e","stopPropagation","TableActions","document","Pagination","onPageSizeChange","PageSize","Links","selectRow","useTable","state","locale","i18n","prevLocale","usePrev","ActionBar","BulkActionsRenderer","Button","tag","ReactRouterLink","startIcon","Plus","style","textDecoration","to","minWidth","fullWidth","ProtectedListViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","subject","Protect","DocumentRBAC"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListViewPage.js","sources":["../../../../admin/src/pages/ListView/ListViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n SearchInput,\n Table,\n BackButton,\n useNotification,\n useStrapiApp,\n useTracking,\n useAPIErrorHandler,\n useQueryParams,\n useScopedPersistentState,\n useRBAC,\n Layouts,\n useTable,\n useIsMobile,\n useIsDesktop,\n useClipboard,\n tours,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Typography,\n ButtonProps,\n Box,\n EmptyStateLayout,\n IconButton,\n} from '@strapi/design-system';\nimport { Duplicate, Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, Link as ReactRouterLink, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { HOOKS } from '../../constants/hooks';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport {\n ListFieldLayout,\n convertListLayoutToFieldLayouts,\n useDocumentLayout,\n} from '../../hooks/useDocumentLayout';\nimport { usePersistentPartialQueryParams } from '../../hooks/usePersistentQueryParams';\nimport { usePrev } from '../../hooks/usePrev';\nimport { useGetAllDocumentsQuery } from '../../services/documents';\nimport { buildValidParams } from '../../utils/api';\nimport { getTranslation } from '../../utils/translations';\nimport { getDisplayName } from '../../utils/users';\nimport { DocumentStatus } from '../EditView/components/DocumentStatus';\n\nimport { BulkActionsRenderer } from './components/BulkActions/Actions';\nimport { listViewFilters as Filters } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\n\nimport type { Modules } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\n`;\n\nconst ListViewPage = () => {\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const isMobile = useIsMobile();\n const isDesktop = useIsDesktop();\n\n const handleCopyDocumentId = React.useCallback(\n async (e: React.MouseEvent, documentId: string | undefined) => {\n e.stopPropagation();\n if (!documentId) return;\n const didCopy = await copy(documentId);\n if (didCopy) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.actions.copy-documentId.success',\n defaultMessage: 'Document ID copied to clipboard',\n }),\n });\n }\n },\n [copy, formatMessage, toggleNotification]\n );\n\n usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', ['sort', 'filters', 'pageSize']);\n usePersistentPartialQueryParams('STRAPI_LOCALE', ['plugins.i18n.locale'], false);\n\n const { collectionType, model, schema } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const [displayedHeaderNames, setDisplayedHeaderNames] = useScopedPersistentState<string[] | null>(\n `STRAPI_LIST_VIEW_DISPLAYED_HEADERS:${model}`,\n null\n );\n\n const mapDisplayedHeaders = (headers: ListFieldLayout[]) => headers.map((header) => header.name);\n\n const displayedHeaders: ListFieldLayout[] = React.useMemo(() => {\n if (\n !displayedHeaderNames ||\n !list.metadatas ||\n Object.keys(list.metadatas).length <= 0 ||\n !schema?.attributes\n )\n return [];\n\n return convertListLayoutToFieldLayouts(displayedHeaderNames, schema.attributes, list.metadatas);\n }, [displayedHeaderNames, schema, list]);\n\n const handleSetHeaders = (headers: string[]) => {\n setDisplayedHeaderNames(headers);\n };\n\n const handleResetHeaders = () => {\n setDisplayedHeaderNames(mapDisplayedHeaders(list.layout));\n };\n\n /**\n * If the persistent displayedHeaders are not yet initialized, set them to list.layout\n */\n React.useEffect(() => {\n // wait for list.layout to be loaded\n if (list.layout.length === 0) {\n return;\n }\n\n if (!displayedHeaderNames) {\n handleResetHeaders();\n }\n }, [list.layout]);\n\n React.useEffect(() => {\n if (!schema?.attributes) return;\n if (!displayedHeaderNames || displayedHeaderNames.length === 0) return;\n if (schema.uid !== model) return;\n\n const allowedDisplayHeaders = displayedHeaderNames.filter((header) =>\n Object.keys(schema?.attributes).includes(header)\n );\n\n if (allowedDisplayHeaders.length !== displayedHeaderNames.length) {\n handleSetHeaders(allowedDisplayHeaders);\n }\n }, [displayedHeaderNames]);\n\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n }>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: list.settings.defaultSortBy\n ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}`\n : '',\n });\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const hasAppliedFilters = Boolean((query as any)?.filters?.$and?.length);\n\n const { data, error, isLoading, isFetching } = useGetAllDocumentsQuery({\n model,\n params,\n });\n\n /**\n * If the API returns an error, display a notification\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 { results = [], pagination } = data ?? {};\n\n React.useEffect(() => {\n if (pagination && pagination.pageCount > 0 && pagination.page > pagination.pageCount) {\n navigate(\n {\n search: stringify({\n ...query,\n page: pagination.pageCount,\n }),\n },\n { replace: true }\n );\n }\n }, [pagination, formatMessage, query, navigate]);\n\n const { canCreate } = useDocumentRBAC('ListViewPage', ({ canCreate }) => ({\n canCreate,\n }));\n\n const runHookWaterfall = useStrapiApp('ListViewPage', ({ runHookWaterfall }) => runHookWaterfall);\n /**\n * Run the waterfall and then inject our additional table headers.\n */\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout: list,\n });\n\n const formattedHeaders = headers.displayedHeaders.map<ListFieldLayout>((header) => {\n /**\n * When the header label is a string, it is an attribute on the current content-type:\n * Use the attribute name value to compute the translation.\n * Otherwise, it should be a translation object coming from a plugin that injects into the table (ie i18n, content-releases, review-workflows):\n * Use the translation object as is.\n */\n const translation =\n typeof header.label === 'string'\n ? {\n id: `content-manager.content-types.${model}.${header.name}`,\n defaultMessage: header.label,\n }\n : header.label;\n\n return {\n ...header,\n label: formatMessage(translation),\n name: `${header.name}${header.mainField?.name ? `.${header.mainField.name}` : ''}`,\n };\n });\n\n if (schema?.options?.draftAndPublish) {\n formattedHeaders.push({\n attribute: {\n type: 'custom',\n },\n name: 'status',\n label: formatMessage({\n id: getTranslation(`containers.list.table-headers.status`),\n defaultMessage: 'status',\n }),\n searchable: false,\n sortable: false,\n } satisfies ListFieldLayout);\n }\n\n return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n const contentTypeTitle = schema?.info.displayName\n ? formatMessage({ id: schema.info.displayName, defaultMessage: schema.info.displayName })\n : formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n\n const handleRowClick = (id: Modules.Documents.ID) => () => {\n trackUsage('willEditEntryFromList');\n navigate({\n pathname: id.toString(),\n search: stringify({ plugins: query.plugins }),\n });\n };\n\n const isEmptyState = !isFetching && results.length === 0;\n\n const endActions = (\n <>\n {isMobile && list.settings.filterable && schema && <Filters.Trigger />}\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={handleResetHeaders}\n headers={displayedHeaderNames ?? []}\n />\n </>\n );\n\n const searchInput = (\n <>\n {list.settings.searchable && (\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: contentTypeTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n </>\n );\n\n const startActions = (\n <>\n {searchInput}\n {!isMobile && list.settings.filterable && schema && (\n <>\n <Filters.Trigger />\n <Filters.List />\n </>\n )}\n </>\n );\n\n const actions =\n list.settings.filterable && schema ? (\n <Filters.Root schema={schema}>\n <Layouts.Action\n endActions={endActions}\n startActions={startActions}\n bottomActions={isMobile && hasAppliedFilters ? <Filters.List /> : null}\n />\n <Filters.Popover />\n </Filters.Root>\n ) : (\n <Layouts.Action endActions={endActions} startActions={startActions} />\n );\n\n return (\n <>\n <tours.contentManager.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentManager.Introduction>\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={\n canCreate ? (\n <tours.contentManager.CreateNewEntry>\n <CreateButton />\n </tours.contentManager.CreateNewEntry>\n ) : null\n }\n subtitle={formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: pagination?.total }\n )}\n title={contentTypeTitle}\n navigationAction={<BackButton />}\n />\n {actions}\n <Layouts.Content>\n {isEmptyState ? (\n <Box background=\"neutral0\" shadow=\"filterShadow\" hasRadius>\n <EmptyStateLayout\n action={\n canCreate && (\n <Box>\n <CreateButton variant=\"secondary\" />\n </Box>\n )\n }\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Box>\n ) : (\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <Table.Root rows={results} headers={tableHeaders} isLoading={isFetching}>\n <TableActionsBar />\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {tableHeaders.map((header: ListFieldLayout) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Empty action={canCreate ? <CreateButton variant=\"secondary\" /> : null} />\n <Table.Body>\n {results.map((row) => {\n return (\n <Table.Row\n cursor=\"pointer\"\n key={row.id}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\n if (header.name === 'status') {\n const { status } = row;\n\n return (\n <Table.Cell key={header.name}>\n <DocumentStatus status={status} maxWidth={'min-content'} />\n </Table.Cell>\n );\n }\n if (['createdBy', 'updatedBy'].includes(header.name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Table.Cell key={header.name}>\n <Typography textColor=\"neutral800\">\n {row[header.name.split('.')[0]]\n ? getDisplayName(row[header.name.split('.')[0]])\n : '-'}\n </Typography>\n </Table.Cell>\n );\n }\n if (header.name === 'documentId') {\n return (\n <Table.Cell key={header.name}>\n <Flex gap={2} alignItems=\"center\" width=\"100%\" minWidth={0}>\n <Typography textColor=\"neutral800\" maxWidth=\"30rem\" ellipsis>\n {row.documentId || '-'}\n </Typography>\n {row.documentId && (\n <IconButton\n variant=\"ghost\"\n size=\"S\"\n label={formatMessage({\n id: 'content-manager.actions.copy-documentId.label',\n defaultMessage: 'Copy',\n })}\n onClick={(e) => handleCopyDocumentId(e, row.documentId)}\n >\n <Duplicate />\n </IconButton>\n )}\n </Flex>\n </Table.Cell>\n );\n }\n if (typeof cellFormatter === 'function') {\n return (\n <Table.Cell key={header.name}>\n {/* @ts-expect-error – TODO: fix this TS error */}\n {cellFormatter(row, header, { collectionType, model })}\n </Table.Cell>\n );\n }\n return (\n <Table.Cell key={header.name}>\n <CellContent\n content={row[header.name.split('.')[0]]}\n rowId={row.documentId}\n {...header}\n />\n </Table.Cell>\n );\n })}\n {/* we stop propagation here to allow the menu to trigger it's events without triggering the row redirect */}\n <ActionsCell onClick={(e) => e.stopPropagation()}>\n <TableActions document={row} />\n </ActionsCell>\n </Table.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root\n {...pagination}\n onPageSizeChange={() => trackUsage('willChangeNumberOfEntriesPerPage')}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n )}\n </Layouts.Content>\n </Page.Main>\n </>\n );\n};\n\nconst ActionsCell = styled(Table.Cell)`\n display: flex;\n justify-content: flex-end;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionsBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst TableActionsBar = () => {\n const selectRow = useTable('TableActionsBar', (state) => state.selectRow);\n const [{ query }] = useQueryParams<{ plugins: { i18n: { locale: string } } }>();\n const locale = query?.plugins?.i18n?.locale;\n const prevLocale = usePrev(locale);\n\n // TODO: find a better way to reset the selected rows when the locale changes across all the app\n React.useEffect(() => {\n if (prevLocale !== locale) {\n selectRow([]);\n }\n }, [selectRow, prevLocale, locale]);\n\n return (\n <Table.ActionBar>\n <BulkActionsRenderer />\n </Table.ActionBar>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CreateButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CreateButtonProps extends Pick<ButtonProps, 'variant'> {}\n\nconst CreateButton = ({ variant }: CreateButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }] = useQueryParams<{ plugins: object }>();\n\n return (\n <Button\n variant={variant}\n tag={ReactRouterLink}\n onClick={() => {\n trackUsage('willCreateEntry', { status: 'draft' });\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n to={{\n pathname: 'create',\n search: stringify({ plugins: query.plugins }),\n }}\n minWidth=\"max-content\"\n fullWidth\n >\n {formatMessage({\n id: getTranslation('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <ListViewPage key={slug} />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { ListViewPage, ProtectedListViewPage };\n"],"names":["INJECT_COLUMN_IN_TABLE","HOOKS","LayoutsHeaderCustom","styled","Layouts","Header","ListViewPage","trackUsage","useTracking","navigate","useNavigate","formatMessage","useIntl","toggleNotification","useNotification","copy","useClipboard","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","isMobile","useIsMobile","useIsDesktop","handleCopyDocumentId","React","useCallback","e","documentId","stopPropagation","didCopy","type","message","id","defaultMessage","usePersistentPartialQueryParams","collectionType","model","schema","useDoc","list","useDocumentLayout","displayedHeaderNames","setDisplayedHeaderNames","useScopedPersistentState","mapDisplayedHeaders","headers","map","header","name","displayedHeaders","useMemo","metadatas","Object","keys","length","attributes","convertListLayoutToFieldLayouts","handleSetHeaders","handleResetHeaders","layout","useEffect","uid","allowedDisplayHeaders","filter","includes","query","useQueryParams","page","pageSize","settings","toString","sort","defaultSortBy","defaultSortOrder","params","buildValidParams","hasAppliedFilters","Boolean","filters","$and","data","error","isLoading","isFetching","useGetAllDocumentsQuery","results","pagination","pageCount","search","stringify","replace","canCreate","useDocumentRBAC","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","translation","label","mainField","options","draftAndPublish","push","attribute","searchable","sortable","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","isEmptyState","endActions","_jsxs","_Fragment","filterable","Filters","Trigger","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","searchInput","SearchInput","target","placeholder","trackedEvent","startActions","List","actions","Root","Action","bottomActions","Popover","tours","contentManager","Introduction","Box","Main","Title","primaryAction","CreateNewEntry","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Content","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","Flex","gap","direction","alignItems","Table","rows","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Body","row","Row","cursor","onClick","CheckboxCell","cellFormatter","status","Cell","DocumentStatus","maxWidth","split","Typography","textColor","getDisplayName","minWidth","ellipsis","IconButton","size","Duplicate","CellContent","rowId","ActionsCell","TableActions","document","Pagination","onPageSizeChange","PageSize","Links","selectRow","useTable","state","locale","i18n","prevLocale","usePrev","ActionBar","BulkActionsRenderer","Button","tag","ReactRouterLink","startIcon","Plus","style","textDecoration","to","fullWidth","ProtectedListViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","subject","Protect","DocumentRBAC"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { useRBAC, Page, useTracking, useNotification, useAPIErrorHandler, useIsMobile, useIsDesktop, useScopedPersistentState, useQueryParams, useStrapiApp, SearchInput, Layouts, tours, BackButton, Table, Pagination, useTable } from '@strapi/admin/strapi-admin';
|
|
4
|
-
import { Box, EmptyStateLayout, Flex, Typography, Button } from '@strapi/design-system';
|
|
5
|
-
import { Plus } from '@strapi/icons';
|
|
3
|
+
import { useRBAC, Page, useTracking, useNotification, useClipboard, useAPIErrorHandler, useIsMobile, useIsDesktop, useScopedPersistentState, useQueryParams, useStrapiApp, SearchInput, Layouts, tours, BackButton, Table, Pagination, useTable } from '@strapi/admin/strapi-admin';
|
|
4
|
+
import { Box, EmptyStateLayout, Flex, Typography, IconButton, Button } from '@strapi/design-system';
|
|
5
|
+
import { Duplicate, Plus } from '@strapi/icons';
|
|
6
6
|
import { EmptyDocuments } from '@strapi/icons/symbols';
|
|
7
7
|
import { stringify } from 'qs';
|
|
8
8
|
import { useIntl } from 'react-intl';
|
|
@@ -38,9 +38,28 @@ const ListViewPage = ()=>{
|
|
|
38
38
|
const navigate = useNavigate();
|
|
39
39
|
const { formatMessage } = useIntl();
|
|
40
40
|
const { toggleNotification } = useNotification();
|
|
41
|
+
const { copy } = useClipboard();
|
|
41
42
|
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);
|
|
42
43
|
const isMobile = useIsMobile();
|
|
43
44
|
useIsDesktop();
|
|
45
|
+
const handleCopyDocumentId = React.useCallback(async (e, documentId)=>{
|
|
46
|
+
e.stopPropagation();
|
|
47
|
+
if (!documentId) return;
|
|
48
|
+
const didCopy = await copy(documentId);
|
|
49
|
+
if (didCopy) {
|
|
50
|
+
toggleNotification({
|
|
51
|
+
type: 'success',
|
|
52
|
+
message: formatMessage({
|
|
53
|
+
id: 'content-manager.actions.copy-documentId.success',
|
|
54
|
+
defaultMessage: 'Document ID copied to clipboard'
|
|
55
|
+
})
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}, [
|
|
59
|
+
copy,
|
|
60
|
+
formatMessage,
|
|
61
|
+
toggleNotification
|
|
62
|
+
]);
|
|
44
63
|
usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', [
|
|
45
64
|
'sort',
|
|
46
65
|
'filters',
|
|
@@ -366,6 +385,34 @@ const ListViewPage = ()=>{
|
|
|
366
385
|
})
|
|
367
386
|
}, header.name);
|
|
368
387
|
}
|
|
388
|
+
if (header.name === 'documentId') {
|
|
389
|
+
return /*#__PURE__*/ jsx(Table.Cell, {
|
|
390
|
+
children: /*#__PURE__*/ jsxs(Flex, {
|
|
391
|
+
gap: 2,
|
|
392
|
+
alignItems: "center",
|
|
393
|
+
width: "100%",
|
|
394
|
+
minWidth: 0,
|
|
395
|
+
children: [
|
|
396
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
397
|
+
textColor: "neutral800",
|
|
398
|
+
maxWidth: "30rem",
|
|
399
|
+
ellipsis: true,
|
|
400
|
+
children: row.documentId || '-'
|
|
401
|
+
}),
|
|
402
|
+
row.documentId && /*#__PURE__*/ jsx(IconButton, {
|
|
403
|
+
variant: "ghost",
|
|
404
|
+
size: "S",
|
|
405
|
+
label: formatMessage({
|
|
406
|
+
id: 'content-manager.actions.copy-documentId.label',
|
|
407
|
+
defaultMessage: 'Copy'
|
|
408
|
+
}),
|
|
409
|
+
onClick: (e)=>handleCopyDocumentId(e, row.documentId),
|
|
410
|
+
children: /*#__PURE__*/ jsx(Duplicate, {})
|
|
411
|
+
})
|
|
412
|
+
]
|
|
413
|
+
})
|
|
414
|
+
}, header.name);
|
|
415
|
+
}
|
|
369
416
|
if (typeof cellFormatter === 'function') {
|
|
370
417
|
return /*#__PURE__*/ jsx(Table.Cell, {
|
|
371
418
|
children: cellFormatter(row, header, {
|