@strapi/admin 5.13.0-beta.1 → 5.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/admin/admin/src/features/Auth.js +2 -8
  2. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  3. package/dist/admin/admin/src/features/Auth.mjs +2 -8
  4. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  5. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  6. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  7. package/dist/admin/admin/src/hooks/useQueryParams.js +1 -7
  8. package/dist/admin/admin/src/hooks/useQueryParams.js.map +1 -1
  9. package/dist/admin/admin/src/hooks/useQueryParams.mjs +2 -8
  10. package/dist/admin/admin/src/hooks/useQueryParams.mjs.map +1 -1
  11. package/dist/admin/admin/src/pages/Auth/components/Register.js +1 -1
  12. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  13. package/dist/admin/admin/src/pages/Auth/components/Register.mjs +1 -1
  14. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  15. package/dist/admin/admin/src/pages/Home/HomePage.js +4 -76
  16. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  17. package/dist/admin/admin/src/pages/Home/HomePage.mjs +5 -77
  18. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  19. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +29 -30
  20. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
  21. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +32 -33
  22. package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
  23. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +19 -1
  24. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  25. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +21 -3
  26. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
  27. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +4 -1
  28. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  29. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +4 -1
  30. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
  31. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +32 -2
  32. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  33. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +32 -2
  34. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
  35. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +1 -0
  36. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  37. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +1 -0
  38. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
  39. package/dist/admin/admin/src/translations/ru.json.js +14 -1
  40. package/dist/admin/admin/src/translations/ru.json.js.map +1 -1
  41. package/dist/admin/admin/src/translations/ru.json.mjs +14 -1
  42. package/dist/admin/admin/src/translations/ru.json.mjs.map +1 -1
  43. package/dist/admin/index.js +0 -2
  44. package/dist/admin/index.js.map +1 -1
  45. package/dist/admin/index.mjs +0 -1
  46. package/dist/admin/index.mjs.map +1 -1
  47. package/dist/admin/src/features/Tracking.d.ts +2 -0
  48. package/dist/admin/src/index.d.ts +0 -1
  49. package/dist/admin/src/pages/Settings/components/Tokens/FormHead.d.ts +4 -1
  50. package/dist/server/server/src/content-types/api-token.js +7 -0
  51. package/dist/server/server/src/content-types/api-token.js.map +1 -1
  52. package/dist/server/server/src/content-types/api-token.mjs +7 -0
  53. package/dist/server/server/src/content-types/api-token.mjs.map +1 -1
  54. package/dist/server/server/src/services/api-token.js +21 -3
  55. package/dist/server/server/src/services/api-token.js.map +1 -1
  56. package/dist/server/server/src/services/api-token.mjs +21 -3
  57. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  58. package/dist/server/server/src/services/encryption.js +62 -0
  59. package/dist/server/server/src/services/encryption.js.map +1 -0
  60. package/dist/server/server/src/services/encryption.mjs +60 -0
  61. package/dist/server/server/src/services/encryption.mjs.map +1 -0
  62. package/dist/server/server/src/services/index.js +3 -1
  63. package/dist/server/server/src/services/index.js.map +1 -1
  64. package/dist/server/server/src/services/index.mjs +3 -1
  65. package/dist/server/server/src/services/index.mjs.map +1 -1
  66. package/dist/server/src/content-types/api-token.d.ts +7 -0
  67. package/dist/server/src/content-types/api-token.d.ts.map +1 -1
  68. package/dist/server/src/content-types/index.d.ts +7 -0
  69. package/dist/server/src/content-types/index.d.ts.map +1 -1
  70. package/dist/server/src/index.d.ts +11 -0
  71. package/dist/server/src/index.d.ts.map +1 -1
  72. package/dist/server/src/services/api-token.d.ts.map +1 -1
  73. package/dist/server/src/services/encryption.d.ts +6 -0
  74. package/dist/server/src/services/encryption.d.ts.map +1 -0
  75. package/dist/server/src/services/index.d.ts +4 -0
  76. package/dist/server/src/services/index.d.ts.map +1 -1
  77. package/dist/server/src/validation/project-settings.d.ts +4 -4
  78. package/dist/shared/contracts/api-token.d.ts +1 -0
  79. package/dist/shared/contracts/api-token.d.ts.map +1 -1
  80. package/package.json +8 -8
  81. package/dist/admin/admin/src/components/SubNav.js +0 -269
  82. package/dist/admin/admin/src/components/SubNav.js.map +0 -1
  83. package/dist/admin/admin/src/components/SubNav.mjs +0 -267
  84. package/dist/admin/admin/src/components/SubNav.mjs.map +0 -1
  85. package/dist/admin/admin/src/pages/Home/components/ContentManagerWidgets.js +0 -179
  86. package/dist/admin/admin/src/pages/Home/components/ContentManagerWidgets.js.map +0 -1
  87. package/dist/admin/admin/src/pages/Home/components/ContentManagerWidgets.mjs +0 -176
  88. package/dist/admin/admin/src/pages/Home/components/ContentManagerWidgets.mjs.map +0 -1
  89. package/dist/admin/admin/src/services/homepage.js +0 -28
  90. package/dist/admin/admin/src/services/homepage.js.map +0 -1
  91. package/dist/admin/admin/src/services/homepage.mjs +0 -26
  92. package/dist/admin/admin/src/services/homepage.mjs.map +0 -1
  93. package/dist/admin/src/components/SubNav.d.ts +0 -33
  94. package/dist/admin/src/pages/Home/components/ContentManagerWidgets.d.ts +0 -3
  95. package/dist/admin/src/services/homepage.d.ts +0 -5
  96. package/dist/server/server/src/controllers/homepage.js +0 -58
  97. package/dist/server/server/src/controllers/homepage.js.map +0 -1
  98. package/dist/server/server/src/controllers/homepage.mjs +0 -37
  99. package/dist/server/server/src/controllers/homepage.mjs.map +0 -1
  100. package/dist/server/server/src/routes/homepage.js +0 -22
  101. package/dist/server/server/src/routes/homepage.js.map +0 -1
  102. package/dist/server/server/src/routes/homepage.mjs +0 -20
  103. package/dist/server/server/src/routes/homepage.mjs.map +0 -1
  104. package/dist/server/server/src/services/homepage.js +0 -159
  105. package/dist/server/server/src/services/homepage.js.map +0 -1
  106. package/dist/server/server/src/services/homepage.mjs +0 -157
  107. package/dist/server/server/src/services/homepage.mjs.map +0 -1
  108. package/dist/server/src/controllers/homepage.d.ts +0 -8
  109. package/dist/server/src/controllers/homepage.d.ts.map +0 -1
  110. package/dist/server/src/routes/homepage.d.ts +0 -14
  111. package/dist/server/src/routes/homepage.d.ts.map +0 -1
  112. package/dist/server/src/services/homepage.d.ts +0 -14
  113. package/dist/server/src/services/homepage.d.ts.map +0 -1
