@strapi/admin 4.11.3 → 4.12.0-beta.0
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.
- package/admin/src/components/AuthenticatedApp/index.js +2 -2
- package/admin/src/constants.js +83 -83
- package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +8 -5
- package/admin/src/content-manager/components/Inputs/index.js +3 -47
- package/admin/src/content-manager/components/RelationInput/RelationInput.js +99 -178
- package/admin/src/content-manager/components/RelationInput/components/Option.js +17 -15
- package/admin/src/content-manager/components/RelationInput/components/RelationList.js +2 -2
- package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +34 -37
- package/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js +0 -27
- package/admin/src/content-manager/pages/ListView/components/TableRows/index.js +93 -14
- package/admin/src/content-manager/pages/ListView/index.js +65 -47
- package/admin/src/content-manager/pages/ListView/utils/buildValidGetParams.js +30 -0
- package/admin/src/content-manager/pages/ListView/utils/index.js +1 -1
- package/admin/src/content-manager/utils/mergeMetasWithSchema.js +5 -1
- package/admin/src/hooks/index.js +0 -1
- package/admin/src/hooks/useAdminUsers/useAdminUsers.js +3 -3
- package/admin/src/hooks/useEnterprise/useEnterprise.js +4 -4
- package/admin/src/pages/App/index.js +28 -23
- package/admin/src/pages/AuthPage/components/Register/index.js +5 -1
- package/admin/src/pages/ProfilePage/index.js +6 -1
- package/admin/src/pages/SettingsPage/components/Tokens/Table/index.js +15 -1
- package/admin/src/pages/SettingsPage/components/Tokens/TokenBox/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js +4 -10
- package/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +2 -2
- package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/utils/makeWebhookValidationSchema.js +11 -5
- package/admin/src/translations/ca.json +1 -0
- package/admin/src/translations/en.json +4 -1
- package/admin/src/translations/es.json +5 -0
- package/admin/src/translations/fr.json +1 -0
- package/admin/src/translations/zh-Hans.json +1 -1
- package/build/0cd5f8915b265d5b1856.png +0 -0
- package/build/2799.cf9b491f.chunk.js +1 -0
- package/build/4485.d3c6dd1d.chunk.js +6 -0
- package/build/539.865446c0.chunk.js +1 -0
- package/build/{5542.64b623c9.chunk.js → 5542.c62d0daf.chunk.js} +1 -1
- package/build/{5563.86f9aa9c.chunk.js → 5563.a146acac.chunk.js} +2 -2
- package/build/7018.f3dad3c1.chunk.js +1 -0
- package/build/7259.0e25ab5d.chunk.js +1 -0
- package/build/9465.d8fc1377.chunk.js +112 -0
- package/build/{6405.27e1bee5.chunk.js → 970.89601f27.chunk.js} +2 -2
- package/build/9944.29289a16.chunk.js +26 -0
- package/build/Admin-authenticatedApp.9d3afb79.chunk.js +79 -0
- package/build/{Admin_settingsPage.4069bb8a.chunk.js → Admin_settingsPage.074655f6.chunk.js} +13 -13
- package/build/admin-app.3ede71ad.chunk.js +61 -0
- package/build/{admin-edit-roles-page.2040034a.chunk.js → admin-edit-roles-page.3fdd6b9d.chunk.js} +11 -11
- package/build/admin-edit-users.78552758.chunk.js +10 -0
- package/build/admin-users.c23322fc.chunk.js +11 -0
- package/build/api-tokens-list-page.a103f526.chunk.js +16 -0
- package/build/audit-logs-settings-page.37fe915c.chunk.js +1 -0
- package/build/ca-json.1fed5d8b.chunk.js +1 -0
- package/build/content-manager.08541eeb.chunk.js +1094 -0
- package/build/{content-type-builder-list-view.0c3ceb4e.chunk.js → content-type-builder-list-view.a200a358.chunk.js} +1 -1
- package/build/content-type-builder-translation-en-json.38e20391.chunk.js +1 -0
- package/build/content-type-builder.de22f7c9.chunk.js +166 -0
- package/build/{email-settings-page.6b38222d.chunk.js → email-settings-page.45695daa.chunk.js} +1 -1
- package/build/en-json.fb9f6ddd.chunk.js +1 -0
- package/build/es-json.42096084.chunk.js +1 -0
- package/build/fr-json.69789980.chunk.js +1 -0
- package/build/{i18n-settings-page.ff863f20.chunk.js → i18n-settings-page.29308d0b.chunk.js} +1 -1
- package/build/index.html +1 -1
- package/build/main.a8ede50d.js +2927 -0
- package/build/review-workflows-settings-create-view.56f61e18.chunk.js +1 -0
- package/build/review-workflows-settings-edit-view.912bc9c0.chunk.js +1 -0
- package/build/review-workflows-settings-list-view.cf6a08d3.chunk.js +56 -0
- package/build/runtime~main.5e9bf4b3.js +2 -0
- package/build/sso-settings-page.0cdb96a6.chunk.js +1 -0
- package/build/transfer-tokens-list-page.7237443d.chunk.js +16 -0
- package/build/{upload-settings.43cf16cd.chunk.js → upload-settings.cb6c14c3.chunk.js} +1 -1
- package/build/{upload.72f8f8fc.chunk.js → upload.7e629643.chunk.js} +2 -2
- package/build/users-advanced-settings-page.750b1f76.chunk.js +9 -0
- package/build/{users-email-settings-page.33359797.chunk.js → users-email-settings-page.e9bcd865.chunk.js} +1 -1
- package/build/{users-providers-settings-page.1e7a4a71.chunk.js → users-providers-settings-page.a94253e9.chunk.js} +1 -1
- package/build/{users-roles-settings-page.235378b6.chunk.js → users-roles-settings-page.d286426a.chunk.js} +5 -5
- package/build/webhook-edit-page.77ef4f1a.chunk.js +33 -0
- package/build/{zh-Hans-json.4cfef87d.chunk.js → zh-Hans-json.fada6f40.chunk.js} +1 -1
- package/ee/admin/constants.js +14 -14
- package/ee/admin/content-manager/pages/EditView/InformationBox/InformationBoxEE.js +84 -30
- package/ee/admin/content-manager/{components/DynamicTable/CellContent/ReviewWorkflowsStage → pages/ListView/ReviewWorkflowsColumn}/ReviewWorkflowsStageEE.js +7 -2
- package/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/constants.js +24 -0
- package/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/index.js +1 -0
- package/ee/admin/hooks/useLicenseLimitNotification/index.js +17 -6
- package/ee/admin/hooks/useLicenseLimits/index.js +1 -32
- package/ee/admin/hooks/useLicenseLimits/useLicenseLimits.js +44 -0
- package/ee/admin/pages/SettingsPage/constants.js +25 -1
- package/ee/admin/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/index.js +6 -4
- package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useAuditLogsData.js +6 -4
- package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/index.js +4 -9
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/actions/index.js +19 -4
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Layout/Layout.js +65 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Layout/index.js +1 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/LimitsModal/LimitsModal.js +111 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/LimitsModal/assets/balloon.png +0 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/LimitsModal/index.js +3 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/ProtectedPage/ProtectedPage.js +21 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/ProtectedPage/index.js +1 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js +4 -4
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes/WorkflowAttributes.js +110 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes/index.js +1 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/constants.js +3 -1
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.js +13 -19
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/CreateView.js +246 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/index.js +13 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js +269 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/index.js +13 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js +382 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/index.js +13 -0
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js +53 -23
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/utils/getWorkflowValidationSchema.js +43 -28
- package/ee/admin/pages/SettingsPage/pages/SingleSignOn/index.js +4 -9
- package/ee/admin/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js +9 -2
- package/ee/server/config/admin-actions.js +24 -0
- package/ee/server/constants/default-stages.json +8 -4
- package/ee/server/constants/default-workflow.json +3 -1
- package/ee/server/constants/workflows.js +10 -1
- package/ee/server/content-types/workflow/index.js +10 -0
- package/ee/server/content-types/workflow-stage/index.js +3 -1
- package/ee/server/controllers/admin.js +1 -0
- package/ee/server/controllers/workflows/index.js +135 -8
- package/ee/server/controllers/workflows/stages/index.js +38 -38
- package/ee/server/migrations/review-workflows-content-types.js +29 -0
- package/ee/server/migrations/review-workflows-deleted-ct-in-workflows.js +39 -0
- package/ee/server/migrations/review-workflows-stage-attribute.js +49 -0
- package/ee/server/migrations/review-workflows-stages-color.js +2 -2
- package/ee/server/migrations/review-workflows-workflow-name.js +21 -0
- package/ee/server/register.js +12 -2
- package/ee/server/routes/review-workflows.js +44 -10
- package/ee/server/services/index.js +1 -0
- package/ee/server/services/review-workflows/entity-service-decorator.js +28 -24
- package/ee/server/services/review-workflows/review-workflows.js +45 -53
- package/ee/server/services/review-workflows/stages.js +84 -46
- package/ee/server/services/review-workflows/validation.js +60 -0
- package/ee/server/services/review-workflows/workflows/content-types.js +80 -0
- package/ee/server/services/review-workflows/workflows/index.js +207 -0
- package/ee/server/utils/review-workflows.js +30 -25
- package/ee/server/validation/review-workflows.js +49 -10
- package/package.json +13 -14
- package/server/content-types/User.js +10 -0
- package/server/strategies/api-token.js +9 -5
- package/server/strategies/data-transfer.js +9 -5
- package/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js +0 -2
- package/admin/src/content-manager/components/RelationInput/components/Relation.js +0 -53
- package/admin/src/content-manager/pages/ListView/utils/buildQueryString.js +0 -36
- package/admin/src/content-manager/pages/ListView/utils/createPluginsFilter.js +0 -4
- package/admin/src/hooks/useLicenseLimits/index.js +0 -3
- package/admin/src/pages/App/utils/index.js +0 -3
- package/admin/src/pages/App/utils/unique-identifier.js +0 -12
- package/build/1799.84268ad3.chunk.js +0 -33
- package/build/5932.6a23b88c.chunk.js +0 -1
- package/build/7018.98feed67.chunk.js +0 -1
- package/build/7259.fb69d4bf.chunk.js +0 -1
- package/build/Admin-authenticatedApp.69855f1b.chunk.js +0 -79
- package/build/admin-app.fea867af.chunk.js +0 -61
- package/build/admin-edit-users.53e4290a.chunk.js +0 -10
- package/build/admin-users.3b12dca2.chunk.js +0 -11
- package/build/api-tokens-list-page.201fb67a.chunk.js +0 -16
- package/build/audit-logs-settings-page.b07ad202.chunk.js +0 -1
- package/build/ca-json.43e14418.chunk.js +0 -1
- package/build/content-manager.66cec770.chunk.js +0 -1094
- package/build/content-type-builder-translation-en-json.f592325b.chunk.js +0 -1
- package/build/content-type-builder.e1b6d13b.chunk.js +0 -166
- package/build/en-json.f5fa476a.chunk.js +0 -1
- package/build/es-json.715b6fd8.chunk.js +0 -1
- package/build/fr-json.73494bf5.chunk.js +0 -1
- package/build/main.83edb3fc.js +0 -2926
- package/build/review-workflows-settings.93808ae0.chunk.js +0 -110
- package/build/runtime~main.20c3cac6.js +0 -2
- package/build/sso-settings-page.35b67909.chunk.js +0 -1
- package/build/transfer-tokens-list-page.217573c3.chunk.js +0 -16
- package/build/users-advanced-settings-page.1911adf5.chunk.js +0 -9
- package/build/webhook-edit-page.1ee02c4b.chunk.js +0 -33
- package/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js +0 -58
- package/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/index.js +0 -3
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ProtectedPage.js +0 -20
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ReviewWorkflows.js +0 -204
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/index.js +0 -3
- package/ee/server/services/review-workflows/workflows.js +0 -25
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
|
-
import { Flex, Typography } from '@strapi/design-system';
|
|
3
|
+
import { Flex, Typography, ComboboxOption } from '@strapi/design-system';
|
|
4
4
|
import { pxToRem } from '@strapi/helper-plugin';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import { useIntl } from 'react-intl';
|
|
7
|
-
import { components } from 'react-select';
|
|
8
7
|
import styled from 'styled-components';
|
|
9
8
|
|
|
10
9
|
import { getTrad } from '../../../utils';
|
|
@@ -19,10 +18,8 @@ const StyledBullet = styled.div`
|
|
|
19
18
|
border-radius: 50%;
|
|
20
19
|
`;
|
|
21
20
|
|
|
22
|
-
export const Option = (
|
|
21
|
+
export const Option = ({ publicationState, mainField, id }) => {
|
|
23
22
|
const { formatMessage } = useIntl();
|
|
24
|
-
const Component = components.Option;
|
|
25
|
-
const { publicationState, mainField, id } = props.data;
|
|
26
23
|
|
|
27
24
|
if (publicationState) {
|
|
28
25
|
const isDraft = publicationState === 'draft';
|
|
@@ -37,24 +34,29 @@ export const Option = (props) => {
|
|
|
37
34
|
const title = isDraft ? formatMessage(draftMessage) : formatMessage(publishedMessage);
|
|
38
35
|
|
|
39
36
|
return (
|
|
40
|
-
<
|
|
37
|
+
<ComboboxOption value={id} textValue={mainField ?? id}>
|
|
41
38
|
<Flex>
|
|
42
39
|
<StyledBullet title={title} isDraft={isDraft} />
|
|
43
40
|
<Typography ellipsis>{mainField ?? id}</Typography>
|
|
44
41
|
</Flex>
|
|
45
|
-
</
|
|
42
|
+
</ComboboxOption>
|
|
46
43
|
);
|
|
47
44
|
}
|
|
48
45
|
|
|
49
|
-
return
|
|
46
|
+
return (
|
|
47
|
+
<ComboboxOption value={id} textValue={mainField ?? id}>
|
|
48
|
+
{mainField ?? id}
|
|
49
|
+
</ComboboxOption>
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
Option.defaultProps = {
|
|
54
|
+
mainField: undefined,
|
|
55
|
+
publicationState: undefined,
|
|
50
56
|
};
|
|
51
57
|
|
|
52
58
|
Option.propTypes = {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
isDraft: PropTypes.bool,
|
|
57
|
-
mainField: PropTypes.string,
|
|
58
|
-
publicationState: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
|
|
59
|
-
}).isRequired,
|
|
59
|
+
id: PropTypes.number.isRequired,
|
|
60
|
+
mainField: PropTypes.string,
|
|
61
|
+
publicationState: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
|
|
60
62
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { memo, useCallback, useEffect, useRef, useState } from 'react';
|
|
1
|
+
import { memo, useCallback, useEffect, useRef, useState, useMemo } from 'react';
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
formatContentTypeData,
|
|
@@ -16,7 +16,7 @@ import { useQueryClient } from 'react-query';
|
|
|
16
16
|
import { useDispatch, useSelector } from 'react-redux';
|
|
17
17
|
import { useHistory } from 'react-router-dom';
|
|
18
18
|
|
|
19
|
-
import
|
|
19
|
+
import { buildValidGetParams } from '../../pages/ListView/utils';
|
|
20
20
|
import {
|
|
21
21
|
getData,
|
|
22
22
|
getDataSucceeded,
|
|
@@ -40,7 +40,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
|
|
|
40
40
|
const trackUsageRef = useRef(trackUsage);
|
|
41
41
|
const [isCreatingEntry, setIsCreatingEntry] = useState(true);
|
|
42
42
|
const [{ query, rawQuery }] = useQueryParams();
|
|
43
|
-
const
|
|
43
|
+
const params = useMemo(() => buildValidGetParams(query), [query]);
|
|
44
44
|
const toggleNotification = useNotification();
|
|
45
45
|
const dispatch = useDispatch();
|
|
46
46
|
const { formatAPIError } = useAPIErrorHandler(getTrad);
|
|
@@ -110,8 +110,9 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
|
|
|
110
110
|
setIsCreatingEntry(true);
|
|
111
111
|
|
|
112
112
|
try {
|
|
113
|
-
const { data } = await fetchClient.get(getRequestUrl(
|
|
113
|
+
const { data } = await fetchClient.get(getRequestUrl(slug), {
|
|
114
114
|
cancelToken: source.token,
|
|
115
|
+
params,
|
|
115
116
|
});
|
|
116
117
|
|
|
117
118
|
dispatch(getDataSucceeded(cleanReceivedData(data)));
|
|
@@ -143,16 +144,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
|
|
|
143
144
|
fetchData(source);
|
|
144
145
|
|
|
145
146
|
return () => source.cancel('Operation canceled by the user.');
|
|
146
|
-
}, [
|
|
147
|
-
fetchClient,
|
|
148
|
-
cleanReceivedData,
|
|
149
|
-
push,
|
|
150
|
-
slug,
|
|
151
|
-
dispatch,
|
|
152
|
-
searchToSend,
|
|
153
|
-
rawQuery,
|
|
154
|
-
toggleNotification,
|
|
155
|
-
]);
|
|
147
|
+
}, [fetchClient, cleanReceivedData, push, slug, dispatch, params, rawQuery, toggleNotification]);
|
|
156
148
|
|
|
157
149
|
const displayErrors = useCallback(
|
|
158
150
|
(err) => {
|
|
@@ -166,7 +158,9 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
|
|
|
166
158
|
try {
|
|
167
159
|
trackUsageRef.current('willDeleteEntry', trackerProperty);
|
|
168
160
|
|
|
169
|
-
const { data } = await del(getRequestUrl(
|
|
161
|
+
const { data } = await del(getRequestUrl(slug), {
|
|
162
|
+
params: query,
|
|
163
|
+
});
|
|
170
164
|
|
|
171
165
|
toggleNotification({
|
|
172
166
|
type: 'success',
|
|
@@ -187,17 +181,17 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
|
|
|
187
181
|
return Promise.reject(err);
|
|
188
182
|
}
|
|
189
183
|
},
|
|
190
|
-
[del, slug, displayErrors, toggleNotification,
|
|
184
|
+
[del, slug, displayErrors, toggleNotification, query, dispatch, rawQuery]
|
|
191
185
|
);
|
|
192
186
|
|
|
193
187
|
const onPost = useCallback(
|
|
194
188
|
async (body, trackerProperty) => {
|
|
195
|
-
const endPoint = getRequestUrl(
|
|
189
|
+
const endPoint = getRequestUrl(slug);
|
|
196
190
|
|
|
197
191
|
try {
|
|
198
192
|
dispatch(setStatus('submit-pending'));
|
|
199
193
|
|
|
200
|
-
const { data } = await put(endPoint, body);
|
|
194
|
+
const { data } = await put(endPoint, body, { params: query });
|
|
201
195
|
|
|
202
196
|
trackUsageRef.current('didCreateEntry', trackerProperty);
|
|
203
197
|
toggleNotification({
|
|
@@ -232,7 +226,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
|
|
|
232
226
|
displayErrors,
|
|
233
227
|
slug,
|
|
234
228
|
dispatch,
|
|
235
|
-
|
|
229
|
+
query,
|
|
236
230
|
toggleNotification,
|
|
237
231
|
setCurrentStep,
|
|
238
232
|
queryClient,
|
|
@@ -263,11 +257,17 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
|
|
|
263
257
|
const onPublish = useCallback(async () => {
|
|
264
258
|
try {
|
|
265
259
|
trackUsageRef.current('willPublishEntry');
|
|
266
|
-
const endPoint = getRequestUrl(`${slug}/actions/publish
|
|
260
|
+
const endPoint = getRequestUrl(`${slug}/actions/publish`);
|
|
267
261
|
|
|
268
262
|
dispatch(setStatus('publish-pending'));
|
|
269
263
|
|
|
270
|
-
const { data } = await post(
|
|
264
|
+
const { data } = await post(
|
|
265
|
+
endPoint,
|
|
266
|
+
{},
|
|
267
|
+
{
|
|
268
|
+
params: query,
|
|
269
|
+
}
|
|
270
|
+
);
|
|
271
271
|
|
|
272
272
|
trackUsageRef.current('didPublishEntry');
|
|
273
273
|
toggleNotification({
|
|
@@ -287,18 +287,18 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
|
|
|
287
287
|
|
|
288
288
|
return Promise.reject(err);
|
|
289
289
|
}
|
|
290
|
-
}, [post, cleanReceivedData, displayErrors, slug,
|
|
290
|
+
}, [post, cleanReceivedData, displayErrors, slug, query, dispatch, toggleNotification]);
|
|
291
291
|
|
|
292
292
|
const onPut = useCallback(
|
|
293
293
|
async (body, trackerProperty) => {
|
|
294
|
-
const endPoint = getRequestUrl(
|
|
294
|
+
const endPoint = getRequestUrl(slug);
|
|
295
295
|
|
|
296
296
|
try {
|
|
297
297
|
trackUsageRef.current('willEditEntry', trackerProperty);
|
|
298
298
|
|
|
299
299
|
dispatch(setStatus('submit-pending'));
|
|
300
300
|
|
|
301
|
-
const { data } = await put(endPoint, body);
|
|
301
|
+
const { data } = await put(endPoint, body, { params: query });
|
|
302
302
|
|
|
303
303
|
toggleNotification({
|
|
304
304
|
type: 'success',
|
|
@@ -325,28 +325,25 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
|
|
|
325
325
|
return Promise.reject(err);
|
|
326
326
|
}
|
|
327
327
|
},
|
|
328
|
-
[
|
|
329
|
-
put,
|
|
330
|
-
cleanReceivedData,
|
|
331
|
-
displayErrors,
|
|
332
|
-
slug,
|
|
333
|
-
dispatch,
|
|
334
|
-
rawQuery,
|
|
335
|
-
toggleNotification,
|
|
336
|
-
queryClient,
|
|
337
|
-
]
|
|
328
|
+
[put, cleanReceivedData, displayErrors, slug, dispatch, query, toggleNotification, queryClient]
|
|
338
329
|
);
|
|
339
330
|
|
|
340
331
|
// The publish and unpublish method could be refactored but let's leave the duplication for now
|
|
341
332
|
const onUnpublish = useCallback(async () => {
|
|
342
|
-
const endPoint = getRequestUrl(`${slug}/actions/unpublish
|
|
333
|
+
const endPoint = getRequestUrl(`${slug}/actions/unpublish`);
|
|
343
334
|
|
|
344
335
|
dispatch(setStatus('unpublish-pending'));
|
|
345
336
|
|
|
346
337
|
try {
|
|
347
338
|
trackUsageRef.current('willUnpublishEntry');
|
|
348
339
|
|
|
349
|
-
const { data } = await post(
|
|
340
|
+
const { data } = await post(
|
|
341
|
+
endPoint,
|
|
342
|
+
{},
|
|
343
|
+
{
|
|
344
|
+
params: query,
|
|
345
|
+
}
|
|
346
|
+
);
|
|
350
347
|
|
|
351
348
|
trackUsageRef.current('didUnpublishEntry');
|
|
352
349
|
toggleNotification({
|
|
@@ -361,7 +358,7 @@ const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {
|
|
|
361
358
|
dispatch(setStatus('resolved'));
|
|
362
359
|
displayErrors(err);
|
|
363
360
|
}
|
|
364
|
-
}, [post, cleanReceivedData, toggleNotification, displayErrors, slug, dispatch,
|
|
361
|
+
}, [post, cleanReceivedData, toggleNotification, displayErrors, slug, dispatch, query]);
|
|
365
362
|
|
|
366
363
|
return children({
|
|
367
364
|
componentsDataStructure,
|
|
@@ -20,10 +20,6 @@ const FIELD_SIZES = [
|
|
|
20
20
|
[12, '100%'],
|
|
21
21
|
];
|
|
22
22
|
|
|
23
|
-
const TIME_FIELD_OPTIONS = [1, 5, 10, 15, 30, 60];
|
|
24
|
-
|
|
25
|
-
const TIME_FIELD_TYPES = ['datetime', 'time'];
|
|
26
|
-
|
|
27
23
|
const ModalForm = ({ onMetaChange, onSizeChange }) => {
|
|
28
24
|
const { formatMessage } = useIntl();
|
|
29
25
|
const { modifiedData, selectedField, attributes, fieldForm } = useLayoutDnd();
|
|
@@ -131,33 +127,10 @@ const ModalForm = ({ onMetaChange, onSizeChange }) => {
|
|
|
131
127
|
</GridItem>
|
|
132
128
|
);
|
|
133
129
|
|
|
134
|
-
const hasTimePicker = TIME_FIELD_TYPES.includes(attributes[selectedField].type);
|
|
135
|
-
|
|
136
|
-
const timeStepField = (
|
|
137
|
-
<GridItem col={6} key="step">
|
|
138
|
-
<Select
|
|
139
|
-
value={get(fieldForm, ['metadata', 'step'], 1)}
|
|
140
|
-
name="step"
|
|
141
|
-
onChange={(value) => onMetaChange({ target: { name: 'step', value } })}
|
|
142
|
-
label={formatMessage({
|
|
143
|
-
id: getTrad('containers.SettingPage.editSettings.step.label'),
|
|
144
|
-
defaultMessage: 'Time interval (minutes)',
|
|
145
|
-
})}
|
|
146
|
-
>
|
|
147
|
-
{TIME_FIELD_OPTIONS.map((value) => (
|
|
148
|
-
<Option key={value} value={value}>
|
|
149
|
-
{value}
|
|
150
|
-
</Option>
|
|
151
|
-
))}
|
|
152
|
-
</Select>
|
|
153
|
-
</GridItem>
|
|
154
|
-
);
|
|
155
|
-
|
|
156
130
|
return (
|
|
157
131
|
<>
|
|
158
132
|
{metaFields}
|
|
159
133
|
{isResizable && sizeField}
|
|
160
|
-
{hasTimePicker && timeStepField}
|
|
161
134
|
</>
|
|
162
135
|
);
|
|
163
136
|
};
|
|
@@ -1,22 +1,40 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
BaseCheckbox,
|
|
5
|
+
IconButton,
|
|
6
|
+
Tbody,
|
|
7
|
+
Td,
|
|
8
|
+
Tr,
|
|
9
|
+
Flex,
|
|
10
|
+
Status,
|
|
11
|
+
Typography,
|
|
12
|
+
} from '@strapi/design-system';
|
|
13
|
+
import {
|
|
14
|
+
useTracking,
|
|
15
|
+
useFetchClient,
|
|
16
|
+
useAPIErrorHandler,
|
|
17
|
+
useQueryParams,
|
|
18
|
+
} from '@strapi/helper-plugin';
|
|
5
19
|
import { Trash, Duplicate, Pencil } from '@strapi/icons';
|
|
6
20
|
import { AxiosError } from 'axios';
|
|
7
21
|
import PropTypes from 'prop-types';
|
|
8
22
|
import { useIntl } from 'react-intl';
|
|
9
23
|
import { Link, useHistory } from 'react-router-dom';
|
|
10
24
|
|
|
25
|
+
import { useEnterprise } from '../../../../../hooks/useEnterprise';
|
|
11
26
|
import { getFullName } from '../../../../../utils';
|
|
12
27
|
import { usePluginsQueryParams } from '../../../../hooks';
|
|
13
28
|
import { getTrad } from '../../../../utils';
|
|
14
29
|
import CellContent from '../CellContent';
|
|
15
30
|
|
|
31
|
+
const REVIEW_WORKFLOW_COLUMNS_CE = () => null;
|
|
32
|
+
|
|
16
33
|
export const TableRows = ({
|
|
17
34
|
canCreate,
|
|
18
35
|
canDelete,
|
|
19
36
|
contentType,
|
|
37
|
+
features: { hasDraftAndPublish, hasReviewWorkflows },
|
|
20
38
|
headers,
|
|
21
39
|
entriesToDelete,
|
|
22
40
|
onClickDelete,
|
|
@@ -32,7 +50,20 @@ export const TableRows = ({
|
|
|
32
50
|
|
|
33
51
|
const { trackUsage } = useTracking();
|
|
34
52
|
const pluginsQueryParams = usePluginsQueryParams();
|
|
53
|
+
const [{ query }] = useQueryParams();
|
|
35
54
|
const { formatAPIError } = useAPIErrorHandler(getTrad);
|
|
55
|
+
const ReviewWorkflowsStage = useEnterprise(
|
|
56
|
+
REVIEW_WORKFLOW_COLUMNS_CE,
|
|
57
|
+
async () =>
|
|
58
|
+
(
|
|
59
|
+
await import(
|
|
60
|
+
'../../../../../../../ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn'
|
|
61
|
+
)
|
|
62
|
+
).ReviewWorkflowsStageEE,
|
|
63
|
+
{
|
|
64
|
+
enabled: hasReviewWorkflows,
|
|
65
|
+
}
|
|
66
|
+
);
|
|
36
67
|
|
|
37
68
|
/**
|
|
38
69
|
*
|
|
@@ -53,7 +84,9 @@ export const TableRows = ({
|
|
|
53
84
|
const handleCloneClick = (id) => async () => {
|
|
54
85
|
try {
|
|
55
86
|
const { data } = await post(
|
|
56
|
-
`/content-manager/collection-types/${contentType.uid}/auto-clone/${id}
|
|
87
|
+
`/content-manager/collection-types/${contentType.uid}/auto-clone/${id}`,
|
|
88
|
+
{},
|
|
89
|
+
{ params: { plugins: query?.plugins } }
|
|
57
90
|
);
|
|
58
91
|
|
|
59
92
|
if ('id' in data) {
|
|
@@ -74,6 +107,11 @@ export const TableRows = ({
|
|
|
74
107
|
}
|
|
75
108
|
};
|
|
76
109
|
|
|
110
|
+
// block rendering until the review stage component is fully loaded in EE
|
|
111
|
+
if (!ReviewWorkflowsStage) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
|
|
77
115
|
/**
|
|
78
116
|
* Table Cells with actions e.g edit, delete, duplicate have `stopPropagation`
|
|
79
117
|
* to prevent the row from being selected.
|
|
@@ -113,20 +151,57 @@ export const TableRows = ({
|
|
|
113
151
|
/>
|
|
114
152
|
</Td>
|
|
115
153
|
)}
|
|
154
|
+
|
|
116
155
|
{headers.map(({ key, cellFormatter, name, ...rest }) => {
|
|
156
|
+
if (hasDraftAndPublish && name === 'publishedAt') {
|
|
157
|
+
return (
|
|
158
|
+
<Td key={key}>
|
|
159
|
+
<Status
|
|
160
|
+
width="min-content"
|
|
161
|
+
showBullet={false}
|
|
162
|
+
variant={data.publishedAt ? 'success' : 'secondary'}
|
|
163
|
+
size="S"
|
|
164
|
+
>
|
|
165
|
+
<Typography
|
|
166
|
+
fontWeight="bold"
|
|
167
|
+
textColor={`${data.publishedAt ? 'success' : 'secondary'}700`}
|
|
168
|
+
>
|
|
169
|
+
{formatMessage({
|
|
170
|
+
id: getTrad(
|
|
171
|
+
`containers.List.${data.publishedAt ? 'published' : 'draft'}`
|
|
172
|
+
),
|
|
173
|
+
defaultMessage: data.publishedAt ? 'Published' : 'Draft',
|
|
174
|
+
})}
|
|
175
|
+
</Typography>
|
|
176
|
+
</Status>
|
|
177
|
+
</Td>
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (hasReviewWorkflows && name === 'strapi_reviewWorkflows_stage') {
|
|
182
|
+
return (
|
|
183
|
+
<Td key={key}>
|
|
184
|
+
{data.strapi_stage ? (
|
|
185
|
+
<ReviewWorkflowsStage
|
|
186
|
+
color={data.strapi_stage.color}
|
|
187
|
+
name={data.strapi_stage.name}
|
|
188
|
+
/>
|
|
189
|
+
) : (
|
|
190
|
+
<Typography textColor="neutral800">-</Typography>
|
|
191
|
+
)}
|
|
192
|
+
</Td>
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
117
196
|
return (
|
|
118
197
|
<Td key={key}>
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
{...rest}
|
|
127
|
-
rowId={data.id}
|
|
128
|
-
/>
|
|
129
|
-
)}
|
|
198
|
+
<CellContent
|
|
199
|
+
content={data[name.split('.')[0]]}
|
|
200
|
+
name={name}
|
|
201
|
+
contentType={contentType}
|
|
202
|
+
{...rest}
|
|
203
|
+
rowId={data.id}
|
|
204
|
+
/>
|
|
130
205
|
</Td>
|
|
131
206
|
);
|
|
132
207
|
})}
|
|
@@ -212,6 +287,10 @@ TableRows.propTypes = {
|
|
|
212
287
|
uid: PropTypes.string.isRequired,
|
|
213
288
|
}).isRequired,
|
|
214
289
|
entriesToDelete: PropTypes.array,
|
|
290
|
+
features: PropTypes.shape({
|
|
291
|
+
hasDraftAndPublish: PropTypes.bool.isRequired,
|
|
292
|
+
hasReviewWorkflows: PropTypes.bool.isRequired,
|
|
293
|
+
}).isRequired,
|
|
215
294
|
headers: PropTypes.array.isRequired,
|
|
216
295
|
onClickDelete: PropTypes.func,
|
|
217
296
|
onSelectRow: PropTypes.func,
|