@strapi/content-releases 0.0.0-experimental.d954d57341a6623992a0d211daaec8e245c3517d → 0.0.0-experimental.dcd10ea61ffc127dbedf2e7ca72b7d4de4d9ebc4
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/LICENSE +17 -1
- package/dist/_chunks/{App-CqbuK4M6.js → App-dLXY5ei3.js} +439 -431
- package/dist/_chunks/App-dLXY5ei3.js.map +1 -0
- package/dist/_chunks/{App-Do-Rnv0A.mjs → App-jrh58sXY.mjs} +416 -409
- package/dist/_chunks/App-jrh58sXY.mjs.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-_MxP6-Dt.mjs → PurchaseContentReleases-3tRbmbY3.mjs} +7 -8
- package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-Be3acS2L.js → PurchaseContentReleases-bpIYXOfu.js} +6 -7
- package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js.map +1 -0
- package/dist/_chunks/{en-DtFJ5ViE.js → en-HrREghh3.js} +1 -1
- package/dist/_chunks/en-HrREghh3.js.map +1 -0
- package/dist/_chunks/{en-B9Ur3VsE.mjs → en-ltT1TlKQ.mjs} +1 -1
- package/dist/_chunks/en-ltT1TlKQ.mjs.map +1 -0
- package/dist/_chunks/{index-Tedsw4GC.js → index-CVO0Rqdm.js} +504 -197
- package/dist/_chunks/index-CVO0Rqdm.js.map +1 -0
- package/dist/_chunks/{index-D_pgdqQL.mjs → index-PiOGBETy.mjs} +503 -198
- package/dist/_chunks/index-PiOGBETy.mjs.map +1 -0
- package/dist/admin/index.js +15 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +16 -2
- package/dist/admin/index.mjs.map +1 -1
- package/dist/server/index.js +86 -83
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +86 -84
- package/dist/server/index.mjs.map +1 -1
- package/package.json +37 -30
- package/dist/_chunks/App-CqbuK4M6.js.map +0 -1
- package/dist/_chunks/App-Do-Rnv0A.mjs.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +0 -1
- package/dist/_chunks/en-B9Ur3VsE.mjs.map +0 -1
- package/dist/_chunks/en-DtFJ5ViE.js.map +0 -1
- package/dist/_chunks/index-D_pgdqQL.mjs.map +0 -1
- package/dist/_chunks/index-Tedsw4GC.js.map +0 -1
- package/dist/admin/src/components/CMReleasesContainer.d.ts +0 -22
- package/dist/admin/src/components/RelativeTime.d.ts +0 -28
- package/dist/admin/src/components/ReleaseAction.d.ts +0 -3
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +0 -26
- package/dist/admin/src/components/ReleaseActionOptions.d.ts +0 -9
- package/dist/admin/src/components/ReleaseListCell.d.ts +0 -0
- package/dist/admin/src/components/ReleaseModal.d.ts +0 -17
- package/dist/admin/src/constants.d.ts +0 -58
- package/dist/admin/src/index.d.ts +0 -3
- package/dist/admin/src/pages/App.d.ts +0 -1
- package/dist/admin/src/pages/PurchaseContentReleases.d.ts +0 -2
- package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +0 -2
- package/dist/admin/src/pages/ReleasesPage.d.ts +0 -8
- package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +0 -181
- package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +0 -39
- package/dist/admin/src/pluginId.d.ts +0 -1
- package/dist/admin/src/services/release.d.ts +0 -105
- package/dist/admin/src/store/hooks.d.ts +0 -7
- package/dist/admin/src/utils/api.d.ts +0 -6
- package/dist/admin/src/utils/prefixPluginTranslations.d.ts +0 -3
- package/dist/admin/src/utils/time.d.ts +0 -1
- package/dist/server/src/bootstrap.d.ts +0 -5
- package/dist/server/src/bootstrap.d.ts.map +0 -1
- package/dist/server/src/constants.d.ts +0 -12
- package/dist/server/src/constants.d.ts.map +0 -1
- package/dist/server/src/content-types/index.d.ts +0 -99
- package/dist/server/src/content-types/index.d.ts.map +0 -1
- package/dist/server/src/content-types/release/index.d.ts +0 -48
- package/dist/server/src/content-types/release/index.d.ts.map +0 -1
- package/dist/server/src/content-types/release/schema.d.ts +0 -47
- package/dist/server/src/content-types/release/schema.d.ts.map +0 -1
- package/dist/server/src/content-types/release-action/index.d.ts +0 -50
- package/dist/server/src/content-types/release-action/index.d.ts.map +0 -1
- package/dist/server/src/content-types/release-action/schema.d.ts +0 -49
- package/dist/server/src/content-types/release-action/schema.d.ts.map +0 -1
- package/dist/server/src/controllers/index.d.ts +0 -20
- package/dist/server/src/controllers/index.d.ts.map +0 -1
- package/dist/server/src/controllers/release-action.d.ts +0 -10
- package/dist/server/src/controllers/release-action.d.ts.map +0 -1
- package/dist/server/src/controllers/release.d.ts +0 -12
- package/dist/server/src/controllers/release.d.ts.map +0 -1
- package/dist/server/src/controllers/validation/release-action.d.ts +0 -8
- package/dist/server/src/controllers/validation/release-action.d.ts.map +0 -1
- package/dist/server/src/controllers/validation/release.d.ts +0 -2
- package/dist/server/src/controllers/validation/release.d.ts.map +0 -1
- package/dist/server/src/destroy.d.ts +0 -5
- package/dist/server/src/destroy.d.ts.map +0 -1
- package/dist/server/src/index.d.ts +0 -2096
- package/dist/server/src/index.d.ts.map +0 -1
- package/dist/server/src/migrations/index.d.ts +0 -13
- package/dist/server/src/migrations/index.d.ts.map +0 -1
- package/dist/server/src/register.d.ts +0 -5
- package/dist/server/src/register.d.ts.map +0 -1
- package/dist/server/src/routes/index.d.ts +0 -35
- package/dist/server/src/routes/index.d.ts.map +0 -1
- package/dist/server/src/routes/release-action.d.ts +0 -18
- package/dist/server/src/routes/release-action.d.ts.map +0 -1
- package/dist/server/src/routes/release.d.ts +0 -18
- package/dist/server/src/routes/release.d.ts.map +0 -1
- package/dist/server/src/services/index.d.ts +0 -1826
- package/dist/server/src/services/index.d.ts.map +0 -1
- package/dist/server/src/services/release.d.ts +0 -66
- package/dist/server/src/services/release.d.ts.map +0 -1
- package/dist/server/src/services/scheduling.d.ts +0 -18
- package/dist/server/src/services/scheduling.d.ts.map +0 -1
- package/dist/server/src/services/validation.d.ts +0 -18
- package/dist/server/src/services/validation.d.ts.map +0 -1
- package/dist/server/src/utils/index.d.ts +0 -14
- package/dist/server/src/utils/index.d.ts.map +0 -1
- package/dist/shared/contracts/release-actions.d.ts +0 -131
- package/dist/shared/contracts/release-actions.d.ts.map +0 -1
- package/dist/shared/contracts/releases.d.ts +0 -182
- package/dist/shared/contracts/releases.d.ts.map +0 -1
- package/dist/shared/types.d.ts +0 -24
- package/dist/shared/types.d.ts.map +0 -1
- package/dist/shared/validation-schemas.d.ts +0 -2
- package/dist/shared/validation-schemas.d.ts.map +0 -1
|
@@ -1,51 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useNotification, useAPIErrorHandler, useQueryParams, useTracking,
|
|
3
|
-
import { useLocation,
|
|
4
|
-
import { g as getTimezoneOffset, p as pluginId, u as useGetReleasesQuery, a as useCreateReleaseMutation, P as PERMISSIONS, b as useGetReleaseQuery, c as useUpdateReleaseMutation, d as useDeleteReleaseMutation, e as usePublishReleaseMutation, f as
|
|
1
|
+
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { RelativeTime as RelativeTime$1, useNotification, useAPIErrorHandler, useQueryParams, useTracking, LoadingIndicatorPage, CheckPermissions, PageSizeURLQuery, PaginationURLQuery, AnErrorOccurred, ConfirmDialog, useRBAC, useStrapiApp, NoContent, Table, CheckPagePermissions } from "@strapi/helper-plugin";
|
|
3
|
+
import { useLocation, useHistory, useParams, Redirect, Link as Link$2, Switch, Route } from "react-router-dom";
|
|
4
|
+
import { g as getTimezoneOffset, p as pluginId, u as useGetReleasesQuery, a as useCreateReleaseMutation, P as PERMISSIONS, i as isAxiosError, b as useGetReleaseQuery, c as useUpdateReleaseMutation, d as useDeleteReleaseMutation, e as usePublishReleaseMutation, f as useTypedDispatch, h as useGetReleaseActionsQuery, j as useUpdateReleaseActionMutation, R as ReleaseActionOptions, k as ReleaseActionMenu, r as releaseApi } from "./index-PiOGBETy.mjs";
|
|
5
5
|
import * as React from "react";
|
|
6
|
-
import { unstable_useDocument } from "@strapi/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { EmptyDocuments } from "@strapi/icons
|
|
6
|
+
import { useLicenseLimits, unstable_useDocument } from "@strapi/admin/strapi-admin";
|
|
7
|
+
import { ModalLayout, ModalHeader, Typography, ModalBody, Flex, TextInput, Box, Checkbox, DatePicker, TimePicker, ModalFooter, Button, Combobox, ComboboxOption, Alert, Main, HeaderLayout, ContentLayout, TabGroup, Tabs, Tab, Divider, TabPanels, TabPanel, EmptyStateLayout, Grid, GridItem, Badge, Link as Link$1, IconButton, SingleSelect, SingleSelectOption, Tr, Td, Icon, Tooltip } from "@strapi/design-system";
|
|
8
|
+
import { Link, Menu, LinkButton } from "@strapi/design-system/v2";
|
|
9
|
+
import { Plus, EmptyDocuments, Pencil, Trash, ArrowLeft, More, CrossCircle, CheckCircle } from "@strapi/icons";
|
|
10
10
|
import format from "date-fns/format";
|
|
11
11
|
import { utcToZonedTime, zonedTimeToUtc } from "date-fns-tz";
|
|
12
12
|
import { useIntl } from "react-intl";
|
|
13
|
-
import
|
|
14
|
-
import {
|
|
13
|
+
import styled from "styled-components";
|
|
14
|
+
import { formatISO } from "date-fns";
|
|
15
15
|
import { Formik, Form, useFormikContext } from "formik";
|
|
16
16
|
import * as yup from "yup";
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
|
|
22
|
-
const { formatRelativeTime, formatDate, formatTime } = useIntl();
|
|
23
|
-
const interval = intervalToDuration({
|
|
24
|
-
start: timestamp,
|
|
25
|
-
end: Date.now()
|
|
26
|
-
// see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.
|
|
27
|
-
});
|
|
28
|
-
const unit = intervals.find((intervalUnit) => {
|
|
29
|
-
return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
|
|
30
|
-
});
|
|
31
|
-
const relativeTime = isPast(timestamp) ? -interval[unit] : interval[unit];
|
|
32
|
-
const customInterval = customIntervals.find(
|
|
33
|
-
(custom) => interval[custom.unit] < custom.threshold
|
|
34
|
-
);
|
|
35
|
-
const displayText = customInterval ? customInterval.text : formatRelativeTime(relativeTime, unit, { numeric: "auto" });
|
|
36
|
-
return /* @__PURE__ */ jsx(
|
|
37
|
-
"time",
|
|
38
|
-
{
|
|
39
|
-
ref: forwardedRef,
|
|
40
|
-
dateTime: timestamp.toISOString(),
|
|
41
|
-
role: "time",
|
|
42
|
-
title: `${formatDate(timestamp)} ${formatTime(timestamp)}`,
|
|
43
|
-
...restProps,
|
|
44
|
-
children: displayText
|
|
45
|
-
}
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
);
|
|
17
|
+
import "@reduxjs/toolkit/query";
|
|
18
|
+
import "axios";
|
|
19
|
+
import "@reduxjs/toolkit/query/react";
|
|
20
|
+
import "react-redux";
|
|
49
21
|
const RELEASE_SCHEMA = yup.object().shape({
|
|
50
22
|
name: yup.string().trim().required(),
|
|
51
23
|
scheduledAt: yup.string().nullable(),
|
|
@@ -68,7 +40,6 @@ const RELEASE_SCHEMA = yup.object().shape({
|
|
|
68
40
|
}).required().noUnknown();
|
|
69
41
|
const ReleaseModal = ({
|
|
70
42
|
handleClose,
|
|
71
|
-
open,
|
|
72
43
|
handleSubmit,
|
|
73
44
|
initialValues,
|
|
74
45
|
isLoading = false
|
|
@@ -92,8 +63,8 @@ const ReleaseModal = ({
|
|
|
92
63
|
);
|
|
93
64
|
return currentTimezone?.value || systemTimezone.value;
|
|
94
65
|
};
|
|
95
|
-
return /* @__PURE__ */
|
|
96
|
-
/* @__PURE__ */ jsx(
|
|
66
|
+
return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy: "title", children: [
|
|
67
|
+
/* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id: "title", fontWeight: "bold", textColor: "neutral800", children: formatMessage(
|
|
97
68
|
{
|
|
98
69
|
id: "content-releases.modal.title",
|
|
99
70
|
defaultMessage: "{isCreatingRelease, select, true {New release} other {Edit release}}"
|
|
@@ -116,119 +87,123 @@ const ReleaseModal = ({
|
|
|
116
87
|
},
|
|
117
88
|
validationSchema: RELEASE_SCHEMA,
|
|
118
89
|
validateOnChange: false,
|
|
119
|
-
children: ({ values, errors, handleChange, setFieldValue }) => {
|
|
120
|
-
|
|
121
|
-
/* @__PURE__ */ jsx(
|
|
122
|
-
|
|
123
|
-
|
|
90
|
+
children: ({ values, errors, handleChange, setFieldValue }) => /* @__PURE__ */ jsxs(Form, { children: [
|
|
91
|
+
/* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
|
|
92
|
+
/* @__PURE__ */ jsx(
|
|
93
|
+
TextInput,
|
|
94
|
+
{
|
|
95
|
+
label: formatMessage({
|
|
124
96
|
id: "content-releases.modal.form.input.label.release-name",
|
|
125
97
|
defaultMessage: "Name"
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
98
|
+
}),
|
|
99
|
+
name: "name",
|
|
100
|
+
value: values.name,
|
|
101
|
+
error: errors.name,
|
|
102
|
+
onChange: handleChange,
|
|
103
|
+
required: true
|
|
104
|
+
}
|
|
105
|
+
),
|
|
106
|
+
/* @__PURE__ */ jsx(Box, { width: "max-content", children: /* @__PURE__ */ jsx(
|
|
107
|
+
Checkbox,
|
|
108
|
+
{
|
|
109
|
+
name: "isScheduled",
|
|
110
|
+
value: values.isScheduled,
|
|
111
|
+
onChange: (event) => {
|
|
112
|
+
setFieldValue("isScheduled", event.target.checked);
|
|
113
|
+
if (!event.target.checked) {
|
|
114
|
+
setFieldValue("date", null);
|
|
115
|
+
setFieldValue("time", "");
|
|
116
|
+
setFieldValue("timezone", null);
|
|
117
|
+
} else {
|
|
118
|
+
setFieldValue("date", initialValues.date);
|
|
119
|
+
setFieldValue("time", initialValues.time);
|
|
120
|
+
setFieldValue("timezone", initialValues.timezone ?? systemTimezone?.value);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
children: /* @__PURE__ */ jsx(
|
|
124
|
+
Typography,
|
|
125
|
+
{
|
|
126
|
+
textColor: values.isScheduled ? "primary600" : "neutral800",
|
|
127
|
+
fontWeight: values.isScheduled ? "semiBold" : "regular",
|
|
128
|
+
children: formatMessage({
|
|
129
|
+
id: "modal.form.input.label.schedule-release",
|
|
130
|
+
defaultMessage: "Schedule release"
|
|
131
|
+
})
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
) }),
|
|
136
|
+
values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
137
|
+
/* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
|
|
138
|
+
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
|
|
139
|
+
DatePicker,
|
|
140
|
+
{
|
|
141
|
+
label: formatMessage({
|
|
167
142
|
id: "content-releases.modal.form.input.label.date",
|
|
168
143
|
defaultMessage: "Date"
|
|
169
|
-
})
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
144
|
+
}),
|
|
145
|
+
name: "date",
|
|
146
|
+
error: errors.date,
|
|
147
|
+
onChange: (date) => {
|
|
148
|
+
const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
|
|
149
|
+
setFieldValue("date", isoFormatDate);
|
|
150
|
+
},
|
|
151
|
+
clearLabel: formatMessage({
|
|
152
|
+
id: "content-releases.modal.form.input.clearLabel",
|
|
153
|
+
defaultMessage: "Clear"
|
|
154
|
+
}),
|
|
155
|
+
onClear: () => {
|
|
156
|
+
setFieldValue("date", null);
|
|
157
|
+
},
|
|
158
|
+
selectedDate: values.date || void 0,
|
|
159
|
+
required: true,
|
|
160
|
+
minDate: utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
|
|
161
|
+
}
|
|
162
|
+
) }),
|
|
163
|
+
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
|
|
164
|
+
TimePicker,
|
|
165
|
+
{
|
|
166
|
+
label: formatMessage({
|
|
192
167
|
id: "content-releases.modal.form.input.label.time",
|
|
193
168
|
defaultMessage: "Time"
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
/* @__PURE__ */ jsx(
|
|
219
|
-
/* @__PURE__ */ jsx(Button, { name: "submit", loading: isLoading, type: "submit", children: formatMessage(
|
|
169
|
+
}),
|
|
170
|
+
name: "time",
|
|
171
|
+
error: errors.time,
|
|
172
|
+
onChange: (time) => {
|
|
173
|
+
setFieldValue("time", time);
|
|
174
|
+
},
|
|
175
|
+
clearLabel: formatMessage({
|
|
176
|
+
id: "content-releases.modal.form.input.clearLabel",
|
|
177
|
+
defaultMessage: "Clear"
|
|
178
|
+
}),
|
|
179
|
+
onClear: () => {
|
|
180
|
+
setFieldValue("time", "");
|
|
181
|
+
},
|
|
182
|
+
value: values.time || void 0,
|
|
183
|
+
required: true
|
|
184
|
+
}
|
|
185
|
+
) })
|
|
186
|
+
] }),
|
|
187
|
+
/* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
|
|
188
|
+
] })
|
|
189
|
+
] }) }),
|
|
190
|
+
/* @__PURE__ */ jsx(
|
|
191
|
+
ModalFooter,
|
|
192
|
+
{
|
|
193
|
+
startActions: /* @__PURE__ */ jsx(Button, { onClick: handleClose, variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }),
|
|
194
|
+
endActions: /* @__PURE__ */ jsx(Button, { name: "submit", loading: isLoading, type: "submit", children: formatMessage(
|
|
220
195
|
{
|
|
221
196
|
id: "content-releases.modal.form.button.submit",
|
|
222
197
|
defaultMessage: "{isCreatingRelease, select, true {Continue} other {Save}}"
|
|
223
198
|
},
|
|
224
199
|
{ isCreatingRelease }
|
|
225
200
|
) })
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
201
|
+
}
|
|
202
|
+
)
|
|
203
|
+
] })
|
|
229
204
|
}
|
|
230
205
|
)
|
|
231
|
-
] })
|
|
206
|
+
] });
|
|
232
207
|
};
|
|
233
208
|
const getTimezones = (selectedDate) => {
|
|
234
209
|
const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
|
|
@@ -254,35 +229,31 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
254
229
|
}
|
|
255
230
|
}
|
|
256
231
|
}, [setFieldValue, values.date, values.timezone]);
|
|
257
|
-
return /* @__PURE__ */
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
{
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
};
|
|
283
|
-
const useTypedDispatch = useDispatch;
|
|
284
|
-
const isBaseQueryError = (error) => {
|
|
285
|
-
return typeof error !== "undefined" && error.name !== void 0;
|
|
232
|
+
return /* @__PURE__ */ jsx(
|
|
233
|
+
Combobox,
|
|
234
|
+
{
|
|
235
|
+
label: formatMessage({
|
|
236
|
+
id: "content-releases.modal.form.input.label.timezone",
|
|
237
|
+
defaultMessage: "Timezone"
|
|
238
|
+
}),
|
|
239
|
+
autocomplete: { type: "list", filter: "contains" },
|
|
240
|
+
name: "timezone",
|
|
241
|
+
value: values.timezone || void 0,
|
|
242
|
+
textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
|
|
243
|
+
onChange: (timezone) => {
|
|
244
|
+
setFieldValue("timezone", timezone);
|
|
245
|
+
},
|
|
246
|
+
onTextValueChange: (timezone) => {
|
|
247
|
+
setFieldValue("timezone", timezone);
|
|
248
|
+
},
|
|
249
|
+
onClear: () => {
|
|
250
|
+
setFieldValue("timezone", "");
|
|
251
|
+
},
|
|
252
|
+
error: errors.timezone,
|
|
253
|
+
required: true,
|
|
254
|
+
children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
|
|
255
|
+
}
|
|
256
|
+
);
|
|
286
257
|
};
|
|
287
258
|
const LinkCard = styled(Link)`
|
|
288
259
|
display: block;
|
|
@@ -321,7 +292,7 @@ const getBadgeProps = (status) => {
|
|
|
321
292
|
const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
322
293
|
const { formatMessage } = useIntl();
|
|
323
294
|
if (isError) {
|
|
324
|
-
return /* @__PURE__ */ jsx(
|
|
295
|
+
return /* @__PURE__ */ jsx(AnErrorOccurred, {});
|
|
325
296
|
}
|
|
326
297
|
if (releases?.length === 0) {
|
|
327
298
|
return /* @__PURE__ */ jsx(
|
|
@@ -336,11 +307,11 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
336
307
|
target: sectionTitle
|
|
337
308
|
}
|
|
338
309
|
),
|
|
339
|
-
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "
|
|
310
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "10rem" })
|
|
340
311
|
}
|
|
341
312
|
);
|
|
342
313
|
}
|
|
343
|
-
return /* @__PURE__ */ jsx(Grid
|
|
314
|
+
return /* @__PURE__ */ jsx(Grid, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsx(GridItem, { col: 3, s: 6, xs: 12, children: /* @__PURE__ */ jsx(LinkCard, { href: `content-releases/${id}`, isExternal: false, children: /* @__PURE__ */ jsxs(
|
|
344
315
|
Flex,
|
|
345
316
|
{
|
|
346
317
|
direction: "column",
|
|
@@ -355,7 +326,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
355
326
|
gap: 4,
|
|
356
327
|
children: [
|
|
357
328
|
/* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "start", gap: 1, children: [
|
|
358
|
-
/* @__PURE__ */ jsx(Typography, {
|
|
329
|
+
/* @__PURE__ */ jsx(Typography, { as: "h3", variant: "delta", fontWeight: "bold", children: name }),
|
|
359
330
|
/* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
|
|
360
331
|
id: "content-releases.pages.Releases.not-scheduled",
|
|
361
332
|
defaultMessage: "Not scheduled"
|
|
@@ -376,18 +347,19 @@ const StyledAlert = styled(Alert)`
|
|
|
376
347
|
`;
|
|
377
348
|
const INITIAL_FORM_VALUES = {
|
|
378
349
|
name: "",
|
|
379
|
-
date:
|
|
350
|
+
date: null,
|
|
380
351
|
time: "",
|
|
381
352
|
isScheduled: true,
|
|
382
353
|
scheduledAt: null,
|
|
383
354
|
timezone: null
|
|
384
355
|
};
|
|
385
356
|
const ReleasesPage = () => {
|
|
357
|
+
const tabRef = React.useRef(null);
|
|
386
358
|
const location = useLocation();
|
|
387
359
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
388
|
-
const
|
|
360
|
+
const toggleNotification = useNotification();
|
|
389
361
|
const { formatMessage } = useIntl();
|
|
390
|
-
const
|
|
362
|
+
const { push, replace } = useHistory();
|
|
391
363
|
const { formatAPIError } = useAPIErrorHandler();
|
|
392
364
|
const [{ query }, setQuery] = useQueryParams();
|
|
393
365
|
const response = useGetReleasesQuery(query);
|
|
@@ -395,15 +367,13 @@ const ReleasesPage = () => {
|
|
|
395
367
|
const { getFeature } = useLicenseLimits();
|
|
396
368
|
const { maximumReleases = 3 } = getFeature("cms-content-releases");
|
|
397
369
|
const { trackUsage } = useTracking();
|
|
398
|
-
const {
|
|
399
|
-
allowedActions: { canCreate }
|
|
400
|
-
} = useRBAC(PERMISSIONS);
|
|
401
370
|
const { isLoading, isSuccess, isError } = response;
|
|
402
371
|
const activeTab = response?.currentData?.meta?.activeTab || "pending";
|
|
372
|
+
const activeTabIndex = ["pending", "done"].indexOf(activeTab);
|
|
403
373
|
React.useEffect(() => {
|
|
404
374
|
if (location?.state?.errors) {
|
|
405
375
|
toggleNotification({
|
|
406
|
-
type: "
|
|
376
|
+
type: "warning",
|
|
407
377
|
title: formatMessage({
|
|
408
378
|
id: "content-releases.pages.Releases.notification.error.title",
|
|
409
379
|
defaultMessage: "Your request could not be processed."
|
|
@@ -413,25 +383,30 @@ const ReleasesPage = () => {
|
|
|
413
383
|
defaultMessage: "Please try again or open another release."
|
|
414
384
|
})
|
|
415
385
|
});
|
|
416
|
-
|
|
386
|
+
replace({ state: null });
|
|
387
|
+
}
|
|
388
|
+
}, [formatMessage, location?.state?.errors, replace, toggleNotification]);
|
|
389
|
+
React.useEffect(() => {
|
|
390
|
+
if (tabRef.current) {
|
|
391
|
+
tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
|
|
417
392
|
}
|
|
418
|
-
}, [
|
|
393
|
+
}, [activeTabIndex]);
|
|
419
394
|
const toggleAddReleaseModal = () => {
|
|
420
395
|
setReleaseModalShown((prev) => !prev);
|
|
421
396
|
};
|
|
422
397
|
if (isLoading) {
|
|
423
|
-
return /* @__PURE__ */ jsx(
|
|
398
|
+
return /* @__PURE__ */ jsx(Main, { "aria-busy": isLoading, children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) });
|
|
424
399
|
}
|
|
425
400
|
const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
|
|
426
401
|
const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
|
|
427
|
-
const handleTabChange = (
|
|
402
|
+
const handleTabChange = (index) => {
|
|
428
403
|
setQuery({
|
|
429
404
|
...query,
|
|
430
405
|
page: 1,
|
|
431
406
|
pageSize: response?.currentData?.meta?.pagination?.pageSize || 16,
|
|
432
407
|
filters: {
|
|
433
408
|
releasedAt: {
|
|
434
|
-
$notNull:
|
|
409
|
+
$notNull: index === 0 ? false : true
|
|
435
410
|
}
|
|
436
411
|
}
|
|
437
412
|
});
|
|
@@ -451,22 +426,22 @@ const ReleasesPage = () => {
|
|
|
451
426
|
})
|
|
452
427
|
});
|
|
453
428
|
trackUsage("didCreateRelease");
|
|
454
|
-
|
|
455
|
-
} else if (
|
|
429
|
+
push(`/plugins/content-releases/${response2.data.data.id}`);
|
|
430
|
+
} else if (isAxiosError(response2.error)) {
|
|
456
431
|
toggleNotification({
|
|
457
|
-
type: "
|
|
432
|
+
type: "warning",
|
|
458
433
|
message: formatAPIError(response2.error)
|
|
459
434
|
});
|
|
460
435
|
} else {
|
|
461
436
|
toggleNotification({
|
|
462
|
-
type: "
|
|
437
|
+
type: "warning",
|
|
463
438
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
464
439
|
});
|
|
465
440
|
}
|
|
466
441
|
};
|
|
467
442
|
return /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoading, children: [
|
|
468
443
|
/* @__PURE__ */ jsx(
|
|
469
|
-
|
|
444
|
+
HeaderLayout,
|
|
470
445
|
{
|
|
471
446
|
title: formatMessage({
|
|
472
447
|
id: "content-releases.pages.Releases.title",
|
|
@@ -476,7 +451,7 @@ const ReleasesPage = () => {
|
|
|
476
451
|
id: "content-releases.pages.Releases.header-subtitle",
|
|
477
452
|
defaultMessage: "Create and manage content updates"
|
|
478
453
|
}),
|
|
479
|
-
primaryAction:
|
|
454
|
+
primaryAction: /* @__PURE__ */ jsx(CheckPermissions, { permissions: PERMISSIONS.create, children: /* @__PURE__ */ jsx(
|
|
480
455
|
Button,
|
|
481
456
|
{
|
|
482
457
|
startIcon: /* @__PURE__ */ jsx(Plus, {}),
|
|
@@ -487,10 +462,10 @@ const ReleasesPage = () => {
|
|
|
487
462
|
defaultMessage: "New release"
|
|
488
463
|
})
|
|
489
464
|
}
|
|
490
|
-
)
|
|
465
|
+
) })
|
|
491
466
|
}
|
|
492
467
|
),
|
|
493
|
-
/* @__PURE__ */ jsx(
|
|
468
|
+
/* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
494
469
|
hasReachedMaximumPendingReleases && /* @__PURE__ */ jsx(
|
|
495
470
|
StyledAlert,
|
|
496
471
|
{
|
|
@@ -515,17 +490,21 @@ const ReleasesPage = () => {
|
|
|
515
490
|
})
|
|
516
491
|
}
|
|
517
492
|
),
|
|
518
|
-
/* @__PURE__ */ jsxs(
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
493
|
+
/* @__PURE__ */ jsxs(
|
|
494
|
+
TabGroup,
|
|
495
|
+
{
|
|
496
|
+
label: formatMessage({
|
|
497
|
+
id: "content-releases.pages.Releases.tab-group.label",
|
|
498
|
+
defaultMessage: "Releases list"
|
|
499
|
+
}),
|
|
500
|
+
variant: "simple",
|
|
501
|
+
initialSelectedTabIndex: activeTabIndex,
|
|
502
|
+
onTabChange: handleTabChange,
|
|
503
|
+
ref: tabRef,
|
|
504
|
+
children: [
|
|
505
|
+
/* @__PURE__ */ jsxs(Box, { paddingBottom: 8, children: [
|
|
506
|
+
/* @__PURE__ */ jsxs(Tabs, { children: [
|
|
507
|
+
/* @__PURE__ */ jsx(Tab, { children: formatMessage(
|
|
529
508
|
{
|
|
530
509
|
id: "content-releases.pages.Releases.tab.pending",
|
|
531
510
|
defaultMessage: "Pending ({count})"
|
|
@@ -534,48 +513,55 @@ const ReleasesPage = () => {
|
|
|
534
513
|
count: totalPendingReleases
|
|
535
514
|
}
|
|
536
515
|
) }),
|
|
537
|
-
/* @__PURE__ */ jsx(
|
|
516
|
+
/* @__PURE__ */ jsx(Tab, { children: formatMessage({
|
|
538
517
|
id: "content-releases.pages.Releases.tab.done",
|
|
539
518
|
defaultMessage: "Done"
|
|
540
519
|
}) })
|
|
541
|
-
]
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
520
|
+
] }),
|
|
521
|
+
/* @__PURE__ */ jsx(Divider, {})
|
|
522
|
+
] }),
|
|
523
|
+
/* @__PURE__ */ jsxs(TabPanels, { children: [
|
|
524
|
+
/* @__PURE__ */ jsx(TabPanel, { children: /* @__PURE__ */ jsx(
|
|
525
|
+
ReleasesGrid,
|
|
526
|
+
{
|
|
527
|
+
sectionTitle: "pending",
|
|
528
|
+
releases: response?.currentData?.data,
|
|
529
|
+
isError
|
|
530
|
+
}
|
|
531
|
+
) }),
|
|
532
|
+
/* @__PURE__ */ jsx(TabPanel, { children: /* @__PURE__ */ jsx(
|
|
533
|
+
ReleasesGrid,
|
|
534
|
+
{
|
|
535
|
+
sectionTitle: "done",
|
|
536
|
+
releases: response?.currentData?.data,
|
|
537
|
+
isError
|
|
538
|
+
}
|
|
539
|
+
) })
|
|
540
|
+
] })
|
|
541
|
+
]
|
|
542
|
+
}
|
|
543
|
+
),
|
|
544
|
+
response.currentData?.meta?.pagination?.total ? /* @__PURE__ */ jsxs(Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
|
|
545
|
+
/* @__PURE__ */ jsx(
|
|
546
|
+
PageSizeURLQuery,
|
|
548
547
|
{
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
isError
|
|
548
|
+
options: ["8", "16", "32", "64"],
|
|
549
|
+
defaultValue: response?.currentData?.meta?.pagination?.pageSize.toString()
|
|
552
550
|
}
|
|
553
|
-
)
|
|
554
|
-
/* @__PURE__ */ jsx(
|
|
555
|
-
|
|
551
|
+
),
|
|
552
|
+
/* @__PURE__ */ jsx(
|
|
553
|
+
PaginationURLQuery,
|
|
556
554
|
{
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
555
|
+
pagination: {
|
|
556
|
+
pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
|
|
557
|
+
}
|
|
560
558
|
}
|
|
561
|
-
)
|
|
562
|
-
] })
|
|
563
|
-
/* @__PURE__ */ jsxs(
|
|
564
|
-
Pagination.Root,
|
|
565
|
-
{
|
|
566
|
-
...response?.currentData?.meta?.pagination,
|
|
567
|
-
defaultPageSize: response?.currentData?.meta?.pagination?.pageSize,
|
|
568
|
-
children: [
|
|
569
|
-
/* @__PURE__ */ jsx(Pagination.PageSize, { options: ["8", "16", "32", "64"] }),
|
|
570
|
-
/* @__PURE__ */ jsx(Pagination.Links, {})
|
|
571
|
-
]
|
|
572
|
-
}
|
|
573
|
-
)
|
|
559
|
+
)
|
|
560
|
+
] }) : null
|
|
574
561
|
] }) }),
|
|
575
|
-
/* @__PURE__ */ jsx(
|
|
562
|
+
releaseModalShown && /* @__PURE__ */ jsx(
|
|
576
563
|
ReleaseModal,
|
|
577
564
|
{
|
|
578
|
-
open: releaseModalShown,
|
|
579
565
|
handleClose: toggleAddReleaseModal,
|
|
580
566
|
handleSubmit: handleAddRelease,
|
|
581
567
|
isLoading: isSubmittingForm,
|
|
@@ -599,7 +585,7 @@ const StyledMenuItem = styled(Menu.Item)`
|
|
|
599
585
|
}
|
|
600
586
|
|
|
601
587
|
&:hover {
|
|
602
|
-
background: ${({ theme,
|
|
588
|
+
background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
|
|
603
589
|
}
|
|
604
590
|
`;
|
|
605
591
|
const PencilIcon = styled(Pencil)`
|
|
@@ -619,34 +605,29 @@ const TrashIcon = styled(Trash)`
|
|
|
619
605
|
const TypographyMaxWidth = styled(Typography)`
|
|
620
606
|
max-width: 300px;
|
|
621
607
|
`;
|
|
622
|
-
const EntryValidationText = ({ action, schema, entry }) => {
|
|
608
|
+
const EntryValidationText = ({ action, schema, components, entry }) => {
|
|
623
609
|
const { formatMessage } = useIntl();
|
|
624
|
-
const { validate } = unstable_useDocument(
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
skip: !schema
|
|
631
|
-
}
|
|
632
|
-
);
|
|
633
|
-
const errors = validate(entry) ?? {};
|
|
610
|
+
const { validate } = unstable_useDocument();
|
|
611
|
+
const { errors } = validate(entry, {
|
|
612
|
+
contentType: schema,
|
|
613
|
+
components,
|
|
614
|
+
isCreatingEntry: false
|
|
615
|
+
});
|
|
634
616
|
if (Object.keys(errors).length > 0) {
|
|
635
617
|
const validationErrorsMessages = Object.entries(errors).map(
|
|
636
618
|
([key, value]) => formatMessage(
|
|
637
|
-
// @ts-expect-error – TODO: fix this will better checks
|
|
638
619
|
{ id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
|
|
639
620
|
{ field: key }
|
|
640
621
|
)
|
|
641
622
|
).join(" ");
|
|
642
623
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
643
|
-
/* @__PURE__ */ jsx(
|
|
624
|
+
/* @__PURE__ */ jsx(Icon, { color: "danger600", as: CrossCircle }),
|
|
644
625
|
/* @__PURE__ */ jsx(Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
|
|
645
626
|
] });
|
|
646
627
|
}
|
|
647
628
|
if (action == "publish") {
|
|
648
629
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
649
|
-
/* @__PURE__ */ jsx(
|
|
630
|
+
/* @__PURE__ */ jsx(Icon, { color: "success600", as: CheckCircle }),
|
|
650
631
|
entry.publishedAt ? /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
|
|
651
632
|
id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
|
|
652
633
|
defaultMessage: "Already published"
|
|
@@ -657,7 +638,7 @@ const EntryValidationText = ({ action, schema, entry }) => {
|
|
|
657
638
|
] });
|
|
658
639
|
}
|
|
659
640
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
660
|
-
/* @__PURE__ */ jsx(
|
|
641
|
+
/* @__PURE__ */ jsx(Icon, { color: "success600", as: CheckCircle }),
|
|
661
642
|
!entry.publishedAt ? /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
|
|
662
643
|
id: "content-releases.pages.ReleaseDetails.entry-validation.already-unpublished",
|
|
663
644
|
defaultMessage: "Already unpublished"
|
|
@@ -677,23 +658,20 @@ const ReleaseDetailsLayout = ({
|
|
|
677
658
|
const {
|
|
678
659
|
data,
|
|
679
660
|
isLoading: isLoadingDetails,
|
|
661
|
+
isError,
|
|
680
662
|
error
|
|
681
|
-
} = useGetReleaseQuery(
|
|
682
|
-
{ id: releaseId },
|
|
683
|
-
{
|
|
684
|
-
skip: !releaseId
|
|
685
|
-
}
|
|
686
|
-
);
|
|
663
|
+
} = useGetReleaseQuery({ id: releaseId });
|
|
687
664
|
const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();
|
|
688
|
-
const
|
|
665
|
+
const toggleNotification = useNotification();
|
|
689
666
|
const { formatAPIError } = useAPIErrorHandler();
|
|
690
|
-
const {
|
|
691
|
-
|
|
667
|
+
const {
|
|
668
|
+
allowedActions: { canUpdate, canDelete }
|
|
669
|
+
} = useRBAC(PERMISSIONS);
|
|
692
670
|
const dispatch = useTypedDispatch();
|
|
693
671
|
const { trackUsage } = useTracking();
|
|
694
672
|
const release = data?.data;
|
|
695
|
-
const handlePublishRelease =
|
|
696
|
-
const response = await publishRelease({ id });
|
|
673
|
+
const handlePublishRelease = async () => {
|
|
674
|
+
const response = await publishRelease({ id: releaseId });
|
|
697
675
|
if ("data" in response) {
|
|
698
676
|
toggleNotification({
|
|
699
677
|
type: "success",
|
|
@@ -708,14 +686,14 @@ const ReleaseDetailsLayout = ({
|
|
|
708
686
|
totalPublishedEntries,
|
|
709
687
|
totalUnpublishedEntries
|
|
710
688
|
});
|
|
711
|
-
} else if (
|
|
689
|
+
} else if (isAxiosError(response.error)) {
|
|
712
690
|
toggleNotification({
|
|
713
|
-
type: "
|
|
691
|
+
type: "warning",
|
|
714
692
|
message: formatAPIError(response.error)
|
|
715
693
|
});
|
|
716
694
|
} else {
|
|
717
695
|
toggleNotification({
|
|
718
|
-
type: "
|
|
696
|
+
type: "warning",
|
|
719
697
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
720
698
|
});
|
|
721
699
|
}
|
|
@@ -741,20 +719,21 @@ const ReleaseDetailsLayout = ({
|
|
|
741
719
|
return release.createdBy.email;
|
|
742
720
|
};
|
|
743
721
|
if (isLoadingDetails) {
|
|
744
|
-
return /* @__PURE__ */ jsx(
|
|
722
|
+
return /* @__PURE__ */ jsx(Main, { "aria-busy": isLoadingDetails, children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) });
|
|
745
723
|
}
|
|
746
|
-
if (
|
|
724
|
+
if (isError || !release) {
|
|
747
725
|
return /* @__PURE__ */ jsx(
|
|
748
|
-
|
|
726
|
+
Redirect,
|
|
749
727
|
{
|
|
750
|
-
to:
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
728
|
+
to: {
|
|
729
|
+
pathname: "/plugins/content-releases",
|
|
730
|
+
state: {
|
|
731
|
+
errors: [
|
|
732
|
+
{
|
|
733
|
+
code: error?.code
|
|
734
|
+
}
|
|
735
|
+
]
|
|
736
|
+
}
|
|
758
737
|
}
|
|
759
738
|
}
|
|
760
739
|
);
|
|
@@ -791,30 +770,34 @@ const ReleaseDetailsLayout = ({
|
|
|
791
770
|
) : "";
|
|
792
771
|
return /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoadingDetails, children: [
|
|
793
772
|
/* @__PURE__ */ jsx(
|
|
794
|
-
|
|
773
|
+
HeaderLayout,
|
|
795
774
|
{
|
|
796
775
|
title: release.name,
|
|
797
776
|
subtitle: /* @__PURE__ */ jsxs(Flex, { gap: 2, lineHeight: 6, children: [
|
|
798
777
|
/* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
|
|
799
778
|
/* @__PURE__ */ jsx(Badge, { ...getBadgeProps(release.status), children: release.status })
|
|
800
779
|
] }),
|
|
801
|
-
navigationAction: /* @__PURE__ */ jsx(
|
|
780
|
+
navigationAction: /* @__PURE__ */ jsx(Link$1, { startIcon: /* @__PURE__ */ jsx(ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
|
|
781
|
+
id: "global.back",
|
|
782
|
+
defaultMessage: "Back"
|
|
783
|
+
}) }),
|
|
802
784
|
primaryAction: !release.releasedAt && /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
803
785
|
/* @__PURE__ */ jsxs(Menu.Root, { children: [
|
|
804
786
|
/* @__PURE__ */ jsx(
|
|
805
787
|
Menu.Trigger,
|
|
806
788
|
{
|
|
789
|
+
as: IconButton,
|
|
807
790
|
paddingLeft: 2,
|
|
808
791
|
paddingRight: 2,
|
|
809
792
|
"aria-label": formatMessage({
|
|
810
793
|
id: "content-releases.header.actions.open-release-actions",
|
|
811
794
|
defaultMessage: "Release edit and delete menu"
|
|
812
795
|
}),
|
|
813
|
-
|
|
814
|
-
|
|
796
|
+
icon: /* @__PURE__ */ jsx(More, {}),
|
|
797
|
+
variant: "tertiary"
|
|
815
798
|
}
|
|
816
799
|
),
|
|
817
|
-
/* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end",
|
|
800
|
+
/* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children: [
|
|
818
801
|
/* @__PURE__ */ jsxs(
|
|
819
802
|
Flex,
|
|
820
803
|
{
|
|
@@ -836,7 +819,7 @@ const ReleaseDetailsLayout = ({
|
|
|
836
819
|
{
|
|
837
820
|
disabled: !canDelete,
|
|
838
821
|
onSelect: toggleWarningSubmit,
|
|
839
|
-
|
|
822
|
+
variant: "danger",
|
|
840
823
|
children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
|
|
841
824
|
/* @__PURE__ */ jsx(TrashIcon, {}),
|
|
842
825
|
/* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
|
|
@@ -881,12 +864,12 @@ const ReleaseDetailsLayout = ({
|
|
|
881
864
|
id: "content-releases.header.actions.refresh",
|
|
882
865
|
defaultMessage: "Refresh"
|
|
883
866
|
}) }),
|
|
884
|
-
|
|
867
|
+
/* @__PURE__ */ jsx(CheckPermissions, { permissions: PERMISSIONS.publish, children: /* @__PURE__ */ jsx(
|
|
885
868
|
Button,
|
|
886
869
|
{
|
|
887
870
|
size: "S",
|
|
888
871
|
variant: "default",
|
|
889
|
-
onClick: handlePublishRelease
|
|
872
|
+
onClick: handlePublishRelease,
|
|
890
873
|
loading: isPublishing,
|
|
891
874
|
disabled: release.actions.meta.count === 0,
|
|
892
875
|
children: formatMessage({
|
|
@@ -894,7 +877,7 @@ const ReleaseDetailsLayout = ({
|
|
|
894
877
|
defaultMessage: "Publish"
|
|
895
878
|
})
|
|
896
879
|
}
|
|
897
|
-
)
|
|
880
|
+
) })
|
|
898
881
|
] })
|
|
899
882
|
}
|
|
900
883
|
),
|
|
@@ -921,30 +904,44 @@ const getGroupByOptionLabel = (value) => {
|
|
|
921
904
|
defaultMessage: "Content-Types"
|
|
922
905
|
};
|
|
923
906
|
};
|
|
924
|
-
const
|
|
907
|
+
const DEFAULT_RELEASE_DETAILS_HEADER = [
|
|
908
|
+
{
|
|
909
|
+
key: "__name__",
|
|
910
|
+
fieldSchema: { type: "string" },
|
|
911
|
+
metadatas: {
|
|
912
|
+
label: {
|
|
913
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
914
|
+
defaultMessage: "name"
|
|
915
|
+
},
|
|
916
|
+
searchable: false,
|
|
917
|
+
sortable: false
|
|
918
|
+
},
|
|
919
|
+
name: "name"
|
|
920
|
+
}
|
|
921
|
+
];
|
|
922
|
+
const ReleaseDetailsBody = () => {
|
|
925
923
|
const { formatMessage } = useIntl();
|
|
924
|
+
const { releaseId } = useParams();
|
|
926
925
|
const [{ query }, setQuery] = useQueryParams();
|
|
927
|
-
const
|
|
926
|
+
const toggleNotification = useNotification();
|
|
928
927
|
const { formatAPIError } = useAPIErrorHandler();
|
|
929
928
|
const {
|
|
930
929
|
data: releaseData,
|
|
931
930
|
isLoading: isReleaseLoading,
|
|
931
|
+
isError: isReleaseError,
|
|
932
932
|
error: releaseError
|
|
933
933
|
} = useGetReleaseQuery({ id: releaseId });
|
|
934
934
|
const {
|
|
935
935
|
allowedActions: { canUpdate }
|
|
936
936
|
} = useRBAC(PERMISSIONS);
|
|
937
|
-
const runHookWaterfall = useStrapiApp(
|
|
938
|
-
const {
|
|
937
|
+
const { runHookWaterfall } = useStrapiApp();
|
|
938
|
+
const {
|
|
939
|
+
displayedHeaders,
|
|
940
|
+
hasI18nEnabled
|
|
941
|
+
} = runHookWaterfall(
|
|
939
942
|
"ContentReleases/pages/ReleaseDetails/add-locale-in-releases",
|
|
940
943
|
{
|
|
941
|
-
displayedHeaders:
|
|
942
|
-
label: formatMessage({
|
|
943
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
944
|
-
defaultMessage: "locale"
|
|
945
|
-
}),
|
|
946
|
-
name: "locale"
|
|
947
|
-
},
|
|
944
|
+
displayedHeaders: DEFAULT_RELEASE_DETAILS_HEADER,
|
|
948
945
|
hasI18nEnabled: false
|
|
949
946
|
}
|
|
950
947
|
);
|
|
@@ -976,59 +973,65 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
976
973
|
// We are passing the action path to found the position in the cache of the action for optimistic updates
|
|
977
974
|
});
|
|
978
975
|
if ("error" in response) {
|
|
979
|
-
if (
|
|
976
|
+
if (isAxiosError(response.error)) {
|
|
980
977
|
toggleNotification({
|
|
981
|
-
type: "
|
|
978
|
+
type: "warning",
|
|
982
979
|
message: formatAPIError(response.error)
|
|
983
980
|
});
|
|
984
981
|
} else {
|
|
985
982
|
toggleNotification({
|
|
986
|
-
type: "
|
|
983
|
+
type: "warning",
|
|
987
984
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
988
985
|
});
|
|
989
986
|
}
|
|
990
987
|
}
|
|
991
988
|
};
|
|
992
989
|
if (isLoading || isReleaseLoading) {
|
|
993
|
-
return /* @__PURE__ */ jsx(
|
|
990
|
+
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) });
|
|
994
991
|
}
|
|
995
992
|
const releaseActions = data?.data;
|
|
996
993
|
const releaseMeta = data?.meta;
|
|
997
994
|
const contentTypes = releaseMeta?.contentTypes || {};
|
|
998
995
|
const components = releaseMeta?.components || {};
|
|
999
|
-
if (
|
|
996
|
+
if (isReleaseError || !release) {
|
|
1000
997
|
const errorsArray = [];
|
|
1001
|
-
if (releaseError
|
|
998
|
+
if (releaseError) {
|
|
1002
999
|
errorsArray.push({
|
|
1003
1000
|
code: releaseError.code
|
|
1004
1001
|
});
|
|
1005
1002
|
}
|
|
1006
|
-
if (releaseActionsError
|
|
1003
|
+
if (releaseActionsError) {
|
|
1007
1004
|
errorsArray.push({
|
|
1008
1005
|
code: releaseActionsError.code
|
|
1009
1006
|
});
|
|
1010
1007
|
}
|
|
1011
1008
|
return /* @__PURE__ */ jsx(
|
|
1012
|
-
|
|
1009
|
+
Redirect,
|
|
1013
1010
|
{
|
|
1014
|
-
to:
|
|
1015
|
-
|
|
1016
|
-
|
|
1011
|
+
to: {
|
|
1012
|
+
pathname: "/plugins/content-releases",
|
|
1013
|
+
state: {
|
|
1014
|
+
errors: errorsArray
|
|
1015
|
+
}
|
|
1017
1016
|
}
|
|
1018
1017
|
}
|
|
1019
1018
|
);
|
|
1020
1019
|
}
|
|
1021
1020
|
if (isError || !releaseActions) {
|
|
1022
|
-
return /* @__PURE__ */ jsx(
|
|
1021
|
+
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(AnErrorOccurred, {}) });
|
|
1023
1022
|
}
|
|
1024
1023
|
if (Object.keys(releaseActions).length === 0) {
|
|
1025
|
-
return /* @__PURE__ */ jsx(
|
|
1026
|
-
|
|
1024
|
+
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(
|
|
1025
|
+
NoContent,
|
|
1027
1026
|
{
|
|
1027
|
+
content: {
|
|
1028
|
+
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1029
|
+
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1030
|
+
},
|
|
1028
1031
|
action: /* @__PURE__ */ jsx(
|
|
1029
1032
|
LinkButton,
|
|
1030
1033
|
{
|
|
1031
|
-
|
|
1034
|
+
as: Link$2,
|
|
1032
1035
|
to: {
|
|
1033
1036
|
pathname: "/content-manager"
|
|
1034
1037
|
},
|
|
@@ -1039,59 +1042,19 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1039
1042
|
defaultMessage: "Open the Content Manager"
|
|
1040
1043
|
})
|
|
1041
1044
|
}
|
|
1042
|
-
)
|
|
1043
|
-
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" }),
|
|
1044
|
-
content: formatMessage({
|
|
1045
|
-
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1046
|
-
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1047
|
-
})
|
|
1045
|
+
)
|
|
1048
1046
|
}
|
|
1049
1047
|
) });
|
|
1050
1048
|
}
|
|
1051
|
-
const groupByLabel = formatMessage({
|
|
1052
|
-
id: "content-releases.pages.ReleaseDetails.groupBy.aria-label",
|
|
1053
|
-
defaultMessage: "Group by"
|
|
1054
|
-
});
|
|
1055
|
-
const headers = [
|
|
1056
|
-
// ...displayedHeaders,
|
|
1057
|
-
{
|
|
1058
|
-
label: formatMessage({
|
|
1059
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1060
|
-
defaultMessage: "name"
|
|
1061
|
-
}),
|
|
1062
|
-
name: "name"
|
|
1063
|
-
},
|
|
1064
|
-
{
|
|
1065
|
-
label: formatMessage({
|
|
1066
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1067
|
-
defaultMessage: "content-type"
|
|
1068
|
-
}),
|
|
1069
|
-
name: "content-type"
|
|
1070
|
-
},
|
|
1071
|
-
{
|
|
1072
|
-
label: formatMessage({
|
|
1073
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1074
|
-
defaultMessage: "action"
|
|
1075
|
-
}),
|
|
1076
|
-
name: "action"
|
|
1077
|
-
},
|
|
1078
|
-
...!release.releasedAt ? [
|
|
1079
|
-
{
|
|
1080
|
-
label: formatMessage({
|
|
1081
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1082
|
-
defaultMessage: "status"
|
|
1083
|
-
}),
|
|
1084
|
-
name: "status"
|
|
1085
|
-
}
|
|
1086
|
-
] : []
|
|
1087
|
-
];
|
|
1088
1049
|
const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
|
|
1089
|
-
return /* @__PURE__ */ jsx(
|
|
1050
|
+
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
|
|
1090
1051
|
/* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
|
|
1091
1052
|
SingleSelect,
|
|
1092
1053
|
{
|
|
1093
|
-
|
|
1094
|
-
|
|
1054
|
+
"aria-label": formatMessage({
|
|
1055
|
+
id: "content-releases.pages.ReleaseDetails.groupBy.aria-label",
|
|
1056
|
+
defaultMessage: "Group by"
|
|
1057
|
+
}),
|
|
1095
1058
|
customizeContent: (value) => formatMessage(
|
|
1096
1059
|
{
|
|
1097
1060
|
id: `content-releases.pages.ReleaseDetails.groupBy.label`,
|
|
@@ -1115,11 +1078,55 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1115
1078
|
...item,
|
|
1116
1079
|
id: Number(item.entry.id)
|
|
1117
1080
|
})),
|
|
1118
|
-
|
|
1119
|
-
isLoading
|
|
1081
|
+
colCount: releaseActions[key].length,
|
|
1082
|
+
isLoading,
|
|
1083
|
+
isFetching,
|
|
1120
1084
|
children: /* @__PURE__ */ jsxs(Table.Content, { children: [
|
|
1121
|
-
/* @__PURE__ */
|
|
1122
|
-
|
|
1085
|
+
/* @__PURE__ */ jsxs(Table.Head, { children: [
|
|
1086
|
+
displayedHeaders.map(({ key: key2, fieldSchema, metadatas, name }) => /* @__PURE__ */ jsx(
|
|
1087
|
+
Table.HeaderCell,
|
|
1088
|
+
{
|
|
1089
|
+
fieldSchemaType: fieldSchema.type,
|
|
1090
|
+
label: formatMessage(metadatas.label),
|
|
1091
|
+
name
|
|
1092
|
+
},
|
|
1093
|
+
key2
|
|
1094
|
+
)),
|
|
1095
|
+
/* @__PURE__ */ jsx(
|
|
1096
|
+
Table.HeaderCell,
|
|
1097
|
+
{
|
|
1098
|
+
fieldSchemaType: "string",
|
|
1099
|
+
label: formatMessage({
|
|
1100
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1101
|
+
defaultMessage: "content-type"
|
|
1102
|
+
}),
|
|
1103
|
+
name: "content-type"
|
|
1104
|
+
}
|
|
1105
|
+
),
|
|
1106
|
+
/* @__PURE__ */ jsx(
|
|
1107
|
+
Table.HeaderCell,
|
|
1108
|
+
{
|
|
1109
|
+
fieldSchemaType: "string",
|
|
1110
|
+
label: formatMessage({
|
|
1111
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1112
|
+
defaultMessage: "action"
|
|
1113
|
+
}),
|
|
1114
|
+
name: "action"
|
|
1115
|
+
}
|
|
1116
|
+
),
|
|
1117
|
+
!release.releasedAt && /* @__PURE__ */ jsx(
|
|
1118
|
+
Table.HeaderCell,
|
|
1119
|
+
{
|
|
1120
|
+
fieldSchemaType: "string",
|
|
1121
|
+
label: formatMessage({
|
|
1122
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1123
|
+
defaultMessage: "status"
|
|
1124
|
+
}),
|
|
1125
|
+
name: "status"
|
|
1126
|
+
}
|
|
1127
|
+
)
|
|
1128
|
+
] }),
|
|
1129
|
+
/* @__PURE__ */ jsx(Table.LoadingBody, {}),
|
|
1123
1130
|
/* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
|
|
1124
1131
|
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1125
1132
|
/* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
@@ -1177,39 +1184,34 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1177
1184
|
}
|
|
1178
1185
|
)
|
|
1179
1186
|
] }, `releases-group-${key}`)),
|
|
1180
|
-
/* @__PURE__ */ jsxs(
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
)
|
|
1187
|
+
/* @__PURE__ */ jsxs(Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
|
|
1188
|
+
/* @__PURE__ */ jsx(PageSizeURLQuery, { defaultValue: releaseMeta?.pagination?.pageSize.toString() }),
|
|
1189
|
+
/* @__PURE__ */ jsx(
|
|
1190
|
+
PaginationURLQuery,
|
|
1191
|
+
{
|
|
1192
|
+
pagination: {
|
|
1193
|
+
pageCount: releaseMeta?.pagination?.pageCount || 0
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
)
|
|
1197
|
+
] })
|
|
1191
1198
|
] }) });
|
|
1192
1199
|
};
|
|
1193
1200
|
const ReleaseDetailsPage = () => {
|
|
1194
1201
|
const { formatMessage } = useIntl();
|
|
1195
1202
|
const { releaseId } = useParams();
|
|
1196
|
-
const
|
|
1203
|
+
const toggleNotification = useNotification();
|
|
1197
1204
|
const { formatAPIError } = useAPIErrorHandler();
|
|
1198
|
-
const
|
|
1205
|
+
const { replace } = useHistory();
|
|
1199
1206
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
1200
1207
|
const [showWarningSubmit, setWarningSubmit] = React.useState(false);
|
|
1201
1208
|
const {
|
|
1202
1209
|
isLoading: isLoadingDetails,
|
|
1203
1210
|
data,
|
|
1204
1211
|
isSuccess: isSuccessDetails
|
|
1205
|
-
} = useGetReleaseQuery(
|
|
1206
|
-
{ id: releaseId },
|
|
1207
|
-
{
|
|
1208
|
-
skip: !releaseId
|
|
1209
|
-
}
|
|
1210
|
-
);
|
|
1212
|
+
} = useGetReleaseQuery({ id: releaseId });
|
|
1211
1213
|
const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();
|
|
1212
|
-
const [deleteRelease] = useDeleteReleaseMutation();
|
|
1214
|
+
const [deleteRelease, { isLoading: isDeletingRelease }] = useDeleteReleaseMutation();
|
|
1213
1215
|
const toggleEditReleaseModal = () => {
|
|
1214
1216
|
setReleaseModalShown((prev) => !prev);
|
|
1215
1217
|
};
|
|
@@ -1220,18 +1222,15 @@ const ReleaseDetailsPage = () => {
|
|
|
1220
1222
|
{
|
|
1221
1223
|
toggleEditReleaseModal,
|
|
1222
1224
|
toggleWarningSubmit,
|
|
1223
|
-
children: /* @__PURE__ */ jsx(
|
|
1225
|
+
children: /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) })
|
|
1224
1226
|
}
|
|
1225
1227
|
);
|
|
1226
1228
|
}
|
|
1227
|
-
if (!releaseId) {
|
|
1228
|
-
return /* @__PURE__ */ jsx(Navigate, { to: ".." });
|
|
1229
|
-
}
|
|
1230
1229
|
const releaseData = isSuccessDetails && data?.data || null;
|
|
1231
1230
|
const title = releaseData?.name || "";
|
|
1232
1231
|
const timezone = releaseData?.timezone ?? null;
|
|
1233
1232
|
const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
|
|
1234
|
-
const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") :
|
|
1233
|
+
const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") : null;
|
|
1235
1234
|
const time = scheduledAt ? format(scheduledAt, "HH:mm") : "";
|
|
1236
1235
|
const handleEditRelease = async (values) => {
|
|
1237
1236
|
const response = await updateRelease({
|
|
@@ -1249,14 +1248,14 @@ const ReleaseDetailsPage = () => {
|
|
|
1249
1248
|
})
|
|
1250
1249
|
});
|
|
1251
1250
|
toggleEditReleaseModal();
|
|
1252
|
-
} else if (
|
|
1251
|
+
} else if (isAxiosError(response.error)) {
|
|
1253
1252
|
toggleNotification({
|
|
1254
|
-
type: "
|
|
1253
|
+
type: "warning",
|
|
1255
1254
|
message: formatAPIError(response.error)
|
|
1256
1255
|
});
|
|
1257
1256
|
} else {
|
|
1258
1257
|
toggleNotification({
|
|
1259
|
-
type: "
|
|
1258
|
+
type: "warning",
|
|
1260
1259
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1261
1260
|
});
|
|
1262
1261
|
}
|
|
@@ -1266,15 +1265,15 @@ const ReleaseDetailsPage = () => {
|
|
|
1266
1265
|
id: releaseId
|
|
1267
1266
|
});
|
|
1268
1267
|
if ("data" in response) {
|
|
1269
|
-
|
|
1270
|
-
} else if (
|
|
1268
|
+
replace("/plugins/content-releases");
|
|
1269
|
+
} else if (isAxiosError(response.error)) {
|
|
1271
1270
|
toggleNotification({
|
|
1272
|
-
type: "
|
|
1271
|
+
type: "warning",
|
|
1273
1272
|
message: formatAPIError(response.error)
|
|
1274
1273
|
});
|
|
1275
1274
|
} else {
|
|
1276
1275
|
toggleNotification({
|
|
1277
|
-
type: "
|
|
1276
|
+
type: "warning",
|
|
1278
1277
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1279
1278
|
});
|
|
1280
1279
|
}
|
|
@@ -1285,11 +1284,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1285
1284
|
toggleEditReleaseModal,
|
|
1286
1285
|
toggleWarningSubmit,
|
|
1287
1286
|
children: [
|
|
1288
|
-
/* @__PURE__ */ jsx(ReleaseDetailsBody, {
|
|
1289
|
-
/* @__PURE__ */ jsx(
|
|
1287
|
+
/* @__PURE__ */ jsx(ReleaseDetailsBody, {}),
|
|
1288
|
+
releaseModalShown && /* @__PURE__ */ jsx(
|
|
1290
1289
|
ReleaseModal,
|
|
1291
1290
|
{
|
|
1292
|
-
open: releaseModalShown,
|
|
1293
1291
|
handleClose: toggleEditReleaseModal,
|
|
1294
1292
|
handleSubmit: handleEditRelease,
|
|
1295
1293
|
isLoading: isLoadingDetails || isSubmittingForm,
|
|
@@ -1303,21 +1301,30 @@ const ReleaseDetailsPage = () => {
|
|
|
1303
1301
|
}
|
|
1304
1302
|
}
|
|
1305
1303
|
),
|
|
1306
|
-
/* @__PURE__ */ jsx(
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1304
|
+
/* @__PURE__ */ jsx(
|
|
1305
|
+
ConfirmDialog,
|
|
1306
|
+
{
|
|
1307
|
+
bodyText: {
|
|
1308
|
+
id: "content-releases.dialog.confirmation-message",
|
|
1309
|
+
defaultMessage: "Are you sure you want to delete this release?"
|
|
1310
|
+
},
|
|
1311
|
+
isOpen: showWarningSubmit,
|
|
1312
|
+
isConfirmButtonLoading: isDeletingRelease,
|
|
1313
|
+
onToggleDialog: toggleWarningSubmit,
|
|
1314
|
+
onConfirm: handleDeleteRelease
|
|
1315
|
+
}
|
|
1316
|
+
)
|
|
1310
1317
|
]
|
|
1311
1318
|
}
|
|
1312
1319
|
);
|
|
1313
1320
|
};
|
|
1314
1321
|
const App = () => {
|
|
1315
|
-
return /* @__PURE__ */ jsx(
|
|
1316
|
-
/* @__PURE__ */ jsx(Route, {
|
|
1317
|
-
/* @__PURE__ */ jsx(Route, {
|
|
1322
|
+
return /* @__PURE__ */ jsx(CheckPagePermissions, { permissions: PERMISSIONS.main, children: /* @__PURE__ */ jsxs(Switch, { children: [
|
|
1323
|
+
/* @__PURE__ */ jsx(Route, { exact: true, path: `/plugins/${pluginId}`, component: ReleasesPage }),
|
|
1324
|
+
/* @__PURE__ */ jsx(Route, { exact: true, path: `/plugins/${pluginId}/:releaseId`, component: ReleaseDetailsPage })
|
|
1318
1325
|
] }) });
|
|
1319
1326
|
};
|
|
1320
1327
|
export {
|
|
1321
1328
|
App
|
|
1322
1329
|
};
|
|
1323
|
-
//# sourceMappingURL=App-
|
|
1330
|
+
//# sourceMappingURL=App-jrh58sXY.mjs.map
|