@strapi/content-manager 0.0.0-experimental.8bf99b7c43ed372264c198d347a2ada9dfed174d → 0.0.0-experimental.8c28a74d1219c09f4ee67402fd3a26f182c4990a

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 (195) hide show
  1. package/dist/admin/components/LeftMenu.js +30 -34
  2. package/dist/admin/components/LeftMenu.js.map +1 -1
  3. package/dist/admin/components/LeftMenu.mjs +32 -36
  4. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  5. package/dist/admin/components/Widgets.js +161 -0
  6. package/dist/admin/components/Widgets.js.map +1 -0
  7. package/dist/admin/components/Widgets.mjs +158 -0
  8. package/dist/admin/components/Widgets.mjs.map +1 -0
  9. package/dist/admin/content-manager.js.map +1 -1
  10. package/dist/admin/content-manager.mjs.map +1 -1
  11. package/dist/admin/history/pages/History.js +1 -9
  12. package/dist/admin/history/pages/History.js.map +1 -1
  13. package/dist/admin/history/pages/History.mjs +1 -9
  14. package/dist/admin/history/pages/History.mjs.map +1 -1
  15. package/dist/admin/hooks/useDocumentActions.js +13 -2
  16. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  17. package/dist/admin/hooks/useDocumentActions.mjs +13 -2
  18. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  19. package/dist/admin/hooks/useDocumentContext.js +57 -0
  20. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  21. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  22. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  23. package/dist/admin/index.js +42 -5
  24. package/dist/admin/index.js.map +1 -1
  25. package/dist/admin/index.mjs +42 -3
  26. package/dist/admin/index.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/EditViewPage.js +85 -93
  28. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  29. package/dist/admin/pages/EditView/EditViewPage.mjs +86 -94
  30. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/DocumentActions.js +232 -51
  32. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.mjs +238 -57
  34. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +7 -12
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +8 -13
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  44. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  46. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -2
  48. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -2
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +4 -2
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +4 -2
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +5 -16
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -16
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  60. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +495 -345
  64. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +495 -347
  66. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +143 -86
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +146 -89
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/UID.js +7 -7
  72. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +7 -7
  74. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
  80. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
  82. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  83. package/dist/admin/pages/ListView/ListViewPage.js +0 -77
  84. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  85. package/dist/admin/pages/ListView/ListViewPage.mjs +1 -78
  86. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  87. package/dist/admin/preview/components/PreviewHeader.js +3 -6
  88. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  89. package/dist/admin/preview/components/PreviewHeader.mjs +3 -6
  90. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  91. package/dist/admin/preview/pages/Preview.js +94 -102
  92. package/dist/admin/preview/pages/Preview.js.map +1 -1
  93. package/dist/admin/preview/pages/Preview.mjs +94 -102
  94. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  95. package/dist/admin/services/homepage.js +30 -0
  96. package/dist/admin/services/homepage.js.map +1 -0
  97. package/dist/admin/services/homepage.mjs +28 -0
  98. package/dist/admin/services/homepage.mjs.map +1 -0
  99. package/dist/admin/src/components/Widgets.d.ts +3 -0
  100. package/dist/admin/src/content-manager.d.ts +0 -3
  101. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  102. package/dist/admin/src/history/pages/History.d.ts +1 -1
  103. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  104. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  105. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  106. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  107. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
  108. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  109. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  110. package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
  111. package/dist/admin/src/services/homepage.d.ts +5 -0
  112. package/dist/admin/translations/en.json.js +2 -1
  113. package/dist/admin/translations/en.json.js.map +1 -1
  114. package/dist/admin/translations/en.json.mjs +2 -1
  115. package/dist/admin/translations/en.json.mjs.map +1 -1
  116. package/dist/admin/translations/ru.json.js +235 -226
  117. package/dist/admin/translations/ru.json.js.map +1 -1
  118. package/dist/admin/translations/ru.json.mjs +230 -226
  119. package/dist/admin/translations/ru.json.mjs.map +1 -1
  120. package/dist/server/controllers/index.js +3 -1
  121. package/dist/server/controllers/index.js.map +1 -1
  122. package/dist/server/controllers/index.mjs +3 -1
  123. package/dist/server/controllers/index.mjs.map +1 -1
  124. package/dist/server/homepage/controllers/homepage.js +57 -0
  125. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  126. package/dist/server/homepage/controllers/homepage.mjs +36 -0
  127. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  128. package/dist/server/homepage/controllers/index.js +10 -0
  129. package/dist/server/homepage/controllers/index.js.map +1 -0
  130. package/dist/server/homepage/controllers/index.mjs +8 -0
  131. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  132. package/dist/server/homepage/index.js +14 -0
  133. package/dist/server/homepage/index.js.map +1 -0
  134. package/dist/server/homepage/index.mjs +12 -0
  135. package/dist/server/homepage/index.mjs.map +1 -0
  136. package/dist/server/homepage/routes/homepage.js +25 -0
  137. package/dist/server/homepage/routes/homepage.js.map +1 -0
  138. package/dist/server/homepage/routes/homepage.mjs +23 -0
  139. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  140. package/dist/server/homepage/routes/index.js +13 -0
  141. package/dist/server/homepage/routes/index.js.map +1 -0
  142. package/dist/server/homepage/routes/index.mjs +11 -0
  143. package/dist/server/homepage/routes/index.mjs.map +1 -0
  144. package/dist/server/homepage/services/homepage.js +157 -0
  145. package/dist/server/homepage/services/homepage.js.map +1 -0
  146. package/dist/server/homepage/services/homepage.mjs +155 -0
  147. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  148. package/dist/server/homepage/services/index.js +10 -0
  149. package/dist/server/homepage/services/index.js.map +1 -0
  150. package/dist/server/homepage/services/index.mjs +8 -0
  151. package/dist/server/homepage/services/index.mjs.map +1 -0
  152. package/dist/server/preview/services/preview.js +0 -1
  153. package/dist/server/preview/services/preview.js.map +1 -1
  154. package/dist/server/preview/services/preview.mjs +0 -1
  155. package/dist/server/preview/services/preview.mjs.map +1 -1
  156. package/dist/server/routes/index.js +3 -1
  157. package/dist/server/routes/index.js.map +1 -1
  158. package/dist/server/routes/index.mjs +3 -1
  159. package/dist/server/routes/index.mjs.map +1 -1
  160. package/dist/server/services/index.js +3 -1
  161. package/dist/server/services/index.js.map +1 -1
  162. package/dist/server/services/index.mjs +3 -1
  163. package/dist/server/services/index.mjs.map +1 -1
  164. package/dist/server/src/controllers/index.d.ts.map +1 -1
  165. package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
  166. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  167. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  168. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  169. package/dist/server/src/homepage/index.d.ts +16 -0
  170. package/dist/server/src/homepage/index.d.ts.map +1 -0
  171. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  172. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  173. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  174. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  175. package/dist/server/src/homepage/services/homepage.d.ts +11 -0
  176. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  177. package/dist/server/src/homepage/services/index.d.ts +9 -0
  178. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  179. package/dist/server/src/index.d.ts +7 -1
  180. package/dist/server/src/index.d.ts.map +1 -1
  181. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  182. package/dist/server/src/routes/index.d.ts +1 -0
  183. package/dist/server/src/routes/index.d.ts.map +1 -1
  184. package/dist/server/src/services/data-mapper.d.ts +0 -1
  185. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  186. package/dist/server/src/services/index.d.ts +6 -1
  187. package/dist/server/src/services/index.d.ts.map +1 -1
  188. package/dist/shared/contracts/homepage.d.ts +25 -0
  189. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  190. package/package.json +8 -8
  191. package/dist/admin/features/DocumentContext.js +0 -71
  192. package/dist/admin/features/DocumentContext.js.map +0 -1
  193. package/dist/admin/features/DocumentContext.mjs +0 -49
  194. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  195. package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -4,9 +4,10 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var strapiAdmin = require('@strapi/admin/strapi-admin');