@@ -1,176 +0,0 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { Typography, Table, Tbody, Tr, Td, Box, IconButton, Status } from '@strapi/design-system';
3
- import { Pencil } from '@strapi/icons';
4
- import { useIntl } from 'react-intl';
5
- import { useNavigate, Link } from 'react-router-dom';
6
- import { styled } from 'styled-components';
7
- import { RelativeTime } from '../../../components/RelativeTime.mjs';
8
- import { Widget } from '../../../components/WidgetHelpers.mjs';
9
- import { useTracking } from '../../../features/Tracking.mjs';
10
- import { useGetRecentDocumentsQuery } from '../../../services/homepage.mjs';
11
- import { capitalise } from '../../../utils/strings.mjs';
12
-
13
- const CellTypography = styled(Typography).attrs({
14
- maxWidth: '14.4rem',
15
- display: 'block'
16
- })`
17
- overflow: hidden;
18
- text-overflow: ellipsis;
19
- white-space: nowrap;
20
- `;
21
- const DocumentStatus = ({ status = 'draft' })=>{
22
- const statusVariant = status === 'draft' ? 'secondary' : status === 'published' ? 'success' : 'alternative';
23
- const { formatMessage } = useIntl();
24
- return /*#__PURE__*/ jsx(Status, {
25
- variant: statusVariant,
26
- size: "XS",
27
- children: /*#__PURE__*/ jsx(Typography, {
28
- tag: "span",
29
- variant: "omega",
30
- fontWeight: "bold",
31
- children: formatMessage({
32
- id: `content-manager.containers.List.${status}`,
33
- defaultMessage: capitalise(status)
34
- })
35
- })
36
- });
37
- };
38
- const RecentDocumentsTable = ({ documents })=>{
39
- const { formatMessage } = useIntl();
40
- const { trackUsage } = useTracking();
41
- const navigate = useNavigate();
42
- const getEditViewLink = (document)=>{
43
- const isSingleType = document.kind === 'singleType';
44
- const kindPath = isSingleType ? 'single-types' : 'collection-types';
45
- const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';
46
- return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;
47
- };
48
- const handleRowClick = (document)=>()=>{
49
- trackUsage('willEditEntryFromHome');
50
- const link = getEditViewLink(document);
51
- navigate(link);
52
- };
53
- return /*#__PURE__*/ jsx(Table, {
54
- colCount: 5,
55
- rowCount: documents?.length ?? 0,
56
- children: /*#__PURE__*/ jsx(Tbody, {
57
- children: documents?.map((document)=>/*#__PURE__*/ jsxs(Tr, {
58
- onClick: handleRowClick(document),
59
- cursor: "pointer",
60
- children: [
61
- /*#__PURE__*/ jsx(Td, {
62
- children: /*#__PURE__*/ jsx(CellTypography, {
63
- title: document.title,
64
- variant: "omega",
65
- textColor: "neutral800",
66
- children: document.title
67
- })
68
- }),
69
- /*#__PURE__*/ jsx(Td, {
70
- children: /*#__PURE__*/ jsx(CellTypography, {
71
- variant: "omega",
72
- textColor: "neutral600",
73
- children: document.kind === 'singleType' ? formatMessage({
74
- id: 'content-manager.widget.last-edited.single-type',
75
- defaultMessage: 'Single-Type'
76
- }) : formatMessage({
77
- id: document.contentTypeDisplayName,
78
- defaultMessage: document.contentTypeDisplayName
79
- })
80
- })
81
- }),
82
- /*#__PURE__*/ jsx(Td, {
83
- children: /*#__PURE__*/ jsx(Box, {
84
- display: "inline-block",
85
- children: document.status ? /*#__PURE__*/ jsx(DocumentStatus, {
86
- status: document.status
87
- }) : /*#__PURE__*/ jsx(Typography, {
88
- textColor: "neutral600",
89
- "aria-hidden": true,
90
- children: "-"
91
- })
92
- })
93
- }),
94
- /*#__PURE__*/ jsx(Td, {
95
- children: /*#__PURE__*/ jsx(Typography, {
96
- textColor: "neutral600",
97
- children: /*#__PURE__*/ jsx(RelativeTime, {
98
- timestamp: new Date(document.updatedAt)
99
- })
100
- })
101
- }),
102
- /*#__PURE__*/ jsx(Td, {
103
- onClick: (e)=>e.stopPropagation(),
104
- children: /*#__PURE__*/ jsx(Box, {
105
- display: "inline-block",
106
- children: /*#__PURE__*/ jsx(IconButton, {
107
- tag: Link,
108
- to: getEditViewLink(document),
109
- onClick: ()=>trackUsage('willEditEntryFromHome'),
110
- label: formatMessage({
111
- id: 'content-manager.actions.edit.label',
112
- defaultMessage: 'Edit'
113
- }),
114
- variant: "ghost",
115
- children: /*#__PURE__*/ jsx(Pencil, {})
116
- })
117
- })
118
- })
119
- ]
120
- }, document.documentId))
121
- })
122
- });
123
- };
124
- /* -------------------------------------------------------------------------------------------------
125
- * LastEditedWidget
126
- * -----------------------------------------------------------------------------------------------*/ const LastEditedWidget = ()=>{
127
- const { formatMessage } = useIntl();
128
- const { data, isLoading, error } = useGetRecentDocumentsQuery({
129
- action: 'update'
130
- });
131
- if (isLoading) {
132
- return /*#__PURE__*/ jsx(Widget.Loading, {});
133
- }
134
- if (error || !data) {
135
- return /*#__PURE__*/ jsx(Widget.Error, {});
136
- }
137
- if (data.length === 0) {
138
- return /*#__PURE__*/ jsx(Widget.NoData, {
139
- children: formatMessage({
140
- id: 'content-manager.widget.last-edited.no-data',
141
- defaultMessage: 'No edited entries'
142
- })
143
- });
144
- }
145
- return /*#__PURE__*/ jsx(RecentDocumentsTable, {
146
- documents: data
147
- });
148
- };
149
- /* -------------------------------------------------------------------------------------------------
150
- * LastPublishedWidget
151
- * -----------------------------------------------------------------------------------------------*/ const LastPublishedWidget = ()=>{
152
- const { formatMessage } = useIntl();
153
- const { data, isLoading, error } = useGetRecentDocumentsQuery({
154
- action: 'publish'
155
- });
156
- if (isLoading) {
157
- return /*#__PURE__*/ jsx(Widget.Loading, {});
158
- }
159
- if (error || !data) {
160
- return /*#__PURE__*/ jsx(Widget.Error, {});
161
- }
162
- if (data.length === 0) {
163
- return /*#__PURE__*/ jsx(Widget.NoData, {
164
- children: formatMessage({
165
- id: 'content-manager.widget.last-published.no-data',
166
- defaultMessage: 'No published entries'
167
- })
168
- });
169
- }
170
- return /*#__PURE__*/ jsx(RecentDocumentsTable, {
171
- documents: data
172
- });
173
- };
174
-
175
- export { LastEditedWidget, LastPublishedWidget };
176
- //# sourceMappingURL=ContentManagerWidgets.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ContentManagerWidgets.mjs","sources":["../../../../../../../admin/src/pages/Home/components/ContentManagerWidgets.tsx"],"sourcesContent":["import { Box, IconButton, Status, 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 { RelativeTime } from '../../../components/RelativeTime';\nimport { Widget } from '../../../components/WidgetHelpers';\nimport { useTracking } from '../../../features/Tracking';\nimport { useGetRecentDocumentsQuery } from '../../../services/homepage';\nimport { capitalise } from '../../../utils/strings';\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\ninterface DocumentStatusProps {\n status: RecentDocument['status'];\n}\n\nconst DocumentStatus = ({ status = 'draft' }: DocumentStatusProps) => {\n const statusVariant =\n status === 'draft' ? 'secondary' : status === 'published' ? 'success' : 'alternative';\n\n const { formatMessage } = useIntl();\n\n return (\n <Status variant={statusVariant} size=\"XS\">\n <Typography tag=\"span\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: `content-manager.containers.List.${status}`,\n defaultMessage: capitalise(status),\n })}\n </Typography>\n </Status>\n );\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","DocumentStatus","status","statusVariant","formatMessage","useIntl","_jsx","Status","variant","size","tag","fontWeight","id","defaultMessage","capitalise","RecentDocumentsTable","documents","trackUsage","useTracking","navigate","useNavigate","getEditViewLink","document","isSingleType","kind","kindPath","queryParams","locale","contentTypeUid","documentId","handleRowClick","link","Table","colCount","rowCount","length","Tbody","map","_jsxs","Tr","onClick","cursor","Td","title","textColor","contentTypeDisplayName","Box","aria-hidden","RelativeTime","timestamp","Date","updatedAt","e","stopPropagation","IconButton","Link","to","label","Pencil","LastEditedWidget","data","isLoading","error","useGetRecentDocumentsQuery","action","Widget","Loading","Error","NoData","LastPublishedWidget"],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- 'use strict';
2
-
3
- var api = require('./api.js');
4
-
5
- /**
6
- * TODO: Remove this service when the future flag for the widget api is removed
7
- */ const homepageService = api.adminApi.enhanceEndpoints({
8
- addTagTypes: [
9
- 'RecentDocumentList'
10
- ]
11
- }).injectEndpoints({
12
- endpoints: (builder)=>({
13
- getRecentDocuments: builder.query({
14
- query: (params)=>`/content-manager/homepage/recent-documents?action=${params.action}`,
15
- transformResponse: (response)=>response.data,
16
- providesTags: (res, _err, { action })=>[
17
- {
18
- type: 'RecentDocumentList',
19
- id: action
20
- }
21
- ]
22
- })
23
- })
24
- });
25
- const { useGetRecentDocumentsQuery } = homepageService;
26
-
27
- exports.useGetRecentDocumentsQuery = useGetRecentDocumentsQuery;
28
- //# sourceMappingURL=homepage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"homepage.js","sources":["../../../../../admin/src/services/homepage.ts"],"sourcesContent":["import * as Homepage from '../../../shared/contracts/homepage';\n\nimport { adminApi } from './api';\n\n/**\n * TODO: Remove this service when the future flag for the widget api is removed\n */\nconst homepageService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['RecentDocumentList'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getRecentDocuments: builder.query<\n Homepage.GetRecentDocuments.Response['data'],\n Homepage.GetRecentDocuments.Request['query']\n >({\n query: (params) => `/content-manager/homepage/recent-documents?action=${params.action}`,\n transformResponse: (response: Homepage.GetRecentDocuments.Response) => response.data,\n providesTags: (res, _err, { action }) => [\n { type: 'RecentDocumentList' as const, id: action },\n ],\n }),\n }),\n });\n\nconst { useGetRecentDocumentsQuery } = homepageService;\n\nexport { useGetRecentDocumentsQuery };\n"],"names":["homepageService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getRecentDocuments","query","params","action","transformResponse","response","data","providesTags","res","_err","type","id","useGetRecentDocumentsQuery"],"mappings":";;;;AAIA;;AAEC,IACD,MAAMA,eAAAA,GAAkBC,YACrBC,CAAAA,gBAAgB,CAAC;IAChBC,WAAa,EAAA;AAAC,QAAA;AAAqB;AACrC,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAW,EAAA,CAACC,WAAa;YACvBC,kBAAoBD,EAAAA,OAAAA,CAAQE,KAAK,CAG/B;gBACAA,KAAO,EAAA,CAACC,SAAW,CAAC,kDAAkD,EAAEA,MAAOC,CAAAA,MAAM,CAAC,CAAC;gBACvFC,iBAAmB,EAAA,CAACC,QAAmDA,GAAAA,QAAAA,CAASC,IAAI;AACpFC,gBAAAA,YAAAA,EAAc,CAACC,GAAKC,EAAAA,IAAAA,EAAM,EAAEN,MAAM,EAAE,GAAK;AACvC,wBAAA;4BAAEO,IAAM,EAAA,oBAAA;4BAA+BC,EAAIR,EAAAA;AAAO;AACnD;AACH,aAAA;SACF;AACF,CAAA,CAAA;AAEI,MAAA,EAAES,0BAA0B,EAAE,GAAGnB;;;;"}
@@ -1,26 +0,0 @@
1
- import { adminApi } from './api.mjs';
2
-
3
- /**
4
- * TODO: Remove this service when the future flag for the widget api is removed
5
- */ const homepageService = adminApi.enhanceEndpoints({
6
- addTagTypes: [
7
- 'RecentDocumentList'
8
- ]
9
- }).injectEndpoints({
10
- endpoints: (builder)=>({
11
- getRecentDocuments: builder.query({
12
- query: (params)=>`/content-manager/homepage/recent-documents?action=${params.action}`,
13
- transformResponse: (response)=>response.data,
14
- providesTags: (res, _err, { action })=>[
15
- {
16
- type: 'RecentDocumentList',
17
- id: action
18
- }
19
- ]
20
- })
21
- })
22
- });
23
- const { useGetRecentDocumentsQuery } = homepageService;
24
-
25
- export { useGetRecentDocumentsQuery };
26
- //# sourceMappingURL=homepage.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"homepage.mjs","sources":["../../../../../admin/src/services/homepage.ts"],"sourcesContent":["import * as Homepage from '../../../shared/contracts/homepage';\n\nimport { adminApi } from './api';\n\n/**\n * TODO: Remove this service when the future flag for the widget api is removed\n */\nconst homepageService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['RecentDocumentList'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getRecentDocuments: builder.query<\n Homepage.GetRecentDocuments.Response['data'],\n Homepage.GetRecentDocuments.Request['query']\n >({\n query: (params) => `/content-manager/homepage/recent-documents?action=${params.action}`,\n transformResponse: (response: Homepage.GetRecentDocuments.Response) => response.data,\n providesTags: (res, _err, { action }) => [\n { type: 'RecentDocumentList' as const, id: action },\n ],\n }),\n }),\n });\n\nconst { useGetRecentDocumentsQuery } = homepageService;\n\nexport { useGetRecentDocumentsQuery };\n"],"names":["homepageService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getRecentDocuments","query","params","action","transformResponse","response","data","providesTags","res","_err","type","id","useGetRecentDocumentsQuery"],"mappings":";;AAIA;;AAEC,IACD,MAAMA,eAAAA,GAAkBC,QACrBC,CAAAA,gBAAgB,CAAC;IAChBC,WAAa,EAAA;AAAC,QAAA;AAAqB;AACrC,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAW,EAAA,CAACC,WAAa;YACvBC,kBAAoBD,EAAAA,OAAAA,CAAQE,KAAK,CAG/B;gBACAA,KAAO,EAAA,CAACC,SAAW,CAAC,kDAAkD,EAAEA,MAAOC,CAAAA,MAAM,CAAC,CAAC;gBACvFC,iBAAmB,EAAA,CAACC,QAAmDA,GAAAA,QAAAA,CAASC,IAAI;AACpFC,gBAAAA,YAAAA,EAAc,CAACC,GAAKC,EAAAA,IAAAA,EAAM,EAAEN,MAAM,EAAE,GAAK;AACvC,wBAAA;4BAAEO,IAAM,EAAA,oBAAA;4BAA+BC,EAAIR,EAAAA;AAAO;AACnD;AACH,aAAA;SACF;AACF,CAAA,CAAA;AAEI,MAAA,EAAES,0BAA0B,EAAE,GAAGnB;;;;"}
@@ -1,33 +0,0 @@
1
- /// <reference types="react" />
2
- declare const StyledLink: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").FastOmit<Omit<import("react-router-dom").NavLinkProps & import("react").RefAttributes<HTMLAnchorElement>, "ref"> & {
3
- ref?: ((instance: HTMLAnchorElement | null) => void) | import("react").RefObject<HTMLAnchorElement> | null | undefined;
4
- }, never>> & Omit<import("react").ForwardRefExoticComponent<import("react-router-dom").NavLinkProps & import("react").RefAttributes<HTMLAnchorElement>>, keyof import("react").Component<any, {}, any>>;
5
- export declare const SubNav: {
6
- Main: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").FastOmit<Omit<Omit<import("@strapi/design-system").SubNavProps, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
7
- ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
8
- }, never>> & Omit<import("react").ForwardRefExoticComponent<Omit<import("@strapi/design-system").SubNavProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>, keyof import("react").Component<any, {}, any>>;
9
- Header: ({ label }: {
10
- label: string;
11
- }) => import("react/jsx-runtime").JSX.Element;
12
- Link: (props: Omit<React.ComponentProps<typeof StyledLink>, 'label'> & {
13
- label: React.ReactNode;
14
- endAction?: React.ReactNode;
15
- }) => import("react/jsx-runtime").JSX.Element;
16
- Sections: ({ children, ...props }: {
17
- children: React.ReactNode[];
18
- [key: string]: any;
19
- }) => import("react/jsx-runtime").JSX.Element;
20
- Section: ({ label, children, link, }: {
21
- label: string;
22
- children: React.ReactNode[];
23
- link?: {
24
- label: string;
25
- onClik: () => void;
26
- };
27
- }) => import("react/jsx-runtime").JSX.Element;
28
- SubSection: ({ label, children }: {
29
- label: string;
30
- children: React.ReactNode[];
31
- }) => import("react/jsx-runtime").JSX.Element;
32
- };
33
- export {};
@@ -1,3 +0,0 @@
1
- declare const LastEditedWidget: () => import("react/jsx-runtime").JSX.Element;
2
- declare const LastPublishedWidget: () => import("react/jsx-runtime").JSX.Element;
3
- export { LastEditedWidget, LastPublishedWidget };
@@ -1,5 +0,0 @@
1
- import * as Homepage from '../../../shared/contracts/homepage';
2
- declare const useGetRecentDocumentsQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<{
3
- action: "update" | "publish";
4
- }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("..").QueryArguments, unknown, import("..").BaseQueryError>, "RecentDocumentList", Homepage.RecentDocument[], "adminApi">>;
5
- export { useGetRecentDocumentsQuery };
@@ -1,58 +0,0 @@
1
- 'use strict';
2
-
3
- var yup = require('yup');
4
- var utils = require('@strapi/utils');
5
- var index = require('../utils/index.js');
6
-
7
- function _interopNamespaceDefault(e) {
8
- var n = Object.create(null);
9
- if (e) {
10
- Object.keys(e).forEach(function (k) {
11
- if (k !== 'default') {
12
- var d = Object.getOwnPropertyDescriptor(e, k);
13
- Object.defineProperty(n, k, d.get ? d : {
14
- enumerable: true,
15
- get: function () { return e[k]; }
16
- });
17
- }
18
- });
19
- }
20
- n.default = e;
21
- return Object.freeze(n);
22
- }
23
-
24
- var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
25
-
26
- const createHomepageController = ()=>{
27
- const homepageService = index.getService('homepage');
28
- const recentDocumentParamsSchema = yup__namespace.object().shape({
29
- action: yup__namespace.mixed().oneOf([
30
- 'update',
31
- 'publish'
32
- ]).required()
33
- });
34
- return {
35
- async getRecentDocuments (ctx) {
36
- let action;
37
- try {
38
- action = (await recentDocumentParamsSchema.validate(ctx.query)).action;
39
- } catch (error) {
40
- if (error instanceof yup__namespace.ValidationError) {
41
- throw new utils.errors.ValidationError(error.message);
42
- }
43
- throw error;
44
- }
45
- if (action === 'publish') {
46
- return {
47
- data: await homepageService.getRecentlyPublishedDocuments()
48
- };
49
- }
50
- return {
51
- data: await homepageService.getRecentlyUpdatedDocuments()
52
- };
53
- }
54
- };
55
- };
56
-
57
- exports.createHomepageController = createHomepageController;
58
- //# sourceMappingURL=homepage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"homepage.js","sources":["../../../../../server/src/controllers/homepage.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport * as yup from 'yup';\nimport { errors } from '@strapi/utils';\nimport { getService } from '../utils';\nimport type { GetRecentDocuments } from '../../../shared/contracts/homepage';\n\nconst createHomepageController = () => {\n const homepageService = getService('homepage');\n\n const recentDocumentParamsSchema = yup.object().shape({\n action: yup\n .mixed<GetRecentDocuments.Request['query']['action']>()\n .oneOf(['update', 'publish'])\n .required(),\n });\n\n return {\n async getRecentDocuments(ctx): Promise<GetRecentDocuments.Response> {\n let action;\n\n try {\n action = (await recentDocumentParamsSchema.validate(ctx.query)).action;\n } catch (error) {\n if (error instanceof yup.ValidationError) {\n throw new errors.ValidationError(error.message);\n }\n throw error;\n }\n\n if (action === 'publish') {\n return { data: await homepageService.getRecentlyPublishedDocuments() };\n }\n\n return { data: await homepageService.getRecentlyUpdatedDocuments() };\n },\n } satisfies Core.Controller;\n};\n\nexport { createHomepageController };\n"],"names":["createHomepageController","homepageService","getService","recentDocumentParamsSchema","yup","object","shape","action","mixed","oneOf","required","getRecentDocuments","ctx","validate","query","error","ValidationError","errors","message","data","getRecentlyPublishedDocuments","getRecentlyUpdatedDocuments"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,wBAA2B,GAAA,IAAA;AAC/B,IAAA,MAAMC,kBAAkBC,gBAAW,CAAA,UAAA,CAAA;AAEnC,IAAA,MAAMC,0BAA6BC,GAAAA,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AACpDC,QAAAA,MAAAA,EAAQH,cACLI,CAAAA,KAAK,EACLC,CAAAA,KAAK,CAAC;AAAC,YAAA,QAAA;AAAU,YAAA;AAAU,SAAA,CAAA,CAC3BC,QAAQ;AACb,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,MAAMC,oBAAmBC,GAAG,EAAA;YAC1B,IAAIL,MAAAA;YAEJ,IAAI;gBACFA,MAAS,GAAC,CAAA,MAAMJ,0BAA2BU,CAAAA,QAAQ,CAACD,GAAIE,CAAAA,KAAK,CAAA,EAAGP,MAAM;AACxE,aAAA,CAAE,OAAOQ,KAAO,EAAA;gBACd,IAAIA,KAAAA,YAAiBX,cAAIY,CAAAA,eAAe,EAAE;AACxC,oBAAA,MAAM,IAAIC,YAAAA,CAAOD,eAAe,CAACD,MAAMG,OAAO,CAAA;AAChD;gBACA,MAAMH,KAAAA;AACR;AAEA,YAAA,IAAIR,WAAW,SAAW,EAAA;gBACxB,OAAO;oBAAEY,IAAM,EAAA,MAAMlB,gBAAgBmB,6BAA6B;AAAG,iBAAA;AACvE;YAEA,OAAO;gBAAED,IAAM,EAAA,MAAMlB,gBAAgBoB,2BAA2B;AAAG,aAAA;AACrE;AACF,KAAA;AACF;;;;"}
@@ -1,37 +0,0 @@
1
- import * as yup from 'yup';
2
- import { errors } from '@strapi/utils';
3
- import { getService } from '../utils/index.mjs';
4
-
5
- const createHomepageController = ()=>{
6
- const homepageService = getService('homepage');
7
- const recentDocumentParamsSchema = yup.object().shape({
8
- action: yup.mixed().oneOf([
9
- 'update',
10
- 'publish'
11
- ]).required()
12
- });
13
- return {
14
- async getRecentDocuments (ctx) {
15
- let action;
16
- try {
17
- action = (await recentDocumentParamsSchema.validate(ctx.query)).action;
18
- } catch (error) {
19
- if (error instanceof yup.ValidationError) {
20
- throw new errors.ValidationError(error.message);
21
- }
22
- throw error;
23
- }
24
- if (action === 'publish') {
25
- return {
26
- data: await homepageService.getRecentlyPublishedDocuments()
27
- };
28
- }
29
- return {
30
- data: await homepageService.getRecentlyUpdatedDocuments()
31
- };
32
- }
33
- };
34
- };
35
-
36
- export { createHomepageController };
37
- //# sourceMappingURL=homepage.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"homepage.mjs","sources":["../../../../../server/src/controllers/homepage.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport * as yup from 'yup';\nimport { errors } from '@strapi/utils';\nimport { getService } from '../utils';\nimport type { GetRecentDocuments } from '../../../shared/contracts/homepage';\n\nconst createHomepageController = () => {\n const homepageService = getService('homepage');\n\n const recentDocumentParamsSchema = yup.object().shape({\n action: yup\n .mixed<GetRecentDocuments.Request['query']['action']>()\n .oneOf(['update', 'publish'])\n .required(),\n });\n\n return {\n async getRecentDocuments(ctx): Promise<GetRecentDocuments.Response> {\n let action;\n\n try {\n action = (await recentDocumentParamsSchema.validate(ctx.query)).action;\n } catch (error) {\n if (error instanceof yup.ValidationError) {\n throw new errors.ValidationError(error.message);\n }\n throw error;\n }\n\n if (action === 'publish') {\n return { data: await homepageService.getRecentlyPublishedDocuments() };\n }\n\n return { data: await homepageService.getRecentlyUpdatedDocuments() };\n },\n } satisfies Core.Controller;\n};\n\nexport { createHomepageController };\n"],"names":["createHomepageController","homepageService","getService","recentDocumentParamsSchema","yup","object","shape","action","mixed","oneOf","required","getRecentDocuments","ctx","validate","query","error","ValidationError","errors","message","data","getRecentlyPublishedDocuments","getRecentlyUpdatedDocuments"],"mappings":";;;;AAMA,MAAMA,wBAA2B,GAAA,IAAA;AAC/B,IAAA,MAAMC,kBAAkBC,UAAW,CAAA,UAAA,CAAA;AAEnC,IAAA,MAAMC,0BAA6BC,GAAAA,GAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AACpDC,QAAAA,MAAAA,EAAQH,GACLI,CAAAA,KAAK,EACLC,CAAAA,KAAK,CAAC;AAAC,YAAA,QAAA;AAAU,YAAA;AAAU,SAAA,CAAA,CAC3BC,QAAQ;AACb,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,MAAMC,oBAAmBC,GAAG,EAAA;YAC1B,IAAIL,MAAAA;YAEJ,IAAI;gBACFA,MAAS,GAAC,CAAA,MAAMJ,0BAA2BU,CAAAA,QAAQ,CAACD,GAAIE,CAAAA,KAAK,CAAA,EAAGP,MAAM;AACxE,aAAA,CAAE,OAAOQ,KAAO,EAAA;gBACd,IAAIA,KAAAA,YAAiBX,GAAIY,CAAAA,eAAe,EAAE;AACxC,oBAAA,MAAM,IAAIC,MAAAA,CAAOD,eAAe,CAACD,MAAMG,OAAO,CAAA;AAChD;gBACA,MAAMH,KAAAA;AACR;AAEA,YAAA,IAAIR,WAAW,SAAW,EAAA;gBACxB,OAAO;oBAAEY,IAAM,EAAA,MAAMlB,gBAAgBmB,6BAA6B;AAAG,iBAAA;AACvE;YAEA,OAAO;gBAAED,IAAM,EAAA,MAAMlB,gBAAgBoB,2BAA2B;AAAG,aAAA;AACrE;AACF,KAAA;AACF;;;;"}
@@ -1,22 +0,0 @@
1
- 'use strict';
2
-
3
- const info = {
4
- pluginName: 'admin',
5
- type: 'admin'
6
- };
7
- var homepage = [
8
- {
9
- method: 'GET',
10
- info,
11
- path: '/homepage/recent-documents',
12
- handler: 'homepage.getRecentDocuments',
13
- config: {
14
- policies: [
15
- 'admin::isAuthenticatedAdmin'
16
- ]
17
- }
18
- }
19
- ];
20
-
21
- module.exports = homepage;
22
- //# sourceMappingURL=homepage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"homepage.js","sources":["../../../../../server/src/routes/homepage.ts"],"sourcesContent":["import type { Plugin } from '@strapi/types';\n\nconst info = { pluginName: 'admin', type: 'admin' };\n\nexport default [\n {\n method: 'GET',\n info,\n path: '/homepage/recent-documents',\n handler: 'homepage.getRecentDocuments',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n] satisfies Plugin.LoadedPlugin['routes'][string]['routes'];\n"],"names":["info","pluginName","type","method","path","handler","config","policies"],"mappings":";;AAEA,MAAMA,IAAO,GAAA;IAAEC,UAAY,EAAA,OAAA;IAASC,IAAM,EAAA;AAAQ,CAAA;AAElD,eAAe;AACb,IAAA;QACEC,MAAQ,EAAA,KAAA;AACRH,QAAAA,IAAAA;QACAI,IAAM,EAAA,4BAAA;QACNC,OAAS,EAAA,6BAAA;QACTC,MAAQ,EAAA;YACNC,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF;CACD;;;;"}
@@ -1,20 +0,0 @@
1
- const info = {
2
- pluginName: 'admin',
3
- type: 'admin'
4
- };
5
- var homepage = [
6
- {
7
- method: 'GET',
8
- info,
9
- path: '/homepage/recent-documents',
10
- handler: 'homepage.getRecentDocuments',
11
- config: {
12
- policies: [
13
- 'admin::isAuthenticatedAdmin'
14
- ]
15
- }
16
- }
17
- ];
18
-
19
- export { homepage as default };
20
- //# sourceMappingURL=homepage.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"homepage.mjs","sources":["../../../../../server/src/routes/homepage.ts"],"sourcesContent":["import type { Plugin } from '@strapi/types';\n\nconst info = { pluginName: 'admin', type: 'admin' };\n\nexport default [\n {\n method: 'GET',\n info,\n path: '/homepage/recent-documents',\n handler: 'homepage.getRecentDocuments',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n] satisfies Plugin.LoadedPlugin['routes'][string]['routes'];\n"],"names":["info","pluginName","type","method","path","handler","config","policies"],"mappings":"AAEA,MAAMA,IAAO,GAAA;IAAEC,UAAY,EAAA,OAAA;IAASC,IAAM,EAAA;AAAQ,CAAA;AAElD,eAAe;AACb,IAAA;QACEC,MAAQ,EAAA,KAAA;AACRH,QAAAA,IAAAA;QACAI,IAAM,EAAA,4BAAA;QACNC,OAAS,EAAA,6BAAA;QACTC,MAAQ,EAAA;YACNC,QAAU,EAAA;AAAC,gBAAA;AAA8B;AAC3C;AACF;CACD;;;;"}
@@ -1,159 +0,0 @@
1
- 'use strict';
2
-
3
- var utils = require('@strapi/utils');
4
-
5
- /**
6
- * TODO: Remove this service when the future flag for the widget api is removed
7
- */ const createHomepageService = ({ strapi })=>{
8
- const MAX_DOCUMENTS = 4;
9
- const metadataService = strapi.plugin('content-manager').service('document-metadata');
10
- const permissionService = strapi.admin.services.permission;
11
- const getConfiguration = async (contentTypeUids)=>{
12
- /**
13
- * Don't use the strapi.store util because we need to make
14
- * more precise queries than exact key matches, in order to make as few queries as possible.
15
- */ const coreStore = strapi.db.query('strapi::core-store');
16
- const rawConfigurations = await coreStore.findMany({
17
- where: {
18
- key: {
19
- $in: contentTypeUids.map((contentType)=>`plugin_content_manager_configuration_content_types::${contentType}`)
20
- }
21
- }
22
- });
23
- return rawConfigurations.map((rawConfiguration)=>{
24
- return JSON.parse(rawConfiguration.value);
25
- });
26
- };
27
- const getPermittedContentTypes = async ()=>{
28
- const readPermissions = await permissionService.findMany({
29
- where: {
30
- role: {
31
- users: {
32
- id: strapi.requestContext.get()?.state?.user.id
33
- }
34
- },
35
- action: 'plugin::content-manager.explorer.read'
36
- }
37
- });
38
- return readPermissions.map((permission)=>permission.subject).filter(Boolean);
39
- };
40
- const getContentTypesMeta = (allowedContentTypeUids, configurations)=>{
41
- return allowedContentTypeUids.map((uid)=>{
42
- const configuration = configurations.find((config)=>config.uid === uid);
43
- const contentType = strapi.contentType(uid);
44
- const fields = [
45
- 'documentId',
46
- 'updatedAt'
47
- ];
48
- // Add fields required to get the status if D&P is enabled
49
- const hasDraftAndPublish = utils.contentTypes.hasDraftAndPublish(contentType);
50
- if (hasDraftAndPublish) {
51
- fields.push('publishedAt');
52
- }
53
- // Only add the main field if it's defined
54
- if (configuration?.settings.mainField) {
55
- fields.push(configuration.settings.mainField);
56
- }
57
- // Only add locale if it's localized
58
- const isLocalized = contentType.pluginOptions?.i18n?.localized;
59
- if (isLocalized) {
60
- fields.push('locale');
61
- }
62
- return {
63
- fields,
64
- mainField: configuration.settings.mainField,
65
- contentType,
66
- hasDraftAndPublish,
67
- uid
68
- };
69
- });
70
- };
71
- const formatDocuments = (documents, meta)=>{
72
- return documents.map((document)=>{
73
- return {
74
- documentId: document.documentId,
75
- locale: document.locale ?? null,
76
- updatedAt: new Date(document.updatedAt),
77
- title: document[meta.mainField ?? 'documentId'],
78
- publishedAt: meta.hasDraftAndPublish && document.publishedAt ? new Date(document.publishedAt) : null,
79
- contentTypeUid: meta.uid,
80
- contentTypeDisplayName: meta.contentType.info.displayName,
81
- kind: meta.contentType.kind
82
- };
83
- });
84
- };
85
- const addStatusToDocuments = async (documents)=>{
86
- return Promise.all(documents.map(async (recentDocument)=>{
87
- const hasDraftAndPublish = utils.contentTypes.hasDraftAndPublish(strapi.contentType(recentDocument.contentTypeUid));
88
- /**
89
- * Tries to query the other version of the document if draft and publish is enabled,
90
- * so that we know when to give the "modified" status.
91
- */ const { availableStatus } = await metadataService.getMetadata(recentDocument.contentTypeUid, recentDocument, {
92
- availableStatus: hasDraftAndPublish,
93
- availableLocales: false
94
- });
95
- const status = metadataService.getStatus(recentDocument, availableStatus);
96
- return {
97
- ...recentDocument,
98
- status: hasDraftAndPublish ? status : undefined
99
- };
100
- }));
101
- };
102
- const permissionCheckerService = strapi.plugin('content-manager').service('permission-checker');
103
- const getPermissionChecker = (uid)=>permissionCheckerService.create({
104
- userAbility: strapi.requestContext.get()?.state.userAbility,
105
- model: uid
106
- });
107
- return {
108
- async getRecentlyPublishedDocuments () {
109
- const permittedContentTypes = await getPermittedContentTypes();
110
- const allowedContentTypeUids = permittedContentTypes.filter((uid)=>{
111
- return utils.contentTypes.hasDraftAndPublish(strapi.contentType(uid));
112
- });
113
- // Fetch the configuration for each content type in a single query
114
- const configurations = await getConfiguration(allowedContentTypeUids);
115
- // Get the necessary metadata for the documents
116
- const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);
117
- // Now actually fetch and format the documents
118
- const recentDocuments = await Promise.all(contentTypesMeta.map(async (meta)=>{
119
- const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({
120
- limit: MAX_DOCUMENTS,
121
- sort: 'publishedAt:desc',
122
- fields: meta.fields,
123
- status: 'published'
124
- });
125
- const docs = await strapi.documents(meta.uid).findMany(permissionQuery);
126
- return formatDocuments(docs, meta);
127
- }));
128
- const overallRecentDocuments = recentDocuments.flat().sort((a, b)=>{
129
- if (!a.publishedAt || !b.publishedAt) return 0;
130
- return b.publishedAt.valueOf() - a.publishedAt.valueOf();
131
- }).slice(0, MAX_DOCUMENTS);
132
- return addStatusToDocuments(overallRecentDocuments);
133
- },
134
- async getRecentlyUpdatedDocuments () {
135
- const allowedContentTypeUids = await getPermittedContentTypes();
136
- // Fetch the configuration for each content type in a single query
137
- const configurations = await getConfiguration(allowedContentTypeUids);
138
- // Get the necessary metadata for the documents
139
- const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);
140
- // Now actually fetch and format the documents
141
- const recentDocuments = await Promise.all(contentTypesMeta.map(async (meta)=>{
142
- const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({
143
- limit: MAX_DOCUMENTS,
144
- sort: 'updatedAt:desc',
145
- fields: meta.fields
146
- });
147
- const docs = await strapi.documents(meta.uid).findMany(permissionQuery);
148
- return formatDocuments(docs, meta);
149
- }));
150
- const overallRecentDocuments = recentDocuments.flat().sort((a, b)=>{
151
- return b.updatedAt.valueOf() - a.updatedAt.valueOf();
152
- }).slice(0, MAX_DOCUMENTS);
153
- return addStatusToDocuments(overallRecentDocuments);
154
- }
155
- };
156
- };
157
-
158
- exports.createHomepageService = createHomepageService;
159
- //# sourceMappingURL=homepage.js.map