@strapi/content-manager 0.0.0-next.737505a8bfb61e4f38da29a4089e66c0dc09745b → 0.0.0-next.74fd566f2af148bb8cb5f3e2b65585e0922fbefd

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.
Files changed (146) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +300 -204
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +304 -209
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/history/components/VersionContent.js +24 -3
  6. package/dist/admin/history/components/VersionContent.js.map +1 -1
  7. package/dist/admin/history/components/VersionContent.mjs +25 -4
  8. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  9. package/dist/admin/hooks/useDocumentActions.js +7 -3
  10. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  11. package/dist/admin/hooks/useDocumentActions.mjs +7 -3
  12. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/EditViewPage.js +92 -75
  14. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  15. package/dist/admin/pages/EditView/EditViewPage.mjs +93 -76
  16. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/components/DocumentActions.js +33 -47
  18. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/DocumentActions.mjs +34 -48
  20. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  22. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  24. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +54 -14
  26. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +55 -15
  28. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +2 -2
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +2 -2
  32. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
  34. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
  36. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +13 -2
  38. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +14 -3
  40. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +18 -5
  42. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +20 -7
  44. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +153 -105
  46. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +156 -108
  48. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/UID.js +4 -2
  50. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +4 -2
  52. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  54. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  58. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  60. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormLayout.js +46 -26
  62. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormLayout.mjs +46 -26
  64. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/utils/data.js +103 -0
  66. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  67. package/dist/admin/pages/EditView/utils/data.mjs +103 -1
  68. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  69. package/dist/admin/pages/ListView/components/Filters.js +1 -0
  70. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  71. package/dist/admin/pages/ListView/components/Filters.mjs +1 -0
  72. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  73. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  74. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  75. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  76. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  77. package/dist/admin/services/documents.js +2 -2
  78. package/dist/admin/services/documents.js.map +1 -1
  79. package/dist/admin/services/documents.mjs +2 -2
  80. package/dist/admin/services/documents.mjs.map +1 -1
  81. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  82. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  83. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  84. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -7
  85. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  86. package/dist/admin/src/services/documents.d.ts +7 -1
  87. package/dist/admin/src/utils/validation.d.ts +1 -0
  88. package/dist/admin/translations/fr.json.js +6 -1
  89. package/dist/admin/translations/fr.json.js.map +1 -1
  90. package/dist/admin/translations/fr.json.mjs +6 -1
  91. package/dist/admin/translations/fr.json.mjs.map +1 -1
  92. package/dist/admin/utils/validation.js +17 -6
  93. package/dist/admin/utils/validation.js.map +1 -1
  94. package/dist/admin/utils/validation.mjs +17 -6
  95. package/dist/admin/utils/validation.mjs.map +1 -1
  96. package/dist/server/controllers/content-types.js +11 -1
  97. package/dist/server/controllers/content-types.js.map +1 -1
  98. package/dist/server/controllers/content-types.mjs +11 -1
  99. package/dist/server/controllers/content-types.mjs.map +1 -1
  100. package/dist/server/controllers/relations.js +2 -2
  101. package/dist/server/controllers/relations.js.map +1 -1
  102. package/dist/server/controllers/relations.mjs +2 -2
  103. package/dist/server/controllers/relations.mjs.map +1 -1
  104. package/dist/server/controllers/validation/index.js +14 -2
  105. package/dist/server/controllers/validation/index.js.map +1 -1
  106. package/dist/server/controllers/validation/index.mjs +14 -2
  107. package/dist/server/controllers/validation/index.mjs.map +1 -1
  108. package/dist/server/services/data-mapper.js +4 -1
  109. package/dist/server/services/data-mapper.js.map +1 -1
  110. package/dist/server/services/data-mapper.mjs +4 -1
  111. package/dist/server/services/data-mapper.mjs.map +1 -1
  112. package/dist/server/services/document-manager.js +8 -1
  113. package/dist/server/services/document-manager.js.map +1 -1
  114. package/dist/server/services/document-manager.mjs +8 -1
  115. package/dist/server/services/document-manager.mjs.map +1 -1
  116. package/dist/server/services/document-metadata.js +3 -1
  117. package/dist/server/services/document-metadata.js.map +1 -1
  118. package/dist/server/services/document-metadata.mjs +3 -1
  119. package/dist/server/services/document-metadata.mjs.map +1 -1
  120. package/dist/server/services/utils/configuration/attributes.js +1 -1
  121. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  122. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  123. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  124. package/dist/server/services/utils/configuration/layouts.js +1 -1
  125. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  126. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  127. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  128. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  129. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  130. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  131. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  132. package/dist/server/services/utils/populate.js +11 -0
  133. package/dist/server/services/utils/populate.js.map +1 -1
  134. package/dist/server/services/utils/populate.mjs +11 -0
  135. package/dist/server/services/utils/populate.mjs.map +1 -1
  136. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  137. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  138. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  139. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  140. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  141. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  142. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  143. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  144. package/dist/shared/contracts/collection-types.d.ts +0 -1
  145. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  146. package/package.json +10 -7
