@strapi/content-manager 0.0.0-next.d5c0fa2c0ecac02fb0014dcdc5fea0ef62c39d0e → 0.0.0-next.d6c661f8ab4a198d3e4c6a387b9b8f267a100766

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 (97) 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 +87 -45
  22. package/dist/admin/components/LeftMenu.js.map +1 -1
  23. package/dist/admin/components/LeftMenu.mjs +89 -47
  24. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  25. package/dist/admin/history/components/VersionHeader.js +1 -0
  26. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  27. package/dist/admin/history/components/VersionHeader.mjs +1 -0
  28. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  29. package/dist/admin/history/components/VersionsList.js +1 -1
  30. package/dist/admin/history/components/VersionsList.js.map +1 -1
  31. package/dist/admin/history/components/VersionsList.mjs +1 -1
  32. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  33. package/dist/admin/history/pages/History.js +7 -7
  34. package/dist/admin/history/pages/History.js.map +1 -1
  35. package/dist/admin/history/pages/History.mjs +7 -7
  36. package/dist/admin/history/pages/History.mjs.map +1 -1
  37. package/dist/admin/layout.js +27 -6
  38. package/dist/admin/layout.js.map +1 -1
  39. package/dist/admin/layout.mjs +28 -7
  40. package/dist/admin/layout.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/EditViewPage.js +7 -3
  42. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  43. package/dist/admin/pages/EditView/EditViewPage.mjs +8 -4
  44. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +2 -2
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +2 -2
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -1
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +3 -2
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +1 -2
  54. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +1 -2
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +2 -1
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -2
  60. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +2 -1
  62. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +3 -2
  64. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +2 -2
  66. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +2 -2
  68. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormLayout.js +13 -8
  70. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormLayout.mjs +14 -8
  72. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/Header.js +22 -7
  74. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/Header.mjs +23 -8
  76. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  77. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +1 -0
  78. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  79. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -0
  80. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  81. package/dist/admin/preview/pages/Preview.js +6 -6
  82. package/dist/admin/preview/pages/Preview.js.map +1 -1
  83. package/dist/admin/preview/pages/Preview.mjs +6 -6
  84. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  85. package/dist/admin/src/components/LeftMenu.d.ts +3 -1
  86. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  87. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +0 -3
  88. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  89. package/dist/admin/src/services/api.d.ts +1 -1
  90. package/dist/admin/src/services/components.d.ts +2 -2
  91. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  92. package/dist/admin/src/services/documents.d.ts +16 -16
  93. package/dist/admin/src/services/homepage.d.ts +1 -1
  94. package/dist/admin/src/services/init.d.ts +1 -1
  95. package/dist/admin/src/services/relations.d.ts +2 -2
  96. package/dist/admin/src/services/uid.d.ts +3 -3
  97. package/package.json +5 -5
@@ -6,6 +6,7 @@ var strapiAdmin = require('@strapi/admin/strapi-admin');
6
6
  var designSystem = require('@strapi/design-system');
7
7
  var qs = require('qs');
8
8
  var reactIntl = require('react-intl');
9
+ var useContentManagerInitData = require('../hooks/useContentManagerInitData.js');
9
10
  var useContentTypeSchema = require('../hooks/useContentTypeSchema.js');
10
11
  var hooks = require('../modules/hooks.js');
11
12
  var translations = require('../utils/translations.js');
@@ -29,10 +30,12 @@ function _interopNamespaceDefault(e) {
29
30
 
30
31
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
31
32
 
32
- const LeftMenu = ()=>{
33
+ const LeftMenu = ({ isFullPage = false })=>{
33
34
  const [search, setSearch] = React__namespace.useState('');
34
35
  const [{ query }] = strapiAdmin.useQueryParams();
35
36
  const { formatMessage, locale } = reactIntl.useIntl();
37
+ // Initialize Content Manager data to ensure links are available
38
+ const { isLoading } = useContentManagerInitData.useContentManagerInitData();
36
39
  const collectionTypeLinks = hooks.useTypedSelector((state)=>state['content-manager'].app.collectionTypeLinks);
37
40
  const singleTypeLinks = hooks.useTypedSelector((state)=>state['content-manager'].app.singleTypeLinks);
38
41
  const { schemas } = useContentTypeSchema.useContentTypeSchema();
@@ -115,56 +118,95 @@ const LeftMenu = ()=>{
115
118
  }
116
119
  return query.plugins;
117
120
  };
121
+ // Show loading state while data is being fetched
122
+ if (isLoading) {
123
+ return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.SubNav.Main, {
124
+ "aria-label": label,
125
+ children: [
126
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Header, {
127
+ label: label
128
+ }),
129
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {}),
130
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
131
+ padding: 4,
132
+ justifyContent: "center",
133
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Loader, {})
134
+ })
135
+ ]
136
+ });
137
+ }
118
138
  return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.SubNav.Main, {
119
139
  "aria-label": label,
120
140
  children: [
121
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Header, {
122
- label: label
123
- }),
124
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {
125
- background: "neutral150"
126
- }),
127
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
128
- padding: 5,
129
- gap: 3,
130
- direction: 'column',
131
- alignItems: 'stretch',
132
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Searchbar, {
133
- value: search,
134
- onChange: handleChangeSearch,
135
- onClear: handleClear,
136
- placeholder: formatMessage({
137
- id: 'content-manager.components.LeftMenu.Search.label',
138
- defaultMessage: 'Search for a content type'
141
+ !isFullPage && /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
142
+ children: [
143
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Header, {
144
+ label: label
139
145
  }),
140
- size: "S",
141
- // eslint-disable-next-line react/no-children-prop
142
- children: undefined,
143
- name: 'search_contentType',
144
- clearLabel: formatMessage({
145
- id: 'clearLabel',
146
- defaultMessage: 'Clear'
147
- })
148
- })
146
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {})
147
+ ]
149
148
  }),
