@strapi/content-releases 5.0.0-beta.0 → 5.0.0-beta.10
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/dist/_chunks/{App-IkyOz9wq.mjs → App-B2R2exNT.mjs} +257 -256
- package/dist/_chunks/App-B2R2exNT.mjs.map +1 -0
- package/dist/_chunks/{App-FuRaphre.js → App-CEwOQkKT.js} +265 -265
- package/dist/_chunks/App-CEwOQkKT.js.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-YhAPgpG9.js → PurchaseContentReleases-Be3acS2L.js} +8 -7
- package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-Clm0iACO.mjs → PurchaseContentReleases-_MxP6-Dt.mjs} +9 -8
- package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +1 -0
- package/dist/_chunks/{en-RdapH-9X.mjs → en-B9Ur3VsE.mjs} +11 -2
- package/dist/_chunks/en-B9Ur3VsE.mjs.map +1 -0
- package/dist/_chunks/{en-faJDuv3q.js → en-DtFJ5ViE.js} +11 -2
- package/dist/_chunks/en-DtFJ5ViE.js.map +1 -0
- package/dist/_chunks/{index-Sb3Nal8H.js → index-BrWv-zV4.js} +169 -193
- package/dist/_chunks/index-BrWv-zV4.js.map +1 -0
- package/dist/_chunks/{index-qP3rNiDS.mjs → index-DbmynICx.mjs} +170 -192
- package/dist/_chunks/index-DbmynICx.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +2 -2
- package/dist/admin/src/components/CMReleasesContainer.d.ts +21 -0
- package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +1 -1
- package/dist/admin/src/components/ReleaseListCell.d.ts +0 -0
- package/dist/admin/src/components/ReleaseModal.d.ts +3 -2
- package/dist/admin/src/services/release.d.ts +56 -320
- package/dist/admin/src/utils/api.d.ts +6 -0
- package/dist/server/index.js +101 -52
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +102 -53
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts +2 -2
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/release-action.d.ts.map +1 -1
- package/dist/server/src/controllers/release.d.ts +1 -0
- package/dist/server/src/controllers/release.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/release-action.d.ts +7 -2
- package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -1
- package/dist/server/src/destroy.d.ts +2 -2
- package/dist/server/src/destroy.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +1412 -1411
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/migrations/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts +2 -2
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/release.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1407 -1407
- package/dist/server/src/services/release.d.ts +9 -9
- package/dist/server/src/services/release.d.ts.map +1 -1
- package/dist/server/src/services/scheduling.d.ts +6 -6
- package/dist/server/src/services/scheduling.d.ts.map +1 -1
- package/dist/server/src/services/validation.d.ts +2 -2
- package/dist/server/src/services/validation.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +10 -10
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/release-actions.d.ts +9 -9
- package/dist/shared/contracts/release-actions.d.ts.map +1 -1
- package/dist/shared/contracts/releases.d.ts +17 -1
- package/dist/shared/contracts/releases.d.ts.map +1 -1
- package/dist/shared/types.d.ts +2 -2
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +19 -19
- package/dist/_chunks/App-FuRaphre.js.map +0 -1
- package/dist/_chunks/App-IkyOz9wq.mjs.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +0 -1
- package/dist/_chunks/en-RdapH-9X.mjs.map +0 -1
- package/dist/_chunks/en-faJDuv3q.js.map +0 -1
- package/dist/_chunks/index-Sb3Nal8H.js.map +0 -1
- package/dist/_chunks/index-qP3rNiDS.mjs.map +0 -1
- package/dist/admin/src/services/axios.d.ts +0 -29
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useNotification, useAPIErrorHandler, useQueryParams,
|
|
3
|
-
import { useLocation, useNavigate, useParams, Navigate, Link as Link$1, Routes, Route } from "react-router-dom";
|
|
4
|
-
import { g as getTimezoneOffset, p as pluginId, u as useGetReleasesQuery, a as useCreateReleaseMutation, P as PERMISSIONS,
|
|
2
|
+
import { useNotification, useAPIErrorHandler, useQueryParams, useTracking, useRBAC, Page, Layouts, Pagination, isFetchError, ConfirmDialog, BackButton, useStrapiApp, Table } from "@strapi/admin/strapi-admin";
|
|
3
|
+
import { useLocation, useNavigate, NavLink, useParams, Navigate, Link as Link$1, Routes, Route } from "react-router-dom";
|
|
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 useGetReleaseActionsQuery, h as useUpdateReleaseActionMutation, R as ReleaseActionOptions, i as ReleaseActionMenu, r as releaseApi } from "./index-DbmynICx.mjs";
|
|
5
5
|
import * as React from "react";
|
|
6
|
-
import {
|
|
7
|
-
import { Link, Menu, LinkButton } from "@strapi/design-system
|
|
8
|
-
import { Plus,
|
|
6
|
+
import { unstable_useDocument } from "@strapi/content-manager/strapi-admin";
|
|
7
|
+
import { Modal, Flex, Field, TextInput, Box, Checkbox, Typography, DatePicker, TimePicker, Button, Combobox, ComboboxOption, Link, Alert, Main, Tabs, Divider, EmptyStateLayout, Grid, Badge, Menu, Dialog, LinkButton, SingleSelect, SingleSelectOption, Tr, Td, Tooltip } from "@strapi/design-system";
|
|
8
|
+
import { Plus, Pencil, Trash, More, CrossCircle, CheckCircle } from "@strapi/icons";
|
|
9
|
+
import { EmptyDocuments } from "@strapi/icons/symbols";
|
|
9
10
|
import format from "date-fns/format";
|
|
10
11
|
import { utcToZonedTime, zonedTimeToUtc } from "date-fns-tz";
|
|
11
12
|
import { useIntl } from "react-intl";
|
|
12
|
-
import styled from "styled-components";
|
|
13
|
-
import { intervalToDuration, isPast, formatISO
|
|
13
|
+
import { styled } from "styled-components";
|
|
14
|
+
import { intervalToDuration, isPast, formatISO } from "date-fns";
|
|
14
15
|
import { Formik, Form, useFormikContext } from "formik";
|
|
15
16
|
import * as yup from "yup";
|
|
16
17
|
import { useDispatch } from "react-redux";
|
|
18
|
+
import { useLicenseLimits } from "@strapi/admin/strapi-admin/ee";
|
|
17
19
|
const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
|
|
18
|
-
const RelativeTime = React.forwardRef(
|
|
20
|
+
const RelativeTime$1 = React.forwardRef(
|
|
19
21
|
({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
|
|
20
22
|
const { formatRelativeTime, formatDate, formatTime } = useIntl();
|
|
21
23
|
const interval = intervalToDuration({
|
|
@@ -66,6 +68,7 @@ const RELEASE_SCHEMA = yup.object().shape({
|
|
|
66
68
|
}).required().noUnknown();
|
|
67
69
|
const ReleaseModal = ({
|
|
68
70
|
handleClose,
|
|
71
|
+
open,
|
|
69
72
|
handleSubmit,
|
|
70
73
|
initialValues,
|
|
71
74
|
isLoading = false
|
|
@@ -80,9 +83,8 @@ const ReleaseModal = ({
|
|
|
80
83
|
const { date, time, timezone } = values;
|
|
81
84
|
if (!date || !time || !timezone)
|
|
82
85
|
return null;
|
|
83
|
-
const formattedDate = parse(time, "HH:mm", new Date(date));
|
|
84
86
|
const timezoneWithoutOffset = timezone.split("&")[1];
|
|
85
|
-
return zonedTimeToUtc(
|
|
87
|
+
return zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);
|
|
86
88
|
};
|
|
87
89
|
const getTimezoneWithOffset = () => {
|
|
88
90
|
const currentTimezone = timezoneList.find(
|
|
@@ -90,8 +92,8 @@ const ReleaseModal = ({
|
|
|
90
92
|
);
|
|
91
93
|
return currentTimezone?.value || systemTimezone.value;
|
|
92
94
|
};
|
|
93
|
-
return /* @__PURE__ */
|
|
94
|
-
/* @__PURE__ */ jsx(
|
|
95
|
+
return /* @__PURE__ */ jsx(Modal.Root, { open, onOpenChange: handleClose, children: /* @__PURE__ */ jsxs(Modal.Content, { children: [
|
|
96
|
+
/* @__PURE__ */ jsx(Modal.Header, { children: /* @__PURE__ */ jsx(Modal.Title, { children: formatMessage(
|
|
95
97
|
{
|
|
96
98
|
id: "content-releases.modal.title",
|
|
97
99
|
defaultMessage: "{isCreatingRelease, select, true {New release} other {Edit release}}"
|
|
@@ -114,123 +116,119 @@ const ReleaseModal = ({
|
|
|
114
116
|
},
|
|
115
117
|
validationSchema: RELEASE_SCHEMA,
|
|
116
118
|
validateOnChange: false,
|
|
117
|
-
children: ({ values, errors, handleChange, setFieldValue }) =>
|
|
118
|
-
|
|
119
|
-
/* @__PURE__ */ jsx(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
label: formatMessage({
|
|
119
|
+
children: ({ values, errors, handleChange, setFieldValue }) => {
|
|
120
|
+
return /* @__PURE__ */ jsxs(Form, { children: [
|
|
121
|
+
/* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
|
|
122
|
+
/* @__PURE__ */ jsxs(Field.Root, { name: "name", error: errors.name, required: true, children: [
|
|
123
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
123
124
|
id: "content-releases.modal.form.input.label.release-name",
|
|
124
125
|
defaultMessage: "Name"
|
|
125
|
-
}),
|
|
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
|
-
DatePicker,
|
|
167
|
-
{
|
|
168
|
-
label: formatMessage({
|
|
126
|
+
}) }),
|
|
127
|
+
/* @__PURE__ */ jsx(TextInput, { value: values.name, onChange: handleChange }),
|
|
128
|
+
/* @__PURE__ */ jsx(Field.Error, {})
|
|
129
|
+
] }),
|
|
130
|
+
/* @__PURE__ */ jsx(Box, { width: "max-content", children: /* @__PURE__ */ jsx(
|
|
131
|
+
Checkbox,
|
|
132
|
+
{
|
|
133
|
+
name: "isScheduled",
|
|
134
|
+
checked: values.isScheduled,
|
|
135
|
+
onCheckedChange: (checked) => {
|
|
136
|
+
setFieldValue("isScheduled", checked);
|
|
137
|
+
if (!checked) {
|
|
138
|
+
setFieldValue("date", null);
|
|
139
|
+
setFieldValue("time", "");
|
|
140
|
+
setFieldValue("timezone", null);
|
|
141
|
+
} else {
|
|
142
|
+
setFieldValue("date", initialValues.date);
|
|
143
|
+
setFieldValue("time", initialValues.time);
|
|
144
|
+
setFieldValue(
|
|
145
|
+
"timezone",
|
|
146
|
+
initialValues.timezone ?? systemTimezone?.value
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
children: /* @__PURE__ */ jsx(
|
|
151
|
+
Typography,
|
|
152
|
+
{
|
|
153
|
+
textColor: values.isScheduled ? "primary600" : "neutral800",
|
|
154
|
+
fontWeight: values.isScheduled ? "semiBold" : "regular",
|
|
155
|
+
children: formatMessage({
|
|
156
|
+
id: "modal.form.input.label.schedule-release",
|
|
157
|
+
defaultMessage: "Schedule release"
|
|
158
|
+
})
|
|
159
|
+
}
|
|
160
|
+
)
|
|
161
|
+
}
|
|
162
|
+
) }),
|
|
163
|
+
values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
164
|
+
/* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
|
|
165
|
+
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsxs(Field.Root, { name: "date", error: errors.date, required: true, children: [
|
|
166
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
169
167
|
id: "content-releases.modal.form.input.label.date",
|
|
170
168
|
defaultMessage: "Date"
|
|
171
|
-
}),
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
{
|
|
193
|
-
|
|
169
|
+
}) }),
|
|
170
|
+
/* @__PURE__ */ jsx(
|
|
171
|
+
DatePicker,
|
|
172
|
+
{
|
|
173
|
+
onChange: (date) => {
|
|
174
|
+
const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
|
|
175
|
+
setFieldValue("date", isoFormatDate);
|
|
176
|
+
},
|
|
177
|
+
clearLabel: formatMessage({
|
|
178
|
+
id: "content-releases.modal.form.input.clearLabel",
|
|
179
|
+
defaultMessage: "Clear"
|
|
180
|
+
}),
|
|
181
|
+
onClear: () => {
|
|
182
|
+
setFieldValue("date", null);
|
|
183
|
+
},
|
|
184
|
+
value: values.date ? new Date(values.date) : /* @__PURE__ */ new Date(),
|
|
185
|
+
minDate: utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
|
|
186
|
+
}
|
|
187
|
+
),
|
|
188
|
+
/* @__PURE__ */ jsx(Field.Error, {})
|
|
189
|
+
] }) }),
|
|
190
|
+
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsxs(Field.Root, { name: "time", error: errors.time, required: true, children: [
|
|
191
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
194
192
|
id: "content-releases.modal.form.input.label.time",
|
|
195
193
|
defaultMessage: "Time"
|
|
196
|
-
}),
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
{
|
|
220
|
-
|
|
221
|
-
|
|
194
|
+
}) }),
|
|
195
|
+
/* @__PURE__ */ jsx(
|
|
196
|
+
TimePicker,
|
|
197
|
+
{
|
|
198
|
+
onChange: (time) => {
|
|
199
|
+
setFieldValue("time", time);
|
|
200
|
+
},
|
|
201
|
+
clearLabel: formatMessage({
|
|
202
|
+
id: "content-releases.modal.form.input.clearLabel",
|
|
203
|
+
defaultMessage: "Clear"
|
|
204
|
+
}),
|
|
205
|
+
onClear: () => {
|
|
206
|
+
setFieldValue("time", "");
|
|
207
|
+
},
|
|
208
|
+
value: values.time || void 0
|
|
209
|
+
}
|
|
210
|
+
),
|
|
211
|
+
/* @__PURE__ */ jsx(Field.Error, {})
|
|
212
|
+
] }) })
|
|
213
|
+
] }),
|
|
214
|
+
/* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
|
|
215
|
+
] })
|
|
216
|
+
] }) }),
|
|
217
|
+
/* @__PURE__ */ jsxs(Modal.Footer, { children: [
|
|
218
|
+
/* @__PURE__ */ jsx(Modal.Close, { children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }) }),
|
|
219
|
+
/* @__PURE__ */ jsx(Button, { name: "submit", loading: isLoading, type: "submit", children: formatMessage(
|
|
222
220
|
{
|
|
223
221
|
id: "content-releases.modal.form.button.submit",
|
|
224
222
|
defaultMessage: "{isCreatingRelease, select, true {Continue} other {Save}}"
|
|
225
223
|
},
|
|
226
224
|
{ isCreatingRelease }
|
|
227
225
|
) })
|
|
228
|
-
}
|
|
229
|
-
)
|
|
230
|
-
|
|
226
|
+
] })
|
|
227
|
+
] });
|
|
228
|
+
}
|
|
231
229
|
}
|
|
232
230
|
)
|
|
233
|
-
] });
|
|
231
|
+
] }) });
|
|
234
232
|
};
|
|
235
233
|
const getTimezones = (selectedDate) => {
|
|
236
234
|
const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
|
|
@@ -256,38 +254,44 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
256
254
|
}
|
|
257
255
|
}
|
|
258
256
|
}, [setFieldValue, values.date, values.timezone]);
|
|
259
|
-
return /* @__PURE__ */
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
}
|
|
283
|
-
);
|
|
257
|
+
return /* @__PURE__ */ jsxs(Field.Root, { name: "timezone", error: errors.timezone, required: true, children: [
|
|
258
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
259
|
+
id: "content-releases.modal.form.input.label.timezone",
|
|
260
|
+
defaultMessage: "Timezone"
|
|
261
|
+
}) }),
|
|
262
|
+
/* @__PURE__ */ jsx(
|
|
263
|
+
Combobox,
|
|
264
|
+
{
|
|
265
|
+
autocomplete: { type: "list", filter: "contains" },
|
|
266
|
+
value: values.timezone || void 0,
|
|
267
|
+
textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
|
|
268
|
+
onChange: (timezone) => {
|
|
269
|
+
setFieldValue("timezone", timezone);
|
|
270
|
+
},
|
|
271
|
+
onTextValueChange: (timezone) => {
|
|
272
|
+
setFieldValue("timezone", timezone);
|
|
273
|
+
},
|
|
274
|
+
onClear: () => {
|
|
275
|
+
setFieldValue("timezone", "");
|
|
276
|
+
},
|
|
277
|
+
children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
|
|
278
|
+
}
|
|
279
|
+
),
|
|
280
|
+
/* @__PURE__ */ jsx(Field.Error, {})
|
|
281
|
+
] });
|
|
284
282
|
};
|
|
285
283
|
const useTypedDispatch = useDispatch;
|
|
284
|
+
const isBaseQueryError = (error) => {
|
|
285
|
+
return typeof error !== "undefined" && error.name !== void 0;
|
|
286
|
+
};
|
|
286
287
|
const LinkCard = styled(Link)`
|
|
287
288
|
display: block;
|
|
288
289
|
`;
|
|
289
|
-
const
|
|
290
|
-
|
|
290
|
+
const RelativeTime = styled(RelativeTime$1)`
|
|
291
|
+
display: inline-block;
|
|
292
|
+
&::first-letter {
|
|
293
|
+
text-transform: uppercase;
|
|
294
|
+
}
|
|
291
295
|
`;
|
|
292
296
|
const getBadgeProps = (status) => {
|
|
293
297
|
let color;
|
|
@@ -332,11 +336,11 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
332
336
|
target: sectionTitle
|
|
333
337
|
}
|
|
334
338
|
),
|
|
335
|
-
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "
|
|
339
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" })
|
|
336
340
|
}
|
|
337
341
|
);
|
|
338
342
|
}
|
|
339
|
-
return /* @__PURE__ */ jsx(Grid, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsx(
|
|
343
|
+
return /* @__PURE__ */ jsx(Grid.Root, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsx(Grid.Item, { col: 3, s: 6, xs: 12, children: /* @__PURE__ */ jsx(LinkCard, { tag: NavLink, to: `${id}`, isExternal: false, children: /* @__PURE__ */ jsxs(
|
|
340
344
|
Flex,
|
|
341
345
|
{
|
|
342
346
|
direction: "column",
|
|
@@ -351,8 +355,8 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
351
355
|
gap: 4,
|
|
352
356
|
children: [
|
|
353
357
|
/* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "start", gap: 1, children: [
|
|
354
|
-
/* @__PURE__ */ jsx(Typography, {
|
|
355
|
-
/* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(
|
|
358
|
+
/* @__PURE__ */ jsx(Typography, { textColor: "neutral800", tag: "h3", variant: "delta", fontWeight: "bold", children: name }),
|
|
359
|
+
/* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
|
|
356
360
|
id: "content-releases.pages.Releases.not-scheduled",
|
|
357
361
|
defaultMessage: "Not scheduled"
|
|
358
362
|
}) })
|
|
@@ -372,14 +376,13 @@ const StyledAlert = styled(Alert)`
|
|
|
372
376
|
`;
|
|
373
377
|
const INITIAL_FORM_VALUES = {
|
|
374
378
|
name: "",
|
|
375
|
-
date:
|
|
379
|
+
date: void 0,
|
|
376
380
|
time: "",
|
|
377
381
|
isScheduled: true,
|
|
378
382
|
scheduledAt: null,
|
|
379
383
|
timezone: null
|
|
380
384
|
};
|
|
381
385
|
const ReleasesPage = () => {
|
|
382
|
-
const tabRef = React.useRef(null);
|
|
383
386
|
const location = useLocation();
|
|
384
387
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
385
388
|
const { toggleNotification } = useNotification();
|
|
@@ -397,7 +400,6 @@ const ReleasesPage = () => {
|
|
|
397
400
|
} = useRBAC(PERMISSIONS);
|
|
398
401
|
const { isLoading, isSuccess, isError } = response;
|
|
399
402
|
const activeTab = response?.currentData?.meta?.activeTab || "pending";
|
|
400
|
-
const activeTabIndex = ["pending", "done"].indexOf(activeTab);
|
|
401
403
|
React.useEffect(() => {
|
|
402
404
|
if (location?.state?.errors) {
|
|
403
405
|
toggleNotification({
|
|
@@ -414,11 +416,6 @@ const ReleasesPage = () => {
|
|
|
414
416
|
navigate("", { replace: true, state: null });
|
|
415
417
|
}
|
|
416
418
|
}, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
|
|
417
|
-
React.useEffect(() => {
|
|
418
|
-
if (tabRef.current) {
|
|
419
|
-
tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
|
|
420
|
-
}
|
|
421
|
-
}, [activeTabIndex]);
|
|
422
419
|
const toggleAddReleaseModal = () => {
|
|
423
420
|
setReleaseModalShown((prev) => !prev);
|
|
424
421
|
};
|
|
@@ -427,14 +424,14 @@ const ReleasesPage = () => {
|
|
|
427
424
|
}
|
|
428
425
|
const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
|
|
429
426
|
const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
|
|
430
|
-
const handleTabChange = (
|
|
427
|
+
const handleTabChange = (tabValue) => {
|
|
431
428
|
setQuery({
|
|
432
429
|
...query,
|
|
433
430
|
page: 1,
|
|
434
431
|
pageSize: response?.currentData?.meta?.pagination?.pageSize || 16,
|
|
435
432
|
filters: {
|
|
436
433
|
releasedAt: {
|
|
437
|
-
$notNull:
|
|
434
|
+
$notNull: tabValue !== "pending"
|
|
438
435
|
}
|
|
439
436
|
}
|
|
440
437
|
});
|
|
@@ -455,7 +452,7 @@ const ReleasesPage = () => {
|
|
|
455
452
|
});
|
|
456
453
|
trackUsage("didCreateRelease");
|
|
457
454
|
navigate(response2.data.data.id.toString());
|
|
458
|
-
} else if (
|
|
455
|
+
} else if (isFetchError(response2.error)) {
|
|
459
456
|
toggleNotification({
|
|
460
457
|
type: "danger",
|
|
461
458
|
message: formatAPIError(response2.error)
|
|
@@ -469,7 +466,7 @@ const ReleasesPage = () => {
|
|
|
469
466
|
};
|
|
470
467
|
return /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoading, children: [
|
|
471
468
|
/* @__PURE__ */ jsx(
|
|
472
|
-
|
|
469
|
+
Layouts.Header,
|
|
473
470
|
{
|
|
474
471
|
title: formatMessage({
|
|
475
472
|
id: "content-releases.pages.Releases.title",
|
|
@@ -493,7 +490,7 @@ const ReleasesPage = () => {
|
|
|
493
490
|
) : null
|
|
494
491
|
}
|
|
495
492
|
),
|
|
496
|
-
/* @__PURE__ */ jsx(
|
|
493
|
+
/* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
497
494
|
hasReachedMaximumPendingReleases && /* @__PURE__ */ jsx(
|
|
498
495
|
StyledAlert,
|
|
499
496
|
{
|
|
@@ -518,21 +515,17 @@ const ReleasesPage = () => {
|
|
|
518
515
|
})
|
|
519
516
|
}
|
|
520
517
|
),
|
|
521
|
-
/* @__PURE__ */ jsxs(
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
children: [
|
|
533
|
-
/* @__PURE__ */ jsxs(Box, { paddingBottom: 8, children: [
|
|
534
|
-
/* @__PURE__ */ jsxs(Tabs, { children: [
|
|
535
|
-
/* @__PURE__ */ jsx(Tab, { children: formatMessage(
|
|
518
|
+
/* @__PURE__ */ jsxs(Tabs.Root, { variant: "simple", onValueChange: handleTabChange, value: activeTab, children: [
|
|
519
|
+
/* @__PURE__ */ jsxs(Box, { paddingBottom: 8, children: [
|
|
520
|
+
/* @__PURE__ */ jsxs(
|
|
521
|
+
Tabs.List,
|
|
522
|
+
{
|
|
523
|
+
"aria-label": formatMessage({
|
|
524
|
+
id: "content-releases.pages.Releases.tab-group.label",
|
|
525
|
+
defaultMessage: "Releases list"
|
|
526
|
+
}),
|
|
527
|
+
children: [
|
|
528
|
+
/* @__PURE__ */ jsx(Tabs.Trigger, { value: "pending", children: formatMessage(
|
|
536
529
|
{
|
|
537
530
|
id: "content-releases.pages.Releases.tab.pending",
|
|
538
531
|
defaultMessage: "Pending ({count})"
|
|
@@ -541,34 +534,32 @@ const ReleasesPage = () => {
|
|
|
541
534
|
count: totalPendingReleases
|
|
542
535
|
}
|
|
543
536
|
) }),
|
|
544
|
-
/* @__PURE__ */ jsx(
|
|
537
|
+
/* @__PURE__ */ jsx(Tabs.Trigger, { value: "done", children: formatMessage({
|
|
545
538
|
id: "content-releases.pages.Releases.tab.done",
|
|
546
539
|
defaultMessage: "Done"
|
|
547
540
|
}) })
|
|
548
|
-
]
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
}
|
|
571
|
-
),
|
|
541
|
+
]
|
|
542
|
+
}
|
|
543
|
+
),
|
|
544
|
+
/* @__PURE__ */ jsx(Divider, {})
|
|
545
|
+
] }),
|
|
546
|
+
/* @__PURE__ */ jsx(Tabs.Content, { value: "pending", children: /* @__PURE__ */ jsx(
|
|
547
|
+
ReleasesGrid,
|
|
548
|
+
{
|
|
549
|
+
sectionTitle: "pending",
|
|
550
|
+
releases: response?.currentData?.data,
|
|
551
|
+
isError
|
|
552
|
+
}
|
|
553
|
+
) }),
|
|
554
|
+
/* @__PURE__ */ jsx(Tabs.Content, { value: "done", children: /* @__PURE__ */ jsx(
|
|
555
|
+
ReleasesGrid,
|
|
556
|
+
{
|
|
557
|
+
sectionTitle: "done",
|
|
558
|
+
releases: response?.currentData?.data,
|
|
559
|
+
isError
|
|
560
|
+
}
|
|
561
|
+
) })
|
|
562
|
+
] }),
|
|
572
563
|
/* @__PURE__ */ jsxs(
|
|
573
564
|
Pagination.Root,
|
|
574
565
|
{
|
|
@@ -581,9 +572,10 @@ const ReleasesPage = () => {
|
|
|
581
572
|
}
|
|
582
573
|
)
|
|
583
574
|
] }) }),
|
|
584
|
-
|
|
575
|
+
/* @__PURE__ */ jsx(
|
|
585
576
|
ReleaseModal,
|
|
586
577
|
{
|
|
578
|
+
open: releaseModalShown,
|
|
587
579
|
handleClose: toggleAddReleaseModal,
|
|
588
580
|
handleSubmit: handleAddRelease,
|
|
589
581
|
isLoading: isSubmittingForm,
|
|
@@ -607,7 +599,7 @@ const StyledMenuItem = styled(Menu.Item)`
|
|
|
607
599
|
}
|
|
608
600
|
|
|
609
601
|
&:hover {
|
|
610
|
-
background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
|
|
602
|
+
background: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}100`]};
|
|
611
603
|
}
|
|
612
604
|
`;
|
|
613
605
|
const PencilIcon = styled(Pencil)`
|
|
@@ -642,18 +634,19 @@ const EntryValidationText = ({ action, schema, entry }) => {
|
|
|
642
634
|
if (Object.keys(errors).length > 0) {
|
|
643
635
|
const validationErrorsMessages = Object.entries(errors).map(
|
|
644
636
|
([key, value]) => formatMessage(
|
|
637
|
+
// @ts-expect-error – TODO: fix this will better checks
|
|
645
638
|
{ id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
|
|
646
639
|
{ field: key }
|
|
647
640
|
)
|
|
648
641
|
).join(" ");
|
|
649
642
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
650
|
-
/* @__PURE__ */ jsx(
|
|
643
|
+
/* @__PURE__ */ jsx(CrossCircle, { fill: "danger600" }),
|
|
651
644
|
/* @__PURE__ */ jsx(Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
|
|
652
645
|
] });
|
|
653
646
|
}
|
|
654
647
|
if (action == "publish") {
|
|
655
648
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
656
|
-
/* @__PURE__ */ jsx(
|
|
649
|
+
/* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
|
|
657
650
|
entry.publishedAt ? /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
|
|
658
651
|
id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
|
|
659
652
|
defaultMessage: "Already published"
|
|
@@ -664,7 +657,7 @@ const EntryValidationText = ({ action, schema, entry }) => {
|
|
|
664
657
|
] });
|
|
665
658
|
}
|
|
666
659
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
667
|
-
/* @__PURE__ */ jsx(
|
|
660
|
+
/* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
|
|
668
661
|
!entry.publishedAt ? /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
|
|
669
662
|
id: "content-releases.pages.ReleaseDetails.entry-validation.already-unpublished",
|
|
670
663
|
defaultMessage: "Already unpublished"
|
|
@@ -684,7 +677,6 @@ const ReleaseDetailsLayout = ({
|
|
|
684
677
|
const {
|
|
685
678
|
data,
|
|
686
679
|
isLoading: isLoadingDetails,
|
|
687
|
-
isError,
|
|
688
680
|
error
|
|
689
681
|
} = useGetReleaseQuery(
|
|
690
682
|
{ id: releaseId },
|
|
@@ -716,7 +708,7 @@ const ReleaseDetailsLayout = ({
|
|
|
716
708
|
totalPublishedEntries,
|
|
717
709
|
totalUnpublishedEntries
|
|
718
710
|
});
|
|
719
|
-
} else if (
|
|
711
|
+
} else if (isFetchError(response.error)) {
|
|
720
712
|
toggleNotification({
|
|
721
713
|
type: "danger",
|
|
722
714
|
message: formatAPIError(response.error)
|
|
@@ -729,7 +721,12 @@ const ReleaseDetailsLayout = ({
|
|
|
729
721
|
}
|
|
730
722
|
};
|
|
731
723
|
const handleRefresh = () => {
|
|
732
|
-
dispatch(
|
|
724
|
+
dispatch(
|
|
725
|
+
releaseApi.util.invalidateTags([
|
|
726
|
+
{ type: "ReleaseAction", id: "LIST" },
|
|
727
|
+
{ type: "Release", id: releaseId }
|
|
728
|
+
])
|
|
729
|
+
);
|
|
733
730
|
};
|
|
734
731
|
const getCreatedByUser = () => {
|
|
735
732
|
if (!release?.createdBy) {
|
|
@@ -746,7 +743,7 @@ const ReleaseDetailsLayout = ({
|
|
|
746
743
|
if (isLoadingDetails) {
|
|
747
744
|
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
748
745
|
}
|
|
749
|
-
if (
|
|
746
|
+
if (isBaseQueryError(error) && "code" in error || !release) {
|
|
750
747
|
return /* @__PURE__ */ jsx(
|
|
751
748
|
Navigate,
|
|
752
749
|
{
|
|
@@ -754,6 +751,7 @@ const ReleaseDetailsLayout = ({
|
|
|
754
751
|
state: {
|
|
755
752
|
errors: [
|
|
756
753
|
{
|
|
754
|
+
// @ts-expect-error – TODO: fix this weird error flow
|
|
757
755
|
code: error?.code
|
|
758
756
|
}
|
|
759
757
|
]
|
|
@@ -793,7 +791,7 @@ const ReleaseDetailsLayout = ({
|
|
|
793
791
|
) : "";
|
|
794
792
|
return /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoadingDetails, children: [
|
|
795
793
|
/* @__PURE__ */ jsx(
|
|
796
|
-
|
|
794
|
+
Layouts.Header,
|
|
797
795
|
{
|
|
798
796
|
title: release.name,
|
|
799
797
|
subtitle: /* @__PURE__ */ jsxs(Flex, { gap: 2, lineHeight: 6, children: [
|
|
@@ -806,18 +804,17 @@ const ReleaseDetailsLayout = ({
|
|
|
806
804
|
/* @__PURE__ */ jsx(
|
|
807
805
|
Menu.Trigger,
|
|
808
806
|
{
|
|
809
|
-
as: IconButton,
|
|
810
807
|
paddingLeft: 2,
|
|
811
808
|
paddingRight: 2,
|
|
812
809
|
"aria-label": formatMessage({
|
|
813
810
|
id: "content-releases.header.actions.open-release-actions",
|
|
814
811
|
defaultMessage: "Release edit and delete menu"
|
|
815
812
|
}),
|
|
816
|
-
|
|
817
|
-
|
|
813
|
+
variant: "tertiary",
|
|
814
|
+
children: /* @__PURE__ */ jsx(More, {})
|
|
818
815
|
}
|
|
819
816
|
),
|
|
820
|
-
/* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children: [
|
|
817
|
+
/* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", maxHeight: void 0, children: [
|
|
821
818
|
/* @__PURE__ */ jsxs(
|
|
822
819
|
Flex,
|
|
823
820
|
{
|
|
@@ -839,7 +836,7 @@ const ReleaseDetailsLayout = ({
|
|
|
839
836
|
{
|
|
840
837
|
disabled: !canDelete,
|
|
841
838
|
onSelect: toggleWarningSubmit,
|
|
842
|
-
variant: "danger",
|
|
839
|
+
$variant: "danger",
|
|
843
840
|
children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
|
|
844
841
|
/* @__PURE__ */ jsx(TrashIcon, {}),
|
|
845
842
|
/* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
|
|
@@ -866,7 +863,7 @@ const ReleaseDetailsLayout = ({
|
|
|
866
863
|
defaultMessage: "Created"
|
|
867
864
|
}) }),
|
|
868
865
|
/* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
|
|
869
|
-
/* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(release.createdAt) }),
|
|
866
|
+
/* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
|
|
870
867
|
formatMessage(
|
|
871
868
|
{
|
|
872
869
|
id: "content-releases.header.actions.created.description",
|
|
@@ -905,6 +902,7 @@ const ReleaseDetailsLayout = ({
|
|
|
905
902
|
] });
|
|
906
903
|
};
|
|
907
904
|
const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
|
|
905
|
+
const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
|
|
908
906
|
const getGroupByOptionLabel = (value) => {
|
|
909
907
|
if (value === "locale") {
|
|
910
908
|
return {
|
|
@@ -931,12 +929,25 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
931
929
|
const {
|
|
932
930
|
data: releaseData,
|
|
933
931
|
isLoading: isReleaseLoading,
|
|
934
|
-
isError: isReleaseError,
|
|
935
932
|
error: releaseError
|
|
936
933
|
} = useGetReleaseQuery({ id: releaseId });
|
|
937
934
|
const {
|
|
938
935
|
allowedActions: { canUpdate }
|
|
939
936
|
} = useRBAC(PERMISSIONS);
|
|
937
|
+
const runHookWaterfall = useStrapiApp("ReleaseDetailsPage", (state) => state.runHookWaterfall);
|
|
938
|
+
const { hasI18nEnabled } = runHookWaterfall(
|
|
939
|
+
"ContentReleases/pages/ReleaseDetails/add-locale-in-releases",
|
|
940
|
+
{
|
|
941
|
+
displayedHeaders: {
|
|
942
|
+
label: formatMessage({
|
|
943
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
944
|
+
defaultMessage: "locale"
|
|
945
|
+
}),
|
|
946
|
+
name: "locale"
|
|
947
|
+
},
|
|
948
|
+
hasI18nEnabled: false
|
|
949
|
+
}
|
|
950
|
+
);
|
|
940
951
|
const release = releaseData?.data;
|
|
941
952
|
const selectedGroupBy = query?.groupBy || "contentType";
|
|
942
953
|
const {
|
|
@@ -965,7 +976,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
965
976
|
// We are passing the action path to found the position in the cache of the action for optimistic updates
|
|
966
977
|
});
|
|
967
978
|
if ("error" in response) {
|
|
968
|
-
if (
|
|
979
|
+
if (isFetchError(response.error)) {
|
|
969
980
|
toggleNotification({
|
|
970
981
|
type: "danger",
|
|
971
982
|
message: formatAPIError(response.error)
|
|
@@ -985,14 +996,14 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
985
996
|
const releaseMeta = data?.meta;
|
|
986
997
|
const contentTypes = releaseMeta?.contentTypes || {};
|
|
987
998
|
const components = releaseMeta?.components || {};
|
|
988
|
-
if (
|
|
999
|
+
if (isBaseQueryError(releaseError) || !release) {
|
|
989
1000
|
const errorsArray = [];
|
|
990
|
-
if (releaseError) {
|
|
1001
|
+
if (releaseError && "code" in releaseError) {
|
|
991
1002
|
errorsArray.push({
|
|
992
1003
|
code: releaseError.code
|
|
993
1004
|
});
|
|
994
1005
|
}
|
|
995
|
-
if (releaseActionsError) {
|
|
1006
|
+
if (releaseActionsError && "code" in releaseActionsError) {
|
|
996
1007
|
errorsArray.push({
|
|
997
1008
|
code: releaseActionsError.code
|
|
998
1009
|
});
|
|
@@ -1011,13 +1022,13 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1011
1022
|
return /* @__PURE__ */ jsx(Page.Error, {});
|
|
1012
1023
|
}
|
|
1013
1024
|
if (Object.keys(releaseActions).length === 0) {
|
|
1014
|
-
return /* @__PURE__ */ jsx(
|
|
1025
|
+
return /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsx(
|
|
1015
1026
|
EmptyStateLayout,
|
|
1016
1027
|
{
|
|
1017
1028
|
action: /* @__PURE__ */ jsx(
|
|
1018
1029
|
LinkButton,
|
|
1019
1030
|
{
|
|
1020
|
-
|
|
1031
|
+
tag: Link$1,
|
|
1021
1032
|
to: {
|
|
1022
1033
|
pathname: "/content-manager"
|
|
1023
1034
|
},
|
|
@@ -1029,7 +1040,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1029
1040
|
})
|
|
1030
1041
|
}
|
|
1031
1042
|
),
|
|
1032
|
-
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "
|
|
1043
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" }),
|
|
1033
1044
|
content: formatMessage({
|
|
1034
1045
|
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1035
1046
|
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
@@ -1037,7 +1048,12 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1037
1048
|
}
|
|
1038
1049
|
) });
|
|
1039
1050
|
}
|
|
1051
|
+
const groupByLabel = formatMessage({
|
|
1052
|
+
id: "content-releases.pages.ReleaseDetails.groupBy.aria-label",
|
|
1053
|
+
defaultMessage: "Group by"
|
|
1054
|
+
});
|
|
1040
1055
|
const headers = [
|
|
1056
|
+
// ...displayedHeaders,
|
|
1041
1057
|
{
|
|
1042
1058
|
label: formatMessage({
|
|
1043
1059
|
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
@@ -1045,13 +1061,6 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1045
1061
|
}),
|
|
1046
1062
|
name: "name"
|
|
1047
1063
|
},
|
|
1048
|
-
{
|
|
1049
|
-
label: formatMessage({
|
|
1050
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1051
|
-
defaultMessage: "locale"
|
|
1052
|
-
}),
|
|
1053
|
-
name: "locale"
|
|
1054
|
-
},
|
|
1055
1064
|
{
|
|
1056
1065
|
label: formatMessage({
|
|
1057
1066
|
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
@@ -1076,14 +1085,13 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1076
1085
|
}
|
|
1077
1086
|
] : []
|
|
1078
1087
|
];
|
|
1079
|
-
|
|
1088
|
+
const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
|
|
1089
|
+
return /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
|
|
1080
1090
|
/* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
|
|
1081
1091
|
SingleSelect,
|
|
1082
1092
|
{
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
defaultMessage: "Group by"
|
|
1086
|
-
}),
|
|
1093
|
+
placeholder: groupByLabel,
|
|
1094
|
+
"aria-label": groupByLabel,
|
|
1087
1095
|
customizeContent: (value) => formatMessage(
|
|
1088
1096
|
{
|
|
1089
1097
|
id: `content-releases.pages.ReleaseDetails.groupBy.label`,
|
|
@@ -1095,7 +1103,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1095
1103
|
),
|
|
1096
1104
|
value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
|
|
1097
1105
|
onChange: (value) => setQuery({ groupBy: value }),
|
|
1098
|
-
children:
|
|
1106
|
+
children: options.map((option) => /* @__PURE__ */ jsx(SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
|
|
1099
1107
|
}
|
|
1100
1108
|
) }),
|
|
1101
1109
|
Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxs(Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
|
|
@@ -1115,7 +1123,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1115
1123
|
/* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
|
|
1116
1124
|
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1117
1125
|
/* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
1118
|
-
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1126
|
+
hasI18nEnabled && /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1119
1127
|
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
|
|
1120
1128
|
/* @__PURE__ */ jsx(Td, { width: "20%", children: release.releasedAt ? /* @__PURE__ */ jsx(Typography, { children: formatMessage(
|
|
1121
1129
|
{
|
|
@@ -1223,7 +1231,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1223
1231
|
const title = releaseData?.name || "";
|
|
1224
1232
|
const timezone = releaseData?.timezone ?? null;
|
|
1225
1233
|
const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
|
|
1226
|
-
const date = scheduledAt ?
|
|
1234
|
+
const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") : void 0;
|
|
1227
1235
|
const time = scheduledAt ? format(scheduledAt, "HH:mm") : "";
|
|
1228
1236
|
const handleEditRelease = async (values) => {
|
|
1229
1237
|
const response = await updateRelease({
|
|
@@ -1240,7 +1248,8 @@ const ReleaseDetailsPage = () => {
|
|
|
1240
1248
|
defaultMessage: "Release updated."
|
|
1241
1249
|
})
|
|
1242
1250
|
});
|
|
1243
|
-
|
|
1251
|
+
toggleEditReleaseModal();
|
|
1252
|
+
} else if (isFetchError(response.error)) {
|
|
1244
1253
|
toggleNotification({
|
|
1245
1254
|
type: "danger",
|
|
1246
1255
|
message: formatAPIError(response.error)
|
|
@@ -1251,7 +1260,6 @@ const ReleaseDetailsPage = () => {
|
|
|
1251
1260
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1252
1261
|
});
|
|
1253
1262
|
}
|
|
1254
|
-
toggleEditReleaseModal();
|
|
1255
1263
|
};
|
|
1256
1264
|
const handleDeleteRelease = async () => {
|
|
1257
1265
|
const response = await deleteRelease({
|
|
@@ -1259,7 +1267,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1259
1267
|
});
|
|
1260
1268
|
if ("data" in response) {
|
|
1261
1269
|
navigate("..");
|
|
1262
|
-
} else if (
|
|
1270
|
+
} else if (isFetchError(response.error)) {
|
|
1263
1271
|
toggleNotification({
|
|
1264
1272
|
type: "danger",
|
|
1265
1273
|
message: formatAPIError(response.error)
|
|
@@ -1278,9 +1286,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1278
1286
|
toggleWarningSubmit,
|
|
1279
1287
|
children: [
|
|
1280
1288
|
/* @__PURE__ */ jsx(ReleaseDetailsBody, { releaseId }),
|
|
1281
|
-
|
|
1289
|
+
/* @__PURE__ */ jsx(
|
|
1282
1290
|
ReleaseModal,
|
|
1283
1291
|
{
|
|
1292
|
+
open: releaseModalShown,
|
|
1284
1293
|
handleClose: toggleEditReleaseModal,
|
|
1285
1294
|
handleSubmit: handleEditRelease,
|
|
1286
1295
|
isLoading: isLoadingDetails || isSubmittingForm,
|
|
@@ -1294,18 +1303,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1294
1303
|
}
|
|
1295
1304
|
}
|
|
1296
1305
|
),
|
|
1297
|
-
/* @__PURE__ */ jsx(
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
onClose: toggleWarningSubmit,
|
|
1302
|
-
onConfirm: handleDeleteRelease,
|
|
1303
|
-
children: formatMessage({
|
|
1304
|
-
id: "content-releases.dialog.confirmation-message",
|
|
1305
|
-
defaultMessage: "Are you sure you want to delete this release?"
|
|
1306
|
-
})
|
|
1307
|
-
}
|
|
1308
|
-
)
|
|
1306
|
+
/* @__PURE__ */ jsx(Dialog.Root, { open: showWarningSubmit, onOpenChange: toggleWarningSubmit, children: /* @__PURE__ */ jsx(ConfirmDialog, { onConfirm: handleDeleteRelease, children: formatMessage({
|
|
1307
|
+
id: "content-releases.dialog.confirmation-message",
|
|
1308
|
+
defaultMessage: "Are you sure you want to delete this release?"
|
|
1309
|
+
}) }) })
|
|
1309
1310
|
]
|
|
1310
1311
|
}
|
|
1311
1312
|
);
|
|
@@ -1319,4 +1320,4 @@ const App = () => {
|
|
|
1319
1320
|
export {
|
|
1320
1321
|
App
|
|
1321
1322
|
};
|
|
1322
|
-
//# sourceMappingURL=App-
|
|
1323
|
+
//# sourceMappingURL=App-B2R2exNT.mjs.map
|