@@ -1 +1 @@
1
- {"version":3,"file":"data.mjs","sources":["../../../../../admin/src/pages/EditView/utils/data.ts"],"sourcesContent":["import { generateNKeysBetween } from 'fractional-indexing';\nimport pipe from 'lodash/fp/pipe';\n\nimport { DOCUMENT_META_FIELDS } from '../../../constants/attributes';\n\nimport type { ComponentsDictionary, Document } from '../../../hooks/useDocument';\nimport type { Schema, UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * traverseData\n * -----------------------------------------------------------------------------------------------*/\n\n// Make only attributes required since it's the only one Content History has\ntype PartialSchema = Partial<Schema.Schema> & Pick<Schema.Schema, 'attributes'>;\n\ntype Predicate = <TAttribute extends Schema.Attribute.AnyAttribute>(\n attribute: TAttribute,\n value: Schema.Attribute.Value<TAttribute>\n) => boolean;\ntype Transform = <TAttribute extends Schema.Attribute.AnyAttribute>(\n value: any,\n attribute: TAttribute\n) => any;\ntype AnyData = Omit<Document, 'id'>;\n\nconst BLOCK_LIST_ATTRIBUTE_KEYS = ['__component', '__temp_key__'];\n\n/**\n * @internal This function is used to traverse the data and transform the values.\n * Given a predicate function, it will transform the value (using the given transform function)\n * if the predicate returns true. If it finds that the attribute is a component or dynamiczone,\n * it will recursively traverse those data structures as well.\n *\n * It is possible to break the ContentManager by using this function incorrectly, for example,\n * if you transform a number into a string but the attribute type is a number, the ContentManager\n * will not be able to save the data and the Form will likely crash because the component it's\n * passing the data too won't succesfully be able to handle the value.\n */\nconst traverseData =\n (predicate: Predicate, transform: Transform) =>\n (schema: PartialSchema, components: ComponentsDictionary = {}) =>\n (data: AnyData = {}) => {\n const traverse = (datum: AnyData, attributes: Schema.Schema['attributes']) => {\n return Object.entries(datum).reduce<AnyData>((acc, [key, value]) => {\n const attribute = attributes[key];\n\n /**\n * If the attribute is a block list attribute, we don't want to transform it.\n * We also don't want to transform null or undefined values.\n */\n if (BLOCK_LIST_ATTRIBUTE_KEYS.includes(key) || value === null || value === undefined) {\n acc[key] = value;\n return acc;\n }\n\n if (attribute.type === 'component') {\n if (attribute.repeatable) {\n const componentValue = (\n predicate(attribute, value) ? transform(value, attribute) : value\n ) as Schema.Attribute.Value<Schema.Attribute.Component<UID.Component, true>>;\n acc[key] = componentValue.map((componentData) =>\n traverse(componentData, components[attribute.component]?.attributes ?? {})\n );\n } else {\n const componentValue = (\n predicate(attribute, value) ? transform(value, attribute) : value\n ) as Schema.Attribute.Value<Schema.Attribute.Component<UID.Component, false>>;\n\n acc[key] = traverse(componentValue, components[attribute.component]?.attributes ?? {});\n }\n } else if (attribute.type === 'dynamiczone') {\n const dynamicZoneValue = (\n predicate(attribute, value) ? transform(value, attribute) : value\n ) as Schema.Attribute.Value<Schema.Attribute.DynamicZone>;\n\n acc[key] = dynamicZoneValue.map((componentData) =>\n traverse(componentData, components[componentData.__component]?.attributes ?? {})\n );\n } else if (predicate(attribute, value)) {\n acc[key] = transform(value, attribute);\n } else {\n acc[key] = value;\n }\n\n return acc;\n }, {});\n };\n\n return traverse(data, schema.attributes);\n };\n\n/* -------------------------------------------------------------------------------------------------\n * removeProhibitedFields\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal Removes all the fields that are not allowed.\n */\nconst removeProhibitedFields = (prohibitedFields: Schema.Attribute.Kind[]) =>\n traverseData(\n (attribute) => prohibitedFields.includes(attribute.type),\n () => ''\n );\n\n/* -------------------------------------------------------------------------------------------------\n * prepareRelations\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Sets all relation values to an empty array.\n */\nconst prepareRelations = traverseData(\n (attribute) => attribute.type === 'relation',\n () => ({\n connect: [],\n disconnect: [],\n })\n);\n\n/* -------------------------------------------------------------------------------------------------\n * prepareTempKeys\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Adds a `__temp_key__` to each component and dynamiczone item. This gives us\n * a stable identifier regardless of its ids etc. that we can then use for drag and drop.\n */\nconst prepareTempKeys = traverseData(\n (attribute) =>\n (attribute.type === 'component' && attribute.repeatable) || attribute.type === 'dynamiczone',\n (data) => {\n if (Array.isArray(data) && data.length > 0) {\n const keys = generateNKeysBetween(undefined, undefined, data.length);\n\n return data.map((datum, index) => ({\n ...datum,\n __temp_key__: keys[index],\n }));\n }\n\n return data;\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * removeFieldsThatDontExistOnSchema\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Fields that don't exist in the schema like createdAt etc. are only on the first level (not nested),\n * as such we don't need to traverse the components to remove them.\n */\nconst removeFieldsThatDontExistOnSchema = (schema: PartialSchema) => (data: AnyData) => {\n const schemaKeys = Object.keys(schema.attributes);\n const dataKeys = Object.keys(data);\n\n const keysToRemove = dataKeys.filter((key) => !schemaKeys.includes(key));\n\n const revisedData = [...keysToRemove, ...DOCUMENT_META_FIELDS].reduce((acc, key) => {\n delete acc[key];\n\n return acc;\n }, structuredClone(data));\n\n return revisedData;\n};\n\n/**\n * @internal\n * @description We need to remove null fields from the data-structure because it will pass it\n * to the specific inputs breaking them as most would prefer empty strings or `undefined` if\n * they're controlled / uncontrolled.\n */\nconst removeNullValues = (data: AnyData) => {\n return Object.entries(data).reduce<AnyData>((acc, [key, value]) => {\n if (value === null) {\n return acc;\n }\n\n acc[key] = value;\n\n return acc;\n }, {});\n};\n\n/* -------------------------------------------------------------------------------------------------\n * transformDocuments\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Takes a document data structure (this could be from the API or a default form structure)\n * and applies consistent data transformations to it. This is also used when we add new components to the\n * form to ensure the data is correctly prepared from their default state e.g. relations are set to an empty array.\n */\nconst transformDocument =\n (schema: PartialSchema, components: ComponentsDictionary = {}) =>\n (document: AnyData) => {\n const transformations = pipe(\n removeFieldsThatDontExistOnSchema(schema),\n removeProhibitedFields(['password'])(schema, components),\n removeNullValues,\n prepareRelations(schema, components),\n prepareTempKeys(schema, components)\n );\n\n return transformations(document);\n };\n\nexport {\n removeProhibitedFields,\n prepareRelations,\n prepareTempKeys,\n removeFieldsThatDontExistOnSchema,\n transformDocument,\n};\nexport type { AnyData };\n"],"names":["BLOCK_LIST_ATTRIBUTE_KEYS","traverseData","predicate","transform","schema","components","data","traverse","datum","attributes","Object","entries","reduce","acc","key","value","attribute","includes","undefined","type","repeatable","componentValue","map","componentData","component","dynamicZoneValue","__component","removeProhibitedFields","prohibitedFields","prepareRelations","connect","disconnect","prepareTempKeys","Array","isArray","length","keys","generateNKeysBetween","index","__temp_key__","removeFieldsThatDontExistOnSchema","schemaKeys","dataKeys","keysToRemove","filter","revisedData","DOCUMENT_META_FIELDS","structuredClone","removeNullValues","transformDocument","document","transformations","pipe"],"mappings":"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"}
1
+ {"version":3,"file":"data.mjs","sources":["../../../../../admin/src/pages/EditView/utils/data.ts"],"sourcesContent":["import { createRulesEngine } from '@strapi/admin/strapi-admin';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport pipe from 'lodash/fp/pipe';\n\nimport { DOCUMENT_META_FIELDS } from '../../../constants/attributes';\n\nimport type { ComponentsDictionary, Document } from '../../../hooks/useDocument';\nimport type { Schema, UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * traverseData\n * -----------------------------------------------------------------------------------------------*/\n\n// Make only attributes required since it's the only one Content History has\ntype PartialSchema = Partial<Schema.Schema> & Pick<Schema.Schema, 'attributes'>;\n\ntype Predicate = <TAttribute extends Schema.Attribute.AnyAttribute>(\n attribute: TAttribute,\n value: Schema.Attribute.Value<TAttribute>\n) => boolean;\ntype Transform = <TAttribute extends Schema.Attribute.AnyAttribute>(\n value: any,\n attribute: TAttribute\n) => any;\ntype AnyData = Omit<Document, 'id'>;\n\nconst BLOCK_LIST_ATTRIBUTE_KEYS = ['__component', '__temp_key__'];\n\n/**\n * @internal This function is used to traverse the data and transform the values.\n * Given a predicate function, it will transform the value (using the given transform function)\n * if the predicate returns true. If it finds that the attribute is a component or dynamiczone,\n * it will recursively traverse those data structures as well.\n *\n * It is possible to break the ContentManager by using this function incorrectly, for example,\n * if you transform a number into a string but the attribute type is a number, the ContentManager\n * will not be able to save the data and the Form will likely crash because the component it's\n * passing the data too won't succesfully be able to handle the value.\n */\nconst traverseData =\n (predicate: Predicate, transform: Transform) =>\n (schema: PartialSchema, components: ComponentsDictionary = {}) =>\n (data: AnyData = {}) => {\n const traverse = (datum: AnyData, attributes: Schema.Schema['attributes']) => {\n return Object.entries(datum).reduce<AnyData>((acc, [key, value]) => {\n const attribute = attributes[key];\n\n /**\n * If the attribute is a block list attribute, we don't want to transform it.\n * We also don't want to transform null or undefined values.\n */\n if (BLOCK_LIST_ATTRIBUTE_KEYS.includes(key) || value === null || value === undefined) {\n acc[key] = value;\n return acc;\n }\n\n if (attribute.type === 'component') {\n if (attribute.repeatable) {\n const componentValue = (\n predicate(attribute, value) ? transform(value, attribute) : value\n ) as Schema.Attribute.Value<Schema.Attribute.Component<UID.Component, true>>;\n acc[key] = componentValue.map((componentData) =>\n traverse(componentData, components[attribute.component]?.attributes ?? {})\n );\n } else {\n const componentValue = (\n predicate(attribute, value) ? transform(value, attribute) : value\n ) as Schema.Attribute.Value<Schema.Attribute.Component<UID.Component, false>>;\n\n acc[key] = traverse(componentValue, components[attribute.component]?.attributes ?? {});\n }\n } else if (attribute.type === 'dynamiczone') {\n const dynamicZoneValue = (\n predicate(attribute, value) ? transform(value, attribute) : value\n ) as Schema.Attribute.Value<Schema.Attribute.DynamicZone>;\n\n acc[key] = dynamicZoneValue.map((componentData) =>\n traverse(componentData, components[componentData.__component]?.attributes ?? {})\n );\n } else if (predicate(attribute, value)) {\n acc[key] = transform(value, attribute);\n } else {\n acc[key] = value;\n }\n\n return acc;\n }, {});\n };\n\n return traverse(data, schema.attributes);\n };\n\n/* -------------------------------------------------------------------------------------------------\n * removeProhibitedFields\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal Removes all the fields that are not allowed.\n */\nconst removeProhibitedFields = (prohibitedFields: Schema.Attribute.Kind[]) =>\n traverseData(\n (attribute) => prohibitedFields.includes(attribute.type),\n () => ''\n );\n\n/* -------------------------------------------------------------------------------------------------\n * prepareRelations\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Sets all relation values to an empty array.\n */\nconst prepareRelations = traverseData(\n (attribute) => attribute.type === 'relation',\n () => ({\n connect: [],\n disconnect: [],\n })\n);\n\n/* -------------------------------------------------------------------------------------------------\n * prepareTempKeys\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Adds a `__temp_key__` to each component and dynamiczone item. This gives us\n * a stable identifier regardless of its ids etc. that we can then use for drag and drop.\n */\nconst prepareTempKeys = traverseData(\n (attribute) =>\n (attribute.type === 'component' && attribute.repeatable) || attribute.type === 'dynamiczone',\n (data) => {\n if (Array.isArray(data) && data.length > 0) {\n const keys = generateNKeysBetween(undefined, undefined, data.length);\n\n return data.map((datum, index) => ({\n ...datum,\n __temp_key__: keys[index],\n }));\n }\n\n return data;\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * removeFieldsThatDontExistOnSchema\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Fields that don't exist in the schema like createdAt etc. are only on the first level (not nested),\n * as such we don't need to traverse the components to remove them.\n */\nconst removeFieldsThatDontExistOnSchema = (schema: PartialSchema) => (data: AnyData) => {\n const schemaKeys = Object.keys(schema.attributes);\n const dataKeys = Object.keys(data);\n\n const keysToRemove = dataKeys.filter((key) => !schemaKeys.includes(key));\n\n const revisedData = [...keysToRemove, ...DOCUMENT_META_FIELDS].reduce((acc, key) => {\n delete acc[key];\n\n return acc;\n }, structuredClone(data));\n\n return revisedData;\n};\n\n/**\n * @internal\n * @description We need to remove null fields from the data-structure because it will pass it\n * to the specific inputs breaking them as most would prefer empty strings or `undefined` if\n * they're controlled / uncontrolled.\n */\nconst removeNullValues = (data: AnyData) => {\n return Object.entries(data).reduce<AnyData>((acc, [key, value]) => {\n if (value === null) {\n return acc;\n }\n\n acc[key] = value;\n\n return acc;\n }, {});\n};\n\n/* -------------------------------------------------------------------------------------------------\n * transformDocuments\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Takes a document data structure (this could be from the API or a default form structure)\n * and applies consistent data transformations to it. This is also used when we add new components to the\n * form to ensure the data is correctly prepared from their default state e.g. relations are set to an empty array.\n */\nconst transformDocument =\n (schema: PartialSchema, components: ComponentsDictionary = {}) =>\n (document: AnyData) => {\n const transformations = pipe(\n removeFieldsThatDontExistOnSchema(schema),\n removeProhibitedFields(['password'])(schema, components),\n removeNullValues,\n prepareRelations(schema, components),\n prepareTempKeys(schema, components)\n );\n\n return transformations(document);\n };\n\ntype HandleOptions = {\n schema?: Schema.ContentType | Schema.Component;\n initialValues?: AnyData;\n components?: Record<string, Schema.Component>;\n};\n\ntype RemovedFieldPath = string;\n\n/**\n * Removes values from the data object if their corresponding attribute has a\n * visibility condition that evaluates to false.\n *\n * @param {object} schema - The content type schema (with attributes).\n * @param {object} data - The data object to filter based on visibility.\n * @returns {object} A new data object with only visible fields retained.\n */\nconst handleInvisibleAttributes = (\n data: AnyData,\n { schema, initialValues = {}, components = {} }: HandleOptions,\n path: string[] = [],\n removedAttributes: RemovedFieldPath[] = []\n): {\n data: AnyData;\n removedAttributes: RemovedFieldPath[];\n} => {\n if (!schema?.attributes) return { data, removedAttributes };\n\n const rulesEngine = createRulesEngine();\n const result: AnyData = {};\n\n for (const [attrName, attrDef] of Object.entries(schema.attributes)) {\n const fullPath = [...path, attrName].join('.');\n const condition = attrDef?.conditions?.visible;\n const isVisible = condition ? rulesEngine.evaluate(condition, { ...data, ...result }) : true;\n\n if (!isVisible) {\n removedAttributes.push(fullPath);\n continue;\n }\n\n const userProvided = Object.prototype.hasOwnProperty.call(data, attrName);\n const currentValue = userProvided ? data[attrName] : undefined;\n const initialValue = initialValues?.[attrName];\n\n // 🔹 Handle components\n if (attrDef.type === 'component') {\n const compSchema = components[attrDef.component];\n const value = currentValue ?? initialValue;\n\n if (!value) {\n result[attrName] = attrDef.repeatable ? [] : null;\n continue;\n }\n\n if (attrDef.repeatable && Array.isArray(value)) {\n result[attrName] = value.map(\n (item, index) =>\n handleInvisibleAttributes(\n item,\n {\n schema: compSchema,\n initialValues: initialValue?.[index] ?? {},\n components,\n },\n [...path, `${attrName}[${index}]`],\n removedAttributes\n ).data\n );\n } else {\n result[attrName] = handleInvisibleAttributes(\n value,\n {\n schema: compSchema,\n initialValues: initialValue ?? {},\n components,\n },\n [...path, attrName],\n removedAttributes\n ).data;\n }\n\n continue;\n }\n\n // 🔸 Handle dynamic zones\n if (attrDef.type === 'dynamiczone') {\n if (!Array.isArray(currentValue)) {\n result[attrName] = [];\n continue;\n }\n\n result[attrName] = currentValue.map((dzItem, index) => {\n const compUID = dzItem?.__component;\n const compSchema = components[compUID];\n\n const cleaned = handleInvisibleAttributes(\n dzItem,\n {\n schema: compSchema,\n initialValues: initialValue?.[index] ?? {},\n components,\n },\n [...path, `${attrName}[${index}]`],\n removedAttributes\n ).data;\n\n return {\n __component: compUID,\n ...cleaned,\n };\n });\n\n continue;\n }\n\n // 🟡 Handle scalar/primitive\n if (currentValue !== undefined) {\n result[attrName] = currentValue;\n } else if (initialValue !== undefined) {\n result[attrName] = initialValue;\n } else {\n if (attrName === 'id' || attrName === 'documentId') {\n // If the attribute is 'id', we don't want to set it to null, as it should not be removed.\n continue;\n }\n result[attrName] = null;\n }\n }\n\n return {\n data: result,\n removedAttributes,\n };\n};\n\nexport {\n removeProhibitedFields,\n prepareRelations,\n prepareTempKeys,\n removeFieldsThatDontExistOnSchema,\n transformDocument,\n handleInvisibleAttributes,\n};\nexport type { AnyData };\n"],"names":["BLOCK_LIST_ATTRIBUTE_KEYS","traverseData","predicate","transform","schema","components","data","traverse","datum","attributes","Object","entries","reduce","acc","key","value","attribute","includes","undefined","type","repeatable","componentValue","map","componentData","component","dynamicZoneValue","__component","removeProhibitedFields","prohibitedFields","prepareRelations","connect","disconnect","prepareTempKeys","Array","isArray","length","keys","generateNKeysBetween","index","__temp_key__","removeFieldsThatDontExistOnSchema","schemaKeys","dataKeys","keysToRemove","filter","revisedData","DOCUMENT_META_FIELDS","structuredClone","removeNullValues","transformDocument","document","transformations","pipe","handleInvisibleAttributes","initialValues","path","removedAttributes","rulesEngine","createRulesEngine","result","attrName","attrDef","fullPath","join","condition","conditions","visible","isVisible","evaluate","push","userProvided","prototype","hasOwnProperty","call","currentValue","initialValue","compSchema","item","dzItem","compUID","cleaned"],"mappings":"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"}
@@ -101,6 +101,7 @@ const FiltersImpl = ({ disabled, schema })=>{
101
101
  });