150
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Sections, {
151
- children: menu.map((section)=>{
152
- return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Section, {
153
- label: section.title,
154
- children: section.links.map((link)=>{
155
- return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Link, {
156
- to: {
157
- pathname: link.to,
158
- search: qs.stringify({
159
- ...qs.parse(link.search ?? ''),
160
- plugins: getPluginsParamsForLink(link)
161
- })
162
- },
163
- label: link.title
164
- }, link.uid);
149
+ /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.SubNav.Content, {
150
+ children: [
151
+ isFullPage && /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Header, {
152
+ label: label
153
+ }),
154
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
155
+ paddingLeft: {
156
+ initial: 4,
157
+ large: 5
158
+ },
159
+ paddingRight: {
160
+ initial: 4,
161
+ large: 5
162
+ },
163
+ paddingTop: isFullPage ? 0 : {
164
+ initial: 4,
165
+ large: 5
166
+ },
167
+ paddingBottom: 0,
168
+ gap: 3,
169
+ direction: "column",
170
+ alignItems: "stretch",
171
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Searchbar, {
172
+ value: search,
173
+ onChange: handleChangeSearch,
174
+ onClear: handleClear,
175
+ placeholder: formatMessage({
176
+ id: 'search.placeholder',
177
+ defaultMessage: 'Search'
178
+ }),
179
+ size: "S",
180
+ // eslint-disable-next-line react/no-children-prop
181
+ children: undefined,
182
+ name: 'search_contentType',
183
+ clearLabel: formatMessage({
184
+ id: 'clearLabel',
185
+ defaultMessage: 'Clear'
186
+ })
165
187
  })
166
- }, section.id);
167
- })
188
+ }),
189
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Sections, {
190
+ children: menu.map((section)=>{
191
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Section, {
192
+ label: section.title,
193
+ badgeLabel: section.links.length.toString(),
194
+ children: section.links.map((link)=>{
195
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Link, {
196
+ to: {
197
+ pathname: link.to,
198
+ search: qs.stringify({
199
+ ...qs.parse(link.search ?? ''),
200
+ plugins: getPluginsParamsForLink(link)
201
+ })
202
+ },
203
+ label: link.title
204
+ }, link.uid);
205
+ })
206
+ }, section.id);
207
+ })
208
+ })
209
+ ]
168
210
  })
169
211
  ]
170
212
  });
@@ -1 +1 @@
1
- {"version":3,"file":"LeftMenu.js","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Divider, Flex, Searchbar, useCollator, useFilter } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search.trim()))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(event.target.value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider background=\"neutral150\" />\n <Flex padding={5} gap={3} direction={'column'} alignItems={'stretch'}>\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n size=\"S\"\n // eslint-disable-next-line react/no-children-prop\n children={undefined}\n name={'search_contentType'}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section key={section.id} label={section.title}>\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","trim","sort","a","b","compare","handleClear","handleChangeSearch","event","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","background","Flex","padding","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","Link","to","pathname","stringify","parse"],"mappings":"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"}
1
+ {"version":3,"file":"LeftMenu.js","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Flex, Searchbar, useCollator, useFilter, Divider, Loader } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentManagerInitData } from '../hooks/useContentManagerInitData';\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = ({ isFullPage = false }: { isFullPage?: boolean }) => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n // Initialize Content Manager data to ensure links are available\n const { isLoading } = useContentManagerInitData();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search.trim()))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(event.target.value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n // Show loading state while data is being fetched\n if (isLoading) {\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider />\n <Flex padding={4} justifyContent=\"center\">\n <Loader />\n </Flex>\n </SubNav.Main>\n );\n }\n\n return (\n <SubNav.Main aria-label={label}>\n {!isFullPage && (\n <>\n <SubNav.Header label={label} />\n <Divider />\n </>\n )}\n <SubNav.Content>\n {isFullPage && <SubNav.Header label={label} />}\n <Flex\n paddingLeft={{\n initial: 4,\n large: 5,\n }}\n paddingRight={{\n initial: 4,\n large: 5,\n }}\n paddingTop={\n isFullPage\n ? 0\n : {\n initial: 4,\n large: 5,\n }\n }\n paddingBottom={0}\n gap={3}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'search.placeholder',\n defaultMessage: 'Search',\n })}\n size=\"S\"\n // eslint-disable-next-line react/no-children-prop\n children={undefined}\n name={'search_contentType'}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Content>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","isFullPage","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","isLoading","useContentManagerInitData","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","trim","sort","a","b","compare","handleClear","handleChangeSearch","event","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","Flex","padding","justifyContent","Loader","_Fragment","Content","paddingLeft","initial","large","paddingRight","paddingTop","paddingBottom","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","badgeLabel","length","toString","Link","to","pathname","stringify","parse"],"mappings":"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"}
@@ -1,17 +1,20 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';
4
- import { useFilter, useCollator, Divider, Flex, Searchbar } from '@strapi/design-system';
4
+ import { useFilter, useCollator, Divider, Flex, Loader, Searchbar } from '@strapi/design-system';
5
5
  import { stringify, parse } from 'qs';