6
6
  var designSystem = require('@strapi/design-system');
7
- var Icons = require('@strapi/icons');
8
7
  var qs = require('qs');
9
8
  var reactIntl = require('react-intl');
9
+ var reactRouterDom = require('react-router-dom');
10
+ var styledComponents = require('styled-components');
10
11
  var useContentTypeSchema = require('../hooks/useContentTypeSchema.js');
11
12
  var hooks = require('../modules/hooks.js');
12
13
  var translations = require('../utils/translations.js');
@@ -30,6 +31,17 @@ function _interopNamespaceDefault(e) {
30
31
 
31
32
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
32
33
 
34
+ const SubNavLinkCustom = styledComponents.styled(designSystem.SubNavLink)`
35
+ div {
36
+ width: inherit;
37
+ span:nth-child(2) {
38
+ white-space: nowrap;
39
+ overflow: hidden;
40
+ text-overflow: ellipsis;
41
+ width: inherit;
42
+ }
43
+ }
44
+ `;
33
45
  const LeftMenu = ()=>{
34
46
  const [search, setSearch] = React__namespace.useState('');
35
47
  const [{ query }] = strapiAdmin.useQueryParams();
@@ -116,45 +128,28 @@ const LeftMenu = ()=>{
116
128
  }
117
129
  return query.plugins;
118
130
  };
119
- return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.SubNav.Main, {
131
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.SubNav, {
120
132
  "aria-label": label,
121
133
  children: [
122
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Header, {
123
- label: label
124
- }),
125
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {
126
- background: "neutral150"
127
- }),
128
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
129
- padding: 5,
130
- gap: 3,
131
- direction: 'column',
132
- alignItems: 'stretch',
133
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
134
- startAction: /*#__PURE__*/ jsxRuntime.jsx(Icons.Search, {
135
- fill: "neutral500"
136
- }),
137
- value: search,
138
- onChange: handleChangeSearch,
139
- "aria-label": "Search",
140
- placeholder: formatMessage({
141
- id: 'content-manager.components.LeftMenu.Search.label',
142
- defaultMessage: 'Search for a content type'
143
- }),
144
- endAction: /*#__PURE__*/ jsxRuntime.jsx(Icons.Cross, {
145
- onClick: handleClear,
146
- fill: "neutral500",
147
- cursor: "pointer"
148
- }),
149
- size: "S"
134
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.SubNavHeader, {
135
+ label: label,
136
+ searchable: true,
137
+ value: search,
138
+ onChange: handleChangeSearch,
139
+ onClear: handleClear,
140
+ searchLabel: formatMessage({
141
+ id: 'content-manager.components.LeftMenu.Search.label',
142
+ defaultMessage: 'Search for a content type'
150
143
  })
151
144
  }),
152
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Sections, {
145
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.SubNavSections, {
153
146
  children: menu.map((section)=>{
154
- return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Section, {
147
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.SubNavSection, {
155
148
  label: section.title,
149
+ badgeLabel: section.links.length.toString(),
156
150
  children: section.links.map((link)=>{
157
- return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.SubNav.Link, {
151
+ return /*#__PURE__*/ jsxRuntime.jsx(SubNavLinkCustom, {
152
+ tag: reactRouterDom.NavLink,
158
153
  to: {
159
154
  pathname: link.to,
160
155
  search: qs.stringify({
@@ -162,7 +157,8 @@ const LeftMenu = ()=>{
162
157
  plugins: getPluginsParamsForLink(link)
163
158
  })
164
159
  },
165
- label: link.title
160
+ width: "100%",
161
+ children: link.title
166
162
  }, link.uid);
167
163
  })
168
164
  }, section.id);
@@ -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, TextInput, useCollator, useFilter } from '@strapi/design-system';\nimport { Cross, Search } from '@strapi/icons';\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))\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 = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(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 <TextInput\n startAction={<Search fill=\"neutral500\" />}\n value={search}\n onChange={handleChangeSearch}\n aria-label=\"Search\"\n placeholder={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n endAction={<Cross onClick={handleClear} fill=\"neutral500\" cursor=\"pointer\" />}\n size=\"S\"\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","sort","a","b","compare","handleClear","handleChangeSearch","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","TextInput","startAction","Search","fill","onChange","placeholder","endAction","Cross","onClick","cursor","size","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 } from '@strapi/admin/strapi-admin';\nimport {\n useCollator,\n useFilter,\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\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 SubNavLinkCustom = styled(SubNavLink)`\n div {\n width: inherit;\n span:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: inherit;\n }\n }\n`;\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))\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 = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(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 aria-label={label}>\n <SubNavHeader\n label={label}\n searchable\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n searchLabel={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n />\n <SubNavSections>\n {menu.map((section) => {\n return (\n <SubNavSection\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNavLinkCustom\n tag={NavLink}\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n width=\"100%\"\n >\n {link.title}\n </SubNavLinkCustom>\n );\n })}\n </SubNavSection>\n );\n })}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { LeftMenu };\n"],"names":["SubNavLinkCustom","styled","SubNavLink","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","sort","a","b","compare","handleClear","handleChangeSearch","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","aria-label","_jsx","SubNavHeader","onChange","onClear","searchLabel","SubNavSections","SubNavSection","badgeLabel","length","toString","tag","NavLink","to","pathname","stringify","parse","width"],"mappings":"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"}
@@ -1,14 +1,26 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useQueryParams, SubNav } from '@strapi/admin/strapi-admin';
4
- import { useFilter, useCollator, Divider, Flex, TextInput } from '@strapi/design-system';
5
- import { Search, Cross } from '@strapi/icons';
3
+ import { useQueryParams } from '@strapi/admin/strapi-admin';
4
+ import { SubNavLink, useFilter, useCollator, SubNav, SubNavHeader, SubNavSections, SubNavSection } from '@strapi/design-system';
6
5
  import { stringify, parse } from 'qs';
7
6
  import { useIntl } from 'react-intl';
7
+ import { NavLink } from 'react-router-dom';
8
+ import { styled } from 'styled-components';
8
9
  import { useContentTypeSchema } from '../hooks/useContentTypeSchema.mjs';
9
10
  import { useTypedSelector } from '../modules/hooks.mjs';
10
11
  import { getTranslation } from '../utils/translations.mjs';
11
12
 
13
+ const SubNavLinkCustom = styled(SubNavLink)`
14
+ div {
15
+ width: inherit;
16
+ span:nth-child(2) {
17
+ white-space: nowrap;
18
+ overflow: hidden;
19
+ text-overflow: ellipsis;
20
+ width: inherit;
21
+ }
22
+ }
23
+ `;
12
24
  const LeftMenu = ()=>{
13
25
  const [search, setSearch] = React.useState('');
14
26
  const [{ query }] = useQueryParams();
@@ -95,45 +107,28 @@ const LeftMenu = ()=>{
95
107
  }
96
108
  return query.plugins;
97
109
  };
98
- return /*#__PURE__*/ jsxs(SubNav.Main, {
110
+ return /*#__PURE__*/ jsxs(SubNav, {
99
111
  "aria-label": label,
100
112
  children: [
101
- /*#__PURE__*/ jsx(SubNav.Header, {
102
- label: label
103
- }),
104
- /*#__PURE__*/ jsx(Divider, {
105
- background: "neutral150"
106
- }),
107
- /*#__PURE__*/ jsx(Flex, {
108
- padding: 5,
109
- gap: 3,
110
- direction: 'column',
111
- alignItems: 'stretch',
112
- children: /*#__PURE__*/ jsx(TextInput, {
113
- startAction: /*#__PURE__*/ jsx(Search, {
114
- fill: "neutral500"
115
- }),
116
- value: search,
117
- onChange: handleChangeSearch,
118
- "aria-label": "Search",
119
- placeholder: formatMessage({
120
- id: 'content-manager.components.LeftMenu.Search.label',
121
- defaultMessage: 'Search for a content type'
122
- }),
123
- endAction: /*#__PURE__*/ jsx(Cross, {
124
- onClick: handleClear,
125
- fill: "neutral500",
126
- cursor: "pointer"
127
- }),
128
- size: "S"
113
+ /*#__PURE__*/ jsx(SubNavHeader, {
114
+ label: label,
115
+ searchable: true,
116
+ value: search,
117
+ onChange: handleChangeSearch,
118
+ onClear: handleClear,
119
+ searchLabel: formatMessage({
120
+ id: 'content-manager.components.LeftMenu.Search.label',
121
+ defaultMessage: 'Search for a content type'
129
122
  })
130
123
  }),
131
- /*#__PURE__*/ jsx(SubNav.Sections, {
124
+ /*#__PURE__*/ jsx(SubNavSections, {
132
125
  children: menu.map((section)=>{
133
- return /*#__PURE__*/ jsx(SubNav.Section, {
126
+ return /*#__PURE__*/ jsx(SubNavSection, {
134
127
  label: section.title,
128
+ badgeLabel: section.links.length.toString(),
135
129
  children: section.links.map((link)=>{
136
- return /*#__PURE__*/ jsx(SubNav.Link, {
130
+ return /*#__PURE__*/ jsx(SubNavLinkCustom, {
131
+ tag: NavLink,
137
132
  to: {
138
133
  pathname: link.to,
139
134
  search: stringify({
@@ -141,7 +136,8 @@ const LeftMenu = ()=>{
141
136
  plugins: getPluginsParamsForLink(link)
142
137
  })
143
138
  },
144
- label: link.title
139
+ width: "100%",
140
+ children: link.title
145
141
  }, link.uid);
146
142
  })
147
143
  }, section.id);
@@ -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, TextInput, useCollator, useFilter } from '@strapi/design-system';\nimport { Cross, Search } from '@strapi/icons';\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))\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 = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(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 <TextInput\n startAction={<Search fill=\"neutral500\" />}\n value={search}\n onChange={handleChangeSearch}\n aria-label=\"Search\"\n placeholder={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n endAction={<Cross onClick={handleClear} fill=\"neutral500\" cursor=\"pointer\" />}\n size=\"S\"\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","sort","a","b","compare","handleClear","handleChangeSearch","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","TextInput","startAction","Search","fill","onChange","placeholder","endAction","Cross","onClick","cursor","size","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 } from '@strapi/admin/strapi-admin';\nimport {\n useCollator,\n useFilter,\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\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 SubNavLinkCustom = styled(SubNavLink)`\n div {\n width: inherit;\n span:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: inherit;\n }\n }\n`;\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))\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 = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(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 aria-label={label}>\n <SubNavHeader\n label={label}\n searchable\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n searchLabel={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n />\n <SubNavSections>\n {menu.map((section) => {\n return (\n <SubNavSection\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNavLinkCustom\n tag={NavLink}\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n width=\"100%\"\n >\n {link.title}\n </SubNavLinkCustom>\n );\n })}\n </SubNavSection>\n );\n })}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { LeftMenu };\n"],"names":["SubNavLinkCustom","styled","SubNavLink","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","sort","a","b","compare","handleClear","handleChangeSearch","target","value","label","getPluginsParamsForLink","schema","find","uid","isI18nEnabled","Boolean","pluginOptions","i18n","localized","plugins","restPlugins","_jsxs","SubNav","aria-label","_jsx","SubNavHeader","onChange","onClear","searchLabel","SubNavSections","SubNavSection","badgeLabel","length","toString","tag","NavLink","to","pathname","stringify","parse","width"],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
5
+ var designSystem = require('@strapi/design-system');
6
+ var Icons = require('@strapi/icons');
7
+ var reactIntl = require('react-intl');
8
+ var reactRouterDom = require('react-router-dom');
9
+ var styledComponents = require('styled-components');
10
+ var DocumentStatus = require('../pages/EditView/components/DocumentStatus.js');
11
+ var homepage = require('../services/homepage.js');
12
+ var RelativeTime = require('./RelativeTime.js');
13
+
14
+ const CellTypography = styledComponents.styled(designSystem.Typography).attrs({
15
+ maxWidth: '14.4rem',
16
+ display: 'block'
17
+ })`
18
+ overflow: hidden;
19
+ text-overflow: ellipsis;
20
+ white-space: nowrap;
21
+ `;
22
+ const RecentDocumentsTable = ({ documents })=>{
23
+ const { formatMessage } = reactIntl.useIntl();
24
+ const { trackUsage } = strapiAdmin.useTracking();
25
+ const navigate = reactRouterDom.useNavigate();
26
+ const getEditViewLink = (document)=>{
27
+ const isSingleType = document.kind === 'singleType';
28
+ const kindPath = isSingleType ? 'single-types' : 'collection-types';
29
+ const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';
30
+ return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;
31
+ };
32
+ const handleRowClick = (document)=>()=>{
33
+ trackUsage('willEditEntryFromHome');
34
+ const link = getEditViewLink(document);
35
+ navigate(link);
36
+ };
37
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Table, {
38
+ colCount: 5,
39
+ rowCount: documents?.length ?? 0,
40
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tbody, {
41
+ children: documents?.map((document)=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tr, {
42
+ onClick: handleRowClick(document),
43
+ cursor: "pointer",
44
+ children: [
45
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
46
+ children: /*#__PURE__*/ jsxRuntime.jsx(CellTypography, {
47
+ title: document.title,
48
+ variant: "omega",
49
+ textColor: "neutral800",
50
+ children: document.title
51
+ })
52
+ }),
53
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
54
+ children: /*#__PURE__*/ jsxRuntime.jsx(CellTypography, {
55
+ variant: "omega",
56
+ textColor: "neutral600",
57
+ children: document.kind === 'singleType' ? formatMessage({
58
+ id: 'content-manager.widget.last-edited.single-type',
59
+ defaultMessage: 'Single-Type'
60
+ }) : formatMessage({
61
+ id: document.contentTypeDisplayName,
62
+ defaultMessage: document.contentTypeDisplayName
63
+ })
64
+ })
65
+ }),
66
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
67
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
68
+ display: "inline-block",
69
+ children: document.status ? /*#__PURE__*/ jsxRuntime.jsx(DocumentStatus.DocumentStatus, {
70
+ status: document.status
71
+ }) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
72
+ textColor: "neutral600",
73
+ "aria-hidden": true,
74
+ children: "-"
75
+ })
76
+ })
77
+ }),
78
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
79
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
80
+ textColor: "neutral600",
81
+ children: /*#__PURE__*/ jsxRuntime.jsx(RelativeTime.RelativeTime, {
82
+ timestamp: new Date(document.updatedAt)
83
+ })
84
+ })
85
+ }),
86
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
87
+ onClick: (e)=>e.stopPropagation(),
88
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
89
+ display: "inline-block",
90
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
91
+ tag: reactRouterDom.Link,
92
+ to: getEditViewLink(document),
93
+ onClick: ()=>trackUsage('willEditEntryFromHome'),
94
+ label: formatMessage({
95
+ id: 'content-manager.actions.edit.label',
96
+ defaultMessage: 'Edit'
97
+ }),
98
+ variant: "ghost",
99
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Pencil, {})
100
+ })
101
+ })
102
+ })
103
+ ]
104
+ }, document.documentId))
105
+ })
106
+ });
107
+ };
108
+ /* -------------------------------------------------------------------------------------------------
109
+ * LastEditedWidget
110
+ * -----------------------------------------------------------------------------------------------*/ const LastEditedWidget = ()=>{
111
+ const { formatMessage } = reactIntl.useIntl();
112
+ const { data, isLoading, error } = homepage.useGetRecentDocumentsQuery({
113
+ action: 'update'
114
+ });
115
+ if (isLoading) {
116
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Loading, {});
117
+ }
118
+ if (error || !data) {
119
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Error, {});
120
+ }
121
+ if (data.length === 0) {
122
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.NoData, {
123
+ children: formatMessage({
124
+ id: 'content-manager.widget.last-edited.no-data',
125
+ defaultMessage: 'No edited entries'
126
+ })
127
+ });
128
+ }
129
+ return /*#__PURE__*/ jsxRuntime.jsx(RecentDocumentsTable, {
130
+ documents: data
131
+ });
132
+ };
133
+ /* -------------------------------------------------------------------------------------------------
134
+ * LastPublishedWidget
135
+ * -----------------------------------------------------------------------------------------------*/ const LastPublishedWidget = ()=>{
136
+ const { formatMessage } = reactIntl.useIntl();
137
+ const { data, isLoading, error } = homepage.useGetRecentDocumentsQuery({
138
+ action: 'publish'
139
+ });
140
+ if (isLoading) {
141
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Loading, {});
142
+ }
143
+ if (error || !data) {
144
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Error, {});
145
+ }
146
+ if (data.length === 0) {
147
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.NoData, {
148
+ children: formatMessage({
149
+ id: 'content-manager.widget.last-published.no-data',
150
+ defaultMessage: 'No published entries'
151
+ })
152
+ });
153
+ }
154
+ return /*#__PURE__*/ jsxRuntime.jsx(RecentDocumentsTable, {
155
+ documents: data
156
+ });
157
+ };
158
+
159
+ exports.LastEditedWidget = LastEditedWidget;
160
+ exports.LastPublishedWidget = LastPublishedWidget;
161
+ //# sourceMappingURL=Widgets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Widgets.js","sources":["../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { Widget, useTracking } from '@strapi/admin/strapi-admin';\nimport { Box, IconButton, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DocumentStatus } from '../pages/EditView/components/DocumentStatus';\nimport { useGetRecentDocumentsQuery } from '../services/homepage';\n\nimport { RelativeTime } from './RelativeTime';\n\nimport type { RecentDocument } from '../../../shared/contracts/homepage';\n\nconst CellTypography = styled(Typography).attrs({ maxWidth: '14.4rem', display: 'block' })`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst RecentDocumentsTable = ({ documents }: { documents: RecentDocument[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getEditViewLink = (document: RecentDocument): string => {\n const isSingleType = document.kind === 'singleType';\n const kindPath = isSingleType ? 'single-types' : 'collection-types';\n const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';\n\n return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;\n };\n\n const handleRowClick = (document: RecentDocument) => () => {\n trackUsage('willEditEntryFromHome');\n const link = getEditViewLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={5} rowCount={documents?.length ?? 0}>\n <Tbody>\n {documents?.map((document) => (\n <Tr onClick={handleRowClick(document)} cursor=\"pointer\" key={document.documentId}>\n <Td>\n <CellTypography title={document.title} variant=\"omega\" textColor=\"neutral800\">\n {document.title}\n </CellTypography>\n </Td>\n <Td>\n <CellTypography variant=\"omega\" textColor=\"neutral600\">\n {document.kind === 'singleType'\n ? formatMessage({\n id: 'content-manager.widget.last-edited.single-type',\n defaultMessage: 'Single-Type',\n })\n : formatMessage({\n id: document.contentTypeDisplayName,\n defaultMessage: document.contentTypeDisplayName,\n })}\n </CellTypography>\n </Td>\n <Td>\n <Box display=\"inline-block\">\n {document.status ? (\n <DocumentStatus status={document.status} />\n ) : (\n <Typography textColor=\"neutral600\" aria-hidden>\n -\n </Typography>\n )}\n </Box>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\">\n <RelativeTime timestamp={new Date(document.updatedAt)} />\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getEditViewLink(document)}\n onClick={() => trackUsage('willEditEntryFromHome')}\n label={formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastEditedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastEditedWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'update' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-edited.no-data',\n defaultMessage: 'No edited entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastPublishedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastPublishedWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'publish' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} />;\n};\n\nexport { LastEditedWidget, LastPublishedWidget };\n"],"names":["CellTypography","styled","Typography","attrs","maxWidth","display","RecentDocumentsTable","documents","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getEditViewLink","document","isSingleType","kind","kindPath","queryParams","locale","contentTypeUid","documentId","handleRowClick","link","_jsx","Table","colCount","rowCount","length","Tbody","map","_jsxs","Tr","onClick","cursor","Td","title","variant","textColor","id","defaultMessage","contentTypeDisplayName","Box","status","DocumentStatus","aria-hidden","RelativeTime","timestamp","Date","updatedAt","e","stopPropagation","IconButton","tag","Link","to","label","Pencil","LastEditedWidget","data","isLoading","error","useGetRecentDocumentsQuery","action","Widget","Loading","Error","NoData","LastPublishedWidget"],"mappings":"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"}