102
102
  return [
103
103
  'id',
104
+ 'documentId',
104
105
  ...allowedFields,
105
106
  ...DEFAULT_ALLOWED_FILTERS,
106
107
  ...canReadAdminUsers ? attributes.CREATOR_FIELDS : []
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.js","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\nimport { getMainField } from '../../../utils/attributes';\nimport { getDisplayName } from '../../../utils/users';\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n}\n\nconst FiltersImpl = ({ disabled, schema }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n if (id && USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = allPermissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n );\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);\n });\n\n return (\n [\n 'id',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ]\n .map((name) => {\n const attribute = attributes[name];\n\n if (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n // @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?\n type: attribute.type,\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: value,\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[]\n ).toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n metadata,\n schemas,\n users,\n formatMessage,\n formatter,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nexport { FiltersImpl as Filters };\nexport type { FiltersProps };\n"],"names":["NOT_ALLOWED_FILTERS","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","FiltersImpl","disabled","schema","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","includes","push","data","userData","isLoading","isLoadingAdminUsers","useAdminUsers","$in","skip","users","metadata","useGetContentTypeConfigurationQuery","selectFromResult","contentType","metadatas","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","attribute","type","map","name","mainField","mainFieldName","label","list","getMainField","components","target","input","AdminUsersFilter","user","getDisplayName","toString","operators","defaultMessage","enum","Boolean","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsxs","Filters","Root","onChange","_jsx","Trigger","Popover","List","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption"],"mappings":"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"}
1
+ {"version":3,"file":"Filters.js","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\nimport { getMainField } from '../../../utils/attributes';\nimport { getDisplayName } from '../../../utils/users';\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n}\n\nconst FiltersImpl = ({ disabled, schema }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n if (id && USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = allPermissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n );\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);\n });\n\n return (\n [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ]\n .map((name) => {\n const attribute = attributes[name];\n\n if (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n // @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?\n type: attribute.type,\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: value,\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[]\n ).toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n metadata,\n schemas,\n users,\n formatMessage,\n formatter,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nexport { FiltersImpl as Filters };\nexport type { FiltersProps };\n"],"names":["NOT_ALLOWED_FILTERS","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","FiltersImpl","disabled","schema","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","includes","push","data","userData","isLoading","isLoadingAdminUsers","useAdminUsers","$in","skip","users","metadata","useGetContentTypeConfigurationQuery","selectFromResult","contentType","metadatas","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","attribute","type","map","name","mainField","mainFieldName","label","list","getMainField","components","target","input","AdminUsersFilter","user","getDisplayName","toString","operators","defaultMessage","enum","Boolean","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsxs","Filters","Root","onChange","_jsx","Trigger","Popover","List","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption"],"mappings":"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"}
@@ -80,6 +80,7 @@ const FiltersImpl = ({ disabled, schema })=>{
80
80
  });
81
81
  return [
82
82
  'id',
83
+ 'documentId',
83
84
  ...allowedFields,
84
85
  ...DEFAULT_ALLOWED_FILTERS,
85
86
  ...canReadAdminUsers ? CREATOR_FIELDS : []
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\nimport { getMainField } from '../../../utils/attributes';\nimport { getDisplayName } from '../../../utils/users';\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n}\n\nconst FiltersImpl = ({ disabled, schema }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n if (id && USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = allPermissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n );\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);\n });\n\n return (\n [\n 'id',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ]\n .map((name) => {\n const attribute = attributes[name];\n\n if (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n // @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?\n type: attribute.type,\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: value,\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[]\n ).toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n metadata,\n schemas,\n users,\n formatMessage,\n formatter,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nexport { FiltersImpl as Filters };\nexport type { FiltersProps };\n"],"names":["NOT_ALLOWED_FILTERS","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","FiltersImpl","disabled","schema","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","includes","push","data","userData","isLoading","isLoadingAdminUsers","useAdminUsers","$in","skip","users","metadata","useGetContentTypeConfigurationQuery","selectFromResult","contentType","metadatas","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","attribute","type","map","name","mainField","mainFieldName","label","list","getMainField","components","target","input","AdminUsersFilter","user","getDisplayName","toString","operators","defaultMessage","enum","Boolean","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsxs","Filters","Root","onChange","_jsx","Trigger","Popover","List","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption"],"mappings":"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"}
1
+ {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\nimport { getMainField } from '../../../utils/attributes';\nimport { getDisplayName } from '../../../utils/users';\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n}\n\nconst FiltersImpl = ({ disabled, schema }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n if (id && USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = allPermissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n );\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);\n });\n\n return (\n [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ]\n .map((name) => {\n const attribute = attributes[name];\n\n if (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n // @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?\n type: attribute.type,\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: value,\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[]\n ).toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n metadata,\n schemas,\n users,\n formatMessage,\n formatter,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nexport { FiltersImpl as Filters };\nexport type { FiltersProps };\n"],"names":["NOT_ALLOWED_FILTERS","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","FiltersImpl","disabled","schema","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","includes","push","data","userData","isLoading","isLoadingAdminUsers","useAdminUsers","$in","skip","users","metadata","useGetContentTypeConfigurationQuery","selectFromResult","contentType","metadatas","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","attribute","type","map","name","mainField","mainFieldName","label","list","getMainField","components","target","input","AdminUsersFilter","user","getDisplayName","toString","operators","defaultMessage","enum","Boolean","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsxs","Filters","Root","onChange","_jsx","Trigger","Popover","List","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption"],"mappings":"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"}
@@ -126,6 +126,7 @@ const CloneAction = ({ model, documentId })=>{
126
126
  const { toggleNotification } = strapiAdmin.useNotification();
127
127
  const { autoClone } = useDocumentActions.useDocumentActions();
128
128
  const [prohibitedFields, setProhibitedFields] = React__namespace.useState([]);
129
+ const [{ query }] = strapiAdmin.useQueryParams();
129
130
  return {
130
131
  disabled: !canCreate,
131
132
  icon: /*#__PURE__*/ jsxRuntime.jsx(StyledDuplicate, {}),
@@ -148,10 +149,16 @@ const CloneAction = ({ model, documentId })=>{
148
149
  }
149
150
  const res = await autoClone({
150
151
  model,
151
- sourceId: documentId
152
+ sourceId: documentId,
153
+ locale: query.plugins?.i18n?.locale
152
154
  });
153
155
  if ('data' in res) {
154
- navigate(res.data.documentId);
156
+ navigate({
157
+ pathname: res.data.documentId,
158
+ search: qs.stringify({
159
+ plugins: query.plugins
160
+ })
161
+ });
155
162
  /**
156
163
  * We return true because we don't need to show a modal anymore.
157
164
  */ return true;
@@ -184,7 +191,10 @@ const CloneAction = ({ model, documentId })=>{
184
191
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.LinkButton, {
185
192
  tag: reactRouterDom.NavLink,
186
193
  to: {
187
- pathname: `clone/${documentId}`
194
+ pathname: `clone/${documentId}`,
195
+ search: qs.stringify({
196
+ plugins: query.plugins
197
+ })
188
198
  },
189
199
  children: formatMessage({
190
200
  id: 'content-manager.containers.list.autoCloneModal.create',
@@ -1 +1 @@
1
- {"version":3,"file":"TableActions.js","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({ model, sourceId: documentId });\n\n if ('data' in res) {\n navigate(res.data.documentId);\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"TableActions.js","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: Record<string, any> }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
@@ -105,6 +105,7 @@ const CloneAction = ({ model, documentId })=>{
105
105
  const { toggleNotification } = useNotification();
106
106
  const { autoClone } = useDocumentActions();
107
107
  const [prohibitedFields, setProhibitedFields] = React.useState([]);
108
+ const [{ query }] = useQueryParams();
108
109
  return {
109
110
  disabled: !canCreate,
110
111
  icon: /*#__PURE__*/ jsx(StyledDuplicate, {}),
@@ -127,10 +128,16 @@ const CloneAction = ({ model, documentId })=>{
127
128
  }
128
129
  const res = await autoClone({
129
130
  model,
130
- sourceId: documentId
131
+ sourceId: documentId,
132
+ locale: query.plugins?.i18n?.locale
131
133
  });
132
134
  if ('data' in res) {
133
- navigate(res.data.documentId);
135
+ navigate({
136
+ pathname: res.data.documentId,
137
+ search: stringify({
138
+ plugins: query.plugins
139
+ })
140
+ });
134
141
  /**
135
142
  * We return true because we don't need to show a modal anymore.
136
143
  */ return true;
@@ -163,7 +170,10 @@ const CloneAction = ({ model, documentId })=>{
163
170
  /*#__PURE__*/ jsx(LinkButton, {
164
171
  tag: NavLink,
165
172
  to: {
166
- pathname: `clone/${documentId}`
173
+ pathname: `clone/${documentId}`,
174
+ search: stringify({
175
+ plugins: query.plugins
176
+ })
167
177
  },
168
178
  children: formatMessage({
169
179
  id: 'content-manager.containers.list.autoCloneModal.create',
@@ -1 +1 @@
1
- {"version":3,"file":"TableActions.mjs","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({ model, sourceId: documentId });\n\n if ('data' in res) {\n navigate(res.data.documentId);\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"TableActions.mjs","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: Record<string, any> }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
@@ -8,11 +8,11 @@ const documentApi = api.contentManagerApi.injectEndpoints({
8
8
  overrideExisting: true,
9
9
  endpoints: (builder)=>({
10
10
  autoCloneDocument: builder.mutation({
11
- query: ({ model, sourceId, query })=>({
11
+ query: ({ model, sourceId, params })=>({
12
12
  url: `/content-manager/collection-types/${model}/auto-clone/${sourceId}`,
13
13
  method: 'POST',
14
14
  config: {
15
- params: query
15
+ params
16
16
  }
17
17
  }),
18
18
  invalidatesTags: (_result, error, { model })=>{