6
6
  import { useIntl } from 'react-intl';
7
+ import { useContentManagerInitData } from '../hooks/useContentManagerInitData.mjs';
7
8
  import { useContentTypeSchema } from '../hooks/useContentTypeSchema.mjs';
8
9
  import { useTypedSelector } from '../modules/hooks.mjs';
9
10
  import { getTranslation } from '../utils/translations.mjs';
10
11
 
11
- const LeftMenu = ()=>{
12
+ const LeftMenu = ({ isFullPage = false })=>{
12
13
  const [search, setSearch] = React.useState('');
13
14
  const [{ query }] = useQueryParams();
14
15
  const { formatMessage, locale } = useIntl();
16
+ // Initialize Content Manager data to ensure links are available
17
+ const { isLoading } = useContentManagerInitData();
15
18
  const collectionTypeLinks = useTypedSelector((state)=>state['content-manager'].app.collectionTypeLinks);
16
19
  const singleTypeLinks = useTypedSelector((state)=>state['content-manager'].app.singleTypeLinks);
17
20
  const { schemas } = useContentTypeSchema();
@@ -94,56 +97,95 @@ const LeftMenu = ()=>{
94
97
  }
95
98
  return query.plugins;
96
99
  };
100
+ // Show loading state while data is being fetched
101
+ if (isLoading) {
102
+ return /*#__PURE__*/ jsxs(SubNav.Main, {
103
+ "aria-label": label,
104
+ children: [
105
+ /*#__PURE__*/ jsx(SubNav.Header, {
106
+ label: label
107
+ }),
108
+ /*#__PURE__*/ jsx(Divider, {}),
109
+ /*#__PURE__*/ jsx(Flex, {
110
+ padding: 4,
111
+ justifyContent: "center",
112
+ children: /*#__PURE__*/ jsx(Loader, {})
113
+ })
114
+ ]
115
+ });
116
+ }
97
117
  return /*#__PURE__*/ jsxs(SubNav.Main, {
98
118
  "aria-label": label,
99
119
  children: [
100
- /*#__PURE__*/ jsx(SubNav.Header, {
101
- label: label
102
- }),
103
- /*#__PURE__*/ jsx(Divider, {
104
- background: "neutral150"
105
- }),
106
- /*#__PURE__*/ jsx(Flex, {
107
- padding: 5,
108
- gap: 3,
109
- direction: 'column',
110
- alignItems: 'stretch',
111
- children: /*#__PURE__*/ jsx(Searchbar, {
112
- value: search,
113
- onChange: handleChangeSearch,
114
- onClear: handleClear,
115
- placeholder: formatMessage({
116
- id: 'content-manager.components.LeftMenu.Search.label',
117
- defaultMessage: 'Search for a content type'
120
+ !isFullPage && /*#__PURE__*/ jsxs(Fragment, {
121
+ children: [
122
+ /*#__PURE__*/ jsx(SubNav.Header, {
123
+ label: label
118
124
  }),
119
- size: "S",
120
- // eslint-disable-next-line react/no-children-prop
121
- children: undefined,
122
- name: 'search_contentType',
123
- clearLabel: formatMessage({
124
- id: 'clearLabel',
125
- defaultMessage: 'Clear'
126
- })
127
- })
125
+ /*#__PURE__*/ jsx(Divider, {})
126
+ ]
128
127
  }),
129
- /*#__PURE__*/ jsx(SubNav.Sections, {
130
- children: menu.map((section)=>{
131
- return /*#__PURE__*/ jsx(SubNav.Section, {
132
- label: section.title,
133
- children: section.links.map((link)=>{
134
- return /*#__PURE__*/ jsx(SubNav.Link, {
135
- to: {
136
- pathname: link.to,
137
- search: stringify({
138
- ...parse(link.search ?? ''),
139
- plugins: getPluginsParamsForLink(link)
140
- })
141
- },
142
- label: link.title
143
- }, link.uid);
128
+ /*#__PURE__*/ jsxs(SubNav.Content, {
129
+ children: [
130
+ isFullPage && /*#__PURE__*/ jsx(SubNav.Header, {
131
+ label: label
132
+ }),
133
+ /*#__PURE__*/ jsx(Flex, {
134
+ paddingLeft: {
135
+ initial: 4,
136
+ large: 5
137
+ },
138
+ paddingRight: {
139
+ initial: 4,
140
+ large: 5
141
+ },
142
+ paddingTop: isFullPage ? 0 : {
143
+ initial: 4,
144
+ large: 5
145
+ },
146
+ paddingBottom: 0,
147
+ gap: 3,
148
+ direction: "column",
149
+ alignItems: "stretch",
150
+ children: /*#__PURE__*/ jsx(Searchbar, {
151
+ value: search,
152
+ onChange: handleChangeSearch,
153
+ onClear: handleClear,
154
+ placeholder: formatMessage({
155
+ id: 'search.placeholder',
156
+ defaultMessage: 'Search'
157
+ }),
158
+ size: "S",
159
+ // eslint-disable-next-line react/no-children-prop
160
+ children: undefined,
161
+ name: 'search_contentType',
162
+ clearLabel: formatMessage({
163
+ id: 'clearLabel',
164
+ defaultMessage: 'Clear'
165
+ })
144
166
  })
145
- }, section.id);
146
- })
167
+ }),
168
+ /*#__PURE__*/ jsx(SubNav.Sections, {
169
+ children: menu.map((section)=>{
170
+ return /*#__PURE__*/ jsx(SubNav.Section, {
171
+ label: section.title,
172
+ badgeLabel: section.links.length.toString(),
173
+ children: section.links.map((link)=>{
174
+ return /*#__PURE__*/ jsx(SubNav.Link, {
175
+ to: {
176
+ pathname: link.to,
177
+ search: stringify({
178
+ ...parse(link.search ?? ''),
179
+ plugins: getPluginsParamsForLink(link)
180
+ })
181
+ },
182
+ label: link.title
183
+ }, link.uid);
184
+ })
185
+ }, section.id);
186
+ })
187
+ })
188
+ ]
147
189
  })
148
190
  ]
149
191
  });
@@ -1 +1 @@
1
- {"version":3,"file":"LeftMenu.mjs","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Divider, Flex, Searchbar, useCollator, useFilter } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search.trim()))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(event.target.value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider background=\"neutral150\" />\n <Flex padding={5} gap={3} direction={'column'} alignItems={'stretch'}>\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n size=\"S\"\n // eslint-disable-next-line react/no-children-prop\n children={undefined}\n name={'search_contentType'}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section key={section.id} label={section.title}>\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","trim","sort","a","b","compare","handleClear","handleChangeSearch","event","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","background","Flex","padding","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","Link","to","pathname","stringify","parse"],"mappings":"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"}
1
+ {"version":3,"file":"LeftMenu.mjs","sources":["../../../admin/src/components/LeftMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';\nimport { Flex, Searchbar, useCollator, useFilter, Divider, Loader } from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { useContentManagerInitData } from '../hooks/useContentManagerInitData';\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst LeftMenu = ({ isFullPage = false }: { isFullPage?: boolean }) => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n // Initialize Content Manager data to ensure links are available\n const { isLoading } = useContentManagerInitData();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search.trim()))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(event.target.value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n // Show loading state while data is being fetched\n if (isLoading) {\n return (\n <SubNav.Main aria-label={label}>\n <SubNav.Header label={label} />\n <Divider />\n <Flex padding={4} justifyContent=\"center\">\n <Loader />\n </Flex>\n </SubNav.Main>\n );\n }\n\n return (\n <SubNav.Main aria-label={label}>\n {!isFullPage && (\n <>\n <SubNav.Header label={label} />\n <Divider />\n </>\n )}\n <SubNav.Content>\n {isFullPage && <SubNav.Header label={label} />}\n <Flex\n paddingLeft={{\n initial: 4,\n large: 5,\n }}\n paddingRight={{\n initial: 4,\n large: 5,\n }}\n paddingTop={\n isFullPage\n ? 0\n : {\n initial: 4,\n large: 5,\n }\n }\n paddingBottom={0}\n gap={3}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Searchbar\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n placeholder={formatMessage({\n id: 'search.placeholder',\n defaultMessage: 'Search',\n })}\n size=\"S\"\n // eslint-disable-next-line react/no-children-prop\n children={undefined}\n name={'search_contentType'}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n />\n </Flex>\n <SubNav.Sections>\n {menu.map((section) => {\n return (\n <SubNav.Section\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNav.Link\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n label={link.title}\n />\n );\n })}\n </SubNav.Section>\n );\n })}\n </SubNav.Sections>\n </SubNav.Content>\n </SubNav.Main>\n );\n};\n\nexport { LeftMenu };\n"],"names":["LeftMenu","isFullPage","search","setSearch","React","useState","query","useQueryParams","formatMessage","locale","useIntl","isLoading","useContentManagerInitData","collectionTypeLinks","useTypedSelector","state","app","singleTypeLinks","schemas","useContentTypeSchema","startsWith","useFilter","sensitivity","formatter","useCollator","menu","useMemo","id","title","getTranslation","defaultMessage","searchable","links","map","section","filter","link","trim","sort","a","b","compare","handleClear","handleChangeSearch","event","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","Main","aria-label","_jsx","Header","Divider","Flex","padding","justifyContent","Loader","_Fragment","Content","paddingLeft","initial","large","paddingRight","paddingTop","paddingBottom","gap","direction","alignItems","Searchbar","onChange","onClear","placeholder","size","children","undefined","name","clearLabel","Sections","Section","badgeLabel","length","toString","Link","to","pathname","stringify","parse"],"mappings":"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"}
@@ -168,6 +168,7 @@ const VersionHeader = ({ headerId })=>{
168
168
  /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
169
169
  onConfirm: handleRestore,
170
170
  endAction: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
171
+ fullWidth: true,
171
172
  variant: "secondary",
172
173
  onClick: handleRestore,
173
174
  loading: isLoading,
@@ -1 +1 @@
1
- {"version":3,"file":"VersionHeader.js","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
1
+ {"version":3,"file":"VersionHeader.js","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button fullWidth variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","fullWidth","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BaA,MAAAA,aAAAA,GAAgB,CAAC,EAAEC,QAAQ,EAAsB,GAAA;AAC5D,IAAA,MAAM,CAACC,mBAAqBC,EAAAA,sBAAAA,CAAuB,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AACrE,IAAA,MAAMC,QAAWC,GAAAA,0BAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,aAAa,EAAEC,UAAU,EAAE,GAAGC,iBAAAA,EAAAA;IACtC,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;IACvB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;AAC/B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AAGpB,IAAA,MAAM,EAAEC,cAAc,EAAEC,IAAI,EAAE,GAAGC,wBAAAA,EAAAA;AACjC,IAAA,MAAM,CAACC,cAAgB,EAAA,EAAEC,SAAS,EAAE,CAAC,GAAGC,wCAAAA,EAAAA;IACxC,MAAM,EAAEC,cAAc,EAAE,GAAGC,mBAAAA,CAAQC,mBAAYC,GAAG,CAAC,CAACC,MAAAA,IAAY;AAAEA,YAAAA,MAAAA;YAAQC,OAASV,EAAAA;SAAK,CAAA,CAAA,CAAA;AAExF,IAAA,MAAMW,UAAUC,yBAAkB,CAAA,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAMC,eAAe,CAAA;AACnF,IAAA,MAAMC,YAAYH,yBAAkB,CAAA,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAME,SAAS,CAAA;AAC/E,IAAA,MAAMC,SAASJ,yBAAkB,CAAA,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAMG,MAAM,CAAA;IACzE,MAAMC,gBAAAA,GAAmBL,0BACvB,eACA,EAAA,CAACC,QAAUA,KAAMK,CAAAA,IAAI,KAAK,CAAKL,IAAAA,KAAAA,CAAMM,QAAQ,CAACC,IAAI,CAAC,CAAE,CAAA,CAACC,EAAE,KAAKR,KAAAA,CAAMC,eAAe,CAACO,EAAE,CAAA;AAGvF,IAAA,MAAMC,cAAiBX,GAAAA,OAAAA,CAAQS,IAAI,CAACL,SAAU,CAAA;AAE9C,IAAA,MAAMQ,iBAAoB,GAAA,IAAA;AACxB,QAAA,MAAMC,qBAAqBC,YAAU,CAAA;AAAEC,YAAAA,OAAAA,EAAS7B,MAAM6B;SAAW,EAAA;YAAEC,MAAQ,EAAA;AAAM,SAAA,CAAA;QAEjF,OAAO;YACLC,QAAU,EAAA,IAAA;YACVC,MAAQL,EAAAA;AACV,SAAA;AACF,KAAA;AAEA,IAAA,MAAMM,aAAgB,GAAA,UAAA;QACpB,IAAI;YACF,MAAMC,QAAAA,GAAW,MAAM7B,cAAe,CAAA;AACpC8B,gBAAAA,UAAAA,EAAYrB,QAAQsB,iBAAiB;AACrClC,gBAAAA,cAAAA;gBACAmC,MAAQ,EAAA;AACNC,oBAAAA,SAAAA,EAAWxB,QAAQU,EAAE;AACrBe,oBAAAA,WAAAA,EAAazB,QAAQyB;AACvB,iBAAA;gBACAC,IAAM,EAAA;AAAED,oBAAAA,WAAAA,EAAazB,QAAQyB;AAAY;AAC3C,aAAA,CAAA;AAEA,YAAA,IAAI,UAAUL,QAAU,EAAA;AACtB3C,gBAAAA,QAAAA,CAASmC,iBAAqB,EAAA,EAAA;oBAAEe,QAAU,EAAA;AAAO,iBAAA,CAAA;gBAEjD3C,kBAAmB,CAAA;oBACjB4C,IAAM,EAAA,SAAA;AACNC,oBAAAA,KAAAA,EAAOlD,aAAc,CAAA;wBACnB+B,EAAI,EAAA,uCAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA,CAAA;AACAC,oBAAAA,OAAAA,EAASpD,aAAc,CAAA;wBACrB+B,EAAI,EAAA,yCAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;AACF,iBAAA,CAAA;gBAEAhD,UAAW,CAAA,0BAAA,CAAA;AACb;AAEA,YAAA,IAAI,WAAWsC,QAAU,EAAA;gBACvBpC,kBAAmB,CAAA;oBACjB4C,IAAM,EAAA,QAAA;AACNG,oBAAAA,OAAAA,EAASpD,aAAc,CAAA;wBACrB+B,EAAI,EAAA,+CAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;AACF,iBAAA,CAAA;AACF;AACF,SAAA,CAAE,OAAOE,KAAO,EAAA;YACdhD,kBAAmB,CAAA;gBACjB4C,IAAM,EAAA,QAAA;AACNG,gBAAAA,OAAAA,EAASpD,aAAc,CAAA;oBAAE+B,EAAI,EAAA,oBAAA;oBAAsBoB,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF;AACF,KAAA;IAEA,qBACEG,eAAA,CAACC,oBAAOC,IAAI,EAAA;QAACC,IAAM/D,EAAAA,mBAAAA;QAAqBgE,YAAc/D,EAAAA,sBAAAA;;AACpD,0BAAAgE,cAAA,CAACC,oBAAQC,UAAU,EAAA;gBACjB9B,EAAItC,EAAAA,QAAAA;AACJyD,gBAAAA,KAAAA,EAAOjD,UAAW,CAAA,IAAI6D,IAAKzC,CAAAA,OAAAA,CAAQ0C,SAAS,CAAG,EAAA;oBAC7CC,IAAM,EAAA,SAAA;oBACNC,KAAO,EAAA,SAAA;oBACPC,GAAK,EAAA,SAAA;oBACLC,IAAM,EAAA,SAAA;oBACNC,MAAQ,EAAA;AACV,iBAAA,CAAA;AACAC,gBAAAA,eAAAA,gBACEV,cAACW,CAAAA,yBAAAA,EAAAA;AACCC,oBAAAA,KAAAA,EAAOvE,aAAc,CAAA;wBACnB+B,EAAI,EAAA,iCAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;;AAGJqB,gBAAAA,QAAAA,gBACEb,cAACc,CAAAA,uBAAAA,EAAAA;oBAAWC,OAAQ,EAAA,SAAA;oBAAUC,SAAU,EAAA,YAAA;8BACrC3E,aACC,CAAA;wBACE+B,EAAI,EAAA,0CAAA;wBACJoB,cACE,EAAA;qBAEJ,EAAA;wBACEyB,SAAWC,EAAAA,OAAAA,CAAQxD,QAAQyD,MAAM,CAAA;AACjCN,wBAAAA,QAAAA,EAAU,CAAC,EAAExC,cAAkB,IAAA,EAAA,CAAG,EAAE,EAAEN,MAAAA,CAAOqD,IAAI,CAACC,YAAY,CAAC,CAAC,CAAC,CAACC,IAAI,EAAA;wBACtEH,MAAQzD,EAAAA,OAAAA,CAAQyD,MAAM,EAAEI;AAC1B,qBAAA;;AAINC,gBAAAA,gBAAAA,gBACExB,cAACyB,CAAAA,iBAAAA,EAAAA;AACCC,oBAAAA,SAAAA,gBAAW1B,cAAC2B,CAAAA,eAAAA,EAAAA,EAAAA,CAAAA;oBACZC,GAAKC,EAAAA,sBAAAA;oBACLC,EAAIxD,EAAAA,iBAAAA,EAAAA;oBACJe,QAAS,EAAA,MAAA;oBACT0C,UAAY,EAAA,KAAA;8BAEX1F,aAAc,CAAA;wBACb+B,EAAI,EAAA,aAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;;gBAGJwC,MAAQ,EAAA,KAAA;gBACRC,aACE,gBAAAjC,cAAA,CAACJ,oBAAOsC,OAAO,EAAA;AACb,oBAAA,QAAA,gBAAAlC,cAACmC,CAAAA,mBAAAA,EAAAA;wBACCC,QAAU,EAAA,CAAChF,cAAeiF,CAAAA,SAAS,IAAIrE,gBAAAA;wBACvCsE,OAAS,EAAA,IAAA;4BACPtG,sBAAuB,CAAA,IAAA,CAAA;AACzB,yBAAA;kCAECK,aAAc,CAAA;4BACb+B,EAAI,EAAA,gDAAA;4BACJoB,cAAgB,EAAA;AAClB,yBAAA;;;;0BAKRQ,cAACuC,CAAAA,yBAAAA,EAAAA;gBACCC,SAAW3D,EAAAA,aAAAA;AACX4D,gBAAAA,SAAAA,gBACEzC,cAACmC,CAAAA,mBAAAA,EAAAA;oBAAOO,SAAS,EAAA,IAAA;oBAAC3B,OAAQ,EAAA,WAAA;oBAAYuB,OAASzD,EAAAA,aAAAA;oBAAe8D,OAASzF,EAAAA,SAAAA;8BACpEb,aAAc,CAAA;wBACb+B,EAAI,EAAA,gDAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;;AAIJ,gBAAA,QAAA,gBAAAG,eAACiD,CAAAA,iBAAAA,EAAAA;oBACCC,SAAU,EAAA,QAAA;oBACVC,UAAW,EAAA,QAAA;oBACXC,cAAe,EAAA,QAAA;oBACfC,GAAK,EAAA,CAAA;oBACLC,SAAU,EAAA,QAAA;;sCAEVjD,cAAC4C,CAAAA,iBAAAA,EAAAA;4BAAKG,cAAe,EAAA,QAAA;AACnB,4BAAA,QAAA,gBAAA/C,cAACkD,CAAAA,mBAAAA,EAAAA;gCAAcC,KAAM,EAAA,MAAA;gCAAOC,MAAO,EAAA,MAAA;gCAAOC,IAAK,EAAA;;;sCAEjDrD,cAACc,CAAAA,uBAAAA,EAAAA;sCACEzE,aAAc,CAAA;gCACb+B,EAAI,EAAA,+CAAA;gCACJoB,cAAgB,EAAA;AAClB,6BAAA;;sCAEFQ,cAACc,CAAAA,uBAAAA,EAAAA;sCACEzE,aACC,CAAA;gCACE+B,EAAI,EAAA,iDAAA;gCACJoB,cACE,EAAA;6BAEJ,EAAA;gCACE8D,OAAS5F,EAAAA,OAAAA,CAAQ6F,MAAM,KAAK;AAC9B,6BAAA;;;;;;;AAOd;;;;"}
@@ -147,6 +147,7 @@ const VersionHeader = ({ headerId })=>{
147
147
  /*#__PURE__*/ jsx(ConfirmDialog, {
148
148
  onConfirm: handleRestore,
149
149
  endAction: /*#__PURE__*/ jsx(Button, {
150
+ fullWidth: true,
150
151
  variant: "secondary",
151
152
  onClick: handleRestore,
152
153
  loading: isLoading,
@@ -1 +1 @@
1
- {"version":3,"file":"VersionHeader.mjs","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
1
+ {"version":3,"file":"VersionHeader.mjs","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button fullWidth variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","fullWidth","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":";;;;;;;;;;;;AA2BaA,MAAAA,aAAAA,GAAgB,CAAC,EAAEC,QAAQ,EAAsB,GAAA;AAC5D,IAAA,MAAM,CAACC,mBAAqBC,EAAAA,sBAAAA,CAAuB,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AACrE,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,aAAa,EAAEC,UAAU,EAAE,GAAGC,OAAAA,EAAAA;IACtC,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;IACvB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;AAGpB,IAAA,MAAM,EAAEC,cAAc,EAAEC,IAAI,EAAE,GAAGC,SAAAA,EAAAA;AACjC,IAAA,MAAM,CAACC,cAAgB,EAAA,EAAEC,SAAS,EAAE,CAAC,GAAGC,yBAAAA,EAAAA;IACxC,MAAM,EAAEC,cAAc,EAAE,GAAGC,OAAAA,CAAQC,YAAYC,GAAG,CAAC,CAACC,MAAAA,IAAY;AAAEA,YAAAA,MAAAA;YAAQC,OAASV,EAAAA;SAAK,CAAA,CAAA,CAAA;AAExF,IAAA,MAAMW,UAAUC,iBAAkB,CAAA,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAMC,eAAe,CAAA;AACnF,IAAA,MAAMC,YAAYH,iBAAkB,CAAA,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAME,SAAS,CAAA;AAC/E,IAAA,MAAMC,SAASJ,iBAAkB,CAAA,eAAA,EAAiB,CAACC,KAAAA,GAAUA,MAAMG,MAAM,CAAA;IACzE,MAAMC,gBAAAA,GAAmBL,kBACvB,eACA,EAAA,CAACC,QAAUA,KAAMK,CAAAA,IAAI,KAAK,CAAKL,IAAAA,KAAAA,CAAMM,QAAQ,CAACC,IAAI,CAAC,CAAE,CAAA,CAACC,EAAE,KAAKR,KAAAA,CAAMC,eAAe,CAACO,EAAE,CAAA;AAGvF,IAAA,MAAMC,cAAiBX,GAAAA,OAAAA,CAAQS,IAAI,CAACL,SAAU,CAAA;AAE9C,IAAA,MAAMQ,iBAAoB,GAAA,IAAA;AACxB,QAAA,MAAMC,qBAAqBC,SAAU,CAAA;AAAEC,YAAAA,OAAAA,EAAS7B,MAAM6B;SAAW,EAAA;YAAEC,MAAQ,EAAA;AAAM,SAAA,CAAA;QAEjF,OAAO;YACLC,QAAU,EAAA,IAAA;YACVC,MAAQL,EAAAA;AACV,SAAA;AACF,KAAA;AAEA,IAAA,MAAMM,aAAgB,GAAA,UAAA;QACpB,IAAI;YACF,MAAMC,QAAAA,GAAW,MAAM7B,cAAe,CAAA;AACpC8B,gBAAAA,UAAAA,EAAYrB,QAAQsB,iBAAiB;AACrClC,gBAAAA,cAAAA;gBACAmC,MAAQ,EAAA;AACNC,oBAAAA,SAAAA,EAAWxB,QAAQU,EAAE;AACrBe,oBAAAA,WAAAA,EAAazB,QAAQyB;AACvB,iBAAA;gBACAC,IAAM,EAAA;AAAED,oBAAAA,WAAAA,EAAazB,QAAQyB;AAAY;AAC3C,aAAA,CAAA;AAEA,YAAA,IAAI,UAAUL,QAAU,EAAA;AACtB3C,gBAAAA,QAAAA,CAASmC,iBAAqB,EAAA,EAAA;oBAAEe,QAAU,EAAA;AAAO,iBAAA,CAAA;gBAEjD3C,kBAAmB,CAAA;oBACjB4C,IAAM,EAAA,SAAA;AACNC,oBAAAA,KAAAA,EAAOlD,aAAc,CAAA;wBACnB+B,EAAI,EAAA,uCAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA,CAAA;AACAC,oBAAAA,OAAAA,EAASpD,aAAc,CAAA;wBACrB+B,EAAI,EAAA,yCAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;AACF,iBAAA,CAAA;gBAEAhD,UAAW,CAAA,0BAAA,CAAA;AACb;AAEA,YAAA,IAAI,WAAWsC,QAAU,EAAA;gBACvBpC,kBAAmB,CAAA;oBACjB4C,IAAM,EAAA,QAAA;AACNG,oBAAAA,OAAAA,EAASpD,aAAc,CAAA;wBACrB+B,EAAI,EAAA,+CAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;AACF,iBAAA,CAAA;AACF;AACF,SAAA,CAAE,OAAOE,KAAO,EAAA;YACdhD,kBAAmB,CAAA;gBACjB4C,IAAM,EAAA,QAAA;AACNG,gBAAAA,OAAAA,EAASpD,aAAc,CAAA;oBAAE+B,EAAI,EAAA,oBAAA;oBAAsBoB,cAAgB,EAAA;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF;AACF,KAAA;IAEA,qBACEG,IAAA,CAACC,OAAOC,IAAI,EAAA;QAACC,IAAM/D,EAAAA,mBAAAA;QAAqBgE,YAAc/D,EAAAA,sBAAAA;;AACpD,0BAAAgE,GAAA,CAACC,QAAQC,UAAU,EAAA;gBACjB9B,EAAItC,EAAAA,QAAAA;AACJyD,gBAAAA,KAAAA,EAAOjD,UAAW,CAAA,IAAI6D,IAAKzC,CAAAA,OAAAA,CAAQ0C,SAAS,CAAG,EAAA;oBAC7CC,IAAM,EAAA,SAAA;oBACNC,KAAO,EAAA,SAAA;oBACPC,GAAK,EAAA,SAAA;oBACLC,IAAM,EAAA,SAAA;oBACNC,MAAQ,EAAA;AACV,iBAAA,CAAA;AACAC,gBAAAA,eAAAA,gBACEV,GAACW,CAAAA,aAAAA,EAAAA;AACCC,oBAAAA,KAAAA,EAAOvE,aAAc,CAAA;wBACnB+B,EAAI,EAAA,iCAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;;AAGJqB,gBAAAA,QAAAA,gBACEb,GAACc,CAAAA,UAAAA,EAAAA;oBAAWC,OAAQ,EAAA,SAAA;oBAAUC,SAAU,EAAA,YAAA;8BACrC3E,aACC,CAAA;wBACE+B,EAAI,EAAA,0CAAA;wBACJoB,cACE,EAAA;qBAEJ,EAAA;wBACEyB,SAAWC,EAAAA,OAAAA,CAAQxD,QAAQyD,MAAM,CAAA;AACjCN,wBAAAA,QAAAA,EAAU,CAAC,EAAExC,cAAkB,IAAA,EAAA,CAAG,EAAE,EAAEN,MAAAA,CAAOqD,IAAI,CAACC,YAAY,CAAC,CAAC,CAAC,CAACC,IAAI,EAAA;wBACtEH,MAAQzD,EAAAA,OAAAA,CAAQyD,MAAM,EAAEI;AAC1B,qBAAA;;AAINC,gBAAAA,gBAAAA,gBACExB,GAACyB,CAAAA,IAAAA,EAAAA;AACCC,oBAAAA,SAAAA,gBAAW1B,GAAC2B,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA;oBACZC,GAAKC,EAAAA,OAAAA;oBACLC,EAAIxD,EAAAA,iBAAAA,EAAAA;oBACJe,QAAS,EAAA,MAAA;oBACT0C,UAAY,EAAA,KAAA;8BAEX1F,aAAc,CAAA;wBACb+B,EAAI,EAAA,aAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;;gBAGJwC,MAAQ,EAAA,KAAA;gBACRC,aACE,gBAAAjC,GAAA,CAACJ,OAAOsC,OAAO,EAAA;AACb,oBAAA,QAAA,gBAAAlC,GAACmC,CAAAA,MAAAA,EAAAA;wBACCC,QAAU,EAAA,CAAChF,cAAeiF,CAAAA,SAAS,IAAIrE,gBAAAA;wBACvCsE,OAAS,EAAA,IAAA;4BACPtG,sBAAuB,CAAA,IAAA,CAAA;AACzB,yBAAA;kCAECK,aAAc,CAAA;4BACb+B,EAAI,EAAA,gDAAA;4BACJoB,cAAgB,EAAA;AAClB,yBAAA;;;;0BAKRQ,GAACuC,CAAAA,aAAAA,EAAAA;gBACCC,SAAW3D,EAAAA,aAAAA;AACX4D,gBAAAA,SAAAA,gBACEzC,GAACmC,CAAAA,MAAAA,EAAAA;oBAAOO,SAAS,EAAA,IAAA;oBAAC3B,OAAQ,EAAA,WAAA;oBAAYuB,OAASzD,EAAAA,aAAAA;oBAAe8D,OAASzF,EAAAA,SAAAA;8BACpEb,aAAc,CAAA;wBACb+B,EAAI,EAAA,gDAAA;wBACJoB,cAAgB,EAAA;AAClB,qBAAA;;AAIJ,gBAAA,QAAA,gBAAAG,IAACiD,CAAAA,IAAAA,EAAAA;oBACCC,SAAU,EAAA,QAAA;oBACVC,UAAW,EAAA,QAAA;oBACXC,cAAe,EAAA,QAAA;oBACfC,GAAK,EAAA,CAAA;oBACLC,SAAU,EAAA,QAAA;;sCAEVjD,GAAC4C,CAAAA,IAAAA,EAAAA;4BAAKG,cAAe,EAAA,QAAA;AACnB,4BAAA,QAAA,gBAAA/C,GAACkD,CAAAA,aAAAA,EAAAA;gCAAcC,KAAM,EAAA,MAAA;gCAAOC,MAAO,EAAA,MAAA;gCAAOC,IAAK,EAAA;;;sCAEjDrD,GAACc,CAAAA,UAAAA,EAAAA;sCACEzE,aAAc,CAAA;gCACb+B,EAAI,EAAA,+CAAA;gCACJoB,cAAgB,EAAA;AAClB,6BAAA;;sCAEFQ,GAACc,CAAAA,UAAAA,EAAAA;sCACEzE,aACC,CAAA;gCACE+B,EAAI,EAAA,iDAAA;gCACJoB,cACE,EAAA;6BAEJ,EAAA;gCACE8D,OAAS5F,EAAAA,OAAAA,CAAQ6F,MAAM,KAAK;AAC9B,6BAAA;;;;;;;AAOd;;;;"}