@strapi/content-manager 0.0.0-next.df0d99415fc543d9747f3946fd7d1a4c39052b95 → 0.0.0-next.e1a19b9e52cdcb526515883c8289522a64c9871a

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 (201) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +4 -1
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +5 -2
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/Form.js +1 -1
  6. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
  7. package/dist/admin/components/ConfigurationForm/Form.mjs +3 -3
  8. package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
  9. package/dist/admin/components/DragPreviews/CardDragPreview.js +3 -1
  10. package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
  11. package/dist/admin/components/DragPreviews/CardDragPreview.mjs +3 -1
  12. package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
  13. package/dist/admin/components/DragPreviews/ComponentDragPreview.js +3 -1
  14. package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
  15. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +3 -1
  16. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
  17. package/dist/admin/components/DragPreviews/RelationDragPreview.js +3 -1
  18. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
  19. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +3 -1
  20. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
  21. package/dist/admin/components/LeftMenu.js +89 -49
  22. package/dist/admin/components/LeftMenu.js.map +1 -1
  23. package/dist/admin/components/LeftMenu.mjs +91 -51
  24. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  25. package/dist/admin/components/Widgets.js +19 -12
  26. package/dist/admin/components/Widgets.js.map +1 -1
  27. package/dist/admin/components/Widgets.mjs +20 -13
  28. package/dist/admin/components/Widgets.mjs.map +1 -1
  29. package/dist/admin/history/components/VersionHeader.js +1 -0
  30. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  31. package/dist/admin/history/components/VersionHeader.mjs +1 -0
  32. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  33. package/dist/admin/history/components/VersionsList.js +1 -1
  34. package/dist/admin/history/components/VersionsList.js.map +1 -1
  35. package/dist/admin/history/components/VersionsList.mjs +1 -1
  36. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  37. package/dist/admin/history/pages/History.js +7 -7
  38. package/dist/admin/history/pages/History.js.map +1 -1
  39. package/dist/admin/history/pages/History.mjs +7 -7
  40. package/dist/admin/history/pages/History.mjs.map +1 -1
  41. package/dist/admin/layout.js +27 -6
  42. package/dist/admin/layout.js.map +1 -1
  43. package/dist/admin/layout.mjs +28 -7
  44. package/dist/admin/layout.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/EditViewPage.js +19 -22
  46. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  47. package/dist/admin/pages/EditView/EditViewPage.mjs +20 -23
  48. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  50. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  51. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  52. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  53. package/dist/admin/pages/EditView/components/DocumentActions.js +16 -1
  54. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/DocumentActions.mjs +17 -2
  56. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +2 -2
  58. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +2 -2
  60. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -1
  62. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +3 -2
  64. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +1 -2
  66. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +1 -2
  68. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +2 -1
  70. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -2
  72. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +2 -1
  74. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +3 -2
  76. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +2 -2
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +2 -2
  80. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormLayout.js +13 -8
  82. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormLayout.mjs +14 -8
  84. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  85. package/dist/admin/pages/EditView/components/Header.js +22 -7
  86. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  87. package/dist/admin/pages/EditView/components/Header.mjs +23 -8
  88. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  89. package/dist/admin/pages/EditView/components/InputRenderer.js +20 -7
  90. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  91. package/dist/admin/pages/EditView/components/InputRenderer.mjs +20 -7
  92. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  93. package/dist/admin/pages/EditView/utils/data.js +34 -9
  94. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  95. package/dist/admin/pages/EditView/utils/data.mjs +34 -9
  96. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  97. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +1 -0
  98. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  99. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -0
  100. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  101. package/dist/admin/pages/ListView/ListViewPage.js +8 -8
  102. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  103. package/dist/admin/pages/ListView/ListViewPage.mjs +8 -8
  104. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  105. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +12 -2
  106. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  107. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +12 -2
  108. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  109. package/dist/admin/preview/components/InputPopover.js +189 -0
  110. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  111. package/dist/admin/preview/components/InputPopover.mjs +167 -0
  112. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  113. package/dist/admin/preview/components/PreviewHeader.js +0 -1
  114. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  115. package/dist/admin/preview/components/PreviewHeader.mjs +0 -1
  116. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  117. package/dist/admin/preview/hooks/usePreviewInputManager.js +77 -0
  118. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  119. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +56 -0
  120. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  121. package/dist/admin/preview/pages/Preview.js +144 -106
  122. package/dist/admin/preview/pages/Preview.js.map +1 -1
  123. package/dist/admin/preview/pages/Preview.mjs +145 -107
  124. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  125. package/dist/admin/preview/utils/constants.js +56 -0
  126. package/dist/admin/preview/utils/constants.js.map +1 -0
  127. package/dist/admin/preview/utils/constants.mjs +52 -0
  128. package/dist/admin/preview/utils/constants.mjs.map +1 -0
  129. package/dist/admin/preview/utils/fieldUtils.js +107 -0
  130. package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
  131. package/dist/admin/preview/utils/fieldUtils.mjs +102 -0
  132. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -0
  133. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  134. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  135. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  136. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  137. package/dist/admin/preview/utils/previewScript.js +534 -0
  138. package/dist/admin/preview/utils/previewScript.js.map +1 -0
  139. package/dist/admin/preview/utils/previewScript.mjs +532 -0
  140. package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
  141. package/dist/admin/services/api.js +2 -1
  142. package/dist/admin/services/api.js.map +1 -1
  143. package/dist/admin/services/api.mjs +2 -1
  144. package/dist/admin/services/api.mjs.map +1 -1
  145. package/dist/admin/services/documents.js +22 -12
  146. package/dist/admin/services/documents.js.map +1 -1
  147. package/dist/admin/services/documents.mjs +22 -12
  148. package/dist/admin/services/documents.mjs.map +1 -1
  149. package/dist/admin/services/homepage.js +2 -11
  150. package/dist/admin/services/homepage.js.map +1 -1
  151. package/dist/admin/services/homepage.mjs +3 -11
  152. package/dist/admin/services/homepage.mjs.map +1 -1
  153. package/dist/admin/src/components/LeftMenu.d.ts +3 -1
  154. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  155. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  156. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +0 -3
  157. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  158. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  159. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +5 -0
  160. package/dist/admin/src/preview/pages/Preview.d.ts +12 -0
  161. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  162. package/dist/admin/src/preview/utils/constants.d.ts +55 -0
  163. package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
  164. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  165. package/dist/admin/src/preview/utils/previewScript.d.ts +24 -0
  166. package/dist/admin/src/services/api.d.ts +1 -1
  167. package/dist/admin/src/services/components.d.ts +2 -2
  168. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  169. package/dist/admin/src/services/documents.d.ts +16 -16
  170. package/dist/admin/src/services/homepage.d.ts +2 -6
  171. package/dist/admin/src/services/init.d.ts +1 -1
  172. package/dist/admin/src/services/relations.d.ts +2 -2
  173. package/dist/admin/src/services/uid.d.ts +3 -3
  174. package/dist/admin/src/utils/api.d.ts +1 -1
  175. package/dist/admin/translations/en.json.js +6 -0
  176. package/dist/admin/translations/en.json.js.map +1 -1
  177. package/dist/admin/translations/en.json.mjs +6 -0
  178. package/dist/admin/translations/en.json.mjs.map +1 -1
  179. package/dist/admin/translations/es.json.js +1 -0
  180. package/dist/admin/translations/es.json.js.map +1 -1
  181. package/dist/admin/translations/es.json.mjs +1 -0
  182. package/dist/admin/translations/es.json.mjs.map +1 -1
  183. package/dist/admin/translations/fr.json.js +1 -0
  184. package/dist/admin/translations/fr.json.js.map +1 -1
  185. package/dist/admin/translations/fr.json.mjs +1 -0
  186. package/dist/admin/translations/fr.json.mjs.map +1 -1
  187. package/dist/admin/utils/api.js +1 -1
  188. package/dist/admin/utils/api.js.map +1 -1
  189. package/dist/admin/utils/api.mjs +1 -1
  190. package/dist/admin/utils/api.mjs.map +1 -1
  191. package/dist/server/controllers/relations.js +6 -4
  192. package/dist/server/controllers/relations.js.map +1 -1
  193. package/dist/server/controllers/relations.mjs +6 -4
  194. package/dist/server/controllers/relations.mjs.map +1 -1
  195. package/dist/server/homepage/services/homepage.js +2 -2
  196. package/dist/server/homepage/services/homepage.js.map +1 -1
  197. package/dist/server/homepage/services/homepage.mjs +2 -2
  198. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  199. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  200. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  201. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"VersionsList.js","sources":["../../../../admin/src/history/components/VersionsList.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nimport { RelativeTime } from '../../components/RelativeTime';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDisplayName } from '../../utils/users';\nimport { useHistoryContext } from '../pages/History';\n\nimport type { HistoryVersions } from '../../../../shared/contracts';\n\n/* -------------------------------------------------------------------------------------------------\n * BlueText\n * -----------------------------------------------------------------------------------------------*/\n\nconst BlueText = (children: React.ReactNode) => (\n <Typography textColor=\"primary600\" variant=\"pi\">\n {children}\n </Typography>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * VersionCard\n * -----------------------------------------------------------------------------------------------*/\n\ninterface VersionCardProps {\n version: HistoryVersions.HistoryVersionDataResponse;\n isCurrent: boolean;\n}\n\nconst VersionCard = ({ version, isCurrent }: VersionCardProps) => {\n const { formatDate, formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ id?: string }>();\n const isActive = query.id === version.id.toString();\n const author = version.createdBy && getDisplayName(version.createdBy);\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n gap={3}\n hasRadius\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isActive ? 'primary600' : 'neutral200'}\n color=\"neutral800\"\n padding={5}\n tag={Link}\n to={`?${stringify({ ...query, id: version.id })}`}\n style={{ textDecoration: 'none' }}\n >\n <Flex direction=\"column\" gap={1} alignItems=\"flex-start\">\n <Typography tag=\"h3\" fontWeight=\"semiBold\">\n {formatDate(version.createdAt, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n })}\n </Typography>\n <Typography tag=\"p\" variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.sidebar.versionDescription',\n defaultMessage:\n '{distanceToNow}{isAnonymous, select, true {} other { by {author}}}{isCurrent, select, true { <b>(current)</b>} other {}}',\n },\n {\n distanceToNow: <RelativeTime timestamp={new Date(version.createdAt)} />,\n author,\n isAnonymous: !Boolean(version.createdBy),\n isCurrent,\n b: BlueText,\n }\n )}\n </Typography>\n </Flex>\n {version.status && <DocumentStatus status={version.status} size=\"XS\" />}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PaginationButtonProps {\n page: number;\n children: React.ReactNode;\n}\n\nconst PaginationButton = ({ page, children }: PaginationButtonProps) => {\n const [{ query }] = useQueryParams<{ id?: string }>();\n\n // Remove the id from the pagination link, so that the history page can redirect\n // to the id of the first history version in the new page once it's loaded\n const { id: _id, ...queryRest } = query;\n\n return (\n <Link to={{ search: stringify({ ...queryRest, page }) }} style={{ textDecoration: 'none' }}>\n <Typography variant=\"omega\" textColor=\"primary600\">\n {children}\n </Typography>\n </Link>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionsList\n * -----------------------------------------------------------------------------------------------*/\n\nconst VersionsList = () => {\n const { formatMessage } = useIntl();\n const { versions, page } = useHistoryContext('VersionsList', (state) => ({\n versions: state.versions,\n page: state.page,\n }));\n\n return (\n <Flex\n shrink={0}\n direction=\"column\"\n alignItems=\"stretch\"\n width=\"320px\"\n height=\"100vh\"\n background=\"neutral0\"\n borderColor=\"neutral200\"\n borderWidth=\"0 0 0 1px\"\n borderStyle=\"solid\"\n tag=\"aside\"\n >\n <Flex\n direction=\"row\"\n justifyContent=\"space-between\"\n padding={4}\n borderColor=\"neutral200\"\n borderWidth=\"0 0 1px\"\n borderStyle=\"solid\"\n tag=\"header\"\n >\n <Typography tag=\"h2\" variant=\"omega\" fontWeight=\"semiBold\">\n {formatMessage({\n id: 'content-manager.history.sidebar.title',\n defaultMessage: 'Versions',\n })}\n </Typography>\n <Box background=\"neutral150\" hasRadius padding={1}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {versions.meta.pagination.total}\n </Typography>\n </Box>\n </Flex>\n <Box flex={1} overflow=\"auto\">\n {versions.meta.pagination.page > 1 && (\n <Box paddingTop={4} textAlign=\"center\">\n <PaginationButton page={page - 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-newer',\n defaultMessage: 'Show newer versions',\n })}\n </PaginationButton>\n </Box>\n )}\n <Flex direction=\"column\" gap={3} padding={4} tag=\"ul\" alignItems=\"stretch\">\n {versions.data.map((version, index) => (\n <li\n key={version.id}\n aria-label={formatMessage({\n id: 'content-manager.history.sidebar.title.version-card.aria-label',\n defaultMessage: 'Version card',\n })}\n >\n <VersionCard version={version} isCurrent={page === 1 && index === 0} />\n </li>\n ))}\n </Flex>\n {versions.meta.pagination.page < versions.meta.pagination.pageCount && (\n <Box paddingBottom={4} textAlign=\"center\">\n <PaginationButton page={page + 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-older',\n defaultMessage: 'Show older versions',\n })}\n </PaginationButton>\n </Box>\n )}\n </Box>\n </Flex>\n );\n};\n\nexport { VersionsList };\n"],"names":["BlueText","children","_jsx","Typography","textColor","variant","VersionCard","version","isCurrent","formatDate","formatMessage","useIntl","query","useQueryParams","isActive","id","toString","author","createdBy","getDisplayName","_jsxs","Flex","direction","alignItems","gap","hasRadius","borderWidth","borderStyle","borderColor","color","padding","tag","Link","to","stringify","style","textDecoration","fontWeight","createdAt","day","month","year","hour","minute","defaultMessage","distanceToNow","RelativeTime","timestamp","Date","isAnonymous","Boolean","b","status","DocumentStatus","size","PaginationButton","page","_id","queryRest","search","VersionsList","versions","useHistoryContext","state","shrink","width","height","background","justifyContent","Box","meta","pagination","total","flex","overflow","paddingTop","textAlign","data","map","index","li","aria-label","pageCount","paddingBottom"],"mappings":"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"}
