@strapi/content-manager 5.29.0 → 5.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/dist/admin/components/ComponentIcon.js +3 -0
  2. package/dist/admin/components/ComponentIcon.js.map +1 -1
  3. package/dist/admin/components/ComponentIcon.mjs +3 -0
  4. package/dist/admin/components/ComponentIcon.mjs.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  6. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  7. package/dist/admin/components/RelativeTime.js.map +1 -1
  8. package/dist/admin/components/RelativeTime.mjs.map +1 -1
  9. package/dist/admin/components/Widgets.js.map +1 -1
  10. package/dist/admin/components/Widgets.mjs.map +1 -1
  11. package/dist/admin/content-manager.js.map +1 -1
  12. package/dist/admin/content-manager.mjs.map +1 -1
  13. package/dist/admin/history/components/HistoryAction.js.map +1 -1
  14. package/dist/admin/history/components/HistoryAction.mjs.map +1 -1
  15. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  16. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  17. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  18. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  19. package/dist/admin/history/components/VersionsList.js.map +1 -1
  20. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  21. package/dist/admin/history/pages/History.js.map +1 -1
  22. package/dist/admin/history/pages/History.mjs.map +1 -1
  23. package/dist/admin/history/services/historyVersion.js.map +1 -1
  24. package/dist/admin/history/services/historyVersion.mjs.map +1 -1
  25. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
  26. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
  27. package/dist/admin/hooks/useDocumentActions.js +24 -5
  28. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  29. package/dist/admin/hooks/useDocumentActions.mjs +24 -5
  30. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  31. package/dist/admin/index.js.map +1 -1
  32. package/dist/admin/index.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.js +5 -3
  34. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/DocumentActions.mjs +5 -3
  36. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
  38. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +66 -2
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +66 -2
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -1
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
  52. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +7 -3
  54. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +7 -3
  56. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  58. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  60. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  64. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
  66. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/UID.js +2 -1
  72. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +2 -1
  74. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  80. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -1
  82. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
  84. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  86. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/Header.js +10 -5
  88. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  89. package/dist/admin/pages/EditView/components/Header.mjs +10 -5
  90. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/InputRenderer.js +12 -11
  92. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  93. package/dist/admin/pages/EditView/components/InputRenderer.mjs +12 -11
  94. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  96. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  97. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  98. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  99. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  100. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
  101. package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -1
  102. package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -1
  103. package/dist/admin/pages/ListView/ListViewPage.js +0 -2
  104. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  105. package/dist/admin/pages/ListView/ListViewPage.mjs +0 -2
  106. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  107. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -1
  108. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -1
  109. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  110. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  111. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  112. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  113. package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
  114. package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
  115. package/dist/admin/preview/services/preview.js.map +1 -1
  116. package/dist/admin/preview/services/preview.mjs.map +1 -1
  117. package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
  118. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
  119. package/dist/admin/preview/utils/previewScript.js.map +1 -1
  120. package/dist/admin/preview/utils/previewScript.mjs.map +1 -1
  121. package/dist/admin/router.js.map +1 -1
  122. package/dist/admin/router.mjs.map +1 -1
  123. package/dist/admin/services/api.js +2 -1
  124. package/dist/admin/services/api.js.map +1 -1
  125. package/dist/admin/services/api.mjs +2 -1
  126. package/dist/admin/services/api.mjs.map +1 -1
  127. package/dist/admin/services/documents.js +10 -2
  128. package/dist/admin/services/documents.js.map +1 -1
  129. package/dist/admin/services/documents.mjs +10 -2
  130. package/dist/admin/services/documents.mjs.map +1 -1
  131. package/dist/admin/services/homepage.js.map +1 -1
  132. package/dist/admin/services/homepage.mjs.map +1 -1
  133. package/dist/admin/services/relations.js.map +1 -1
  134. package/dist/admin/services/relations.mjs.map +1 -1
  135. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  136. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +2 -0
  137. package/dist/admin/src/pages/EditView/components/Header.d.ts +12 -1
  138. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  139. package/dist/admin/src/services/api.d.ts +1 -1
  140. package/dist/admin/src/services/components.d.ts +2 -2
  141. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  142. package/dist/admin/src/services/documents.d.ts +16 -16
  143. package/dist/admin/src/services/homepage.d.ts +1 -1
  144. package/dist/admin/src/services/init.d.ts +1 -1
  145. package/dist/admin/src/services/relations.d.ts +2 -2
  146. package/dist/admin/src/services/uid.d.ts +3 -3
  147. package/dist/admin/translations/fr.json.js +1 -1
  148. package/dist/admin/translations/fr.json.mjs +1 -1
  149. package/dist/admin/utils/translations.js.map +1 -1
  150. package/dist/admin/utils/translations.mjs.map +1 -1
  151. package/dist/admin/utils/urls.js.map +1 -1
  152. package/dist/admin/utils/urls.mjs.map +1 -1
  153. package/dist/admin/utils/users.js.map +1 -1
  154. package/dist/admin/utils/users.mjs.map +1 -1
  155. package/dist/admin/utils/validation.js.map +1 -1
  156. package/dist/admin/utils/validation.mjs.map +1 -1
  157. package/dist/server/controllers/collection-types.js +2 -1
  158. package/dist/server/controllers/collection-types.js.map +1 -1
  159. package/dist/server/controllers/collection-types.mjs +2 -1
  160. package/dist/server/controllers/collection-types.mjs.map +1 -1
  161. package/dist/server/controllers/relations.js.map +1 -1
  162. package/dist/server/controllers/relations.mjs.map +1 -1
  163. package/dist/server/controllers/single-types.js.map +1 -1
  164. package/dist/server/controllers/single-types.mjs.map +1 -1
  165. package/dist/server/controllers/validation/dimensions.js.map +1 -1
  166. package/dist/server/controllers/validation/dimensions.mjs.map +1 -1
  167. package/dist/server/controllers/validation/index.js.map +1 -1
  168. package/dist/server/controllers/validation/index.mjs.map +1 -1
  169. package/dist/server/history/utils.js.map +1 -1
  170. package/dist/server/history/utils.mjs.map +1 -1
  171. package/dist/server/homepage/services/homepage.js.map +1 -1
  172. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  173. package/dist/server/middlewares/routing.js.map +1 -1
  174. package/dist/server/middlewares/routing.mjs.map +1 -1
  175. package/dist/server/preview/services/preview-config.js +8 -33
  176. package/dist/server/preview/services/preview-config.js.map +1 -1
  177. package/dist/server/preview/services/preview-config.mjs +9 -34
  178. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  179. package/dist/server/preview/services/preview.js.map +1 -1
  180. package/dist/server/preview/services/preview.mjs.map +1 -1
  181. package/dist/server/preview/utils.js.map +1 -1
  182. package/dist/server/preview/utils.mjs.map +1 -1
  183. package/dist/server/services/configuration.js.map +1 -1
  184. package/dist/server/services/configuration.mjs.map +1 -1
  185. package/dist/server/services/document-metadata.js +23 -1
  186. package/dist/server/services/document-metadata.js.map +1 -1
  187. package/dist/server/services/document-metadata.mjs +23 -1
  188. package/dist/server/services/document-metadata.mjs.map +1 -1
  189. package/dist/server/services/field-sizes.js.map +1 -1
  190. package/dist/server/services/field-sizes.mjs.map +1 -1
  191. package/dist/server/services/uid.js.map +1 -1
  192. package/dist/server/services/uid.mjs.map +1 -1
  193. package/dist/server/services/utils/store.js.map +1 -1
  194. package/dist/server/services/utils/store.mjs.map +1 -1
  195. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  196. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  197. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  198. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  199. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"content-manager.js","sources":["../../admin/src/content-manager.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport { INJECTION_ZONES } from './components/InjectionZone';\nimport { PLUGIN_ID } from './constants/plugin';\nimport {\n DEFAULT_ACTIONS,\n type DocumentActionPosition,\n type DocumentActionDescription,\n} from './pages/EditView/components/DocumentActions';\nimport {\n DEFAULT_HEADER_ACTIONS,\n type HeaderActionDescription,\n} from './pages/EditView/components/Header';\nimport { ActionsPanel, type PanelDescription } from './pages/EditView/components/Panels';\nimport {\n DEFAULT_BULK_ACTIONS,\n type BulkActionDescription,\n} from './pages/ListView/components/BulkActions/Actions';\nimport { DEFAULT_TABLE_ROW_ACTIONS } from './pages/ListView/components/TableActions';\n\nimport type { Document } from './hooks/useDocument';\nimport type { DocumentMetadata } from '../../shared/contracts/collection-types';\nimport type { DescriptionComponent, PluginConfig } from '@strapi/admin/strapi-admin';\n\n/* -------------------------------------------------------------------------------------------------\n * Configuration Types\n * -----------------------------------------------------------------------------------------------*/\n\ntype DescriptionReducer<Config extends object> = (prev: Config[]) => Config[];\n\ninterface EditViewContext {\n /**\n * This will ONLY be null, if the content-type\n * does not have draft & published enabled.\n */\n activeTab: 'draft' | 'published' | null;\n /**\n * Will be either 'single-types' | 'collection-types'\n */\n collectionType: string;\n /**\n * this will be undefined if someone is creating an entry.\n */\n document?: Document;\n /**\n * this will be undefined if someone is creating an entry.\n */\n documentId?: string;\n /**\n * this will be undefined if someone is creating an entry.\n */\n meta?: DocumentMetadata;\n /**\n * The current content-type's model.\n */\n model: string;\n}\n\ninterface ListViewContext {\n /**\n * Will be either 'single-types' | 'collection-types'\n */\n collectionType: string;\n /**\n * The current selected documents in the table\n */\n documents: Document[];\n /**\n * The current content-type's model.\n */\n model: string;\n}\n\ninterface PanelComponentProps extends EditViewContext {}\n\ninterface PanelComponent extends DescriptionComponent<PanelComponentProps, PanelDescription> {\n /**\n * The defaults are added by Strapi only, if you're providing your own component,\n * you do not need to provide this.\n */\n type?: 'actions' | 'releases';\n}\n\ninterface DocumentActionProps extends EditViewContext {}\n\ninterface DocumentActionComponent\n extends DescriptionComponent<DocumentActionProps, DocumentActionDescription> {\n type?:\n | 'clone'\n | 'configure-the-view'\n | 'delete'\n | 'discard'\n | 'edit'\n | 'edit-the-model'\n | 'history'\n | 'publish'\n | 'unpublish'\n | 'update';\n position?: DocumentActionDescription['position'];\n}\n\ninterface HeaderActionProps extends EditViewContext {}\n\ninterface HeaderActionComponent\n extends DescriptionComponent<HeaderActionProps, HeaderActionDescription> {}\n\ninterface BulkActionComponentProps extends ListViewContext {}\n\ninterface BulkActionComponent\n extends DescriptionComponent<BulkActionComponentProps, BulkActionDescription> {\n type?: 'delete' | 'publish' | 'unpublish';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * ContentManager plugin\n * -----------------------------------------------------------------------------------------------*/\n\nclass ContentManagerPlugin {\n /**\n * The following properties are the stored ones provided by any plugins registering with\n * the content-manager. The function calls however, need to be called at runtime in the\n * application, so instead we collate them and run them later with the complete list incl.\n * ones already registered & the context of the view.\n */\n bulkActions: BulkActionComponent[] = [...DEFAULT_BULK_ACTIONS];\n documentActions: DocumentActionComponent[] = [\n ...DEFAULT_ACTIONS,\n ...DEFAULT_TABLE_ROW_ACTIONS,\n ...DEFAULT_HEADER_ACTIONS,\n ];\n editViewSidePanels: PanelComponent[] = [ActionsPanel];\n headerActions: HeaderActionComponent[] = [];\n\n constructor() {}\n\n addEditViewSidePanel(panels: DescriptionReducer<PanelComponent>): void;\n addEditViewSidePanel(panels: PanelComponent[]): void;\n addEditViewSidePanel(panels: DescriptionReducer<PanelComponent> | PanelComponent[]) {\n if (Array.isArray(panels)) {\n this.editViewSidePanels = [...this.editViewSidePanels, ...panels];\n } else if (typeof panels === 'function') {\n this.editViewSidePanels = panels(this.editViewSidePanels);\n } else {\n throw new Error(\n `Expected the \\`panels\\` passed to \\`addEditViewSidePanel\\` to be an array or a function, but received ${getPrintableType(\n panels\n )}`\n );\n }\n }\n\n addDocumentAction(actions: DescriptionReducer<DocumentActionComponent>): void;\n addDocumentAction(actions: DocumentActionComponent[]): void;\n addDocumentAction(\n actions: DescriptionReducer<DocumentActionComponent> | DocumentActionComponent[]\n ) {\n if (Array.isArray(actions)) {\n this.documentActions = [...this.documentActions, ...actions];\n } else if (typeof actions === 'function') {\n this.documentActions = actions(this.documentActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addDocumentAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n addDocumentHeaderAction(actions: DescriptionReducer<HeaderActionComponent>): void;\n addDocumentHeaderAction(actions: HeaderActionComponent[]): void;\n addDocumentHeaderAction(\n actions: DescriptionReducer<HeaderActionComponent> | HeaderActionComponent[]\n ) {\n if (Array.isArray(actions)) {\n this.headerActions = [...this.headerActions, ...actions];\n } else if (typeof actions === 'function') {\n this.headerActions = actions(this.headerActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addDocumentHeaderAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n addBulkAction(actions: DescriptionReducer<BulkActionComponent>): void;\n addBulkAction(actions: BulkActionComponent[]): void;\n addBulkAction(actions: DescriptionReducer<BulkActionComponent> | BulkActionComponent[]) {\n if (Array.isArray(actions)) {\n this.bulkActions = [...this.bulkActions, ...actions];\n } else if (typeof actions === 'function') {\n this.bulkActions = actions(this.bulkActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addBulkAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n get config() {\n return {\n id: PLUGIN_ID,\n name: 'Content Manager',\n injectionZones: INJECTION_ZONES,\n apis: {\n addBulkAction: this.addBulkAction.bind(this),\n addDocumentAction: this.addDocumentAction.bind(this),\n addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),\n addEditViewSidePanel: this.addEditViewSidePanel.bind(this),\n getBulkActions: () => this.bulkActions,\n getDocumentActions: (position?: DocumentActionPosition) => {\n /**\n * When possible, pre-filter the actions by the components static position property.\n * This avoids rendering the actions in multiple places where they weren't displayed,\n * which wasn't visible but created issues with useEffect for instance.\n * The response should still be filtered by the position, as the static property is new\n * and not mandatory to avoid a breaking change.\n */\n if (position) {\n return this.documentActions.filter((action) => {\n return action.position == undefined || [action.position].flat().includes(position);\n });\n }\n\n return this.documentActions;\n },\n getEditViewSidePanels: () => this.editViewSidePanels,\n getHeaderActions: () => this.headerActions,\n },\n } satisfies PluginConfig;\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * getPrintableType\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Gets the human-friendly printable type name for the given value, for instance it will yield\n * `array` instead of `object`, as the native `typeof` operator would do.\n */\nconst getPrintableType = (value: unknown): string => {\n const nativeType = typeof value;\n\n if (nativeType === 'object') {\n if (value === null) return 'null';\n if (Array.isArray(value)) return 'array';\n if (value instanceof Object && value.constructor.name !== 'Object') {\n return value.constructor.name;\n }\n }\n\n return nativeType;\n};\n\nexport { ContentManagerPlugin };\nexport type {\n EditViewContext,\n ListViewContext,\n BulkActionComponent,\n BulkActionComponentProps,\n BulkActionDescription,\n DescriptionComponent,\n DescriptionReducer,\n PanelComponentProps,\n PanelComponent,\n PanelDescription,\n DocumentActionComponent,\n DocumentActionDescription,\n DocumentActionProps,\n HeaderActionComponent,\n HeaderActionDescription,\n HeaderActionProps,\n};\n"],"names":["ContentManagerPlugin","addEditViewSidePanel","panels","Array","isArray","editViewSidePanels","Error","getPrintableType","addDocumentAction","actions","documentActions","addDocumentHeaderAction","headerActions","addBulkAction","bulkActions","config","id","PLUGIN_ID","name","injectionZones","INJECTION_ZONES","apis","bind","getBulkActions","getDocumentActions","position","filter","action","undefined","flat","includes","getEditViewSidePanels","getHeaderActions","constructor","DEFAULT_BULK_ACTIONS","DEFAULT_ACTIONS","DEFAULT_TABLE_ROW_ACTIONS","DEFAULT_HEADER_ACTIONS","ActionsPanel","value","nativeType","Object"],"mappings":"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"}
