@strapi/content-releases 5.0.0-beta.1 → 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-X01LBg5V.mjs → App-B2R2exNT.mjs} +245 -251
- package/dist/_chunks/App-B2R2exNT.mjs.map +1 -0
- package/dist/_chunks/{App-1LckaIGY.js → App-CEwOQkKT.js} +253 -260
- 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-cYWov2wa.js → index-BrWv-zV4.js} +167 -192
- package/dist/_chunks/index-BrWv-zV4.js.map +1 -0
- package/dist/_chunks/{index-OD9AlD-6.mjs → index-DbmynICx.mjs} +168 -191
- 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 +44 -308
- package/dist/admin/src/utils/api.d.ts +6 -0
- package/dist/server/index.js +93 -32
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +93 -32
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts +1 -1
- 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/destroy.d.ts +1 -1
- package/dist/server/src/destroy.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +9 -8
- 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 +1 -1
- 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 +4 -4
- package/dist/server/src/services/release.d.ts +3 -3
- package/dist/server/src/services/release.d.ts.map +1 -1
- package/dist/server/src/services/scheduling.d.ts +1 -1
- package/dist/server/src/services/scheduling.d.ts.map +1 -1
- package/dist/server/src/services/validation.d.ts +1 -1
- package/dist/server/src/services/validation.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +9 -9
- package/dist/server/src/utils/index.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/package.json +18 -18
- package/dist/_chunks/App-1LckaIGY.js.map +0 -1
- package/dist/_chunks/App-X01LBg5V.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-OD9AlD-6.mjs.map +0 -1
- package/dist/_chunks/index-cYWov2wa.js.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)
|
|
@@ -751,7 +743,7 @@ const ReleaseDetailsLayout = ({
|
|
|
751
743
|
if (isLoadingDetails) {
|
|
752
744
|
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
753
745
|
}
|
|
754
|
-
if (
|
|
746
|
+
if (isBaseQueryError(error) && "code" in error || !release) {
|
|
755
747
|
return /* @__PURE__ */ jsx(
|
|
756
748
|
Navigate,
|
|
757
749
|
{
|
|
@@ -759,6 +751,7 @@ const ReleaseDetailsLayout = ({
|
|
|
759
751
|
state: {
|
|
760
752
|
errors: [
|
|
761
753
|
{
|
|
754
|
+
// @ts-expect-error – TODO: fix this weird error flow
|
|
762
755
|
code: error?.code
|
|
763
756
|
}
|
|
764
757
|
]
|
|
@@ -798,7 +791,7 @@ const ReleaseDetailsLayout = ({
|
|
|
798
791
|
) : "";
|
|
799
792
|
return /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoadingDetails, children: [
|
|
800
793
|
/* @__PURE__ */ jsx(
|
|
801
|
-
|
|
794
|
+
Layouts.Header,
|
|
802
795
|
{
|
|
803
796
|
title: release.name,
|
|
804
797
|
subtitle: /* @__PURE__ */ jsxs(Flex, { gap: 2, lineHeight: 6, children: [
|
|
@@ -811,18 +804,17 @@ const ReleaseDetailsLayout = ({
|
|
|
811
804
|
/* @__PURE__ */ jsx(
|
|
812
805
|
Menu.Trigger,
|
|
813
806
|
{
|
|
814
|
-
as: IconButton,
|
|
815
807
|
paddingLeft: 2,
|
|
816
808
|
paddingRight: 2,
|
|
817
809
|
"aria-label": formatMessage({
|
|
818
810
|
id: "content-releases.header.actions.open-release-actions",
|
|
819
811
|
defaultMessage: "Release edit and delete menu"
|
|
820
812
|
}),
|
|
821
|
-
|
|
822
|
-
|
|
813
|
+
variant: "tertiary",
|
|
814
|
+
children: /* @__PURE__ */ jsx(More, {})
|
|
823
815
|
}
|
|
824
816
|
),
|
|
825
|
-
/* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children: [
|
|
817
|
+
/* @__PURE__ */ jsxs(Menu.Content, { top: 1, popoverPlacement: "bottom-end", maxHeight: void 0, children: [
|
|
826
818
|
/* @__PURE__ */ jsxs(
|
|
827
819
|
Flex,
|
|
828
820
|
{
|
|
@@ -844,7 +836,7 @@ const ReleaseDetailsLayout = ({
|
|
|
844
836
|
{
|
|
845
837
|
disabled: !canDelete,
|
|
846
838
|
onSelect: toggleWarningSubmit,
|
|
847
|
-
variant: "danger",
|
|
839
|
+
$variant: "danger",
|
|
848
840
|
children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
|
|
849
841
|
/* @__PURE__ */ jsx(TrashIcon, {}),
|
|
850
842
|
/* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
|
|
@@ -871,7 +863,7 @@ const ReleaseDetailsLayout = ({
|
|
|
871
863
|
defaultMessage: "Created"
|
|
872
864
|
}) }),
|
|
873
865
|
/* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
|
|
874
|
-
/* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(release.createdAt) }),
|
|
866
|
+
/* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
|
|
875
867
|
formatMessage(
|
|
876
868
|
{
|
|
877
869
|
id: "content-releases.header.actions.created.description",
|
|
@@ -910,6 +902,7 @@ const ReleaseDetailsLayout = ({
|
|
|
910
902
|
] });
|
|
911
903
|
};
|
|
912
904
|
const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
|
|
905
|
+
const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
|
|
913
906
|
const getGroupByOptionLabel = (value) => {
|
|
914
907
|
if (value === "locale") {
|
|
915
908
|
return {
|
|
@@ -936,12 +929,25 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
936
929
|
const {
|
|
937
930
|
data: releaseData,
|
|
938
931
|
isLoading: isReleaseLoading,
|
|
939
|
-
isError: isReleaseError,
|
|
940
932
|
error: releaseError
|
|
941
933
|
} = useGetReleaseQuery({ id: releaseId });
|
|
942
934
|
const {
|
|
943
935
|
allowedActions: { canUpdate }
|
|
944
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
|
+
);
|
|
945
951
|
const release = releaseData?.data;
|
|
946
952
|
const selectedGroupBy = query?.groupBy || "contentType";
|
|
947
953
|
const {
|
|
@@ -970,7 +976,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
970
976
|
// We are passing the action path to found the position in the cache of the action for optimistic updates
|
|
971
977
|
});
|
|
972
978
|
if ("error" in response) {
|
|
973
|
-
if (
|
|
979
|
+
if (isFetchError(response.error)) {
|
|
974
980
|
toggleNotification({
|
|
975
981
|
type: "danger",
|
|
976
982
|
message: formatAPIError(response.error)
|
|
@@ -990,14 +996,14 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
990
996
|
const releaseMeta = data?.meta;
|
|
991
997
|
const contentTypes = releaseMeta?.contentTypes || {};
|
|
992
998
|
const components = releaseMeta?.components || {};
|
|
993
|
-
if (
|
|
999
|
+
if (isBaseQueryError(releaseError) || !release) {
|
|
994
1000
|
const errorsArray = [];
|
|
995
|
-
if (releaseError) {
|
|
1001
|
+
if (releaseError && "code" in releaseError) {
|
|
996
1002
|
errorsArray.push({
|
|
997
1003
|
code: releaseError.code
|
|
998
1004
|
});
|
|
999
1005
|
}
|
|
1000
|
-
if (releaseActionsError) {
|
|
1006
|
+
if (releaseActionsError && "code" in releaseActionsError) {
|
|
1001
1007
|
errorsArray.push({
|
|
1002
1008
|
code: releaseActionsError.code
|
|
1003
1009
|
});
|
|
@@ -1016,13 +1022,13 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1016
1022
|
return /* @__PURE__ */ jsx(Page.Error, {});
|
|
1017
1023
|
}
|
|
1018
1024
|
if (Object.keys(releaseActions).length === 0) {
|
|
1019
|
-
return /* @__PURE__ */ jsx(
|
|
1025
|
+
return /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsx(
|
|
1020
1026
|
EmptyStateLayout,
|
|
1021
1027
|
{
|
|
1022
1028
|
action: /* @__PURE__ */ jsx(
|
|
1023
1029
|
LinkButton,
|
|
1024
1030
|
{
|
|
1025
|
-
|
|
1031
|
+
tag: Link$1,
|
|
1026
1032
|
to: {
|
|
1027
1033
|
pathname: "/content-manager"
|
|
1028
1034
|
},
|
|
@@ -1034,7 +1040,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1034
1040
|
})
|
|
1035
1041
|
}
|
|
1036
1042
|
),
|
|
1037
|
-
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "
|
|
1043
|
+
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" }),
|
|
1038
1044
|
content: formatMessage({
|
|
1039
1045
|
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1040
1046
|
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
@@ -1047,6 +1053,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1047
1053
|
defaultMessage: "Group by"
|
|
1048
1054
|
});
|
|
1049
1055
|
const headers = [
|
|
1056
|
+
// ...displayedHeaders,
|
|
1050
1057
|
{
|
|
1051
1058
|
label: formatMessage({
|
|
1052
1059
|
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
@@ -1054,13 +1061,6 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1054
1061
|
}),
|
|
1055
1062
|
name: "name"
|
|
1056
1063
|
},
|
|
1057
|
-
{
|
|
1058
|
-
label: formatMessage({
|
|
1059
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1060
|
-
defaultMessage: "locale"
|
|
1061
|
-
}),
|
|
1062
|
-
name: "locale"
|
|
1063
|
-
},
|
|
1064
1064
|
{
|
|
1065
1065
|
label: formatMessage({
|
|
1066
1066
|
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
@@ -1085,7 +1085,8 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1085
1085
|
}
|
|
1086
1086
|
] : []
|
|
1087
1087
|
];
|
|
1088
|
-
|
|
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: [
|
|
1089
1090
|
/* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
|
|
1090
1091
|
SingleSelect,
|
|
1091
1092
|
{
|
|
@@ -1102,7 +1103,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1102
1103
|
),
|
|
1103
1104
|
value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
|
|
1104
1105
|
onChange: (value) => setQuery({ groupBy: value }),
|
|
1105
|
-
children:
|
|
1106
|
+
children: options.map((option) => /* @__PURE__ */ jsx(SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
|
|
1106
1107
|
}
|
|
1107
1108
|
) }),
|
|
1108
1109
|
Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxs(Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
|
|
@@ -1122,7 +1123,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1122
1123
|
/* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
|
|
1123
1124
|
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1124
1125
|
/* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
1125
|
-
/* @__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 : "-"}` }) }),
|
|
1126
1127
|
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
|
|
1127
1128
|
/* @__PURE__ */ jsx(Td, { width: "20%", children: release.releasedAt ? /* @__PURE__ */ jsx(Typography, { children: formatMessage(
|
|
1128
1129
|
{
|
|
@@ -1230,7 +1231,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1230
1231
|
const title = releaseData?.name || "";
|
|
1231
1232
|
const timezone = releaseData?.timezone ?? null;
|
|
1232
1233
|
const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
|
|
1233
|
-
const date = scheduledAt ?
|
|
1234
|
+
const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") : void 0;
|
|
1234
1235
|
const time = scheduledAt ? format(scheduledAt, "HH:mm") : "";
|
|
1235
1236
|
const handleEditRelease = async (values) => {
|
|
1236
1237
|
const response = await updateRelease({
|
|
@@ -1247,7 +1248,8 @@ const ReleaseDetailsPage = () => {
|
|
|
1247
1248
|
defaultMessage: "Release updated."
|
|
1248
1249
|
})
|
|
1249
1250
|
});
|
|
1250
|
-
|
|
1251
|
+
toggleEditReleaseModal();
|
|
1252
|
+
} else if (isFetchError(response.error)) {
|
|
1251
1253
|
toggleNotification({
|
|
1252
1254
|
type: "danger",
|
|
1253
1255
|
message: formatAPIError(response.error)
|
|
@@ -1258,7 +1260,6 @@ const ReleaseDetailsPage = () => {
|
|
|
1258
1260
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1259
1261
|
});
|
|
1260
1262
|
}
|
|
1261
|
-
toggleEditReleaseModal();
|
|
1262
1263
|
};
|
|
1263
1264
|
const handleDeleteRelease = async () => {
|
|
1264
1265
|
const response = await deleteRelease({
|
|
@@ -1266,7 +1267,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1266
1267
|
});
|
|
1267
1268
|
if ("data" in response) {
|
|
1268
1269
|
navigate("..");
|
|
1269
|
-
} else if (
|
|
1270
|
+
} else if (isFetchError(response.error)) {
|
|
1270
1271
|
toggleNotification({
|
|
1271
1272
|
type: "danger",
|
|
1272
1273
|
message: formatAPIError(response.error)
|
|
@@ -1285,9 +1286,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1285
1286
|
toggleWarningSubmit,
|
|
1286
1287
|
children: [
|
|
1287
1288
|
/* @__PURE__ */ jsx(ReleaseDetailsBody, { releaseId }),
|
|
1288
|
-
|
|
1289
|
+
/* @__PURE__ */ jsx(
|
|
1289
1290
|
ReleaseModal,
|
|
1290
1291
|
{
|
|
1292
|
+
open: releaseModalShown,
|
|
1291
1293
|
handleClose: toggleEditReleaseModal,
|
|
1292
1294
|
handleSubmit: handleEditRelease,
|
|
1293
1295
|
isLoading: isLoadingDetails || isSubmittingForm,
|
|
@@ -1301,18 +1303,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1301
1303
|
}
|
|
1302
1304
|
}
|
|
1303
1305
|
),
|
|
1304
|
-
/* @__PURE__ */ jsx(
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
onClose: toggleWarningSubmit,
|
|
1309
|
-
onConfirm: handleDeleteRelease,
|
|
1310
|
-
children: formatMessage({
|
|
1311
|
-
id: "content-releases.dialog.confirmation-message",
|
|
1312
|
-
defaultMessage: "Are you sure you want to delete this release?"
|
|
1313
|
-
})
|
|
1314
|
-
}
|
|
1315
|
-
)
|
|
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
|
+
}) }) })
|
|
1316
1310
|
]
|
|
1317
1311
|
}
|
|
1318
1312
|
);
|
|
@@ -1326,4 +1320,4 @@ const App = () => {
|
|
|
1326
1320
|
export {
|
|
1327
1321
|
App
|
|
1328
1322
|
};
|
|
1329
|
-
//# sourceMappingURL=App-
|
|
1323
|
+
//# sourceMappingURL=App-B2R2exNT.mjs.map
|