1
+ {"version":3,"file":"VersionsList.js","sources":["../../../../admin/src/history/components/VersionsList.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nimport { RelativeTime } from '../../components/RelativeTime';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDisplayName } from '../../utils/users';\nimport { useHistoryContext } from '../pages/History';\n\nimport type { HistoryVersions } from '../../../../shared/contracts';\n\n/* -------------------------------------------------------------------------------------------------\n * BlueText\n * -----------------------------------------------------------------------------------------------*/\n\nconst BlueText = (children: React.ReactNode) => (\n <Typography textColor=\"primary600\" variant=\"pi\">\n {children}\n </Typography>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * VersionCard\n * -----------------------------------------------------------------------------------------------*/\n\ninterface VersionCardProps {\n version: HistoryVersions.HistoryVersionDataResponse;\n isCurrent: boolean;\n}\n\nconst VersionCard = ({ version, isCurrent }: VersionCardProps) => {\n const { formatDate, formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ id?: string }>();\n const isActive = query.id === version.id.toString();\n const author = version.createdBy && getDisplayName(version.createdBy);\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n gap={3}\n hasRadius\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isActive ? 'primary600' : 'neutral200'}\n color=\"neutral800\"\n padding={5}\n tag={Link}\n to={`?${stringify({ ...query, id: version.id })}`}\n style={{ textDecoration: 'none' }}\n >\n <Flex direction=\"column\" gap={1} alignItems=\"flex-start\">\n <Typography tag=\"h3\" fontWeight=\"semiBold\">\n {formatDate(version.createdAt, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n })}\n </Typography>\n <Typography tag=\"p\" variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.sidebar.versionDescription',\n defaultMessage:\n '{distanceToNow}{isAnonymous, select, true {} other { by {author}}}{isCurrent, select, true { <b>(current)</b>} other {}}',\n },\n {\n distanceToNow: <RelativeTime timestamp={new Date(version.createdAt)} />,\n author,\n isAnonymous: !Boolean(version.createdBy),\n isCurrent,\n b: BlueText,\n }\n )}\n </Typography>\n </Flex>\n {version.status && <DocumentStatus status={version.status} size=\"XS\" />}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PaginationButtonProps {\n page: number;\n children: React.ReactNode;\n}\n\nconst PaginationButton = ({ page, children }: PaginationButtonProps) => {\n const [{ query }] = useQueryParams<{ id?: string }>();\n\n // Remove the id from the pagination link, so that the history page can redirect\n // to the id of the first history version in the new page once it's loaded\n const { id: _id, ...queryRest } = query;\n\n return (\n <Link to={{ search: stringify({ ...queryRest, page }) }} style={{ textDecoration: 'none' }}>\n <Typography variant=\"omega\" textColor=\"primary600\">\n {children}\n </Typography>\n </Link>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionsList\n * -----------------------------------------------------------------------------------------------*/\n\nconst VersionsList = () => {\n const { formatMessage } = useIntl();\n const { versions, page } = useHistoryContext('VersionsList', (state) => ({\n versions: state.versions,\n page: state.page,\n }));\n\n return (\n <Flex\n shrink={0}\n direction=\"column\"\n alignItems=\"stretch\"\n width=\"320px\"\n height=\"100dvh\"\n background=\"neutral0\"\n borderColor=\"neutral200\"\n borderWidth=\"0 0 0 1px\"\n borderStyle=\"solid\"\n tag=\"aside\"\n >\n <Flex\n direction=\"row\"\n justifyContent=\"space-between\"\n padding={4}\n borderColor=\"neutral200\"\n borderWidth=\"0 0 1px\"\n borderStyle=\"solid\"\n tag=\"header\"\n >\n <Typography tag=\"h2\" variant=\"omega\" fontWeight=\"semiBold\">\n {formatMessage({\n id: 'content-manager.history.sidebar.title',\n defaultMessage: 'Versions',\n })}\n </Typography>\n <Box background=\"neutral150\" hasRadius padding={1}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {versions.meta.pagination.total}\n </Typography>\n </Box>\n </Flex>\n <Box flex={1} overflow=\"auto\">\n {versions.meta.pagination.page > 1 && (\n <Box paddingTop={4} textAlign=\"center\">\n <PaginationButton page={page - 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-newer',\n defaultMessage: 'Show newer versions',\n })}\n </PaginationButton>\n </Box>\n )}\n <Flex direction=\"column\" gap={3} padding={4} tag=\"ul\" alignItems=\"stretch\">\n {versions.data.map((version, index) => (\n <li\n key={version.id}\n aria-label={formatMessage({\n id: 'content-manager.history.sidebar.title.version-card.aria-label',\n defaultMessage: 'Version card',\n })}\n >\n <VersionCard version={version} isCurrent={page === 1 && index === 0} />\n </li>\n ))}\n </Flex>\n {versions.meta.pagination.page < versions.meta.pagination.pageCount && (\n <Box paddingBottom={4} textAlign=\"center\">\n <PaginationButton page={page + 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-older',\n defaultMessage: 'Show older versions',\n })}\n </PaginationButton>\n </Box>\n )}\n </Box>\n </Flex>\n );\n};\n\nexport { VersionsList };\n"],"names":["BlueText","children","_jsx","Typography","textColor","variant","VersionCard","version","isCurrent","formatDate","formatMessage","useIntl","query","useQueryParams","isActive","id","toString","author","createdBy","getDisplayName","_jsxs","Flex","direction","alignItems","gap","hasRadius","borderWidth","borderStyle","borderColor","color","padding","tag","Link","to","stringify","style","textDecoration","fontWeight","createdAt","day","month","year","hour","minute","defaultMessage","distanceToNow","RelativeTime","timestamp","Date","isAnonymous","Boolean","b","status","DocumentStatus","size","PaginationButton","page","_id","queryRest","search","VersionsList","versions","useHistoryContext","state","shrink","width","height","background","justifyContent","Box","meta","pagination","total","flex","overflow","paddingTop","textAlign","data","map","index","li","aria-label","pageCount","paddingBottom"],"mappings":"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"}
@@ -118,7 +118,7 @@ const PaginationButton = ({ page, children })=>{
118
118
  direction: "column",
119
119
  alignItems: "stretch",
120
120
  width: "320px",
121
- height: "100vh",
121
+ height: "100dvh",
122
122
  background: "neutral0",
123
123
  borderColor: "neutral200",
124
124
  borderWidth: "0 0 0 1px",
@@ -1 +1 @@
1
- {"version":3,"file":"VersionsList.mjs","sources":["../../../../admin/src/history/components/VersionsList.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nimport { RelativeTime } from '../../components/RelativeTime';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDisplayName } from '../../utils/users';\nimport { useHistoryContext } from '../pages/History';\n\nimport type { HistoryVersions } from '../../../../shared/contracts';\n\n/* -------------------------------------------------------------------------------------------------\n * BlueText\n * -----------------------------------------------------------------------------------------------*/\n\nconst BlueText = (children: React.ReactNode) => (\n <Typography textColor=\"primary600\" variant=\"pi\">\n {children}\n </Typography>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * VersionCard\n * -----------------------------------------------------------------------------------------------*/\n\ninterface VersionCardProps {\n version: HistoryVersions.HistoryVersionDataResponse;\n isCurrent: boolean;\n}\n\nconst VersionCard = ({ version, isCurrent }: VersionCardProps) => {\n const { formatDate, formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ id?: string }>();\n const isActive = query.id === version.id.toString();\n const author = version.createdBy && getDisplayName(version.createdBy);\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n gap={3}\n hasRadius\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isActive ? 'primary600' : 'neutral200'}\n color=\"neutral800\"\n padding={5}\n tag={Link}\n to={`?${stringify({ ...query, id: version.id })}`}\n style={{ textDecoration: 'none' }}\n >\n <Flex direction=\"column\" gap={1} alignItems=\"flex-start\">\n <Typography tag=\"h3\" fontWeight=\"semiBold\">\n {formatDate(version.createdAt, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n })}\n </Typography>\n <Typography tag=\"p\" variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.sidebar.versionDescription',\n defaultMessage:\n '{distanceToNow}{isAnonymous, select, true {} other { by {author}}}{isCurrent, select, true { <b>(current)</b>} other {}}',\n },\n {\n distanceToNow: <RelativeTime timestamp={new Date(version.createdAt)} />,\n author,\n isAnonymous: !Boolean(version.createdBy),\n isCurrent,\n b: BlueText,\n }\n )}\n </Typography>\n </Flex>\n {version.status && <DocumentStatus status={version.status} size=\"XS\" />}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PaginationButtonProps {\n page: number;\n children: React.ReactNode;\n}\n\nconst PaginationButton = ({ page, children }: PaginationButtonProps) => {\n const [{ query }] = useQueryParams<{ id?: string }>();\n\n // Remove the id from the pagination link, so that the history page can redirect\n // to the id of the first history version in the new page once it's loaded\n const { id: _id, ...queryRest } = query;\n\n return (\n <Link to={{ search: stringify({ ...queryRest, page }) }} style={{ textDecoration: 'none' }}>\n <Typography variant=\"omega\" textColor=\"primary600\">\n {children}\n </Typography>\n </Link>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionsList\n * -----------------------------------------------------------------------------------------------*/\n\nconst VersionsList = () => {\n const { formatMessage } = useIntl();\n const { versions, page } = useHistoryContext('VersionsList', (state) => ({\n versions: state.versions,\n page: state.page,\n }));\n\n return (\n <Flex\n shrink={0}\n direction=\"column\"\n alignItems=\"stretch\"\n width=\"320px\"\n height=\"100vh\"\n background=\"neutral0\"\n borderColor=\"neutral200\"\n borderWidth=\"0 0 0 1px\"\n borderStyle=\"solid\"\n tag=\"aside\"\n >\n <Flex\n direction=\"row\"\n justifyContent=\"space-between\"\n padding={4}\n borderColor=\"neutral200\"\n borderWidth=\"0 0 1px\"\n borderStyle=\"solid\"\n tag=\"header\"\n >\n <Typography tag=\"h2\" variant=\"omega\" fontWeight=\"semiBold\">\n {formatMessage({\n id: 'content-manager.history.sidebar.title',\n defaultMessage: 'Versions',\n })}\n </Typography>\n <Box background=\"neutral150\" hasRadius padding={1}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {versions.meta.pagination.total}\n </Typography>\n </Box>\n </Flex>\n <Box flex={1} overflow=\"auto\">\n {versions.meta.pagination.page > 1 && (\n <Box paddingTop={4} textAlign=\"center\">\n <PaginationButton page={page - 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-newer',\n defaultMessage: 'Show newer versions',\n })}\n </PaginationButton>\n </Box>\n )}\n <Flex direction=\"column\" gap={3} padding={4} tag=\"ul\" alignItems=\"stretch\">\n {versions.data.map((version, index) => (\n <li\n key={version.id}\n aria-label={formatMessage({\n id: 'content-manager.history.sidebar.title.version-card.aria-label',\n defaultMessage: 'Version card',\n })}\n >\n <VersionCard version={version} isCurrent={page === 1 && index === 0} />\n </li>\n ))}\n </Flex>\n {versions.meta.pagination.page < versions.meta.pagination.pageCount && (\n <Box paddingBottom={4} textAlign=\"center\">\n <PaginationButton page={page + 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-older',\n defaultMessage: 'Show older versions',\n })}\n </PaginationButton>\n </Box>\n )}\n </Box>\n </Flex>\n );\n};\n\nexport { VersionsList };\n"],"names":["BlueText","children","_jsx","Typography","textColor","variant","VersionCard","version","isCurrent","formatDate","formatMessage","useIntl","query","useQueryParams","isActive","id","toString","author","createdBy","getDisplayName","_jsxs","Flex","direction","alignItems","gap","hasRadius","borderWidth","borderStyle","borderColor","color","padding","tag","Link","to","stringify","style","textDecoration","fontWeight","createdAt","day","month","year","hour","minute","defaultMessage","distanceToNow","RelativeTime","timestamp","Date","isAnonymous","Boolean","b","status","DocumentStatus","size","PaginationButton","page","_id","queryRest","search","VersionsList","versions","useHistoryContext","state","shrink","width","height","background","justifyContent","Box","meta","pagination","total","flex","overflow","paddingTop","textAlign","data","map","index","li","aria-label","pageCount","paddingBottom"],"mappings":";;;;;;;;;;;;AAeA;;AAEkG,qGAElG,MAAMA,QAAAA,GAAW,CAACC,QAAAA,iBAChBC,GAACC,CAAAA,UAAAA,EAAAA;QAAWC,SAAU,EAAA,YAAA;QAAaC,OAAQ,EAAA,IAAA;AACxCJ,QAAAA,QAAAA,EAAAA;;AAaL,MAAMK,cAAc,CAAC,EAAEC,OAAO,EAAEC,SAAS,EAAoB,GAAA;AAC3D,IAAA,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AACtC,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AACpB,IAAA,MAAMC,WAAWF,KAAMG,CAAAA,EAAE,KAAKR,OAAQQ,CAAAA,EAAE,CAACC,QAAQ,EAAA;AACjD,IAAA,MAAMC,SAASV,OAAQW,CAAAA,SAAS,IAAIC,cAAAA,CAAeZ,QAAQW,SAAS,CAAA;AAEpE,IAAA,qBACEE,IAACC,CAAAA,IAAAA,EAAAA;QACCC,SAAU,EAAA,QAAA;QACVC,UAAW,EAAA,YAAA;QACXC,GAAK,EAAA,CAAA;QACLC,SAAS,EAAA,IAAA;QACTC,WAAY,EAAA,KAAA;QACZC,WAAY,EAAA,OAAA;AACZC,QAAAA,WAAAA,EAAad,WAAW,YAAe,GAAA,YAAA;QACvCe,KAAM,EAAA,YAAA;QACNC,OAAS,EAAA,CAAA;QACTC,GAAKC,EAAAA,IAAAA;QACLC,EAAI,EAAA,CAAC,CAAC,EAAEC,SAAU,CAAA;AAAE,YAAA,GAAGtB,KAAK;AAAEG,YAAAA,EAAAA,EAAIR,QAAQQ;AAAG,SAAA,CAAA,CAAG,CAAC;QACjDoB,KAAO,EAAA;YAAEC,cAAgB,EAAA;AAAO,SAAA;;0BAEhChB,IAACC,CAAAA,IAAAA,EAAAA;gBAAKC,SAAU,EAAA,QAAA;gBAASE,GAAK,EAAA,CAAA;gBAAGD,UAAW,EAAA,YAAA;;kCAC1CrB,GAACC,CAAAA,UAAAA,EAAAA;wBAAW4B,GAAI,EAAA,IAAA;wBAAKM,UAAW,EAAA,UAAA;kCAC7B5B,UAAWF,CAAAA,OAAAA,CAAQ+B,SAAS,EAAE;4BAC7BC,GAAK,EAAA,SAAA;4BACLC,KAAO,EAAA,SAAA;4BACPC,IAAM,EAAA,SAAA;4BACNC,IAAM,EAAA,SAAA;4BACNC,MAAQ,EAAA;AACV,yBAAA;;kCAEFzC,GAACC,CAAAA,UAAAA,EAAAA;wBAAW4B,GAAI,EAAA,GAAA;wBAAI1B,OAAQ,EAAA,IAAA;wBAAKD,SAAU,EAAA,YAAA;kCACxCM,aACC,CAAA;4BACEK,EAAI,EAAA,oDAAA;4BACJ6B,cACE,EAAA;yBAEJ,EAAA;AACEC,4BAAAA,aAAAA,gBAAe3C,GAAC4C,CAAAA,YAAAA,EAAAA;gCAAaC,SAAW,EAAA,IAAIC,IAAKzC,CAAAA,OAAAA,CAAQ+B,SAAS;;AAClErB,4BAAAA,MAAAA;4BACAgC,WAAa,EAAA,CAACC,OAAQ3C,CAAAA,OAAAA,CAAQW,SAAS,CAAA;AACvCV,4BAAAA,SAAAA;4BACA2C,CAAGnD,EAAAA;AACL,yBAAA;;;;YAILO,OAAQ6C,CAAAA,MAAM,kBAAIlD,GAACmD,CAAAA,cAAAA,EAAAA;AAAeD,gBAAAA,MAAAA,EAAQ7C,QAAQ6C,MAAM;gBAAEE,IAAK,EAAA;;;;AAGtE,CAAA;AAWA,MAAMC,mBAAmB,CAAC,EAAEC,IAAI,EAAEvD,QAAQ,EAAyB,GAAA;AACjE,IAAA,MAAM,CAAC,EAAEW,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;;;AAIpB,IAAA,MAAM,EAAEE,EAAI0C,EAAAA,GAAG,EAAE,GAAGC,WAAW,GAAG9C,KAAAA;AAElC,IAAA,qBACEV,GAAC8B,CAAAA,IAAAA,EAAAA;QAAKC,EAAI,EAAA;AAAE0B,YAAAA,MAAAA,EAAQzB,SAAU,CAAA;AAAE,gBAAA,GAAGwB,SAAS;AAAEF,gBAAAA;AAAK,aAAA;AAAG,SAAA;QAAGrB,KAAO,EAAA;YAAEC,cAAgB,EAAA;AAAO,SAAA;AACvF,QAAA,QAAA,gBAAAlC,GAACC,CAAAA,UAAAA,EAAAA;YAAWE,OAAQ,EAAA,OAAA;YAAQD,SAAU,EAAA,YAAA;AACnCH,YAAAA,QAAAA,EAAAA;;;AAIT,CAAA;AAEA;;AAEkG,2GAE5F2D,YAAe,GAAA,IAAA;IACnB,MAAM,EAAElD,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEkD,QAAQ,EAAEL,IAAI,EAAE,GAAGM,iBAAkB,CAAA,cAAA,EAAgB,CAACC,KAAAA,IAAW;AACvEF,YAAAA,QAAAA,EAAUE,MAAMF,QAAQ;AACxBL,YAAAA,IAAAA,EAAMO,MAAMP;SACd,CAAA,CAAA;AAEA,IAAA,qBACEpC,IAACC,CAAAA,IAAAA,EAAAA;QACC2C,MAAQ,EAAA,CAAA;QACR1C,SAAU,EAAA,QAAA;QACVC,UAAW,EAAA,SAAA;QACX0C,KAAM,EAAA,OAAA;QACNC,MAAO,EAAA,OAAA;QACPC,UAAW,EAAA,UAAA;QACXvC,WAAY,EAAA,YAAA;QACZF,WAAY,EAAA,WAAA;QACZC,WAAY,EAAA,OAAA;QACZI,GAAI,EAAA,OAAA;;0BAEJX,IAACC,CAAAA,IAAAA,EAAAA;gBACCC,SAAU,EAAA,KAAA;gBACV8C,cAAe,EAAA,eAAA;gBACftC,OAAS,EAAA,CAAA;gBACTF,WAAY,EAAA,YAAA;gBACZF,WAAY,EAAA,SAAA;gBACZC,WAAY,EAAA,OAAA;gBACZI,GAAI,EAAA,QAAA;;kCAEJ7B,GAACC,CAAAA,UAAAA,EAAAA;wBAAW4B,GAAI,EAAA,IAAA;wBAAK1B,OAAQ,EAAA,OAAA;wBAAQgC,UAAW,EAAA,UAAA;kCAC7C3B,aAAc,CAAA;4BACbK,EAAI,EAAA,uCAAA;4BACJ6B,cAAgB,EAAA;AAClB,yBAAA;;kCAEF1C,GAACmE,CAAAA,GAAAA,EAAAA;wBAAIF,UAAW,EAAA,YAAA;wBAAa1C,SAAS,EAAA,IAAA;wBAACK,OAAS,EAAA,CAAA;AAC9C,wBAAA,QAAA,gBAAA5B,GAACC,CAAAA,UAAAA,EAAAA;4BAAWE,OAAQ,EAAA,OAAA;4BAAQD,SAAU,EAAA,YAAA;AACnCyD,4BAAAA,QAAAA,EAAAA,QAAAA,CAASS,IAAI,CAACC,UAAU,CAACC;;;;;0BAIhCpD,IAACiD,CAAAA,GAAAA,EAAAA;gBAAII,IAAM,EAAA,CAAA;gBAAGC,QAAS,EAAA,MAAA;;AACpBb,oBAAAA,QAAAA,CAASS,IAAI,CAACC,UAAU,CAACf,IAAI,GAAG,mBAC/BtD,GAACmE,CAAAA,GAAAA,EAAAA;wBAAIM,UAAY,EAAA,CAAA;wBAAGC,SAAU,EAAA,QAAA;AAC5B,wBAAA,QAAA,gBAAA1E,GAACqD,CAAAA,gBAAAA,EAAAA;AAAiBC,4BAAAA,IAAAA,EAAMA,IAAO,GAAA,CAAA;sCAC5B9C,aAAc,CAAA;gCACbK,EAAI,EAAA,4CAAA;gCACJ6B,cAAgB,EAAA;AAClB,6BAAA;;;kCAIN1C,GAACmB,CAAAA,IAAAA,EAAAA;wBAAKC,SAAU,EAAA,QAAA;wBAASE,GAAK,EAAA,CAAA;wBAAGM,OAAS,EAAA,CAAA;wBAAGC,GAAI,EAAA,IAAA;wBAAKR,UAAW,EAAA,SAAA;AAC9DsC,wBAAAA,QAAAA,EAAAA,QAAAA,CAASgB,IAAI,CAACC,GAAG,CAAC,CAACvE,OAAAA,EAASwE,sBAC3B7E,GAAC8E,CAAAA,IAAAA,EAAAA;AAECC,gCAAAA,YAAAA,EAAYvE,aAAc,CAAA;oCACxBK,EAAI,EAAA,+DAAA;oCACJ6B,cAAgB,EAAA;AAClB,iCAAA,CAAA;AAEA,gCAAA,QAAA,gBAAA1C,GAACI,CAAAA,WAAAA,EAAAA;oCAAYC,OAASA,EAAAA,OAAAA;oCAASC,SAAWgD,EAAAA,IAAAA,KAAS,KAAKuB,KAAU,KAAA;;AAN7DxE,6BAAAA,EAAAA,OAAAA,CAAQQ,EAAE,CAAA;;AAUpB8C,oBAAAA,QAAAA,CAASS,IAAI,CAACC,UAAU,CAACf,IAAI,GAAGK,QAASS,CAAAA,IAAI,CAACC,UAAU,CAACW,SAAS,kBACjEhF,GAACmE,CAAAA,GAAAA,EAAAA;wBAAIc,aAAe,EAAA,CAAA;wBAAGP,SAAU,EAAA,QAAA;AAC/B,wBAAA,QAAA,gBAAA1E,GAACqD,CAAAA,gBAAAA,EAAAA;AAAiBC,4BAAAA,IAAAA,EAAMA,IAAO,GAAA,CAAA;sCAC5B9C,aAAc,CAAA;gCACbK,EAAI,EAAA,4CAAA;gCACJ6B,cAAgB,EAAA;AAClB,6BAAA;;;;;;;AAOd;;;;"}
1
+ {"version":3,"file":"VersionsList.mjs","sources":["../../../../admin/src/history/components/VersionsList.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\n\nimport { RelativeTime } from '../../components/RelativeTime';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDisplayName } from '../../utils/users';\nimport { useHistoryContext } from '../pages/History';\n\nimport type { HistoryVersions } from '../../../../shared/contracts';\n\n/* -------------------------------------------------------------------------------------------------\n * BlueText\n * -----------------------------------------------------------------------------------------------*/\n\nconst BlueText = (children: React.ReactNode) => (\n <Typography textColor=\"primary600\" variant=\"pi\">\n {children}\n </Typography>\n);\n\n/* -------------------------------------------------------------------------------------------------\n * VersionCard\n * -----------------------------------------------------------------------------------------------*/\n\ninterface VersionCardProps {\n version: HistoryVersions.HistoryVersionDataResponse;\n isCurrent: boolean;\n}\n\nconst VersionCard = ({ version, isCurrent }: VersionCardProps) => {\n const { formatDate, formatMessage } = useIntl();\n const [{ query }] = useQueryParams<{ id?: string }>();\n const isActive = query.id === version.id.toString();\n const author = version.createdBy && getDisplayName(version.createdBy);\n\n return (\n <Flex\n direction=\"column\"\n alignItems=\"flex-start\"\n gap={3}\n hasRadius\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isActive ? 'primary600' : 'neutral200'}\n color=\"neutral800\"\n padding={5}\n tag={Link}\n to={`?${stringify({ ...query, id: version.id })}`}\n style={{ textDecoration: 'none' }}\n >\n <Flex direction=\"column\" gap={1} alignItems=\"flex-start\">\n <Typography tag=\"h3\" fontWeight=\"semiBold\">\n {formatDate(version.createdAt, {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n })}\n </Typography>\n <Typography tag=\"p\" variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.sidebar.versionDescription',\n defaultMessage:\n '{distanceToNow}{isAnonymous, select, true {} other { by {author}}}{isCurrent, select, true { <b>(current)</b>} other {}}',\n },\n {\n distanceToNow: <RelativeTime timestamp={new Date(version.createdAt)} />,\n author,\n isAnonymous: !Boolean(version.createdBy),\n isCurrent,\n b: BlueText,\n }\n )}\n </Typography>\n </Flex>\n {version.status && <DocumentStatus status={version.status} size=\"XS\" />}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PaginationButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PaginationButtonProps {\n page: number;\n children: React.ReactNode;\n}\n\nconst PaginationButton = ({ page, children }: PaginationButtonProps) => {\n const [{ query }] = useQueryParams<{ id?: string }>();\n\n // Remove the id from the pagination link, so that the history page can redirect\n // to the id of the first history version in the new page once it's loaded\n const { id: _id, ...queryRest } = query;\n\n return (\n <Link to={{ search: stringify({ ...queryRest, page }) }} style={{ textDecoration: 'none' }}>\n <Typography variant=\"omega\" textColor=\"primary600\">\n {children}\n </Typography>\n </Link>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionsList\n * -----------------------------------------------------------------------------------------------*/\n\nconst VersionsList = () => {\n const { formatMessage } = useIntl();\n const { versions, page } = useHistoryContext('VersionsList', (state) => ({\n versions: state.versions,\n page: state.page,\n }));\n\n return (\n <Flex\n shrink={0}\n direction=\"column\"\n alignItems=\"stretch\"\n width=\"320px\"\n height=\"100dvh\"\n background=\"neutral0\"\n borderColor=\"neutral200\"\n borderWidth=\"0 0 0 1px\"\n borderStyle=\"solid\"\n tag=\"aside\"\n >\n <Flex\n direction=\"row\"\n justifyContent=\"space-between\"\n padding={4}\n borderColor=\"neutral200\"\n borderWidth=\"0 0 1px\"\n borderStyle=\"solid\"\n tag=\"header\"\n >\n <Typography tag=\"h2\" variant=\"omega\" fontWeight=\"semiBold\">\n {formatMessage({\n id: 'content-manager.history.sidebar.title',\n defaultMessage: 'Versions',\n })}\n </Typography>\n <Box background=\"neutral150\" hasRadius padding={1}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {versions.meta.pagination.total}\n </Typography>\n </Box>\n </Flex>\n <Box flex={1} overflow=\"auto\">\n {versions.meta.pagination.page > 1 && (\n <Box paddingTop={4} textAlign=\"center\">\n <PaginationButton page={page - 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-newer',\n defaultMessage: 'Show newer versions',\n })}\n </PaginationButton>\n </Box>\n )}\n <Flex direction=\"column\" gap={3} padding={4} tag=\"ul\" alignItems=\"stretch\">\n {versions.data.map((version, index) => (\n <li\n key={version.id}\n aria-label={formatMessage({\n id: 'content-manager.history.sidebar.title.version-card.aria-label',\n defaultMessage: 'Version card',\n })}\n >\n <VersionCard version={version} isCurrent={page === 1 && index === 0} />\n </li>\n ))}\n </Flex>\n {versions.meta.pagination.page < versions.meta.pagination.pageCount && (\n <Box paddingBottom={4} textAlign=\"center\">\n <PaginationButton page={page + 1}>\n {formatMessage({\n id: 'content-manager.history.sidebar.show-older',\n defaultMessage: 'Show older versions',\n })}\n </PaginationButton>\n </Box>\n )}\n </Box>\n </Flex>\n );\n};\n\nexport { VersionsList };\n"],"names":["BlueText","children","_jsx","Typography","textColor","variant","VersionCard","version","isCurrent","formatDate","formatMessage","useIntl","query","useQueryParams","isActive","id","toString","author","createdBy","getDisplayName","_jsxs","Flex","direction","alignItems","gap","hasRadius","borderWidth","borderStyle","borderColor","color","padding","tag","Link","to","stringify","style","textDecoration","fontWeight","createdAt","day","month","year","hour","minute","defaultMessage","distanceToNow","RelativeTime","timestamp","Date","isAnonymous","Boolean","b","status","DocumentStatus","size","PaginationButton","page","_id","queryRest","search","VersionsList","versions","useHistoryContext","state","shrink","width","height","background","justifyContent","Box","meta","pagination","total","flex","overflow","paddingTop","textAlign","data","map","index","li","aria-label","pageCount","paddingBottom"],"mappings":"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"}
@@ -147,7 +147,7 @@ const [HistoryProvider, useHistoryContext] = strapiAdmin.createContext('HistoryP
147
147
  children: [
148
148
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Main, {
149
149
  grow: 1,
150
- height: "100vh",
150
+ height: "100dvh",
151
151
  background: "neutral100",
152
152
  paddingBottom: 6,
153
153
  overflow: "auto",
@@ -179,23 +179,23 @@ const [HistoryProvider, useHistoryContext] = strapiAdmin.createContext('HistoryP
179
179
  }
180
180
  if (error || !slug) {
181
181
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
182
- height: "100vh",
183
- width: "100vw",
182
+ height: "100dvh",
183
+ width: "100dvw",
184
184
  position: "fixed",
185
185
  top: 0,
186
186
  left: 0,
187
- zIndex: 2,
187
+ zIndex: 4,
188
188
  background: "neutral0",
189
189
  children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Error, {})
190
190
  });
191
191
  }
192
192
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
193
- height: "100vh",
194
- width: "100vw",
193
+ height: "100dvh",
194
+ width: "100dvw",
195
195
  position: "fixed",
196
196
  top: 0,
197
197
  left: 0,
198
- zIndex: 2,
198
+ zIndex: 4,
199
199
  background: "neutral0",
200
200
  children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Protect, {
201
201
  permissions: permissions,
@@ -1 +1 @@
1
- {"version":3,"file":"History.js","sources":["../../../../admin/src/history/pages/History.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, Page, createContext, useRBAC } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FocusTrap, Main, Portal, Link } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useParams, NavLink } from 'react-router-dom';\n\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useGetContentTypeConfigurationQuery } from '../../services/contentTypes';\nimport { buildValidParams } from '../../utils/api';\nimport { VersionContent } from '../components/VersionContent';\nimport { VersionHeader } from '../components/VersionHeader';\nimport { VersionsList } from '../components/VersionsList';\nimport { useGetHistoryVersionsQuery } from '../services/historyVersion';\n\nimport type {\n ContentType,\n FindContentTypeConfiguration,\n} from '../../../../shared/contracts/content-types';\nimport type {\n HistoryVersionDataResponse,\n GetHistoryVersions,\n} from '../../../../shared/contracts/history-versions';\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HistoryContextValue {\n contentType: UID.ContentType;\n id?: string; // null for single types\n layout: EditLayout['layout'];\n configuration: FindContentTypeConfiguration.Response['data'];\n selectedVersion: HistoryVersionDataResponse;\n // Errors are handled outside of the provider, so we exclude errors from the response type\n versions: Extract<GetHistoryVersions.Response, { data: Array<HistoryVersionDataResponse> }>;\n page: number;\n mainField: string;\n schema: ContentType;\n}\n\nconst [HistoryProvider, useHistoryContext] = createContext<HistoryContextValue>('HistoryPage');\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst HistoryPage = () => {\n const headerId = React.useId();\n const { formatMessage } = useIntl();\n const {\n slug,\n id: documentId,\n collectionType,\n } = useParams<{\n collectionType: string;\n slug: UID.ContentType;\n id: string;\n }>();\n\n const { isLoading: isLoadingDocument, schema } = useDocument({\n collectionType: collectionType!,\n model: slug!,\n });\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { displayName, mainField },\n },\n } = useDocumentLayout(slug!);\n const { data: configuration, isLoading: isLoadingConfiguration } =\n useGetContentTypeConfigurationQuery(slug!);\n\n // Parse state from query params\n const [{ query }] = useQueryParams<{\n page?: number;\n id?: string;\n plugins?: Record<string, unknown>;\n }>();\n const { id: selectedVersionId, ...queryWithoutId } = query;\n const validQueryParamsWithoutId = buildValidParams(queryWithoutId);\n const page = validQueryParamsWithoutId.page ? Number(validQueryParamsWithoutId.page) : 1;\n\n const versionsResponse = useGetHistoryVersionsQuery(\n {\n contentType: slug!,\n ...(documentId ? { documentId } : {}),\n // Omit id since it's not needed by the endpoint and caused extra refetches\n ...validQueryParamsWithoutId,\n },\n { refetchOnMountOrArgChange: true }\n );\n\n /**\n * When the page is first mounted, if there's already data in the cache, RTK has a fullfilled\n * status for the first render, right before it triggers a new request. This means the code\n * briefly reaches the part that redirects to the first history version (if none is set).\n * But since that data is stale, that means auto-selecting a version that may not be the most\n * recent. To avoid this, we identify through requestId if the query is stale despite the\n * fullfilled status, and show the loader in that case.\n * This means we essentially don't want cache. We always refetch when the page mounts, and\n * we always show the loader until we have the most recent data. That's fine for this page.\n */\n const initialRequestId = React.useRef(versionsResponse.requestId);\n const isStaleRequest = versionsResponse.requestId === initialRequestId.current;\n\n /**\n * Ensure that we have the necessary data to render the page:\n * - slug for single types\n * - slug _and_ documentId for collection types\n */\n if (!slug || (collectionType === COLLECTION_TYPES && !documentId)) {\n return <Navigate to=\"/content-manager\" />;\n }\n\n if (\n isLoadingDocument ||\n isLoadingLayout ||\n versionsResponse.isFetching ||\n isStaleRequest ||\n isLoadingConfiguration\n ) {\n return <Page.Loading />;\n }\n\n // It was a success, handle empty data\n if (!versionsResponse.isError && !versionsResponse.data?.data?.length) {\n return (\n <>\n <Page.NoData\n action={\n <Link\n tag={NavLink}\n to={`/content-manager/${collectionType}/${slug}${documentId ? `/${documentId}` : ''}`}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n </>\n );\n }\n\n // We have data, handle selected version\n if (versionsResponse.data?.data?.length && !selectedVersionId) {\n return (\n <Navigate\n to={{ search: stringify({ ...query, id: versionsResponse.data.data[0].id }) }}\n replace\n />\n );\n }\n\n const selectedVersion = versionsResponse.data?.data?.find(\n (version) => version.id.toString() === selectedVersionId\n );\n if (\n versionsResponse.isError ||\n !layout ||\n !schema ||\n !selectedVersion ||\n !configuration ||\n // This should not happen as it's covered by versionsResponse.isError, but we need it for TS\n versionsResponse.data.error\n ) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.history.page-title',\n defaultMessage: '{contentType} history',\n },\n {\n contentType: displayName,\n }\n )}\n </Page.Title>\n <HistoryProvider\n contentType={slug}\n id={documentId}\n schema={schema}\n layout={layout}\n configuration={configuration}\n selectedVersion={selectedVersion}\n versions={versionsResponse.data}\n page={page}\n mainField={mainField}\n >\n <Flex direction=\"row\" alignItems=\"flex-start\">\n <Main\n grow={1}\n height=\"100vh\"\n background=\"neutral100\"\n paddingBottom={6}\n overflow=\"auto\"\n labelledBy={headerId}\n >\n <VersionHeader headerId={headerId} />\n\n <VersionContent />\n </Main>\n <VersionsList />\n </Flex>\n </HistoryProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedHistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedHistoryPageImpl = () => {\n const { slug } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <HistoryPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedHistoryPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedHistoryPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedHistoryPage, HistoryProvider, useHistoryContext };\nexport type { HistoryContextValue };\n"],"names":["HistoryProvider","useHistoryContext","createContext","HistoryPage","headerId","React","useId","formatMessage","useIntl","slug","id","documentId","collectionType","useParams","isLoading","isLoadingDocument","schema","useDocument","model","isLoadingLayout","edit","layout","settings","displayName","mainField","useDocumentLayout","data","configuration","isLoadingConfiguration","useGetContentTypeConfigurationQuery","query","useQueryParams","selectedVersionId","queryWithoutId","validQueryParamsWithoutId","buildValidParams","page","Number","versionsResponse","useGetHistoryVersionsQuery","contentType","refetchOnMountOrArgChange","initialRequestId","useRef","requestId","isStaleRequest","current","COLLECTION_TYPES","_jsx","Navigate","to","isFetching","Page","Loading","isError","length","_Fragment","NoData","action","Link","tag","NavLink","defaultMessage","search","stringify","replace","selectedVersion","find","version","toString","error","Error","_jsxs","Title","versions","Flex","direction","alignItems","Main","grow","height","background","paddingBottom","overflow","labelledBy","VersionHeader","VersionContent","VersionsList","ProtectedHistoryPageImpl","permissions","useRBAC","PERMISSIONS","map","subject","Box","width","position","top","left","zIndex","Protect","DocumentRBAC","ProtectedHistoryPage","Portal","FocusTrap"],"mappings":"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"}
1
+ {"version":3,"file":"History.js","sources":["../../../../admin/src/history/pages/History.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, Page, createContext, useRBAC } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FocusTrap, Main, Portal, Link } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useParams, NavLink } from 'react-router-dom';\n\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useGetContentTypeConfigurationQuery } from '../../services/contentTypes';\nimport { buildValidParams } from '../../utils/api';\nimport { VersionContent } from '../components/VersionContent';\nimport { VersionHeader } from '../components/VersionHeader';\nimport { VersionsList } from '../components/VersionsList';\nimport { useGetHistoryVersionsQuery } from '../services/historyVersion';\n\nimport type {\n ContentType,\n FindContentTypeConfiguration,\n} from '../../../../shared/contracts/content-types';\nimport type {\n HistoryVersionDataResponse,\n GetHistoryVersions,\n} from '../../../../shared/contracts/history-versions';\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HistoryContextValue {\n contentType: UID.ContentType;\n id?: string; // null for single types\n layout: EditLayout['layout'];\n configuration: FindContentTypeConfiguration.Response['data'];\n selectedVersion: HistoryVersionDataResponse;\n // Errors are handled outside of the provider, so we exclude errors from the response type\n versions: Extract<GetHistoryVersions.Response, { data: Array<HistoryVersionDataResponse> }>;\n page: number;\n mainField: string;\n schema: ContentType;\n}\n\nconst [HistoryProvider, useHistoryContext] = createContext<HistoryContextValue>('HistoryPage');\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst HistoryPage = () => {\n const headerId = React.useId();\n const { formatMessage } = useIntl();\n const {\n slug,\n id: documentId,\n collectionType,\n } = useParams<{\n collectionType: string;\n slug: UID.ContentType;\n id: string;\n }>();\n\n const { isLoading: isLoadingDocument, schema } = useDocument({\n collectionType: collectionType!,\n model: slug!,\n });\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { displayName, mainField },\n },\n } = useDocumentLayout(slug!);\n const { data: configuration, isLoading: isLoadingConfiguration } =\n useGetContentTypeConfigurationQuery(slug!);\n\n // Parse state from query params\n const [{ query }] = useQueryParams<{\n page?: number;\n id?: string;\n plugins?: Record<string, unknown>;\n }>();\n const { id: selectedVersionId, ...queryWithoutId } = query;\n const validQueryParamsWithoutId = buildValidParams(queryWithoutId);\n const page = validQueryParamsWithoutId.page ? Number(validQueryParamsWithoutId.page) : 1;\n\n const versionsResponse = useGetHistoryVersionsQuery(\n {\n contentType: slug!,\n ...(documentId ? { documentId } : {}),\n // Omit id since it's not needed by the endpoint and caused extra refetches\n ...validQueryParamsWithoutId,\n },\n { refetchOnMountOrArgChange: true }\n );\n\n /**\n * When the page is first mounted, if there's already data in the cache, RTK has a fullfilled\n * status for the first render, right before it triggers a new request. This means the code\n * briefly reaches the part that redirects to the first history version (if none is set).\n * But since that data is stale, that means auto-selecting a version that may not be the most\n * recent. To avoid this, we identify through requestId if the query is stale despite the\n * fullfilled status, and show the loader in that case.\n * This means we essentially don't want cache. We always refetch when the page mounts, and\n * we always show the loader until we have the most recent data. That's fine for this page.\n */\n const initialRequestId = React.useRef(versionsResponse.requestId);\n const isStaleRequest = versionsResponse.requestId === initialRequestId.current;\n\n /**\n * Ensure that we have the necessary data to render the page:\n * - slug for single types\n * - slug _and_ documentId for collection types\n */\n if (!slug || (collectionType === COLLECTION_TYPES && !documentId)) {\n return <Navigate to=\"/content-manager\" />;\n }\n\n if (\n isLoadingDocument ||\n isLoadingLayout ||\n versionsResponse.isFetching ||\n isStaleRequest ||\n isLoadingConfiguration\n ) {\n return <Page.Loading />;\n }\n\n // It was a success, handle empty data\n if (!versionsResponse.isError && !versionsResponse.data?.data?.length) {\n return (\n <>\n <Page.NoData\n action={\n <Link\n tag={NavLink}\n to={`/content-manager/${collectionType}/${slug}${documentId ? `/${documentId}` : ''}`}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n </>\n );\n }\n\n // We have data, handle selected version\n if (versionsResponse.data?.data?.length && !selectedVersionId) {\n return (\n <Navigate\n to={{ search: stringify({ ...query, id: versionsResponse.data.data[0].id }) }}\n replace\n />\n );\n }\n\n const selectedVersion = versionsResponse.data?.data?.find(\n (version) => version.id.toString() === selectedVersionId\n );\n if (\n versionsResponse.isError ||\n !layout ||\n !schema ||\n !selectedVersion ||\n !configuration ||\n // This should not happen as it's covered by versionsResponse.isError, but we need it for TS\n versionsResponse.data.error\n ) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.history.page-title',\n defaultMessage: '{contentType} history',\n },\n {\n contentType: displayName,\n }\n )}\n </Page.Title>\n <HistoryProvider\n contentType={slug}\n id={documentId}\n schema={schema}\n layout={layout}\n configuration={configuration}\n selectedVersion={selectedVersion}\n versions={versionsResponse.data}\n page={page}\n mainField={mainField}\n >\n <Flex direction=\"row\" alignItems=\"flex-start\">\n <Main\n grow={1}\n height=\"100dvh\"\n background=\"neutral100\"\n paddingBottom={6}\n overflow=\"auto\"\n labelledBy={headerId}\n >\n <VersionHeader headerId={headerId} />\n\n <VersionContent />\n </Main>\n <VersionsList />\n </Flex>\n </HistoryProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedHistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedHistoryPageImpl = () => {\n const { slug } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return (\n <Box\n height=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={4}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={4}\n background=\"neutral0\"\n >\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <HistoryPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedHistoryPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedHistoryPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedHistoryPage, HistoryProvider, useHistoryContext };\nexport type { HistoryContextValue };\n"],"names":["HistoryProvider","useHistoryContext","createContext","HistoryPage","headerId","React","useId","formatMessage","useIntl","slug","id","documentId","collectionType","useParams","isLoading","isLoadingDocument","schema","useDocument","model","isLoadingLayout","edit","layout","settings","displayName","mainField","useDocumentLayout","data","configuration","isLoadingConfiguration","useGetContentTypeConfigurationQuery","query","useQueryParams","selectedVersionId","queryWithoutId","validQueryParamsWithoutId","buildValidParams","page","Number","versionsResponse","useGetHistoryVersionsQuery","contentType","refetchOnMountOrArgChange","initialRequestId","useRef","requestId","isStaleRequest","current","COLLECTION_TYPES","_jsx","Navigate","to","isFetching","Page","Loading","isError","length","_Fragment","NoData","action","Link","tag","NavLink","defaultMessage","search","stringify","replace","selectedVersion","find","version","toString","error","Error","_jsxs","Title","versions","Flex","direction","alignItems","Main","grow","height","background","paddingBottom","overflow","labelledBy","VersionHeader","VersionContent","VersionsList","ProtectedHistoryPageImpl","permissions","useRBAC","PERMISSIONS","map","subject","Box","width","position","top","left","zIndex","Protect","DocumentRBAC","ProtectedHistoryPage","Portal","FocusTrap"],"mappings":"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"}
@@ -126,7 +126,7 @@ const [HistoryProvider, useHistoryContext] = createContext('HistoryPage');
126
126
  children: [
127
127
  /*#__PURE__*/ jsxs(Main, {
128
128
  grow: 1,
129
- height: "100vh",
129
+ height: "100dvh",
130
130
  background: "neutral100",
131
131
  paddingBottom: 6,
132
132
  overflow: "auto",
@@ -158,23 +158,23 @@ const [HistoryProvider, useHistoryContext] = createContext('HistoryPage');
158
158
  }
159
159
  if (error || !slug) {
160
160
  return /*#__PURE__*/ jsx(Box, {
161
- height: "100vh",
162
- width: "100vw",
161
+ height: "100dvh",
162
+ width: "100dvw",
163
163
  position: "fixed",
164
164
  top: 0,
165
165
  left: 0,
166
- zIndex: 2,
166
+ zIndex: 4,
167
167
  background: "neutral0",
168
168
  children: /*#__PURE__*/ jsx(Page.Error, {})
169
169
  });
170
170
  }
171
171
  return /*#__PURE__*/ jsx(Box, {
172
- height: "100vh",
173
- width: "100vw",
172
+ height: "100dvh",
173
+ width: "100dvw",
174
174
  position: "fixed",
175
175
  top: 0,
176
176
  left: 0,
177
- zIndex: 2,
177
+ zIndex: 4,
178
178
  background: "neutral0",
179
179
  children: /*#__PURE__*/ jsx(Page.Protect, {
180
180
  permissions: permissions,
@@ -1 +1 @@
1
- {"version":3,"file":"History.mjs","sources":["../../../../admin/src/history/pages/History.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, Page, createContext, useRBAC } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FocusTrap, Main, Portal, Link } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useParams, NavLink } from 'react-router-dom';\n\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useGetContentTypeConfigurationQuery } from '../../services/contentTypes';\nimport { buildValidParams } from '../../utils/api';\nimport { VersionContent } from '../components/VersionContent';\nimport { VersionHeader } from '../components/VersionHeader';\nimport { VersionsList } from '../components/VersionsList';\nimport { useGetHistoryVersionsQuery } from '../services/historyVersion';\n\nimport type {\n ContentType,\n FindContentTypeConfiguration,\n} from '../../../../shared/contracts/content-types';\nimport type {\n HistoryVersionDataResponse,\n GetHistoryVersions,\n} from '../../../../shared/contracts/history-versions';\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HistoryContextValue {\n contentType: UID.ContentType;\n id?: string; // null for single types\n layout: EditLayout['layout'];\n configuration: FindContentTypeConfiguration.Response['data'];\n selectedVersion: HistoryVersionDataResponse;\n // Errors are handled outside of the provider, so we exclude errors from the response type\n versions: Extract<GetHistoryVersions.Response, { data: Array<HistoryVersionDataResponse> }>;\n page: number;\n mainField: string;\n schema: ContentType;\n}\n\nconst [HistoryProvider, useHistoryContext] = createContext<HistoryContextValue>('HistoryPage');\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst HistoryPage = () => {\n const headerId = React.useId();\n const { formatMessage } = useIntl();\n const {\n slug,\n id: documentId,\n collectionType,\n } = useParams<{\n collectionType: string;\n slug: UID.ContentType;\n id: string;\n }>();\n\n const { isLoading: isLoadingDocument, schema } = useDocument({\n collectionType: collectionType!,\n model: slug!,\n });\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { displayName, mainField },\n },\n } = useDocumentLayout(slug!);\n const { data: configuration, isLoading: isLoadingConfiguration } =\n useGetContentTypeConfigurationQuery(slug!);\n\n // Parse state from query params\n const [{ query }] = useQueryParams<{\n page?: number;\n id?: string;\n plugins?: Record<string, unknown>;\n }>();\n const { id: selectedVersionId, ...queryWithoutId } = query;\n const validQueryParamsWithoutId = buildValidParams(queryWithoutId);\n const page = validQueryParamsWithoutId.page ? Number(validQueryParamsWithoutId.page) : 1;\n\n const versionsResponse = useGetHistoryVersionsQuery(\n {\n contentType: slug!,\n ...(documentId ? { documentId } : {}),\n // Omit id since it's not needed by the endpoint and caused extra refetches\n ...validQueryParamsWithoutId,\n },\n { refetchOnMountOrArgChange: true }\n );\n\n /**\n * When the page is first mounted, if there's already data in the cache, RTK has a fullfilled\n * status for the first render, right before it triggers a new request. This means the code\n * briefly reaches the part that redirects to the first history version (if none is set).\n * But since that data is stale, that means auto-selecting a version that may not be the most\n * recent. To avoid this, we identify through requestId if the query is stale despite the\n * fullfilled status, and show the loader in that case.\n * This means we essentially don't want cache. We always refetch when the page mounts, and\n * we always show the loader until we have the most recent data. That's fine for this page.\n */\n const initialRequestId = React.useRef(versionsResponse.requestId);\n const isStaleRequest = versionsResponse.requestId === initialRequestId.current;\n\n /**\n * Ensure that we have the necessary data to render the page:\n * - slug for single types\n * - slug _and_ documentId for collection types\n */\n if (!slug || (collectionType === COLLECTION_TYPES && !documentId)) {\n return <Navigate to=\"/content-manager\" />;\n }\n\n if (\n isLoadingDocument ||\n isLoadingLayout ||\n versionsResponse.isFetching ||\n isStaleRequest ||\n isLoadingConfiguration\n ) {\n return <Page.Loading />;\n }\n\n // It was a success, handle empty data\n if (!versionsResponse.isError && !versionsResponse.data?.data?.length) {\n return (\n <>\n <Page.NoData\n action={\n <Link\n tag={NavLink}\n to={`/content-manager/${collectionType}/${slug}${documentId ? `/${documentId}` : ''}`}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n </>\n );\n }\n\n // We have data, handle selected version\n if (versionsResponse.data?.data?.length && !selectedVersionId) {\n return (\n <Navigate\n to={{ search: stringify({ ...query, id: versionsResponse.data.data[0].id }) }}\n replace\n />\n );\n }\n\n const selectedVersion = versionsResponse.data?.data?.find(\n (version) => version.id.toString() === selectedVersionId\n );\n if (\n versionsResponse.isError ||\n !layout ||\n !schema ||\n !selectedVersion ||\n !configuration ||\n // This should not happen as it's covered by versionsResponse.isError, but we need it for TS\n versionsResponse.data.error\n ) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.history.page-title',\n defaultMessage: '{contentType} history',\n },\n {\n contentType: displayName,\n }\n )}\n </Page.Title>\n <HistoryProvider\n contentType={slug}\n id={documentId}\n schema={schema}\n layout={layout}\n configuration={configuration}\n selectedVersion={selectedVersion}\n versions={versionsResponse.data}\n page={page}\n mainField={mainField}\n >\n <Flex direction=\"row\" alignItems=\"flex-start\">\n <Main\n grow={1}\n height=\"100vh\"\n background=\"neutral100\"\n paddingBottom={6}\n overflow=\"auto\"\n labelledBy={headerId}\n >\n <VersionHeader headerId={headerId} />\n\n <VersionContent />\n </Main>\n <VersionsList />\n </Flex>\n </HistoryProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedHistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedHistoryPageImpl = () => {\n const { slug } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <HistoryPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedHistoryPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedHistoryPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedHistoryPage, HistoryProvider, useHistoryContext };\nexport type { HistoryContextValue };\n"],"names":["HistoryProvider","useHistoryContext","createContext","HistoryPage","headerId","React","useId","formatMessage","useIntl","slug","id","documentId","collectionType","useParams","isLoading","isLoadingDocument","schema","useDocument","model","isLoadingLayout","edit","layout","settings","displayName","mainField","useDocumentLayout","data","configuration","isLoadingConfiguration","useGetContentTypeConfigurationQuery","query","useQueryParams","selectedVersionId","queryWithoutId","validQueryParamsWithoutId","buildValidParams","page","Number","versionsResponse","useGetHistoryVersionsQuery","contentType","refetchOnMountOrArgChange","initialRequestId","useRef","requestId","isStaleRequest","current","COLLECTION_TYPES","_jsx","Navigate","to","isFetching","Page","Loading","isError","length","_Fragment","NoData","action","Link","tag","NavLink","defaultMessage","search","stringify","replace","selectedVersion","find","version","toString","error","Error","_jsxs","Title","versions","Flex","direction","alignItems","Main","grow","height","background","paddingBottom","overflow","labelledBy","VersionHeader","VersionContent","VersionsList","ProtectedHistoryPageImpl","permissions","useRBAC","PERMISSIONS","map","subject","Box","width","position","top","left","zIndex","Protect","DocumentRBAC","ProtectedHistoryPage","Portal","FocusTrap"],"mappings":"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"}
1
+ {"version":3,"file":"History.mjs","sources":["../../../../admin/src/history/pages/History.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, Page, createContext, useRBAC } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FocusTrap, Main, Portal, Link } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useParams, NavLink } from 'react-router-dom';\n\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useGetContentTypeConfigurationQuery } from '../../services/contentTypes';\nimport { buildValidParams } from '../../utils/api';\nimport { VersionContent } from '../components/VersionContent';\nimport { VersionHeader } from '../components/VersionHeader';\nimport { VersionsList } from '../components/VersionsList';\nimport { useGetHistoryVersionsQuery } from '../services/historyVersion';\n\nimport type {\n ContentType,\n FindContentTypeConfiguration,\n} from '../../../../shared/contracts/content-types';\nimport type {\n HistoryVersionDataResponse,\n GetHistoryVersions,\n} from '../../../../shared/contracts/history-versions';\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HistoryContextValue {\n contentType: UID.ContentType;\n id?: string; // null for single types\n layout: EditLayout['layout'];\n configuration: FindContentTypeConfiguration.Response['data'];\n selectedVersion: HistoryVersionDataResponse;\n // Errors are handled outside of the provider, so we exclude errors from the response type\n versions: Extract<GetHistoryVersions.Response, { data: Array<HistoryVersionDataResponse> }>;\n page: number;\n mainField: string;\n schema: ContentType;\n}\n\nconst [HistoryProvider, useHistoryContext] = createContext<HistoryContextValue>('HistoryPage');\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst HistoryPage = () => {\n const headerId = React.useId();\n const { formatMessage } = useIntl();\n const {\n slug,\n id: documentId,\n collectionType,\n } = useParams<{\n collectionType: string;\n slug: UID.ContentType;\n id: string;\n }>();\n\n const { isLoading: isLoadingDocument, schema } = useDocument({\n collectionType: collectionType!,\n model: slug!,\n });\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { displayName, mainField },\n },\n } = useDocumentLayout(slug!);\n const { data: configuration, isLoading: isLoadingConfiguration } =\n useGetContentTypeConfigurationQuery(slug!);\n\n // Parse state from query params\n const [{ query }] = useQueryParams<{\n page?: number;\n id?: string;\n plugins?: Record<string, unknown>;\n }>();\n const { id: selectedVersionId, ...queryWithoutId } = query;\n const validQueryParamsWithoutId = buildValidParams(queryWithoutId);\n const page = validQueryParamsWithoutId.page ? Number(validQueryParamsWithoutId.page) : 1;\n\n const versionsResponse = useGetHistoryVersionsQuery(\n {\n contentType: slug!,\n ...(documentId ? { documentId } : {}),\n // Omit id since it's not needed by the endpoint and caused extra refetches\n ...validQueryParamsWithoutId,\n },\n { refetchOnMountOrArgChange: true }\n );\n\n /**\n * When the page is first mounted, if there's already data in the cache, RTK has a fullfilled\n * status for the first render, right before it triggers a new request. This means the code\n * briefly reaches the part that redirects to the first history version (if none is set).\n * But since that data is stale, that means auto-selecting a version that may not be the most\n * recent. To avoid this, we identify through requestId if the query is stale despite the\n * fullfilled status, and show the loader in that case.\n * This means we essentially don't want cache. We always refetch when the page mounts, and\n * we always show the loader until we have the most recent data. That's fine for this page.\n */\n const initialRequestId = React.useRef(versionsResponse.requestId);\n const isStaleRequest = versionsResponse.requestId === initialRequestId.current;\n\n /**\n * Ensure that we have the necessary data to render the page:\n * - slug for single types\n * - slug _and_ documentId for collection types\n */\n if (!slug || (collectionType === COLLECTION_TYPES && !documentId)) {\n return <Navigate to=\"/content-manager\" />;\n }\n\n if (\n isLoadingDocument ||\n isLoadingLayout ||\n versionsResponse.isFetching ||\n isStaleRequest ||\n isLoadingConfiguration\n ) {\n return <Page.Loading />;\n }\n\n // It was a success, handle empty data\n if (!versionsResponse.isError && !versionsResponse.data?.data?.length) {\n return (\n <>\n <Page.NoData\n action={\n <Link\n tag={NavLink}\n to={`/content-manager/${collectionType}/${slug}${documentId ? `/${documentId}` : ''}`}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n </>\n );\n }\n\n // We have data, handle selected version\n if (versionsResponse.data?.data?.length && !selectedVersionId) {\n return (\n <Navigate\n to={{ search: stringify({ ...query, id: versionsResponse.data.data[0].id }) }}\n replace\n />\n );\n }\n\n const selectedVersion = versionsResponse.data?.data?.find(\n (version) => version.id.toString() === selectedVersionId\n );\n if (\n versionsResponse.isError ||\n !layout ||\n !schema ||\n !selectedVersion ||\n !configuration ||\n // This should not happen as it's covered by versionsResponse.isError, but we need it for TS\n versionsResponse.data.error\n ) {\n return <Page.Error />;\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.history.page-title',\n defaultMessage: '{contentType} history',\n },\n {\n contentType: displayName,\n }\n )}\n </Page.Title>\n <HistoryProvider\n contentType={slug}\n id={documentId}\n schema={schema}\n layout={layout}\n configuration={configuration}\n selectedVersion={selectedVersion}\n versions={versionsResponse.data}\n page={page}\n mainField={mainField}\n >\n <Flex direction=\"row\" alignItems=\"flex-start\">\n <Main\n grow={1}\n height=\"100dvh\"\n background=\"neutral100\"\n paddingBottom={6}\n overflow=\"auto\"\n labelledBy={headerId}\n >\n <VersionHeader headerId={headerId} />\n\n <VersionContent />\n </Main>\n <VersionsList />\n </Flex>\n </HistoryProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedHistoryPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedHistoryPageImpl = () => {\n const { slug } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return (\n <Box\n height=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={4}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={4}\n background=\"neutral0\"\n >\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <HistoryPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedHistoryPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedHistoryPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedHistoryPage, HistoryProvider, useHistoryContext };\nexport type { HistoryContextValue };\n"],"names":["HistoryProvider","useHistoryContext","createContext","HistoryPage","headerId","React","useId","formatMessage","useIntl","slug","id","documentId","collectionType","useParams","isLoading","isLoadingDocument","schema","useDocument","model","isLoadingLayout","edit","layout","settings","displayName","mainField","useDocumentLayout","data","configuration","isLoadingConfiguration","useGetContentTypeConfigurationQuery","query","useQueryParams","selectedVersionId","queryWithoutId","validQueryParamsWithoutId","buildValidParams","page","Number","versionsResponse","useGetHistoryVersionsQuery","contentType","refetchOnMountOrArgChange","initialRequestId","useRef","requestId","isStaleRequest","current","COLLECTION_TYPES","_jsx","Navigate","to","isFetching","Page","Loading","isError","length","_Fragment","NoData","action","Link","tag","NavLink","defaultMessage","search","stringify","replace","selectedVersion","find","version","toString","error","Error","_jsxs","Title","versions","Flex","direction","alignItems","Main","grow","height","background","paddingBottom","overflow","labelledBy","VersionHeader","VersionContent","VersionsList","ProtectedHistoryPageImpl","permissions","useRBAC","PERMISSIONS","map","subject","Box","width","position","top","left","zIndex","Protect","DocumentRBAC","ProtectedHistoryPage","Portal","FocusTrap"],"mappings":"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"}
@@ -18,6 +18,7 @@ var translations = require('./utils/translations.js');
18
18
  * Layout
19
19
  * -----------------------------------------------------------------------------------------------*/ const Layout = ()=>{
20
20
  const contentTypeMatch = reactRouterDom.useMatch('/content-manager/:kind/:uid/*');
21
+ const isMobile = strapiAdmin.useIsMobile();
21
22
  const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData.useContentManagerInitData();
22
23
  const authorisedModels = [
23
24
  ...collectionTypeLinks,
@@ -52,13 +53,33 @@ var translations = require('./utils/translations.js');
52
53
  to: "/no-content-types"
53
54
  });
54
55
  }
56
+ // On /content-manager base route
55
57
  if (!contentTypeMatch && authorisedModels.length > 0) {
56
- return /*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Navigate, {
57
- to: {
58
- pathname: authorisedModels[0].to,
59
- search: authorisedModels[0].search ?? ''
60
- },
61
- replace: true
58
+ // On desktop: redirect to first collection type
59
+ if (!isMobile) {
60
+ return /*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Navigate, {
61
+ to: {
62
+ pathname: authorisedModels[0].to,
63
+ search: authorisedModels[0].search ?? ''
64
+ },
65
+ replace: true
66
+ });
67
+ }
68
+ // On mobile: show navigation page
69
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
70
+ children: [
71
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Title, {
72
+ children: formatMessage({
73
+ id: translations.getTranslation('plugin.name'),
74
+ defaultMessage: 'Content Manager'
75
+ })
76
+ }),
77
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.PageWrapper, {
78
+ children: /*#__PURE__*/ jsxRuntime.jsx(LeftMenu.LeftMenu, {
79
+ isFullPage: true
80
+ })
81
+ })
82
+ ]
62
83
  });
63
84
  }
64
85
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sources":["../../admin/src/layout.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, Layouts } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Navigate to=\"/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/no-content-types') {\n return <Navigate to=\"/no-content-types\" />;\n }\n\n if (!contentTypeMatch && authorisedModels.length > 0) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n replace\n />\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <Outlet />\n </Layouts.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return <CardDragPreview label={item.label} />;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return <RelationDragPreview {...item} />;\n\n default:\n return null;\n }\n}\n\nexport { Layout };\n"],"names":["Layout","contentTypeMatch","useMatch","isLoading","collectionTypeLinks","models","singleTypeLinks","useContentManagerInitData","authorisedModels","sort","a","b","title","localeCompare","pathname","useLocation","formatMessage","useIntl","_jsxs","_Fragment","_jsx","Page","Title","id","getTranslation","defaultMessage","Loading","supportedModelsToDisplay","filter","isDisplayed","length","Navigate","to","search","replace","Layouts","Root","sideNav","LeftMenu","DragLayer","renderItem","renderDraglayerItem","Outlet","type","item","actualType","split","ItemTypes","EDIT_FIELD","FIELD","CardDragPreview","label","COMPONENT","DYNAMIC_ZONE","ComponentDragPreview","displayedValue","RELATION","RelationDragPreview"],"mappings":"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"}
1
+ {"version":3,"file":"layout.js","sources":["../../admin/src/layout.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, Layouts, SubNav, useIsMobile } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n const isMobile = useIsMobile();\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Navigate to=\"/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/no-content-types') {\n return <Navigate to=\"/no-content-types\" />;\n }\n\n // On /content-manager base route\n if (!contentTypeMatch && authorisedModels.length > 0) {\n // On desktop: redirect to first collection type\n if (!isMobile) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n replace\n />\n );\n }\n\n // On mobile: show navigation page\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <SubNav.PageWrapper>\n <LeftMenu isFullPage />\n </SubNav.PageWrapper>\n </>\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <Outlet />\n </Layouts.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return <CardDragPreview label={item.label} />;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return <RelationDragPreview {...item} />;\n\n default:\n return null;\n }\n}\n\nexport { Layout };\n"],"names":["Layout","contentTypeMatch","useMatch","isMobile","useIsMobile","isLoading","collectionTypeLinks","models","singleTypeLinks","useContentManagerInitData","authorisedModels","sort","a","b","title","localeCompare","pathname","useLocation","formatMessage","useIntl","_jsxs","_Fragment","_jsx","Page","Title","id","getTranslation","defaultMessage","Loading","supportedModelsToDisplay","filter","isDisplayed","length","Navigate","to","search","replace","SubNav","PageWrapper","LeftMenu","isFullPage","Layouts","Root","sideNav","DragLayer","renderItem","renderDraglayerItem","Outlet","type","item","actualType","split","ItemTypes","EDIT_FIELD","FIELD","CardDragPreview","label","COMPONENT","DYNAMIC_ZONE","ComponentDragPreview","displayedValue","RELATION","RelationDragPreview"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import 'react';
3
- import { Page, Layouts } from '@strapi/admin/strapi-admin';
3
+ import { useIsMobile, Page, SubNav, Layouts } from '@strapi/admin/strapi-admin';
4
4
  import { useIntl } from 'react-intl';
5
5
  import { useMatch, useLocation, Navigate, Outlet } from 'react-router-dom';
6
6
  import { DragLayer } from './components/DragLayer.mjs';
@@ -16,6 +16,7 @@ import { getTranslation } from './utils/translations.mjs';
16
16
  * Layout
17
17
  * -----------------------------------------------------------------------------------------------*/ const Layout = ()=>{
18
18
  const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');
19
+ const isMobile = useIsMobile();
19
20
  const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();
20
21
  const authorisedModels = [
21
22
  ...collectionTypeLinks,
@@ -50,13 +51,33 @@ import { getTranslation } from './utils/translations.mjs';
50
51
  to: "/no-content-types"
51
52
  });
52
53
  }
54
+ // On /content-manager base route
53
55
  if (!contentTypeMatch && authorisedModels.length > 0) {
54
- return /*#__PURE__*/ jsx(Navigate, {
55
- to: {
56
- pathname: authorisedModels[0].to,
57
- search: authorisedModels[0].search ?? ''
58
- },
59
- replace: true
56
+ // On desktop: redirect to first collection type
57
+ if (!isMobile) {
58
+ return /*#__PURE__*/ jsx(Navigate, {
59
+ to: {
60
+ pathname: authorisedModels[0].to,
61
+ search: authorisedModels[0].search ?? ''
62
+ },
63
+ replace: true
64
+ });
65
+ }
66
+ // On mobile: show navigation page
67
+ return /*#__PURE__*/ jsxs(Fragment, {
68
+ children: [
69
+ /*#__PURE__*/ jsx(Page.Title, {
70
+ children: formatMessage({
71
+ id: getTranslation('plugin.name'),
72
+ defaultMessage: 'Content Manager'
73
+ })
74
+ }),
75
+ /*#__PURE__*/ jsx(SubNav.PageWrapper, {
76
+ children: /*#__PURE__*/ jsx(LeftMenu, {
77
+ isFullPage: true
78
+ })
79
+ })
80
+ ]
60
81
  });
61
82
  }
62
83
  return /*#__PURE__*/ jsxs(Fragment, {
@@ -1 +1 @@
1
- {"version":3,"file":"layout.mjs","sources":["../../admin/src/layout.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, Layouts } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Navigate to=\"/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/no-content-types') {\n return <Navigate to=\"/no-content-types\" />;\n }\n\n if (!contentTypeMatch && authorisedModels.length > 0) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n replace\n />\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <Outlet />\n </Layouts.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return <CardDragPreview label={item.label} />;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return <RelationDragPreview {...item} />;\n\n default:\n return null;\n }\n}\n\nexport { Layout };\n"],"names":["Layout","contentTypeMatch","useMatch","isLoading","collectionTypeLinks","models","singleTypeLinks","useContentManagerInitData","authorisedModels","sort","a","b","title","localeCompare","pathname","useLocation","formatMessage","useIntl","_jsxs","_Fragment","_jsx","Page","Title","id","getTranslation","defaultMessage","Loading","supportedModelsToDisplay","filter","isDisplayed","length","Navigate","to","search","replace","Layouts","Root","sideNav","LeftMenu","DragLayer","renderItem","renderDraglayerItem","Outlet","type","item","actualType","split","ItemTypes","EDIT_FIELD","FIELD","CardDragPreview","label","COMPONENT","DYNAMIC_ZONE","ComponentDragPreview","displayedValue","RELATION","RelationDragPreview"],"mappings":"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"}
1
+ {"version":3,"file":"layout.mjs","sources":["../../admin/src/layout.tsx"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, Layouts, SubNav, useIsMobile } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n const isMobile = useIsMobile();\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Navigate to=\"/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/no-content-types') {\n return <Navigate to=\"/no-content-types\" />;\n }\n\n // On /content-manager base route\n if (!contentTypeMatch && authorisedModels.length > 0) {\n // On desktop: redirect to first collection type\n if (!isMobile) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n replace\n />\n );\n }\n\n // On mobile: show navigation page\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <SubNav.PageWrapper>\n <LeftMenu isFullPage />\n </SubNav.PageWrapper>\n </>\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <Outlet />\n </Layouts.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return <CardDragPreview label={item.label} />;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return <RelationDragPreview {...item} />;\n\n default:\n return null;\n }\n}\n\nexport { Layout };\n"],"names":["Layout","contentTypeMatch","useMatch","isMobile","useIsMobile","isLoading","collectionTypeLinks","models","singleTypeLinks","useContentManagerInitData","authorisedModels","sort","a","b","title","localeCompare","pathname","useLocation","formatMessage","useIntl","_jsxs","_Fragment","_jsx","Page","Title","id","getTranslation","defaultMessage","Loading","supportedModelsToDisplay","filter","isDisplayed","length","Navigate","to","search","replace","SubNav","PageWrapper","LeftMenu","isFullPage","Layouts","Root","sideNav","DragLayer","renderItem","renderDraglayerItem","Outlet","type","item","actualType","split","ItemTypes","EDIT_FIELD","FIELD","CardDragPreview","label","COMPONENT","DYNAMIC_ZONE","ComponentDragPreview","displayedValue","RELATION","RelationDragPreview"],"mappings":"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"}