1
+ {"version":3,"file":"content-manager.js","sources":["../../admin/src/content-manager.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport { INJECTION_ZONES } from './components/InjectionZone';\nimport { PLUGIN_ID } from './constants/plugin';\nimport {\n DEFAULT_ACTIONS,\n type DocumentActionPosition,\n type DocumentActionDescription,\n} from './pages/EditView/components/DocumentActions';\nimport {\n DEFAULT_HEADER_ACTIONS,\n type HeaderActionDescription,\n} from './pages/EditView/components/Header';\nimport { ActionsPanel, type PanelDescription } from './pages/EditView/components/Panels';\nimport {\n DEFAULT_BULK_ACTIONS,\n type BulkActionDescription,\n} from './pages/ListView/components/BulkActions/Actions';\nimport { DEFAULT_TABLE_ROW_ACTIONS } from './pages/ListView/components/TableActions';\n\nimport type { Document } from './hooks/useDocument';\nimport type { DocumentMetadata } from '../../shared/contracts/collection-types';\nimport type { DescriptionComponent, PluginConfig } from '@strapi/admin/strapi-admin';\n\n/* -------------------------------------------------------------------------------------------------\n * Configuration Types\n * -----------------------------------------------------------------------------------------------*/\n\ntype DescriptionReducer<Config extends object> = (prev: Config[]) => Config[];\n\ninterface EditViewContext {\n /**\n * This will ONLY be null, if the content-type\n * does not have draft & published enabled.\n */\n activeTab: 'draft' | 'published' | null;\n /**\n * Will be either 'single-types' | 'collection-types'\n */\n collectionType: string;\n /**\n * this will be undefined if someone is creating an entry.\n */\n document?: Document;\n /**\n * this will be undefined if someone is creating an entry.\n */\n documentId?: string;\n /**\n * this will be undefined if someone is creating an entry.\n */\n meta?: DocumentMetadata;\n /**\n * The current content-type's model.\n */\n model: string;\n}\n\ninterface ListViewContext {\n /**\n * Will be either 'single-types' | 'collection-types'\n */\n collectionType: string;\n /**\n * The current selected documents in the table\n */\n documents: Document[];\n /**\n * The current content-type's model.\n */\n model: string;\n}\n\ninterface PanelComponentProps extends EditViewContext {}\n\ninterface PanelComponent extends DescriptionComponent<PanelComponentProps, PanelDescription> {\n /**\n * The defaults are added by Strapi only, if you're providing your own component,\n * you do not need to provide this.\n */\n type?: 'actions' | 'releases';\n}\n\ninterface DocumentActionProps extends EditViewContext {}\n\ninterface DocumentActionComponent\n extends DescriptionComponent<DocumentActionProps, DocumentActionDescription> {\n type?:\n | 'clone'\n | 'configure-the-view'\n | 'delete'\n | 'discard'\n | 'edit'\n | 'edit-the-model'\n | 'history'\n | 'publish'\n | 'unpublish'\n | 'update';\n position?: DocumentActionDescription['position'];\n}\n\ninterface HeaderActionProps extends EditViewContext {}\n\ninterface HeaderActionComponent\n extends DescriptionComponent<HeaderActionProps, HeaderActionDescription> {}\n\ninterface BulkActionComponentProps extends ListViewContext {}\n\ninterface BulkActionComponent\n extends DescriptionComponent<BulkActionComponentProps, BulkActionDescription> {\n type?: 'delete' | 'publish' | 'unpublish';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * ContentManager plugin\n * -----------------------------------------------------------------------------------------------*/\n\nclass ContentManagerPlugin {\n /**\n * The following properties are the stored ones provided by any plugins registering with\n * the content-manager. The function calls however, need to be called at runtime in the\n * application, so instead we collate them and run them later with the complete list incl.\n * ones already registered & the context of the view.\n */\n bulkActions: BulkActionComponent[] = [...DEFAULT_BULK_ACTIONS];\n documentActions: DocumentActionComponent[] = [\n ...DEFAULT_ACTIONS,\n ...DEFAULT_TABLE_ROW_ACTIONS,\n ...DEFAULT_HEADER_ACTIONS,\n ];\n editViewSidePanels: PanelComponent[] = [ActionsPanel];\n headerActions: HeaderActionComponent[] = [];\n\n constructor() {}\n\n addEditViewSidePanel(panels: DescriptionReducer<PanelComponent>): void;\n addEditViewSidePanel(panels: PanelComponent[]): void;\n addEditViewSidePanel(panels: DescriptionReducer<PanelComponent> | PanelComponent[]) {\n if (Array.isArray(panels)) {\n this.editViewSidePanels = [...this.editViewSidePanels, ...panels];\n } else if (typeof panels === 'function') {\n this.editViewSidePanels = panels(this.editViewSidePanels);\n } else {\n throw new Error(\n `Expected the \\`panels\\` passed to \\`addEditViewSidePanel\\` to be an array or a function, but received ${getPrintableType(\n panels\n )}`\n );\n }\n }\n\n addDocumentAction(actions: DescriptionReducer<DocumentActionComponent>): void;\n addDocumentAction(actions: DocumentActionComponent[]): void;\n addDocumentAction(\n actions: DescriptionReducer<DocumentActionComponent> | DocumentActionComponent[]\n ) {\n if (Array.isArray(actions)) {\n this.documentActions = [...this.documentActions, ...actions];\n } else if (typeof actions === 'function') {\n this.documentActions = actions(this.documentActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addDocumentAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n addDocumentHeaderAction(actions: DescriptionReducer<HeaderActionComponent>): void;\n addDocumentHeaderAction(actions: HeaderActionComponent[]): void;\n addDocumentHeaderAction(\n actions: DescriptionReducer<HeaderActionComponent> | HeaderActionComponent[]\n ) {\n if (Array.isArray(actions)) {\n this.headerActions = [...this.headerActions, ...actions];\n } else if (typeof actions === 'function') {\n this.headerActions = actions(this.headerActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addDocumentHeaderAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n addBulkAction(actions: DescriptionReducer<BulkActionComponent>): void;\n addBulkAction(actions: BulkActionComponent[]): void;\n addBulkAction(actions: DescriptionReducer<BulkActionComponent> | BulkActionComponent[]) {\n if (Array.isArray(actions)) {\n this.bulkActions = [...this.bulkActions, ...actions];\n } else if (typeof actions === 'function') {\n this.bulkActions = actions(this.bulkActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addBulkAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n get config() {\n return {\n id: PLUGIN_ID,\n name: 'Content Manager',\n injectionZones: INJECTION_ZONES,\n apis: {\n addBulkAction: this.addBulkAction.bind(this),\n addDocumentAction: this.addDocumentAction.bind(this),\n addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),\n addEditViewSidePanel: this.addEditViewSidePanel.bind(this),\n getBulkActions: () => this.bulkActions,\n getDocumentActions: (position?: DocumentActionPosition) => {\n /**\n * When possible, pre-filter the actions by the components static position property.\n * This avoids rendering the actions in multiple places where they weren't displayed,\n * which wasn't visible but created issues with useEffect for instance.\n * The response should still be filtered by the position, as the static property is new\n * and not mandatory to avoid a breaking change.\n */\n if (position) {\n return this.documentActions.filter((action) => {\n return action.position == undefined || [action.position].flat().includes(position);\n });\n }\n\n return this.documentActions;\n },\n getEditViewSidePanels: () => this.editViewSidePanels,\n getHeaderActions: () => this.headerActions,\n },\n } satisfies PluginConfig;\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * getPrintableType\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Gets the human-friendly printable type name for the given value, for instance it will yield\n * `array` instead of `object`, as the native `typeof` operator would do.\n */\nconst getPrintableType = (value: unknown): string => {\n const nativeType = typeof value;\n\n if (nativeType === 'object') {\n if (value === null) return 'null';\n if (Array.isArray(value)) return 'array';\n if (value instanceof Object && value.constructor.name !== 'Object') {\n return value.constructor.name;\n }\n }\n\n return nativeType;\n};\n\nexport { ContentManagerPlugin };\nexport type {\n EditViewContext,\n ListViewContext,\n BulkActionComponent,\n BulkActionComponentProps,\n BulkActionDescription,\n DescriptionComponent,\n DescriptionReducer,\n PanelComponentProps,\n PanelComponent,\n PanelDescription,\n DocumentActionComponent,\n DocumentActionDescription,\n DocumentActionProps,\n HeaderActionComponent,\n HeaderActionDescription,\n HeaderActionProps,\n};\n"],"names":["ContentManagerPlugin","addEditViewSidePanel","panels","Array","isArray","editViewSidePanels","Error","getPrintableType","addDocumentAction","actions","documentActions","addDocumentHeaderAction","headerActions","addBulkAction","bulkActions","config","id","PLUGIN_ID","name","injectionZones","INJECTION_ZONES","apis","bind","getBulkActions","getDocumentActions","position","filter","action","undefined","flat","includes","getEditViewSidePanels","getHeaderActions","DEFAULT_BULK_ACTIONS","DEFAULT_ACTIONS","DEFAULT_TABLE_ROW_ACTIONS","DEFAULT_HEADER_ACTIONS","ActionsPanel","value","nativeType","Object"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"content-manager.mjs","sources":["../../admin/src/content-manager.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport { INJECTION_ZONES } from './components/InjectionZone';\nimport { PLUGIN_ID } from './constants/plugin';\nimport {\n DEFAULT_ACTIONS,\n type DocumentActionPosition,\n type DocumentActionDescription,\n} from './pages/EditView/components/DocumentActions';\nimport {\n DEFAULT_HEADER_ACTIONS,\n type HeaderActionDescription,\n} from './pages/EditView/components/Header';\nimport { ActionsPanel, type PanelDescription } from './pages/EditView/components/Panels';\nimport {\n DEFAULT_BULK_ACTIONS,\n type BulkActionDescription,\n} from './pages/ListView/components/BulkActions/Actions';\nimport { DEFAULT_TABLE_ROW_ACTIONS } from './pages/ListView/components/TableActions';\n\nimport type { Document } from './hooks/useDocument';\nimport type { DocumentMetadata } from '../../shared/contracts/collection-types';\nimport type { DescriptionComponent, PluginConfig } from '@strapi/admin/strapi-admin';\n\n/* -------------------------------------------------------------------------------------------------\n * Configuration Types\n * -----------------------------------------------------------------------------------------------*/\n\ntype DescriptionReducer<Config extends object> = (prev: Config[]) => Config[];\n\ninterface EditViewContext {\n /**\n * This will ONLY be null, if the content-type\n * does not have draft & published enabled.\n */\n activeTab: 'draft' | 'published' | null;\n /**\n * Will be either 'single-types' | 'collection-types'\n */\n collectionType: string;\n /**\n * this will be undefined if someone is creating an entry.\n */\n document?: Document;\n /**\n * this will be undefined if someone is creating an entry.\n */\n documentId?: string;\n /**\n * this will be undefined if someone is creating an entry.\n */\n meta?: DocumentMetadata;\n /**\n * The current content-type's model.\n */\n model: string;\n}\n\ninterface ListViewContext {\n /**\n * Will be either 'single-types' | 'collection-types'\n */\n collectionType: string;\n /**\n * The current selected documents in the table\n */\n documents: Document[];\n /**\n * The current content-type's model.\n */\n model: string;\n}\n\ninterface PanelComponentProps extends EditViewContext {}\n\ninterface PanelComponent extends DescriptionComponent<PanelComponentProps, PanelDescription> {\n /**\n * The defaults are added by Strapi only, if you're providing your own component,\n * you do not need to provide this.\n */\n type?: 'actions' | 'releases';\n}\n\ninterface DocumentActionProps extends EditViewContext {}\n\ninterface DocumentActionComponent\n extends DescriptionComponent<DocumentActionProps, DocumentActionDescription> {\n type?:\n | 'clone'\n | 'configure-the-view'\n | 'delete'\n | 'discard'\n | 'edit'\n | 'edit-the-model'\n | 'history'\n | 'publish'\n | 'unpublish'\n | 'update';\n position?: DocumentActionDescription['position'];\n}\n\ninterface HeaderActionProps extends EditViewContext {}\n\ninterface HeaderActionComponent\n extends DescriptionComponent<HeaderActionProps, HeaderActionDescription> {}\n\ninterface BulkActionComponentProps extends ListViewContext {}\n\ninterface BulkActionComponent\n extends DescriptionComponent<BulkActionComponentProps, BulkActionDescription> {\n type?: 'delete' | 'publish' | 'unpublish';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * ContentManager plugin\n * -----------------------------------------------------------------------------------------------*/\n\nclass ContentManagerPlugin {\n /**\n * The following properties are the stored ones provided by any plugins registering with\n * the content-manager. The function calls however, need to be called at runtime in the\n * application, so instead we collate them and run them later with the complete list incl.\n * ones already registered & the context of the view.\n */\n bulkActions: BulkActionComponent[] = [...DEFAULT_BULK_ACTIONS];\n documentActions: DocumentActionComponent[] = [\n ...DEFAULT_ACTIONS,\n ...DEFAULT_TABLE_ROW_ACTIONS,\n ...DEFAULT_HEADER_ACTIONS,\n ];\n editViewSidePanels: PanelComponent[] = [ActionsPanel];\n headerActions: HeaderActionComponent[] = [];\n\n constructor() {}\n\n addEditViewSidePanel(panels: DescriptionReducer<PanelComponent>): void;\n addEditViewSidePanel(panels: PanelComponent[]): void;\n addEditViewSidePanel(panels: DescriptionReducer<PanelComponent> | PanelComponent[]) {\n if (Array.isArray(panels)) {\n this.editViewSidePanels = [...this.editViewSidePanels, ...panels];\n } else if (typeof panels === 'function') {\n this.editViewSidePanels = panels(this.editViewSidePanels);\n } else {\n throw new Error(\n `Expected the \\`panels\\` passed to \\`addEditViewSidePanel\\` to be an array or a function, but received ${getPrintableType(\n panels\n )}`\n );\n }\n }\n\n addDocumentAction(actions: DescriptionReducer<DocumentActionComponent>): void;\n addDocumentAction(actions: DocumentActionComponent[]): void;\n addDocumentAction(\n actions: DescriptionReducer<DocumentActionComponent> | DocumentActionComponent[]\n ) {\n if (Array.isArray(actions)) {\n this.documentActions = [...this.documentActions, ...actions];\n } else if (typeof actions === 'function') {\n this.documentActions = actions(this.documentActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addDocumentAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n addDocumentHeaderAction(actions: DescriptionReducer<HeaderActionComponent>): void;\n addDocumentHeaderAction(actions: HeaderActionComponent[]): void;\n addDocumentHeaderAction(\n actions: DescriptionReducer<HeaderActionComponent> | HeaderActionComponent[]\n ) {\n if (Array.isArray(actions)) {\n this.headerActions = [...this.headerActions, ...actions];\n } else if (typeof actions === 'function') {\n this.headerActions = actions(this.headerActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addDocumentHeaderAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n addBulkAction(actions: DescriptionReducer<BulkActionComponent>): void;\n addBulkAction(actions: BulkActionComponent[]): void;\n addBulkAction(actions: DescriptionReducer<BulkActionComponent> | BulkActionComponent[]) {\n if (Array.isArray(actions)) {\n this.bulkActions = [...this.bulkActions, ...actions];\n } else if (typeof actions === 'function') {\n this.bulkActions = actions(this.bulkActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addBulkAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n get config() {\n return {\n id: PLUGIN_ID,\n name: 'Content Manager',\n injectionZones: INJECTION_ZONES,\n apis: {\n addBulkAction: this.addBulkAction.bind(this),\n addDocumentAction: this.addDocumentAction.bind(this),\n addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),\n addEditViewSidePanel: this.addEditViewSidePanel.bind(this),\n getBulkActions: () => this.bulkActions,\n getDocumentActions: (position?: DocumentActionPosition) => {\n /**\n * When possible, pre-filter the actions by the components static position property.\n * This avoids rendering the actions in multiple places where they weren't displayed,\n * which wasn't visible but created issues with useEffect for instance.\n * The response should still be filtered by the position, as the static property is new\n * and not mandatory to avoid a breaking change.\n */\n if (position) {\n return this.documentActions.filter((action) => {\n return action.position == undefined || [action.position].flat().includes(position);\n });\n }\n\n return this.documentActions;\n },\n getEditViewSidePanels: () => this.editViewSidePanels,\n getHeaderActions: () => this.headerActions,\n },\n } satisfies PluginConfig;\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * getPrintableType\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Gets the human-friendly printable type name for the given value, for instance it will yield\n * `array` instead of `object`, as the native `typeof` operator would do.\n */\nconst getPrintableType = (value: unknown): string => {\n const nativeType = typeof value;\n\n if (nativeType === 'object') {\n if (value === null) return 'null';\n if (Array.isArray(value)) return 'array';\n if (value instanceof Object && value.constructor.name !== 'Object') {\n return value.constructor.name;\n }\n }\n\n return nativeType;\n};\n\nexport { ContentManagerPlugin };\nexport type {\n EditViewContext,\n ListViewContext,\n BulkActionComponent,\n BulkActionComponentProps,\n BulkActionDescription,\n DescriptionComponent,\n DescriptionReducer,\n PanelComponentProps,\n PanelComponent,\n PanelDescription,\n DocumentActionComponent,\n DocumentActionDescription,\n DocumentActionProps,\n HeaderActionComponent,\n HeaderActionDescription,\n HeaderActionProps,\n};\n"],"names":["ContentManagerPlugin","addEditViewSidePanel","panels","Array","isArray","editViewSidePanels","Error","getPrintableType","addDocumentAction","actions","documentActions","addDocumentHeaderAction","headerActions","addBulkAction","bulkActions","config","id","PLUGIN_ID","name","injectionZones","INJECTION_ZONES","apis","bind","getBulkActions","getDocumentActions","position","filter","action","undefined","flat","includes","getEditViewSidePanels","getHeaderActions","constructor","DEFAULT_BULK_ACTIONS","DEFAULT_ACTIONS","DEFAULT_TABLE_ROW_ACTIONS","DEFAULT_HEADER_ACTIONS","ActionsPanel","value","nativeType","Object"],"mappings":"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"}
1
+ {"version":3,"file":"content-manager.mjs","sources":["../../admin/src/content-manager.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport { INJECTION_ZONES } from './components/InjectionZone';\nimport { PLUGIN_ID } from './constants/plugin';\nimport {\n DEFAULT_ACTIONS,\n type DocumentActionPosition,\n type DocumentActionDescription,\n} from './pages/EditView/components/DocumentActions';\nimport {\n DEFAULT_HEADER_ACTIONS,\n type HeaderActionDescription,\n} from './pages/EditView/components/Header';\nimport { ActionsPanel, type PanelDescription } from './pages/EditView/components/Panels';\nimport {\n DEFAULT_BULK_ACTIONS,\n type BulkActionDescription,\n} from './pages/ListView/components/BulkActions/Actions';\nimport { DEFAULT_TABLE_ROW_ACTIONS } from './pages/ListView/components/TableActions';\n\nimport type { Document } from './hooks/useDocument';\nimport type { DocumentMetadata } from '../../shared/contracts/collection-types';\nimport type { DescriptionComponent, PluginConfig } from '@strapi/admin/strapi-admin';\n\n/* -------------------------------------------------------------------------------------------------\n * Configuration Types\n * -----------------------------------------------------------------------------------------------*/\n\ntype DescriptionReducer<Config extends object> = (prev: Config[]) => Config[];\n\ninterface EditViewContext {\n /**\n * This will ONLY be null, if the content-type\n * does not have draft & published enabled.\n */\n activeTab: 'draft' | 'published' | null;\n /**\n * Will be either 'single-types' | 'collection-types'\n */\n collectionType: string;\n /**\n * this will be undefined if someone is creating an entry.\n */\n document?: Document;\n /**\n * this will be undefined if someone is creating an entry.\n */\n documentId?: string;\n /**\n * this will be undefined if someone is creating an entry.\n */\n meta?: DocumentMetadata;\n /**\n * The current content-type's model.\n */\n model: string;\n}\n\ninterface ListViewContext {\n /**\n * Will be either 'single-types' | 'collection-types'\n */\n collectionType: string;\n /**\n * The current selected documents in the table\n */\n documents: Document[];\n /**\n * The current content-type's model.\n */\n model: string;\n}\n\ninterface PanelComponentProps extends EditViewContext {}\n\ninterface PanelComponent extends DescriptionComponent<PanelComponentProps, PanelDescription> {\n /**\n * The defaults are added by Strapi only, if you're providing your own component,\n * you do not need to provide this.\n */\n type?: 'actions' | 'releases';\n}\n\ninterface DocumentActionProps extends EditViewContext {}\n\ninterface DocumentActionComponent\n extends DescriptionComponent<DocumentActionProps, DocumentActionDescription> {\n type?:\n | 'clone'\n | 'configure-the-view'\n | 'delete'\n | 'discard'\n | 'edit'\n | 'edit-the-model'\n | 'history'\n | 'publish'\n | 'unpublish'\n | 'update';\n position?: DocumentActionDescription['position'];\n}\n\ninterface HeaderActionProps extends EditViewContext {}\n\ninterface HeaderActionComponent\n extends DescriptionComponent<HeaderActionProps, HeaderActionDescription> {}\n\ninterface BulkActionComponentProps extends ListViewContext {}\n\ninterface BulkActionComponent\n extends DescriptionComponent<BulkActionComponentProps, BulkActionDescription> {\n type?: 'delete' | 'publish' | 'unpublish';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * ContentManager plugin\n * -----------------------------------------------------------------------------------------------*/\n\nclass ContentManagerPlugin {\n /**\n * The following properties are the stored ones provided by any plugins registering with\n * the content-manager. The function calls however, need to be called at runtime in the\n * application, so instead we collate them and run them later with the complete list incl.\n * ones already registered & the context of the view.\n */\n bulkActions: BulkActionComponent[] = [...DEFAULT_BULK_ACTIONS];\n documentActions: DocumentActionComponent[] = [\n ...DEFAULT_ACTIONS,\n ...DEFAULT_TABLE_ROW_ACTIONS,\n ...DEFAULT_HEADER_ACTIONS,\n ];\n editViewSidePanels: PanelComponent[] = [ActionsPanel];\n headerActions: HeaderActionComponent[] = [];\n\n constructor() {}\n\n addEditViewSidePanel(panels: DescriptionReducer<PanelComponent>): void;\n addEditViewSidePanel(panels: PanelComponent[]): void;\n addEditViewSidePanel(panels: DescriptionReducer<PanelComponent> | PanelComponent[]) {\n if (Array.isArray(panels)) {\n this.editViewSidePanels = [...this.editViewSidePanels, ...panels];\n } else if (typeof panels === 'function') {\n this.editViewSidePanels = panels(this.editViewSidePanels);\n } else {\n throw new Error(\n `Expected the \\`panels\\` passed to \\`addEditViewSidePanel\\` to be an array or a function, but received ${getPrintableType(\n panels\n )}`\n );\n }\n }\n\n addDocumentAction(actions: DescriptionReducer<DocumentActionComponent>): void;\n addDocumentAction(actions: DocumentActionComponent[]): void;\n addDocumentAction(\n actions: DescriptionReducer<DocumentActionComponent> | DocumentActionComponent[]\n ) {\n if (Array.isArray(actions)) {\n this.documentActions = [...this.documentActions, ...actions];\n } else if (typeof actions === 'function') {\n this.documentActions = actions(this.documentActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addDocumentAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n addDocumentHeaderAction(actions: DescriptionReducer<HeaderActionComponent>): void;\n addDocumentHeaderAction(actions: HeaderActionComponent[]): void;\n addDocumentHeaderAction(\n actions: DescriptionReducer<HeaderActionComponent> | HeaderActionComponent[]\n ) {\n if (Array.isArray(actions)) {\n this.headerActions = [...this.headerActions, ...actions];\n } else if (typeof actions === 'function') {\n this.headerActions = actions(this.headerActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addDocumentHeaderAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n addBulkAction(actions: DescriptionReducer<BulkActionComponent>): void;\n addBulkAction(actions: BulkActionComponent[]): void;\n addBulkAction(actions: DescriptionReducer<BulkActionComponent> | BulkActionComponent[]) {\n if (Array.isArray(actions)) {\n this.bulkActions = [...this.bulkActions, ...actions];\n } else if (typeof actions === 'function') {\n this.bulkActions = actions(this.bulkActions);\n } else {\n throw new Error(\n `Expected the \\`actions\\` passed to \\`addBulkAction\\` to be an array or a function, but received ${getPrintableType(\n actions\n )}`\n );\n }\n }\n\n get config() {\n return {\n id: PLUGIN_ID,\n name: 'Content Manager',\n injectionZones: INJECTION_ZONES,\n apis: {\n addBulkAction: this.addBulkAction.bind(this),\n addDocumentAction: this.addDocumentAction.bind(this),\n addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),\n addEditViewSidePanel: this.addEditViewSidePanel.bind(this),\n getBulkActions: () => this.bulkActions,\n getDocumentActions: (position?: DocumentActionPosition) => {\n /**\n * When possible, pre-filter the actions by the components static position property.\n * This avoids rendering the actions in multiple places where they weren't displayed,\n * which wasn't visible but created issues with useEffect for instance.\n * The response should still be filtered by the position, as the static property is new\n * and not mandatory to avoid a breaking change.\n */\n if (position) {\n return this.documentActions.filter((action) => {\n return action.position == undefined || [action.position].flat().includes(position);\n });\n }\n\n return this.documentActions;\n },\n getEditViewSidePanels: () => this.editViewSidePanels,\n getHeaderActions: () => this.headerActions,\n },\n } satisfies PluginConfig;\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * getPrintableType\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n * @description Gets the human-friendly printable type name for the given value, for instance it will yield\n * `array` instead of `object`, as the native `typeof` operator would do.\n */\nconst getPrintableType = (value: unknown): string => {\n const nativeType = typeof value;\n\n if (nativeType === 'object') {\n if (value === null) return 'null';\n if (Array.isArray(value)) return 'array';\n if (value instanceof Object && value.constructor.name !== 'Object') {\n return value.constructor.name;\n }\n }\n\n return nativeType;\n};\n\nexport { ContentManagerPlugin };\nexport type {\n EditViewContext,\n ListViewContext,\n BulkActionComponent,\n BulkActionComponentProps,\n BulkActionDescription,\n DescriptionComponent,\n DescriptionReducer,\n PanelComponentProps,\n PanelComponent,\n PanelDescription,\n DocumentActionComponent,\n DocumentActionDescription,\n DocumentActionProps,\n HeaderActionComponent,\n HeaderActionDescription,\n HeaderActionProps,\n};\n"],"names":["ContentManagerPlugin","addEditViewSidePanel","panels","Array","isArray","editViewSidePanels","Error","getPrintableType","addDocumentAction","actions","documentActions","addDocumentHeaderAction","headerActions","addBulkAction","bulkActions","config","id","PLUGIN_ID","name","injectionZones","INJECTION_ZONES","apis","bind","getBulkActions","getDocumentActions","position","filter","action","undefined","flat","includes","getEditViewSidePanels","getHeaderActions","DEFAULT_BULK_ACTIONS","DEFAULT_ACTIONS","DEFAULT_TABLE_ROW_ACTIONS","DEFAULT_HEADER_ACTIONS","ActionsPanel","value","nativeType","Object"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"HistoryAction.js","sources":["../../../../admin/src/history/components/HistoryAction.tsx"],"sourcesContent":["import { useQueryParams, useTracking } from '@strapi/admin/strapi-admin';\nimport { ClockCounterClockwise } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\nimport type { DocumentActionComponent } from '../../content-manager';\n\nconst HistoryAction: DocumentActionComponent = ({ model, document }) => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n if (!window.strapi.features.isEnabled('cms-content-history')) {\n return null;\n }\n\n const handleOnClick = () => {\n const destination = { pathname: 'history', search: pluginsQueryParams };\n trackUsage('willNavigate', {\n from: pathname,\n to: `${pathname}/${destination.pathname}`,\n });\n navigate(destination);\n };\n\n return {\n icon: <ClockCounterClockwise />,\n label: formatMessage({\n id: 'content-manager.history.document-action',\n defaultMessage: 'Content History',\n }),\n onClick: handleOnClick,\n disabled:\n /**\n * The user is creating a new document.\n * It hasn't been saved yet, so there's no history to go to\n */\n !document ||\n /**\n * The document has been created but the current dimension has never been saved.\n * For example, the user is creating a new locale in an existing document,\n * so there's no history for the document in that locale\n */\n !document.id ||\n /**\n * History is only available for content types created by the user.\n * These have the `api::` prefix, as opposed to the ones created by Strapi or plugins,\n * which start with `admin::` or `plugin::`\n */\n !model.startsWith('api::'),\n position: 'header',\n };\n};\n\nHistoryAction.type = 'history';\nHistoryAction.position = 'header';\n\nexport { HistoryAction };\n"],"names":["HistoryAction","model","document","formatMessage","useIntl","query","useQueryParams","navigate","useNavigate","trackUsage","useTracking","pathname","useLocation","pluginsQueryParams","stringify","plugins","encode","window","strapi","features","isEnabled","handleOnClick","destination","search","from","to","icon","_jsx","ClockCounterClockwise","label","id","defaultMessage","onClick","disabled","startsWith","position","type"],"mappings":";;;;;;;;;AAQA,MAAMA,gBAAyC,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAA;IACjE,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AACpB,IAAA,MAAMC,QAAWC,GAAAA,0BAAAA,EAAAA;IACjB,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;IACvB,MAAM,EAAEC,QAAQ,EAAE,GAAGC,0BAAAA,EAAAA;AACrB,IAAA,MAAMC,qBAAqBC,YAAU,CAAA;AAAEC,QAAAA,OAAAA,EAASV,MAAMU;KAAW,EAAA;QAAEC,MAAQ,EAAA;AAAM,KAAA,CAAA;IAEjF,IAAI,CAACC,OAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAAC,qBAAwB,CAAA,EAAA;QAC5D,OAAO,IAAA;AACT;AAEA,IAAA,MAAMC,aAAgB,GAAA,IAAA;AACpB,QAAA,MAAMC,WAAc,GAAA;YAAEX,QAAU,EAAA,SAAA;YAAWY,MAAQV,EAAAA;AAAmB,SAAA;AACtEJ,QAAAA,UAAAA,CAAW,cAAgB,EAAA;YACzBe,IAAMb,EAAAA,QAAAA;YACNc,EAAI,EAAA,CAAC,EAAEd,QAAS,CAAA,CAAC,EAAEW,WAAYX,CAAAA,QAAQ,CAAC;AAC1C,SAAA,CAAA;QACAJ,QAASe,CAAAA,WAAAA,CAAAA;AACX,KAAA;IAEA,OAAO;AACLI,QAAAA,IAAAA,gBAAMC,cAACC,CAAAA,2BAAAA,EAAAA,EAAAA,CAAAA;AACPC,QAAAA,KAAAA,EAAO1B,aAAc,CAAA;YACnB2B,EAAI,EAAA,yCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;QACAC,OAASX,EAAAA,aAAAA;QACTY,QACE;;;AAGC,UACD,CAAC/B,QACD;;;;UAKA,CAACA,QAAS4B,CAAAA,EAAE;;;;UAMZ,CAAC7B,KAAMiC,CAAAA,UAAU,CAAC,OAAA,CAAA;QACpBC,QAAU,EAAA;AACZ,KAAA;AACF;AAEAnC,aAAAA,CAAcoC,IAAI,GAAG,SAAA;AACrBpC,aAAAA,CAAcmC,QAAQ,GAAG,QAAA;;;;"}
1
+ {"version":3,"file":"HistoryAction.js","sources":["../../../../admin/src/history/components/HistoryAction.tsx"],"sourcesContent":["import { useQueryParams, useTracking } from '@strapi/admin/strapi-admin';\nimport { ClockCounterClockwise } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\nimport type { DocumentActionComponent } from '../../content-manager';\n\nconst HistoryAction: DocumentActionComponent = ({ model, document }) => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n if (!window.strapi.features.isEnabled('cms-content-history')) {\n return null;\n }\n\n const handleOnClick = () => {\n const destination = { pathname: 'history', search: pluginsQueryParams };\n trackUsage('willNavigate', {\n from: pathname,\n to: `${pathname}/${destination.pathname}`,\n });\n navigate(destination);\n };\n\n return {\n icon: <ClockCounterClockwise />,\n label: formatMessage({\n id: 'content-manager.history.document-action',\n defaultMessage: 'Content History',\n }),\n onClick: handleOnClick,\n disabled:\n /**\n * The user is creating a new document.\n * It hasn't been saved yet, so there's no history to go to\n */\n !document ||\n /**\n * The document has been created but the current dimension has never been saved.\n * For example, the user is creating a new locale in an existing document,\n * so there's no history for the document in that locale\n */\n !document.id ||\n /**\n * History is only available for content types created by the user.\n * These have the `api::` prefix, as opposed to the ones created by Strapi or plugins,\n * which start with `admin::` or `plugin::`\n */\n !model.startsWith('api::'),\n position: 'header',\n };\n};\n\nHistoryAction.type = 'history';\nHistoryAction.position = 'header';\n\nexport { HistoryAction };\n"],"names":["HistoryAction","model","document","formatMessage","useIntl","query","useQueryParams","navigate","useNavigate","trackUsage","useTracking","pathname","useLocation","pluginsQueryParams","stringify","plugins","encode","window","strapi","features","isEnabled","handleOnClick","destination","search","from","to","icon","_jsx","ClockCounterClockwise","label","id","defaultMessage","onClick","disabled","startsWith","position","type"],"mappings":";;;;;;;;;AAQA,MAAMA,gBAAyC,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAA;IACjE,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AACpB,IAAA,MAAMC,QAAWC,GAAAA,0BAAAA,EAAAA;IACjB,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;IACvB,MAAM,EAAEC,QAAQ,EAAE,GAAGC,0BAAAA,EAAAA;AACrB,IAAA,MAAMC,qBAAqBC,YAAU,CAAA;AAAEC,QAAAA,OAAAA,EAASV,MAAMU;KAAW,EAAA;QAAEC,MAAQ,EAAA;AAAM,KAAA,CAAA;IAEjF,IAAI,CAACC,OAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAAC,qBAAwB,CAAA,EAAA;QAC5D,OAAO,IAAA;AACT;AAEA,IAAA,MAAMC,aAAgB,GAAA,IAAA;AACpB,QAAA,MAAMC,WAAc,GAAA;YAAEX,QAAU,EAAA,SAAA;YAAWY,MAAQV,EAAAA;AAAmB,SAAA;AACtEJ,QAAAA,UAAAA,CAAW,cAAgB,EAAA;YACzBe,IAAMb,EAAAA,QAAAA;AACNc,YAAAA,EAAAA,EAAI,GAAGd,QAAS,CAAA,CAAC,EAAEW,WAAAA,CAAYX,QAAQ,CAAE;AAC3C,SAAA,CAAA;QACAJ,QAASe,CAAAA,WAAAA,CAAAA;AACX,KAAA;IAEA,OAAO;AACLI,QAAAA,IAAAA,gBAAMC,cAACC,CAAAA,2BAAAA,EAAAA,EAAAA,CAAAA;AACPC,QAAAA,KAAAA,EAAO1B,aAAc,CAAA;YACnB2B,EAAI,EAAA,yCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;QACAC,OAASX,EAAAA,aAAAA;QACTY,QACE;;;AAGC,UACD,CAAC/B,QACD;;;;UAKA,CAACA,QAAS4B,CAAAA,EAAE;;;;UAMZ,CAAC7B,KAAMiC,CAAAA,UAAU,CAAC,OAAA,CAAA;QACpBC,QAAU,EAAA;AACZ,KAAA;AACF;AAEAnC,aAAAA,CAAcoC,IAAI,GAAG,SAAA;AACrBpC,aAAAA,CAAcmC,QAAQ,GAAG,QAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"HistoryAction.mjs","sources":["../../../../admin/src/history/components/HistoryAction.tsx"],"sourcesContent":["import { useQueryParams, useTracking } from '@strapi/admin/strapi-admin';\nimport { ClockCounterClockwise } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\nimport type { DocumentActionComponent } from '../../content-manager';\n\nconst HistoryAction: DocumentActionComponent = ({ model, document }) => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n if (!window.strapi.features.isEnabled('cms-content-history')) {\n return null;\n }\n\n const handleOnClick = () => {\n const destination = { pathname: 'history', search: pluginsQueryParams };\n trackUsage('willNavigate', {\n from: pathname,\n to: `${pathname}/${destination.pathname}`,\n });\n navigate(destination);\n };\n\n return {\n icon: <ClockCounterClockwise />,\n label: formatMessage({\n id: 'content-manager.history.document-action',\n defaultMessage: 'Content History',\n }),\n onClick: handleOnClick,\n disabled:\n /**\n * The user is creating a new document.\n * It hasn't been saved yet, so there's no history to go to\n */\n !document ||\n /**\n * The document has been created but the current dimension has never been saved.\n * For example, the user is creating a new locale in an existing document,\n * so there's no history for the document in that locale\n */\n !document.id ||\n /**\n * History is only available for content types created by the user.\n * These have the `api::` prefix, as opposed to the ones created by Strapi or plugins,\n * which start with `admin::` or `plugin::`\n */\n !model.startsWith('api::'),\n position: 'header',\n };\n};\n\nHistoryAction.type = 'history';\nHistoryAction.position = 'header';\n\nexport { HistoryAction };\n"],"names":["HistoryAction","model","document","formatMessage","useIntl","query","useQueryParams","navigate","useNavigate","trackUsage","useTracking","pathname","useLocation","pluginsQueryParams","stringify","plugins","encode","window","strapi","features","isEnabled","handleOnClick","destination","search","from","to","icon","_jsx","ClockCounterClockwise","label","id","defaultMessage","onClick","disabled","startsWith","position","type"],"mappings":";;;;;;;AAQA,MAAMA,gBAAyC,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAA;IACjE,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AACpB,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;IACvB,MAAM,EAAEC,QAAQ,EAAE,GAAGC,WAAAA,EAAAA;AACrB,IAAA,MAAMC,qBAAqBC,SAAU,CAAA;AAAEC,QAAAA,OAAAA,EAASV,MAAMU;KAAW,EAAA;QAAEC,MAAQ,EAAA;AAAM,KAAA,CAAA;IAEjF,IAAI,CAACC,OAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAAC,qBAAwB,CAAA,EAAA;QAC5D,OAAO,IAAA;AACT;AAEA,IAAA,MAAMC,aAAgB,GAAA,IAAA;AACpB,QAAA,MAAMC,WAAc,GAAA;YAAEX,QAAU,EAAA,SAAA;YAAWY,MAAQV,EAAAA;AAAmB,SAAA;AACtEJ,QAAAA,UAAAA,CAAW,cAAgB,EAAA;YACzBe,IAAMb,EAAAA,QAAAA;YACNc,EAAI,EAAA,CAAC,EAAEd,QAAS,CAAA,CAAC,EAAEW,WAAYX,CAAAA,QAAQ,CAAC;AAC1C,SAAA,CAAA;QACAJ,QAASe,CAAAA,WAAAA,CAAAA;AACX,KAAA;IAEA,OAAO;AACLI,QAAAA,IAAAA,gBAAMC,GAACC,CAAAA,qBAAAA,EAAAA,EAAAA,CAAAA;AACPC,QAAAA,KAAAA,EAAO1B,aAAc,CAAA;YACnB2B,EAAI,EAAA,yCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;QACAC,OAASX,EAAAA,aAAAA;QACTY,QACE;;;AAGC,UACD,CAAC/B,QACD;;;;UAKA,CAACA,QAAS4B,CAAAA,EAAE;;;;UAMZ,CAAC7B,KAAMiC,CAAAA,UAAU,CAAC,OAAA,CAAA;QACpBC,QAAU,EAAA;AACZ,KAAA;AACF;AAEAnC,aAAAA,CAAcoC,IAAI,GAAG,SAAA;AACrBpC,aAAAA,CAAcmC,QAAQ,GAAG,QAAA;;;;"}
1
+ {"version":3,"file":"HistoryAction.mjs","sources":["../../../../admin/src/history/components/HistoryAction.tsx"],"sourcesContent":["import { useQueryParams, useTracking } from '@strapi/admin/strapi-admin';\nimport { ClockCounterClockwise } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\nimport type { DocumentActionComponent } from '../../content-manager';\n\nconst HistoryAction: DocumentActionComponent = ({ model, document }) => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n if (!window.strapi.features.isEnabled('cms-content-history')) {\n return null;\n }\n\n const handleOnClick = () => {\n const destination = { pathname: 'history', search: pluginsQueryParams };\n trackUsage('willNavigate', {\n from: pathname,\n to: `${pathname}/${destination.pathname}`,\n });\n navigate(destination);\n };\n\n return {\n icon: <ClockCounterClockwise />,\n label: formatMessage({\n id: 'content-manager.history.document-action',\n defaultMessage: 'Content History',\n }),\n onClick: handleOnClick,\n disabled:\n /**\n * The user is creating a new document.\n * It hasn't been saved yet, so there's no history to go to\n */\n !document ||\n /**\n * The document has been created but the current dimension has never been saved.\n * For example, the user is creating a new locale in an existing document,\n * so there's no history for the document in that locale\n */\n !document.id ||\n /**\n * History is only available for content types created by the user.\n * These have the `api::` prefix, as opposed to the ones created by Strapi or plugins,\n * which start with `admin::` or `plugin::`\n */\n !model.startsWith('api::'),\n position: 'header',\n };\n};\n\nHistoryAction.type = 'history';\nHistoryAction.position = 'header';\n\nexport { HistoryAction };\n"],"names":["HistoryAction","model","document","formatMessage","useIntl","query","useQueryParams","navigate","useNavigate","trackUsage","useTracking","pathname","useLocation","pluginsQueryParams","stringify","plugins","encode","window","strapi","features","isEnabled","handleOnClick","destination","search","from","to","icon","_jsx","ClockCounterClockwise","label","id","defaultMessage","onClick","disabled","startsWith","position","type"],"mappings":";;;;;;;AAQA,MAAMA,gBAAyC,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAA;IACjE,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AACpB,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;IACvB,MAAM,EAAEC,QAAQ,EAAE,GAAGC,WAAAA,EAAAA;AACrB,IAAA,MAAMC,qBAAqBC,SAAU,CAAA;AAAEC,QAAAA,OAAAA,EAASV,MAAMU;KAAW,EAAA;QAAEC,MAAQ,EAAA;AAAM,KAAA,CAAA;IAEjF,IAAI,CAACC,OAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAAC,qBAAwB,CAAA,EAAA;QAC5D,OAAO,IAAA;AACT;AAEA,IAAA,MAAMC,aAAgB,GAAA,IAAA;AACpB,QAAA,MAAMC,WAAc,GAAA;YAAEX,QAAU,EAAA,SAAA;YAAWY,MAAQV,EAAAA;AAAmB,SAAA;AACtEJ,QAAAA,UAAAA,CAAW,cAAgB,EAAA;YACzBe,IAAMb,EAAAA,QAAAA;AACNc,YAAAA,EAAAA,EAAI,GAAGd,QAAS,CAAA,CAAC,EAAEW,WAAAA,CAAYX,QAAQ,CAAE;AAC3C,SAAA,CAAA;QACAJ,QAASe,CAAAA,WAAAA,CAAAA;AACX,KAAA;IAEA,OAAO;AACLI,QAAAA,IAAAA,gBAAMC,GAACC,CAAAA,qBAAAA,EAAAA,EAAAA,CAAAA;AACPC,QAAAA,KAAAA,EAAO1B,aAAc,CAAA;YACnB2B,EAAI,EAAA,yCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;QACAC,OAASX,EAAAA,aAAAA;QACTY,QACE;;;AAGC,UACD,CAAC/B,QACD;;;;UAKA,CAACA,QAAS4B,CAAAA,EAAE;;;;UAMZ,CAAC7B,KAAMiC,CAAAA,UAAU,CAAC,OAAA,CAAA;QACpBC,QAAU,EAAA;AACZ,KAAA;AACF;AAEAnC,aAAAA,CAAcoC,IAAI,GAAG,SAAA;AACrBpC,aAAAA,CAAcmC,QAAQ,GAAG,QAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"VersionHeader.js","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button fullWidth variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","fullWidth","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
1
+ {"version":3,"file":"VersionHeader.js","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button fullWidth variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","fullWidth","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BaA,MAAAA,aAAAA,GAAgB,CAAC,EAAEC,QAAQ,EAAsB,GAAA;AAC5D,IAAA,MAAM,CAACC,mBAAqBC,EAAAA,sBAAAA,CAAuB,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AACrE,IAAA,MAAMC,QAAWC,GAAAA,0BAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,aAAa,EAAEC,UAAU,EAAE,GAAGC,iBAAAA,EAAAA;IACtC,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;IACvB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAC/B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AAGpB,IAAA,MAAM,EAAEC,cAAc,EAAEC,IAAI,EAAE,GAAGC,wBAAAA,EAAAA;AACjC,IAAA,MAAM,CAACC,cAAgB,EAAA,EAAEC,SAAS,EAAE,CAAC,GAAGC,wCAAAA,EAAAA;IACxC,MAAM,EAAEC,cAAc,EAAE,GAAGC,mBAAAA,CAAQC,mBAAYC,GAAG,CAAC,CAACC,MAAAA,IAAY;AAAEA,YAAAA,MAAAA;YAAQC,OAASV,EAAAA;SAAK,CAAA,CAAA,CAAA;AAExF,IAAA,MAAMW,UAAUC,yBAAkB,CAAA,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAMC,eAAe,CAAA;AACnF,IAAA,MAAMC,YAAYH,yBAAkB,CAAA,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAME,SAAS,CAAA;AAC/E,IAAA,MAAMC,SAASJ,yBAAkB,CAAA,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAMG,MAAM,CAAA;IACzE,MAAMC,gBAAAA,GAAmBL,0BACvB,eACA,EAAA,CAACC,QAAUA,KAAMK,CAAAA,IAAI,KAAK,CAAKL,IAAAA,KAAAA,CAAMM,QAAQ,CAACC,IAAI,CAAC,CAAE,CAAA,CAACC,EAAE,KAAKR,KAAAA,CAAMC,eAAe,CAACO,EAAE,CAAA;AAGvF,IAAA,MAAMC,cAAiBX,GAAAA,OAAAA,CAAQS,IAAI,CAACL,SAAU,CAAA;AAE9C,IAAA,MAAMQ,iBAAoB,GAAA,IAAA;AACxB,QAAA,MAAMC,qBAAqBC,YAAU,CAAA;AAAEC,YAAAA,OAAAA,EAAS7B,MAAM6B;SAAW,EAAA;YAAEC,MAAQ,EAAA;AAAM,SAAA,CAAA;QAEjF,OAAO;YACLC,QAAU,EAAA,IAAA;YACVC,MAAQL,EAAAA;AACV,SAAA;AACF,KAAA;AAEA,IAAA,MAAMM,aAAgB,GAAA,UAAA;QACpB,IAAI;YACF,MAAMC,QAAAA,GAAW,MAAM7B,cAAe,CAAA;AACpC8B,gBAAAA,UAAAA,EAAYrB,QAAQsB,iBAAiB;AACrClC,gBAAAA,cAAAA;gBACAmC,MAAQ,EAAA;AACNC,oBAAAA,SAAAA,EAAWxB,QAAQU,EAAE;AACrBe,oBAAAA,WAAAA,EAAazB,QAAQyB;AACvB,iBAAA;gBACAC,IAAM,EAAA;AAAED,oBAAAA,WAAAA,EAAazB,QAAQyB;AAAY;AAC3C,aAAA,CAAA;AAEA,YAAA,IAAI,UAAUL,QAAU,EAAA;AACtB3C,gBAAAA,QAAAA,CAASmC,iBAAqB,EAAA,EAAA;oBAAEe,QAAU,EAAA;AAAO,iBAAA,CAAA;gBAEjD3C,kBAAmB,CAAA;oBACjB4C,IAAM,EAAA,SAAA;AACNC,oBAAAA,KAAAA,EAAOlD,aAAc,CAAA;wBACnB+B,EAAI,EAAA,uCAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA,CAAA;AACAC,oBAAAA,OAAAA,EAASpD,aAAc,CAAA;wBACrB+B,EAAI,EAAA,yCAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;AACF,iBAAA,CAAA;gBAEAhD,UAAW,CAAA,0BAAA,CAAA;AACb;AAEA,YAAA,IAAI,WAAWsC,QAAU,EAAA;gBACvBpC,kBAAmB,CAAA;oBACjB4C,IAAM,EAAA,QAAA;AACNG,oBAAAA,OAAAA,EAASpD,aAAc,CAAA;wBACrB+B,EAAI,EAAA,+CAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;AACF,iBAAA,CAAA;AACF;AACF,SAAA,CAAE,OAAOE,KAAO,EAAA;YACdhD,kBAAmB,CAAA;gBACjB4C,IAAM,EAAA,QAAA;AACNG,gBAAAA,OAAAA,EAASpD,aAAc,CAAA;oBAAE+B,EAAI,EAAA,oBAAA;oBAAsBoB,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF;AACF,KAAA;IAEA,qBACEG,eAAA,CAACC,oBAAOC,IAAI,EAAA;QAACC,IAAM/D,EAAAA,mBAAAA;QAAqBgE,YAAc/D,EAAAA,sBAAAA;;AACpD,0BAAAgE,cAAA,CAACC,oBAAQC,UAAU,EAAA;gBACjB9B,EAAItC,EAAAA,QAAAA;AACJyD,gBAAAA,KAAAA,EAAOjD,UAAW,CAAA,IAAI6D,IAAKzC,CAAAA,OAAAA,CAAQ0C,SAAS,CAAG,EAAA;oBAC7CC,IAAM,EAAA,SAAA;oBACNC,KAAO,EAAA,SAAA;oBACPC,GAAK,EAAA,SAAA;oBACLC,IAAM,EAAA,SAAA;oBACNC,MAAQ,EAAA;AACV,iBAAA,CAAA;AACAC,gBAAAA,eAAAA,gBACEV,cAACW,CAAAA,yBAAAA,EAAAA;AACCC,oBAAAA,KAAAA,EAAOvE,aAAc,CAAA;wBACnB+B,EAAI,EAAA,iCAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;;AAGJqB,gBAAAA,QAAAA,gBACEb,cAACc,CAAAA,uBAAAA,EAAAA;oBAAWC,OAAQ,EAAA,SAAA;oBAAUC,SAAU,EAAA,YAAA;8BACrC3E,aACC,CAAA;wBACE+B,EAAI,EAAA,0CAAA;wBACJoB,cACE,EAAA;qBAEJ,EAAA;wBACEyB,SAAWC,EAAAA,OAAAA,CAAQxD,QAAQyD,MAAM,CAAA;AACjCN,wBAAAA,QAAAA,EAAU,CAAGxC,EAAAA,cAAAA,IAAkB,EAAG,CAAA,EAAE,EAAEN,MAAAA,CAAOqD,IAAI,CAACC,YAAY,CAAC,CAAC,CAAC,CAACC,IAAI,EAAA;wBACtEH,MAAQzD,EAAAA,OAAAA,CAAQyD,MAAM,EAAEI;AAC1B,qBAAA;;AAINC,gBAAAA,gBAAAA,gBACExB,cAACyB,CAAAA,iBAAAA,EAAAA;AACCC,oBAAAA,SAAAA,gBAAW1B,cAAC2B,CAAAA,eAAAA,EAAAA,EAAAA,CAAAA;oBACZC,GAAKC,EAAAA,sBAAAA;oBACLC,EAAIxD,EAAAA,iBAAAA,EAAAA;oBACJe,QAAS,EAAA,MAAA;oBACT0C,UAAY,EAAA,KAAA;8BAEX1F,aAAc,CAAA;wBACb+B,EAAI,EAAA,aAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;;gBAGJwC,MAAQ,EAAA,KAAA;gBACRC,aACE,gBAAAjC,cAAA,CAACJ,oBAAOsC,OAAO,EAAA;AACb,oBAAA,QAAA,gBAAAlC,cAACmC,CAAAA,mBAAAA,EAAAA;wBACCC,QAAU,EAAA,CAAChF,cAAeiF,CAAAA,SAAS,IAAIrE,gBAAAA;wBACvCsE,OAAS,EAAA,IAAA;4BACPtG,sBAAuB,CAAA,IAAA,CAAA;AACzB,yBAAA;kCAECK,aAAc,CAAA;4BACb+B,EAAI,EAAA,gDAAA;4BACJoB,cAAgB,EAAA;AAClB,yBAAA;;;;0BAKRQ,cAACuC,CAAAA,yBAAAA,EAAAA;gBACCC,SAAW3D,EAAAA,aAAAA;AACX4D,gBAAAA,SAAAA,gBACEzC,cAACmC,CAAAA,mBAAAA,EAAAA;oBAAOO,SAAS,EAAA,IAAA;oBAAC3B,OAAQ,EAAA,WAAA;oBAAYuB,OAASzD,EAAAA,aAAAA;oBAAe8D,OAASzF,EAAAA,SAAAA;8BACpEb,aAAc,CAAA;wBACb+B,EAAI,EAAA,gDAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;;AAIJ,gBAAA,QAAA,gBAAAG,eAACiD,CAAAA,iBAAAA,EAAAA;oBACCC,SAAU,EAAA,QAAA;oBACVC,UAAW,EAAA,QAAA;oBACXC,cAAe,EAAA,QAAA;oBACfC,GAAK,EAAA,CAAA;oBACLC,SAAU,EAAA,QAAA;;sCAEVjD,cAAC4C,CAAAA,iBAAAA,EAAAA;4BAAKG,cAAe,EAAA,QAAA;AACnB,4BAAA,QAAA,gBAAA/C,cAACkD,CAAAA,mBAAAA,EAAAA;gCAAcC,KAAM,EAAA,MAAA;gCAAOC,MAAO,EAAA,MAAA;gCAAOC,IAAK,EAAA;;;sCAEjDrD,cAACc,CAAAA,uBAAAA,EAAAA;sCACEzE,aAAc,CAAA;gCACb+B,EAAI,EAAA,+CAAA;gCACJoB,cAAgB,EAAA;AAClB,6BAAA;;sCAEFQ,cAACc,CAAAA,uBAAAA,EAAAA;sCACEzE,aACC,CAAA;gCACE+B,EAAI,EAAA,iDAAA;gCACJoB,cACE,EAAA;6BAEJ,EAAA;gCACE8D,OAAS5F,EAAAA,OAAAA,CAAQ6F,MAAM,KAAK;AAC9B,6BAAA;;;;;;;AAOd;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"VersionHeader.mjs","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button fullWidth variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","fullWidth","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
1
+ {"version":3,"file":"VersionHeader.mjs","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button fullWidth variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","fullWidth","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"VersionInputRenderer.js","sources":["../../../../admin/src/history/components/VersionInputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n Form,\n} from '@strapi/admin/strapi-admin';\nimport { Alert, Box, Field, Flex, Link, Tooltip, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { HistoryVersionDataResponse } from '../../../../shared/contracts/history-versions';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport { useDocLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { BlocksInput } from '../../pages/EditView/components/FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from '../../pages/EditView/components/FormInputs/Component/Input';\nimport {\n DynamicZone,\n useDynamicZone,\n} from '../../pages/EditView/components/FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from '../../pages/EditView/components/FormInputs/NotAllowed';\nimport { UIDInput } from '../../pages/EditView/components/FormInputs/UID';\nimport { Wysiwyg } from '../../pages/EditView/components/FormInputs/Wysiwyg/Field';\nimport { useFieldHint } from '../../pages/EditView/components/InputRenderer';\nimport { getRelationLabel } from '../../utils/relations';\nimport { useHistoryContext } from '../pages/History';\n\nimport { getRemaingFieldsLayout } from './VersionContent';\n\nimport type { EditFieldLayout } from '../../hooks/useDocumentLayout';\nimport type { RelationsFieldProps } from '../../pages/EditView/components/FormInputs/Relations/Relations';\nimport type { RelationResult } from '../../services/relations';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\nconst StyledAlert = styled(Alert).attrs({ closeLabel: 'Close', onClose: () => {}, shadow: 'none' })`\n button {\n display: none;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * CustomRelationInput\n * -----------------------------------------------------------------------------------------------*/\n\nconst LinkEllipsis = styled(Link)`\n display: block;\n\n & > span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n`;\n\nconst CustomRelationInput = (props: RelationsFieldProps) => {\n const { formatMessage } = useIntl();\n const field = useField<\n { results: RelationResult[]; meta: { missingCount: number } } | RelationResult[]\n >(props.name);\n\n /**\n * Ideally the server would return the correct shape, however, for admin user relations\n * it sanitizes everything out when it finds an object for the relation value.\n */\n let formattedFieldValue;\n if (field) {\n formattedFieldValue = Array.isArray(field.value)\n ? { results: field.value, meta: { missingCount: 0 } }\n : field.value;\n }\n\n if (\n !formattedFieldValue ||\n (formattedFieldValue.results.length === 0 && formattedFieldValue.meta.missingCount === 0)\n ) {\n return (\n <>\n <Field.Label action={props.labelAction}>{props.label}</Field.Label>\n <Box marginTop={1}>\n {/* @ts-expect-error – we dont need closeLabel */}\n <StyledAlert variant=\"default\">\n {formatMessage({\n id: 'content-manager.history.content.no-relations',\n defaultMessage: 'No relations.',\n })}\n </StyledAlert>\n </Box>\n </>\n );\n }\n\n const { results, meta } = formattedFieldValue;\n\n return (\n <Box>\n <Field.Label>{props.label}</Field.Label>\n {results.length > 0 && (\n <Flex direction=\"column\" gap={2} marginTop={1} alignItems=\"stretch\">\n {results.map((relationData) => {\n // @ts-expect-error - targetModel does exist on the attribute. But it's not typed.\n const { targetModel } = props.attribute;\n const href = `../${COLLECTION_TYPES}/${targetModel}/${relationData.documentId}`;\n const label = getRelationLabel(relationData, props.mainField);\n const isAdminUserRelation = targetModel === 'admin::user';\n\n return (\n <Flex\n key={relationData.documentId ?? relationData.id}\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background=\"neutral150\"\n justifyContent=\"space-between\"\n >\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <Tooltip label={label}>\n {isAdminUserRelation ? (\n <Typography>{label}</Typography>\n ) : (\n <LinkEllipsis tag={NavLink} to={href}>\n {label}\n </LinkEllipsis>\n )}\n </Tooltip>\n </Box>\n <DocumentStatus status={relationData.status as string} />\n </Flex>\n );\n })}\n </Flex>\n )}\n {meta.missingCount > 0 && (\n /* @ts-expect-error – we dont need closeLabel */\n <StyledAlert\n marginTop={1}\n variant=\"warning\"\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.title',\n defaultMessage:\n '{number, plural, =1 {Missing relation} other {{number} missing relations}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CustomMediaInput\n * -----------------------------------------------------------------------------------------------*/\n\n// Create an object with value at key path (i.e. 'a.b.c')\nconst createInitialValuesForPath = (keyPath: string, value: any) => {\n const keys = keyPath.split('.');\n // The root level object\n const root: Record<string, any> = {};\n\n // Make the first node the root\n let node = root;\n keys.forEach((key, index) => {\n // Skip prototype pollution keys\n if (key === '__proto__' || key === 'constructor') return;\n // If it's the last key, set the node value\n if (index === keys.length - 1) {\n node[key] = value;\n } else {\n // Ensure the key exists and is an object\n node[key] = node[key] || {};\n }\n\n // Traverse down the tree\n node = node[key];\n });\n\n return root;\n};\n\nconst CustomMediaInput = (props: VersionInputRendererProps) => {\n const { value } = useField(props.name);\n const results = value?.results ?? [];\n const meta = value?.meta ?? { missingCount: 0 };\n\n const { formatMessage } = useIntl();\n\n const fields = useStrapiApp('CustomMediaInput', (state) => state.fields);\n const MediaLibrary = fields.media as React.ComponentType<\n VersionInputRendererProps & { multiple: boolean }\n >;\n\n return (\n <Flex direction=\"column\" gap={2} alignItems=\"stretch\">\n <Form\n method=\"PUT\"\n disabled={true}\n initialValues={createInitialValuesForPath(props.name, results)}\n >\n <MediaLibrary {...props} disabled={true} multiple={results.length > 1} />\n </Form>\n {meta.missingCount > 0 && (\n <StyledAlert\n variant=\"warning\"\n closeLabel=\"Close\"\n onClose={() => {}}\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.title',\n defaultMessage:\n '{number, plural, =1 {Missing asset} other {{number} missing assets}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted in the Media Library and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Flex>\n );\n};\n\ntype VersionInputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n /**\n * In the context of content history, deleted fields need to ignore RBAC\n * @default false\n */\n shouldIgnoreRBAC?: boolean;\n};\n\n/**\n * Checks if the i18n plugin added a label action to the field and modifies it\n * to adapt the wording for the history page.\n */\nconst getLabelAction = (labelAction: VersionInputRendererProps['labelAction']) => {\n if (!React.isValidElement(labelAction)) {\n return labelAction;\n }\n\n // TODO: find a better way to do this rather than access internals\n const labelActionTitleId = labelAction.props.title.id;\n\n if (labelActionTitleId === 'i18n.Field.localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.localized',\n defaultMessage:\n 'This value is specific to this locale. If you restore this version, the content will not be replaced for other locales.',\n },\n });\n }\n\n if (labelActionTitleId === 'i18n.Field.not-localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.not-localized',\n defaultMessage:\n 'This value is common to all locales. If you restore this version and save the changes, the content will be replaced for all locales.',\n },\n });\n }\n\n // Label action is unrelated to i18n, don't touch it.\n return labelAction;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed specifically\n * to be used on the History page in the content-manager. It understands how to render specific\n * inputs within the context of a history version (i.e. relations, media, ignored RBAC, etc...)\n */\nconst VersionInputRenderer = ({\n visible,\n hint: providedHint,\n shouldIgnoreRBAC = false,\n labelAction,\n ...props\n}: VersionInputRendererProps) => {\n const customLabelAction = getLabelAction(labelAction);\n\n const { formatMessage } = useIntl();\n const version = useHistoryContext('VersionContent', (state) => state.selectedVersion);\n const configuration = useHistoryContext('VersionContent', (state) => state.configuration);\n const fieldSizes = useTypedSelector((state) => state['content-manager'].app.fieldSizes);\n\n const { id, components } = useDoc();\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n const editableFields = id ? canUpdateFields : canCreateFields;\n const readableFields = id ? canReadFields : canCreateFields;\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const {\n edit: { components: componentsLayout },\n } = useDocLayout();\n\n if (!visible) {\n return null;\n }\n\n /**\n * Don't render the field if the user can't read it.\n */\n if (!shouldIgnoreRBAC && !canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Attributes found on the current content-type schema cannot be restored. We handle\n * this by displaying a warning alert to the user instead of the input for that field type.\n */\n const addedAttributes = version.meta.unknownAttributes.added;\n if (Object.keys(addedAttributes).includes(props.name)) {\n return (\n <Flex direction=\"column\" alignItems=\"flex-start\" gap={1}>\n <Field.Label>{props.label}</Field.Label>\n <StyledAlert\n width=\"100%\"\n closeLabel=\"Close\"\n onClose={() => {}}\n variant=\"warning\"\n title={formatMessage({\n id: 'content-manager.history.content.new-field.title',\n defaultMessage: 'New field',\n })}\n >\n {formatMessage({\n id: 'content-manager.history.content.new-field.message',\n defaultMessage:\n \"This field didn't exist when this version was saved. If you restore this version, it will be empty.\",\n })}\n </StyledAlert>\n </Flex>\n );\n }\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * Since media fields use a custom input via the upload plugin provided by the useLibrary hook,\n * we need to handle the them before other custom inputs coming from the useLibrary hook.\n */\n if (props.type === 'media') {\n return (\n <CustomMediaInput {...props} labelAction={customLabelAction} disabled={fieldIsDisabled} />\n );\n }\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n const { layout } = componentsLayout[props.attribute.component];\n // Components can only have one panel, so only save the first layout item\n const [remainingFieldsLayout] = getRemaingFieldsLayout({\n layout: [layout],\n metadatas: configuration.components[props.attribute.component].metadatas,\n fieldSizes,\n schemaAttributes: components[props.attribute.component].attributes,\n });\n\n return (\n <ComponentInput\n {...props}\n layout={[...layout, ...(remainingFieldsLayout || [])]}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return (\n <DynamicZone\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </DynamicZone>\n );\n case 'relation':\n return (\n <CustomRelationInput\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n return (\n <UIDInput\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nexport type { VersionInputRendererProps };\nexport { VersionInputRenderer };\n"],"names":["StyledAlert","styled","Alert","attrs","closeLabel","onClose","shadow","LinkEllipsis","Link","CustomRelationInput","props","formatMessage","useIntl","field","useField","name","formattedFieldValue","Array","isArray","value","results","meta","missingCount","length","_jsxs","_Fragment","_jsx","Field","Label","action","labelAction","label","Box","marginTop","variant","id","defaultMessage","Flex","direction","gap","alignItems","map","relationData","targetModel","attribute","href","COLLECTION_TYPES","documentId","getRelationLabel","mainField","isAdminUserRelation","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderColor","background","justifyContent","minWidth","Tooltip","Typography","tag","NavLink","to","DocumentStatus","status","title","number","createInitialValuesForPath","keyPath","keys","split","root","node","forEach","key","index","CustomMediaInput","fields","useStrapiApp","state","MediaLibrary","media","Form","method","disabled","initialValues","multiple","getLabelAction","React","isValidElement","labelActionTitleId","cloneElement","VersionInputRenderer","visible","hint","providedHint","shouldIgnoreRBAC","customLabelAction","version","useHistoryContext","selectedVersion","configuration","fieldSizes","useTypedSelector","app","components","useDoc","isFormDisabled","useForm","isInDynamicZone","useDynamicZone","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","editableFields","readableFields","canUserReadField","type","canUserEditField","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","edit","componentsLayout","useDocLayout","NotAllowedInput","fieldIsDisabled","addedAttributes","unknownAttributes","added","Object","includes","width","CustomInput","FormInputRenderer","addedInputTypes","BlocksInput","layout","component","remainingFieldsLayout","getRemaingFieldsLayout","metadatas","schemaAttributes","attributes","ComponentInput","inputProps","DynamicZone","Wysiwyg","UIDInput","options","enum","unique","_unique","_mainField","restProps"],"mappings":"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"}
1
+ {"version":3,"file":"VersionInputRenderer.js","sources":["../../../../admin/src/history/components/VersionInputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n Form,\n} from '@strapi/admin/strapi-admin';\nimport { Alert, Box, Field, Flex, Link, Tooltip, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { HistoryVersionDataResponse } from '../../../../shared/contracts/history-versions';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport { useDocLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useTypedSelector } from '../../modules/hooks';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { BlocksInput } from '../../pages/EditView/components/FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from '../../pages/EditView/components/FormInputs/Component/Input';\nimport {\n DynamicZone,\n useDynamicZone,\n} from '../../pages/EditView/components/FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from '../../pages/EditView/components/FormInputs/NotAllowed';\nimport { UIDInput } from '../../pages/EditView/components/FormInputs/UID';\nimport { Wysiwyg } from '../../pages/EditView/components/FormInputs/Wysiwyg/Field';\nimport { useFieldHint } from '../../pages/EditView/components/InputRenderer';\nimport { getRelationLabel } from '../../utils/relations';\nimport { useHistoryContext } from '../pages/History';\n\nimport { getRemaingFieldsLayout } from './VersionContent';\n\nimport type { EditFieldLayout } from '../../hooks/useDocumentLayout';\nimport type { RelationsFieldProps } from '../../pages/EditView/components/FormInputs/Relations/Relations';\nimport type { RelationResult } from '../../services/relations';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\nconst StyledAlert = styled(Alert).attrs({ closeLabel: 'Close', onClose: () => {}, shadow: 'none' })`\n button {\n display: none;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * CustomRelationInput\n * -----------------------------------------------------------------------------------------------*/\n\nconst LinkEllipsis = styled(Link)`\n display: block;\n\n & > span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n`;\n\nconst CustomRelationInput = (props: RelationsFieldProps) => {\n const { formatMessage } = useIntl();\n const field = useField<\n { results: RelationResult[]; meta: { missingCount: number } } | RelationResult[]\n >(props.name);\n\n /**\n * Ideally the server would return the correct shape, however, for admin user relations\n * it sanitizes everything out when it finds an object for the relation value.\n */\n let formattedFieldValue;\n if (field) {\n formattedFieldValue = Array.isArray(field.value)\n ? { results: field.value, meta: { missingCount: 0 } }\n : field.value;\n }\n\n if (\n !formattedFieldValue ||\n (formattedFieldValue.results.length === 0 && formattedFieldValue.meta.missingCount === 0)\n ) {\n return (\n <>\n <Field.Label action={props.labelAction}>{props.label}</Field.Label>\n <Box marginTop={1}>\n {/* @ts-expect-error – we dont need closeLabel */}\n <StyledAlert variant=\"default\">\n {formatMessage({\n id: 'content-manager.history.content.no-relations',\n defaultMessage: 'No relations.',\n })}\n </StyledAlert>\n </Box>\n </>\n );\n }\n\n const { results, meta } = formattedFieldValue;\n\n return (\n <Box>\n <Field.Label>{props.label}</Field.Label>\n {results.length > 0 && (\n <Flex direction=\"column\" gap={2} marginTop={1} alignItems=\"stretch\">\n {results.map((relationData) => {\n // @ts-expect-error - targetModel does exist on the attribute. But it's not typed.\n const { targetModel } = props.attribute;\n const href = `../${COLLECTION_TYPES}/${targetModel}/${relationData.documentId}`;\n const label = getRelationLabel(relationData, props.mainField);\n const isAdminUserRelation = targetModel === 'admin::user';\n\n return (\n <Flex\n key={relationData.documentId ?? relationData.id}\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background=\"neutral150\"\n justifyContent=\"space-between\"\n >\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <Tooltip label={label}>\n {isAdminUserRelation ? (\n <Typography>{label}</Typography>\n ) : (\n <LinkEllipsis tag={NavLink} to={href}>\n {label}\n </LinkEllipsis>\n )}\n </Tooltip>\n </Box>\n <DocumentStatus status={relationData.status as string} />\n </Flex>\n );\n })}\n </Flex>\n )}\n {meta.missingCount > 0 && (\n /* @ts-expect-error – we dont need closeLabel */\n <StyledAlert\n marginTop={1}\n variant=\"warning\"\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.title',\n defaultMessage:\n '{number, plural, =1 {Missing relation} other {{number} missing relations}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-relations.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CustomMediaInput\n * -----------------------------------------------------------------------------------------------*/\n\n// Create an object with value at key path (i.e. 'a.b.c')\nconst createInitialValuesForPath = (keyPath: string, value: any) => {\n const keys = keyPath.split('.');\n // The root level object\n const root: Record<string, any> = {};\n\n // Make the first node the root\n let node = root;\n keys.forEach((key, index) => {\n // Skip prototype pollution keys\n if (key === '__proto__' || key === 'constructor') return;\n // If it's the last key, set the node value\n if (index === keys.length - 1) {\n node[key] = value;\n } else {\n // Ensure the key exists and is an object\n node[key] = node[key] || {};\n }\n\n // Traverse down the tree\n node = node[key];\n });\n\n return root;\n};\n\nconst CustomMediaInput = (props: VersionInputRendererProps) => {\n const { value } = useField(props.name);\n const results = value?.results ?? [];\n const meta = value?.meta ?? { missingCount: 0 };\n\n const { formatMessage } = useIntl();\n\n const fields = useStrapiApp('CustomMediaInput', (state) => state.fields);\n const MediaLibrary = fields.media as React.ComponentType<\n VersionInputRendererProps & { multiple: boolean }\n >;\n\n return (\n <Flex direction=\"column\" gap={2} alignItems=\"stretch\">\n <Form\n method=\"PUT\"\n disabled={true}\n initialValues={createInitialValuesForPath(props.name, results)}\n >\n <MediaLibrary {...props} disabled={true} multiple={results.length > 1} />\n </Form>\n {meta.missingCount > 0 && (\n <StyledAlert\n variant=\"warning\"\n closeLabel=\"Close\"\n onClose={() => {}}\n title={formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.title',\n defaultMessage:\n '{number, plural, =1 {Missing asset} other {{number} missing assets}}',\n },\n { number: meta.missingCount }\n )}\n >\n {formatMessage(\n {\n id: 'content-manager.history.content.missing-assets.message',\n defaultMessage:\n \"{number, plural, =1 {It has} other {They have}} been deleted in the Media Library and can't be restored.\",\n },\n { number: meta.missingCount }\n )}\n </StyledAlert>\n )}\n </Flex>\n );\n};\n\ntype VersionInputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n /**\n * In the context of content history, deleted fields need to ignore RBAC\n * @default false\n */\n shouldIgnoreRBAC?: boolean;\n};\n\n/**\n * Checks if the i18n plugin added a label action to the field and modifies it\n * to adapt the wording for the history page.\n */\nconst getLabelAction = (labelAction: VersionInputRendererProps['labelAction']) => {\n if (!React.isValidElement(labelAction)) {\n return labelAction;\n }\n\n // TODO: find a better way to do this rather than access internals\n const labelActionTitleId = labelAction.props.title.id;\n\n if (labelActionTitleId === 'i18n.Field.localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.localized',\n defaultMessage:\n 'This value is specific to this locale. If you restore this version, the content will not be replaced for other locales.',\n },\n });\n }\n\n if (labelActionTitleId === 'i18n.Field.not-localized') {\n return React.cloneElement(labelAction, {\n ...labelAction.props,\n title: {\n id: 'history.content.not-localized',\n defaultMessage:\n 'This value is common to all locales. If you restore this version and save the changes, the content will be replaced for all locales.',\n },\n });\n }\n\n // Label action is unrelated to i18n, don't touch it.\n return labelAction;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed specifically\n * to be used on the History page in the content-manager. It understands how to render specific\n * inputs within the context of a history version (i.e. relations, media, ignored RBAC, etc...)\n */\nconst VersionInputRenderer = ({\n visible,\n hint: providedHint,\n shouldIgnoreRBAC = false,\n labelAction,\n ...props\n}: VersionInputRendererProps) => {\n const customLabelAction = getLabelAction(labelAction);\n\n const { formatMessage } = useIntl();\n const version = useHistoryContext('VersionContent', (state) => state.selectedVersion);\n const configuration = useHistoryContext('VersionContent', (state) => state.configuration);\n const fieldSizes = useTypedSelector((state) => state['content-manager'].app.fieldSizes);\n\n const { id, components } = useDoc();\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n const editableFields = id ? canUpdateFields : canCreateFields;\n const readableFields = id ? canReadFields : canCreateFields;\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const {\n edit: { components: componentsLayout },\n } = useDocLayout();\n\n if (!visible) {\n return null;\n }\n\n /**\n * Don't render the field if the user can't read it.\n */\n if (!shouldIgnoreRBAC && !canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Attributes found on the current content-type schema cannot be restored. We handle\n * this by displaying a warning alert to the user instead of the input for that field type.\n */\n const addedAttributes = version.meta.unknownAttributes.added;\n if (Object.keys(addedAttributes).includes(props.name)) {\n return (\n <Flex direction=\"column\" alignItems=\"flex-start\" gap={1}>\n <Field.Label>{props.label}</Field.Label>\n <StyledAlert\n width=\"100%\"\n closeLabel=\"Close\"\n onClose={() => {}}\n variant=\"warning\"\n title={formatMessage({\n id: 'content-manager.history.content.new-field.title',\n defaultMessage: 'New field',\n })}\n >\n {formatMessage({\n id: 'content-manager.history.content.new-field.message',\n defaultMessage:\n \"This field didn't exist when this version was saved. If you restore this version, it will be empty.\",\n })}\n </StyledAlert>\n </Flex>\n );\n }\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * Since media fields use a custom input via the upload plugin provided by the useLibrary hook,\n * we need to handle the them before other custom inputs coming from the useLibrary hook.\n */\n if (props.type === 'media') {\n return (\n <CustomMediaInput {...props} labelAction={customLabelAction} disabled={fieldIsDisabled} />\n );\n }\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n return (\n <CustomInput\n {...props}\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n const { layout } = componentsLayout[props.attribute.component];\n // Components can only have one panel, so only save the first layout item\n const [remainingFieldsLayout] = getRemaingFieldsLayout({\n layout: [layout],\n metadatas: configuration.components[props.attribute.component].metadatas,\n fieldSizes,\n schemaAttributes: components[props.attribute.component].attributes,\n });\n\n return (\n <ComponentInput\n {...props}\n layout={[...layout, ...(remainingFieldsLayout || [])]}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return (\n <DynamicZone\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <VersionInputRenderer {...inputProps} shouldIgnoreRBAC={true} />}\n </DynamicZone>\n );\n case 'relation':\n return (\n <CustomRelationInput\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'richtext':\n return (\n <Wysiwyg\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n case 'uid':\n return (\n <UIDInput\n {...props}\n hint={hint}\n type={props.type}\n labelAction={customLabelAction}\n disabled={fieldIsDisabled}\n />\n );\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n labelAction={customLabelAction}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n labelAction={customLabelAction}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nexport type { VersionInputRendererProps };\nexport { VersionInputRenderer };\n"],"names":["StyledAlert","styled","Alert","attrs","closeLabel","onClose","shadow","LinkEllipsis","Link","CustomRelationInput","props","formatMessage","useIntl","field","useField","name","formattedFieldValue","Array","isArray","value","results","meta","missingCount","length","_jsxs","_Fragment","_jsx","Field","Label","action","labelAction","label","Box","marginTop","variant","id","defaultMessage","Flex","direction","gap","alignItems","map","relationData","targetModel","attribute","href","COLLECTION_TYPES","documentId","getRelationLabel","mainField","isAdminUserRelation","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderColor","background","justifyContent","minWidth","Tooltip","Typography","tag","NavLink","to","DocumentStatus","status","title","number","createInitialValuesForPath","keyPath","keys","split","root","node","forEach","key","index","CustomMediaInput","fields","useStrapiApp","state","MediaLibrary","media","Form","method","disabled","initialValues","multiple","getLabelAction","React","isValidElement","labelActionTitleId","cloneElement","VersionInputRenderer","visible","hint","providedHint","shouldIgnoreRBAC","customLabelAction","version","useHistoryContext","selectedVersion","configuration","fieldSizes","useTypedSelector","app","components","useDoc","isFormDisabled","useForm","isInDynamicZone","useDynamicZone","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","editableFields","readableFields","canUserReadField","type","canUserEditField","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","customField","undefined","useFieldHint","edit","componentsLayout","useDocLayout","NotAllowedInput","fieldIsDisabled","addedAttributes","unknownAttributes","added","Object","includes","width","CustomInput","FormInputRenderer","addedInputTypes","BlocksInput","layout","component","remainingFieldsLayout","getRemaingFieldsLayout","metadatas","schemaAttributes","attributes","ComponentInput","inputProps","DynamicZone","Wysiwyg","UIDInput","options","enum","unique","_unique","_mainField","restProps"],"mappings":"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"}