@strapi/content-releases 0.0.0-experimental.d954d57341a6623992a0d211daaec8e245c3517d → 0.0.0-experimental.da85533897155e719d784f0271223c866d2f69ab
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-Do-Rnv0A.mjs → App-B4mkcLmw.mjs} +296 -263
- package/dist/_chunks/App-B4mkcLmw.mjs.map +1 -0
- package/dist/_chunks/{App-CqbuK4M6.js → App-DpoC8s97.js} +293 -261
- package/dist/_chunks/App-DpoC8s97.js.map +1 -0
- package/dist/_chunks/ReleasesSettingsPage-B89WWWJf.js +178 -0
- package/dist/_chunks/ReleasesSettingsPage-B89WWWJf.js.map +1 -0
- package/dist/_chunks/ReleasesSettingsPage-DfL6yxLG.mjs +178 -0
- package/dist/_chunks/ReleasesSettingsPage-DfL6yxLG.mjs.map +1 -0
- package/dist/_chunks/{en-DtFJ5ViE.js → en-CmYoEnA7.js} +9 -2
- package/dist/_chunks/en-CmYoEnA7.js.map +1 -0
- package/dist/_chunks/{en-B9Ur3VsE.mjs → en-D0yVZFqf.mjs} +9 -2
- package/dist/_chunks/en-D0yVZFqf.mjs.map +1 -0
- package/dist/_chunks/{index-D_pgdqQL.mjs → index-B3cqcIza.mjs} +780 -448
- package/dist/_chunks/index-B3cqcIza.mjs.map +1 -0
- package/dist/_chunks/{index-Tedsw4GC.js → index-sGcuP2hw.js} +763 -431
- package/dist/_chunks/index-sGcuP2hw.js.map +1 -0
- package/dist/_chunks/schemas-63pFihNF.mjs +44 -0
- package/dist/_chunks/schemas-63pFihNF.mjs.map +1 -0
- package/dist/_chunks/schemas-z5zp-_Gd.js +62 -0
- package/dist/_chunks/schemas-z5zp-_Gd.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +2 -2
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +2 -2
- package/dist/admin/src/components/{CMReleasesContainer.d.ts → ReleaseActionModal.d.ts} +3 -1
- package/dist/admin/src/components/ReleaseListCell.d.ts +28 -0
- package/dist/admin/src/components/ReleasesPanel.d.ts +3 -0
- package/dist/admin/src/constants.d.ts +18 -0
- package/dist/admin/src/modules/hooks.d.ts +7 -0
- package/dist/admin/src/pages/ReleasesSettingsPage.d.ts +1 -0
- package/dist/admin/src/services/release.d.ts +43 -36
- package/dist/admin/src/utils/time.d.ts +9 -0
- package/dist/admin/src/validation/schemas.d.ts +6 -0
- package/dist/server/index.js +796 -623
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +797 -624
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/constants.d.ts +11 -2
- package/dist/server/src/constants.d.ts.map +1 -1
- package/dist/server/src/content-types/index.d.ts +3 -5
- package/dist/server/src/content-types/index.d.ts.map +1 -1
- package/dist/server/src/content-types/release-action/index.d.ts +3 -5
- package/dist/server/src/content-types/release-action/index.d.ts.map +1 -1
- package/dist/server/src/content-types/release-action/schema.d.ts +3 -5
- package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +6 -1
- 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 +7 -1
- package/dist/server/src/controllers/release.d.ts.map +1 -1
- package/dist/server/src/controllers/settings.d.ts +11 -0
- package/dist/server/src/controllers/settings.d.ts.map +1 -0
- package/dist/server/src/controllers/validation/release-action.d.ts +7 -1
- package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/release.d.ts +2 -0
- package/dist/server/src/controllers/validation/release.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/settings.d.ts +3 -0
- package/dist/server/src/controllers/validation/settings.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +66 -49
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/documents.d.ts +6 -0
- package/dist/server/src/middlewares/documents.d.ts.map +1 -0
- package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts +9 -0
- package/dist/server/src/migrations/database/5.0.0-document-id-in-actions.d.ts.map +1 -0
- package/dist/server/src/migrations/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts +16 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/routes/release.d.ts.map +1 -1
- package/dist/server/src/routes/settings.d.ts +18 -0
- package/dist/server/src/routes/settings.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +38 -38
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/release-action.d.ts +36 -0
- package/dist/server/src/services/release-action.d.ts.map +1 -0
- package/dist/server/src/services/release.d.ts +6 -41
- package/dist/server/src/services/release.d.ts.map +1 -1
- package/dist/server/src/services/settings.d.ts +13 -0
- package/dist/server/src/services/settings.d.ts.map +1 -0
- 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 +29 -8
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/release-actions.d.ts +9 -10
- package/dist/shared/contracts/release-actions.d.ts.map +1 -1
- package/dist/shared/contracts/releases.d.ts +9 -7
- package/dist/shared/contracts/releases.d.ts.map +1 -1
- package/dist/shared/contracts/settings.d.ts +39 -0
- package/dist/shared/contracts/settings.d.ts.map +1 -0
- package/package.json +10 -9
- package/dist/_chunks/App-CqbuK4M6.js.map +0 -1
- package/dist/_chunks/App-Do-Rnv0A.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/shared/validation-schemas.d.ts +0 -2
- package/dist/shared/validation-schemas.d.ts.map +0 -1
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useNotification, useAPIErrorHandler, useQueryParams, useTracking, useRBAC, Page, Layouts, Pagination, isFetchError, ConfirmDialog, BackButton, useStrapiApp, Table } from "@strapi/admin/strapi-admin";
|
|
3
3
|
import { useLocation, useNavigate, NavLink, useParams, Navigate, Link as Link$1, Routes, Route } from "react-router-dom";
|
|
4
|
-
import { g as
|
|
4
|
+
import { g as getTimezones, p as pluginId, u as useGetReleasesQuery, a as useGetReleaseSettingsQuery, b as useCreateReleaseMutation, P as PERMISSIONS, c as useGetReleaseQuery, d as useUpdateReleaseMutation, e as useDeleteReleaseMutation, f as usePublishReleaseMutation, h as getTimezoneOffset, i as useGetReleaseActionsQuery, j as useUpdateReleaseActionMutation, R as ReleaseActionOptions, k as ReleaseActionMenu, r as releaseApi } from "./index-B3cqcIza.mjs";
|
|
5
5
|
import * as React from "react";
|
|
6
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,
|
|
8
|
-
import { Plus, Pencil, Trash, More, CrossCircle, CheckCircle } from "@strapi/icons";
|
|
7
|
+
import { Modal, Flex, Field, TextInput, Box, Checkbox, Typography, DatePicker, TimePicker, Button, Combobox, ComboboxOption, Link, Alert, Main, Tabs, Divider, EmptyStateLayout, Grid, Badge, MenuItem, SimpleMenu, Dialog, LinkButton, SingleSelect, SingleSelectOption, Tr, Td, Tooltip } from "@strapi/design-system";
|
|
8
|
+
import { Plus, Pencil, Trash, More, CrossCircle, CheckCircle, ArrowsCounterClockwise } from "@strapi/icons";
|
|
9
9
|
import { EmptyDocuments } from "@strapi/icons/symbols";
|
|
10
|
-
import format from "date-fns/format";
|
|
10
|
+
import format$1 from "date-fns/format";
|
|
11
11
|
import { utcToZonedTime, zonedTimeToUtc } from "date-fns-tz";
|
|
12
12
|
import { useIntl } from "react-intl";
|
|
13
13
|
import { styled } from "styled-components";
|
|
14
|
-
import { intervalToDuration, isPast, formatISO } from "date-fns";
|
|
14
|
+
import { intervalToDuration, isPast, formatISO, format } from "date-fns";
|
|
15
15
|
import { Formik, Form, useFormikContext } from "formik";
|
|
16
|
-
import
|
|
16
|
+
import { R as RELEASE_SCHEMA } from "./schemas-63pFihNF.mjs";
|
|
17
17
|
import { useDispatch } from "react-redux";
|
|
18
18
|
import { useLicenseLimits } from "@strapi/admin/strapi-admin/ee";
|
|
19
19
|
const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
|
|
@@ -46,26 +46,6 @@ const RelativeTime$1 = React.forwardRef(
|
|
|
46
46
|
);
|
|
47
47
|
}
|
|
48
48
|
);
|
|
49
|
-
const RELEASE_SCHEMA = yup.object().shape({
|
|
50
|
-
name: yup.string().trim().required(),
|
|
51
|
-
scheduledAt: yup.string().nullable(),
|
|
52
|
-
isScheduled: yup.boolean().optional(),
|
|
53
|
-
time: yup.string().when("isScheduled", {
|
|
54
|
-
is: true,
|
|
55
|
-
then: yup.string().trim().required(),
|
|
56
|
-
otherwise: yup.string().nullable()
|
|
57
|
-
}),
|
|
58
|
-
timezone: yup.string().when("isScheduled", {
|
|
59
|
-
is: true,
|
|
60
|
-
then: yup.string().required().nullable(),
|
|
61
|
-
otherwise: yup.string().nullable()
|
|
62
|
-
}),
|
|
63
|
-
date: yup.string().when("isScheduled", {
|
|
64
|
-
is: true,
|
|
65
|
-
then: yup.string().required().nullable(),
|
|
66
|
-
otherwise: yup.string().nullable()
|
|
67
|
-
})
|
|
68
|
-
}).required().noUnknown();
|
|
69
49
|
const ReleaseModal = ({
|
|
70
50
|
handleClose,
|
|
71
51
|
open,
|
|
@@ -119,14 +99,22 @@ const ReleaseModal = ({
|
|
|
119
99
|
children: ({ values, errors, handleChange, setFieldValue }) => {
|
|
120
100
|
return /* @__PURE__ */ jsxs(Form, { children: [
|
|
121
101
|
/* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
|
|
122
|
-
/* @__PURE__ */ jsxs(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
102
|
+
/* @__PURE__ */ jsxs(
|
|
103
|
+
Field.Root,
|
|
104
|
+
{
|
|
105
|
+
name: "name",
|
|
106
|
+
error: errors.name && formatMessage({ id: errors.name, defaultMessage: errors.name }),
|
|
107
|
+
required: true,
|
|
108
|
+
children: [
|
|
109
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
110
|
+
id: "content-releases.modal.form.input.label.release-name",
|
|
111
|
+
defaultMessage: "Name"
|
|
112
|
+
}) }),
|
|
113
|
+
/* @__PURE__ */ jsx(TextInput, { value: values.name, onChange: handleChange }),
|
|
114
|
+
/* @__PURE__ */ jsx(Field.Error, {})
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
),
|
|
130
118
|
/* @__PURE__ */ jsx(Box, { width: "max-content", children: /* @__PURE__ */ jsx(
|
|
131
119
|
Checkbox,
|
|
132
120
|
{
|
|
@@ -162,54 +150,70 @@ const ReleaseModal = ({
|
|
|
162
150
|
) }),
|
|
163
151
|
values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
164
152
|
/* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
|
|
165
|
-
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsxs(
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
153
|
+
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsxs(
|
|
154
|
+
Field.Root,
|
|
155
|
+
{
|
|
156
|
+
name: "date",
|
|
157
|
+
error: errors.date && formatMessage({ id: errors.date, defaultMessage: errors.date }),
|
|
158
|
+
required: true,
|
|
159
|
+
children: [
|
|
160
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
161
|
+
id: "content-releases.modal.form.input.label.date",
|
|
162
|
+
defaultMessage: "Date"
|
|
163
|
+
}) }),
|
|
164
|
+
/* @__PURE__ */ jsx(
|
|
165
|
+
DatePicker,
|
|
166
|
+
{
|
|
167
|
+
onChange: (date) => {
|
|
168
|
+
const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
|
|
169
|
+
setFieldValue("date", isoFormatDate);
|
|
170
|
+
},
|
|
171
|
+
clearLabel: formatMessage({
|
|
172
|
+
id: "content-releases.modal.form.input.clearLabel",
|
|
173
|
+
defaultMessage: "Clear"
|
|
174
|
+
}),
|
|
175
|
+
onClear: () => {
|
|
176
|
+
setFieldValue("date", null);
|
|
177
|
+
},
|
|
178
|
+
value: values.date ? new Date(values.date) : /* @__PURE__ */ new Date(),
|
|
179
|
+
minDate: utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
|
|
180
|
+
}
|
|
181
|
+
),
|
|
182
|
+
/* @__PURE__ */ jsx(Field.Error, {})
|
|
183
|
+
]
|
|
184
|
+
}
|
|
185
|
+
) }),
|
|
186
|
+
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsxs(
|
|
187
|
+
Field.Root,
|
|
188
|
+
{
|
|
189
|
+
name: "time",
|
|
190
|
+
error: errors.time && formatMessage({ id: errors.time, defaultMessage: errors.time }),
|
|
191
|
+
required: true,
|
|
192
|
+
children: [
|
|
193
|
+
/* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
|
|
194
|
+
id: "content-releases.modal.form.input.label.time",
|
|
195
|
+
defaultMessage: "Time"
|
|
196
|
+
}) }),
|
|
197
|
+
/* @__PURE__ */ jsx(
|
|
198
|
+
TimePicker,
|
|
199
|
+
{
|
|
200
|
+
onChange: (time) => {
|
|
201
|
+
setFieldValue("time", time);
|
|
202
|
+
},
|
|
203
|
+
clearLabel: formatMessage({
|
|
204
|
+
id: "content-releases.modal.form.input.clearLabel",
|
|
205
|
+
defaultMessage: "Clear"
|
|
206
|
+
}),
|
|
207
|
+
onClear: () => {
|
|
208
|
+
setFieldValue("time", "");
|
|
209
|
+
},
|
|
210
|
+
value: values.time || void 0
|
|
211
|
+
}
|
|
212
|
+
),
|
|
213
|
+
/* @__PURE__ */ jsx(Field.Error, {})
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
) })
|
|
213
217
|
] }),
|
|
214
218
|
/* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
|
|
215
219
|
] })
|
|
@@ -230,16 +234,6 @@ const ReleaseModal = ({
|
|
|
230
234
|
)
|
|
231
235
|
] }) });
|
|
232
236
|
};
|
|
233
|
-
const getTimezones = (selectedDate) => {
|
|
234
|
-
const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
|
|
235
|
-
const utcOffset = getTimezoneOffset(timezone, selectedDate);
|
|
236
|
-
return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
|
|
237
|
-
});
|
|
238
|
-
const systemTimezone = timezoneList.find(
|
|
239
|
-
(timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
240
|
-
);
|
|
241
|
-
return { timezoneList, systemTimezone };
|
|
242
|
-
};
|
|
243
237
|
const TimezoneComponent = ({ timezoneOptions }) => {
|
|
244
238
|
const { values, errors, setFieldValue } = useFormikContext();
|
|
245
239
|
const { formatMessage } = useIntl();
|
|
@@ -254,31 +248,39 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
254
248
|
}
|
|
255
249
|
}
|
|
256
250
|
}, [setFieldValue, values.date, values.timezone]);
|
|
257
|
-
return /* @__PURE__ */ jsxs(
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
251
|
+
return /* @__PURE__ */ jsxs(
|
|
252
|
+
Field.Root,
|
|
253
|
+
{
|
|
254
|
+
name: "timezone",
|
|
255
|
+
error: errors.timezone && formatMessage({ id: errors.timezone, defaultMessage: errors.timezone }),
|
|
256
|
+
required: true,
|
|
257
|
+
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
|
+
]
|
|
282
|
+
}
|
|
283
|
+
);
|
|
282
284
|
};
|
|
283
285
|
const useTypedDispatch = useDispatch;
|
|
284
286
|
const isBaseQueryError = (error) => {
|
|
@@ -340,7 +342,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
340
342
|
}
|
|
341
343
|
);
|
|
342
344
|
}
|
|
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(
|
|
345
|
+
return /* @__PURE__ */ jsx(Grid.Root, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsx(Grid.Item, { col: 3, s: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsx(LinkCard, { tag: NavLink, to: `${id}`, isExternal: false, children: /* @__PURE__ */ jsxs(
|
|
344
346
|
Flex,
|
|
345
347
|
{
|
|
346
348
|
direction: "column",
|
|
@@ -376,7 +378,7 @@ const StyledAlert = styled(Alert)`
|
|
|
376
378
|
`;
|
|
377
379
|
const INITIAL_FORM_VALUES = {
|
|
378
380
|
name: "",
|
|
379
|
-
date:
|
|
381
|
+
date: format(/* @__PURE__ */ new Date(), "yyyy-MM-dd"),
|
|
380
382
|
time: "",
|
|
381
383
|
isScheduled: true,
|
|
382
384
|
scheduledAt: null,
|
|
@@ -391,6 +393,7 @@ const ReleasesPage = () => {
|
|
|
391
393
|
const { formatAPIError } = useAPIErrorHandler();
|
|
392
394
|
const [{ query }, setQuery] = useQueryParams();
|
|
393
395
|
const response = useGetReleasesQuery(query);
|
|
396
|
+
const { data, isLoading: isLoadingSettings } = useGetReleaseSettingsQuery();
|
|
394
397
|
const [createRelease, { isLoading: isSubmittingForm }] = useCreateReleaseMutation();
|
|
395
398
|
const { getFeature } = useLicenseLimits();
|
|
396
399
|
const { maximumReleases = 3 } = getFeature("cms-content-releases");
|
|
@@ -398,7 +401,7 @@ const ReleasesPage = () => {
|
|
|
398
401
|
const {
|
|
399
402
|
allowedActions: { canCreate }
|
|
400
403
|
} = useRBAC(PERMISSIONS);
|
|
401
|
-
const { isLoading, isSuccess, isError } = response;
|
|
404
|
+
const { isLoading: isLoadingReleases, isSuccess, isError } = response;
|
|
402
405
|
const activeTab = response?.currentData?.meta?.activeTab || "pending";
|
|
403
406
|
React.useEffect(() => {
|
|
404
407
|
if (location?.state?.errors) {
|
|
@@ -419,7 +422,7 @@ const ReleasesPage = () => {
|
|
|
419
422
|
const toggleAddReleaseModal = () => {
|
|
420
423
|
setReleaseModalShown((prev) => !prev);
|
|
421
424
|
};
|
|
422
|
-
if (
|
|
425
|
+
if (isLoadingReleases || isLoadingSettings) {
|
|
423
426
|
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
424
427
|
}
|
|
425
428
|
const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
|
|
@@ -431,7 +434,7 @@ const ReleasesPage = () => {
|
|
|
431
434
|
pageSize: response?.currentData?.meta?.pagination?.pageSize || 16,
|
|
432
435
|
filters: {
|
|
433
436
|
releasedAt: {
|
|
434
|
-
$notNull: tabValue
|
|
437
|
+
$notNull: tabValue !== "pending"
|
|
435
438
|
}
|
|
436
439
|
}
|
|
437
440
|
});
|
|
@@ -464,7 +467,7 @@ const ReleasesPage = () => {
|
|
|
464
467
|
});
|
|
465
468
|
}
|
|
466
469
|
};
|
|
467
|
-
return /* @__PURE__ */ jsxs(Main, { "aria-busy":
|
|
470
|
+
return /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoadingReleases || isLoadingSettings, children: [
|
|
468
471
|
/* @__PURE__ */ jsx(
|
|
469
472
|
Layouts.Header,
|
|
470
473
|
{
|
|
@@ -579,7 +582,10 @@ const ReleasesPage = () => {
|
|
|
579
582
|
handleClose: toggleAddReleaseModal,
|
|
580
583
|
handleSubmit: handleAddRelease,
|
|
581
584
|
isLoading: isSubmittingForm,
|
|
582
|
-
initialValues:
|
|
585
|
+
initialValues: {
|
|
586
|
+
...INITIAL_FORM_VALUES,
|
|
587
|
+
timezone: data?.data.defaultTimezone ? data.data.defaultTimezone.split("&")[1] : null
|
|
588
|
+
}
|
|
583
589
|
}
|
|
584
590
|
)
|
|
585
591
|
] });
|
|
@@ -590,7 +596,7 @@ const ReleaseInfoWrapper = styled(Flex)`
|
|
|
590
596
|
border-bottom-left-radius: ${({ theme }) => theme.borderRadius};
|
|
591
597
|
border-top: 1px solid ${({ theme }) => theme.colors.neutral150};
|
|
592
598
|
`;
|
|
593
|
-
const StyledMenuItem = styled(
|
|
599
|
+
const StyledMenuItem = styled(MenuItem)`
|
|
594
600
|
svg path {
|
|
595
601
|
fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};
|
|
596
602
|
}
|
|
@@ -619,42 +625,72 @@ const TrashIcon = styled(Trash)`
|
|
|
619
625
|
const TypographyMaxWidth = styled(Typography)`
|
|
620
626
|
max-width: 300px;
|
|
621
627
|
`;
|
|
622
|
-
const EntryValidationText = ({ action, schema, entry }) => {
|
|
628
|
+
const EntryValidationText = ({ action, schema, entry, status }) => {
|
|
623
629
|
const { formatMessage } = useIntl();
|
|
624
|
-
const { validate } = unstable_useDocument(
|
|
630
|
+
const { validate, isLoading } = unstable_useDocument(
|
|
625
631
|
{
|
|
626
632
|
collectionType: schema?.kind ?? "",
|
|
627
633
|
model: schema?.uid ?? ""
|
|
628
634
|
},
|
|
629
635
|
{
|
|
630
|
-
skip
|
|
636
|
+
// useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request
|
|
637
|
+
skip: true
|
|
631
638
|
}
|
|
632
639
|
);
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
const validationErrorsMessages = Object.entries(errors).map(
|
|
636
|
-
([key, value]) => formatMessage(
|
|
637
|
-
// @ts-expect-error – TODO: fix this will better checks
|
|
638
|
-
{ id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
|
|
639
|
-
{ field: key }
|
|
640
|
-
)
|
|
641
|
-
).join(" ");
|
|
642
|
-
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
643
|
-
/* @__PURE__ */ jsx(CrossCircle, { fill: "danger600" }),
|
|
644
|
-
/* @__PURE__ */ jsx(Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsx(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
|
|
645
|
-
] });
|
|
640
|
+
if (isLoading) {
|
|
641
|
+
return null;
|
|
646
642
|
}
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
643
|
+
const errors = validate(entry) ?? {};
|
|
644
|
+
if (action === "publish") {
|
|
645
|
+
if (Object.keys(errors).length > 0) {
|
|
646
|
+
const validationErrorsMessages = Object.entries(errors).map(
|
|
647
|
+
([key, value]) => formatMessage(
|
|
648
|
+
// @ts-expect-error – TODO: fix this will better checks
|
|
649
|
+
{ id: `${value.id}.withField`, defaultMessage: value.defaultMessage },
|
|
650
|
+
{ field: key }
|
|
651
|
+
)
|
|
652
|
+
).join(" ");
|
|
653
|
+
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
654
|
+
/* @__PURE__ */ jsx(CrossCircle, { fill: "danger600" }),
|
|
655
|
+
/* @__PURE__ */ jsx(Tooltip, { description: validationErrorsMessages, children: /* @__PURE__ */ jsx(
|
|
656
|
+
TypographyMaxWidth,
|
|
657
|
+
{
|
|
658
|
+
textColor: "danger600",
|
|
659
|
+
variant: "omega",
|
|
660
|
+
fontWeight: "semiBold",
|
|
661
|
+
ellipsis: true,
|
|
662
|
+
children: validationErrorsMessages
|
|
663
|
+
}
|
|
664
|
+
) })
|
|
665
|
+
] });
|
|
666
|
+
}
|
|
667
|
+
if (status === "draft") {
|
|
668
|
+
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
669
|
+
/* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
|
|
670
|
+
/* @__PURE__ */ jsx(Typography, { children: formatMessage({
|
|
671
|
+
id: "content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish",
|
|
672
|
+
defaultMessage: "Ready to publish"
|
|
673
|
+
}) })
|
|
674
|
+
] });
|
|
675
|
+
}
|
|
676
|
+
if (status === "modified") {
|
|
677
|
+
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
678
|
+
/* @__PURE__ */ jsx(ArrowsCounterClockwise, { fill: "alternative600" }),
|
|
679
|
+
/* @__PURE__ */ jsx(Typography, { children: formatMessage({
|
|
680
|
+
id: "content-releases.pages.ReleaseDetails.entry-validation.modified",
|
|
681
|
+
defaultMessage: "Ready to publish changes"
|
|
682
|
+
}) })
|
|
683
|
+
] });
|
|
684
|
+
}
|
|
685
|
+
if (status === "published") {
|
|
686
|
+
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
687
|
+
/* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
|
|
688
|
+
/* @__PURE__ */ jsx(Typography, { children: formatMessage({
|
|
689
|
+
id: "content-releases.pages.ReleaseDetails.entry-validation.already-published",
|
|
690
|
+
defaultMessage: "Already published"
|
|
691
|
+
}) })
|
|
692
|
+
] });
|
|
693
|
+
}
|
|
658
694
|
}
|
|
659
695
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
660
696
|
/* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
|
|
@@ -800,83 +836,71 @@ const ReleaseDetailsLayout = ({
|
|
|
800
836
|
] }),
|
|
801
837
|
navigationAction: /* @__PURE__ */ jsx(BackButton, {}),
|
|
802
838
|
primaryAction: !release.releasedAt && /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
803
|
-
/* @__PURE__ */ jsxs(
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
{
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
839
|
+
/* @__PURE__ */ jsxs(
|
|
840
|
+
SimpleMenuButton,
|
|
841
|
+
{
|
|
842
|
+
label: /* @__PURE__ */ jsx(More, {}),
|
|
843
|
+
variant: "tertiary",
|
|
844
|
+
endIcon: null,
|
|
845
|
+
paddingLeft: "7px",
|
|
846
|
+
paddingRight: "7px",
|
|
847
|
+
"aria-label": formatMessage({
|
|
848
|
+
id: "content-releases.header.actions.open-release-actions",
|
|
849
|
+
defaultMessage: "Release edit and delete menu"
|
|
850
|
+
}),
|
|
851
|
+
popoverPlacement: "bottom-end",
|
|
852
|
+
children: [
|
|
853
|
+
/* @__PURE__ */ jsx(StyledMenuItem, { disabled: !canUpdate, onSelect: toggleEditReleaseModal, children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
|
|
854
|
+
/* @__PURE__ */ jsx(PencilIcon, {}),
|
|
855
|
+
/* @__PURE__ */ jsx(Typography, { ellipsis: true, children: formatMessage({
|
|
856
|
+
id: "content-releases.header.actions.edit",
|
|
857
|
+
defaultMessage: "Edit"
|
|
858
|
+
}) })
|
|
859
|
+
] }) }),
|
|
860
|
+
/* @__PURE__ */ jsx(
|
|
861
|
+
StyledMenuItem,
|
|
862
|
+
{
|
|
863
|
+
disabled: !canDelete,
|
|
864
|
+
onSelect: toggleWarningSubmit,
|
|
865
|
+
$variant: "danger",
|
|
866
|
+
children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
|
|
867
|
+
/* @__PURE__ */ jsx(TrashIcon, {}),
|
|
868
|
+
/* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
|
|
869
|
+
id: "content-releases.header.actions.delete",
|
|
870
|
+
defaultMessage: "Delete"
|
|
832
871
|
}) })
|
|
833
|
-
] }) }),
|
|
834
|
-
/* @__PURE__ */ jsx(
|
|
835
|
-
StyledMenuItem,
|
|
836
|
-
{
|
|
837
|
-
disabled: !canDelete,
|
|
838
|
-
onSelect: toggleWarningSubmit,
|
|
839
|
-
$variant: "danger",
|
|
840
|
-
children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
|
|
841
|
-
/* @__PURE__ */ jsx(TrashIcon, {}),
|
|
842
|
-
/* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
|
|
843
|
-
id: "content-releases.header.actions.delete",
|
|
844
|
-
defaultMessage: "Delete"
|
|
845
|
-
}) })
|
|
846
|
-
] })
|
|
847
|
-
}
|
|
848
|
-
)
|
|
849
|
-
]
|
|
850
|
-
}
|
|
851
|
-
),
|
|
852
|
-
/* @__PURE__ */ jsxs(
|
|
853
|
-
ReleaseInfoWrapper,
|
|
854
|
-
{
|
|
855
|
-
direction: "column",
|
|
856
|
-
justifyContent: "center",
|
|
857
|
-
alignItems: "flex-start",
|
|
858
|
-
gap: 1,
|
|
859
|
-
padding: 5,
|
|
860
|
-
children: [
|
|
861
|
-
/* @__PURE__ */ jsx(Typography, { variant: "pi", fontWeight: "bold", children: formatMessage({
|
|
862
|
-
id: "content-releases.header.actions.created",
|
|
863
|
-
defaultMessage: "Created"
|
|
864
|
-
}) }),
|
|
865
|
-
/* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
|
|
866
|
-
/* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
|
|
867
|
-
formatMessage(
|
|
868
|
-
{
|
|
869
|
-
id: "content-releases.header.actions.created.description",
|
|
870
|
-
defaultMessage: "{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}"
|
|
871
|
-
},
|
|
872
|
-
{ createdBy: getCreatedByUser(), hasCreatedByUser }
|
|
873
|
-
)
|
|
874
872
|
] })
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
873
|
+
}
|
|
874
|
+
),
|
|
875
|
+
/* @__PURE__ */ jsxs(
|
|
876
|
+
ReleaseInfoWrapper,
|
|
877
|
+
{
|
|
878
|
+
direction: "column",
|
|
879
|
+
justifyContent: "center",
|
|
880
|
+
alignItems: "flex-start",
|
|
881
|
+
gap: 1,
|
|
882
|
+
padding: 4,
|
|
883
|
+
children: [
|
|
884
|
+
/* @__PURE__ */ jsx(Typography, { variant: "pi", fontWeight: "bold", children: formatMessage({
|
|
885
|
+
id: "content-releases.header.actions.created",
|
|
886
|
+
defaultMessage: "Created"
|
|
887
|
+
}) }),
|
|
888
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
|
|
889
|
+
/* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
|
|
890
|
+
formatMessage(
|
|
891
|
+
{
|
|
892
|
+
id: "content-releases.header.actions.created.description",
|
|
893
|
+
defaultMessage: "{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}"
|
|
894
|
+
},
|
|
895
|
+
{ createdBy: getCreatedByUser(), hasCreatedByUser }
|
|
896
|
+
)
|
|
897
|
+
] })
|
|
898
|
+
]
|
|
899
|
+
}
|
|
900
|
+
)
|
|
901
|
+
]
|
|
902
|
+
}
|
|
903
|
+
),
|
|
880
904
|
/* @__PURE__ */ jsx(Button, { size: "S", variant: "tertiary", onClick: handleRefresh, children: formatMessage({
|
|
881
905
|
id: "content-releases.header.actions.refresh",
|
|
882
906
|
defaultMessage: "Refresh"
|
|
@@ -901,6 +925,11 @@ const ReleaseDetailsLayout = ({
|
|
|
901
925
|
children
|
|
902
926
|
] });
|
|
903
927
|
};
|
|
928
|
+
const SimpleMenuButton = styled(SimpleMenu)`
|
|
929
|
+
& > span {
|
|
930
|
+
display: flex;
|
|
931
|
+
}
|
|
932
|
+
`;
|
|
904
933
|
const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
|
|
905
934
|
const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
|
|
906
935
|
const getGroupByOptionLabel = (value) => {
|
|
@@ -935,19 +964,18 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
935
964
|
allowedActions: { canUpdate }
|
|
936
965
|
} = useRBAC(PERMISSIONS);
|
|
937
966
|
const runHookWaterfall = useStrapiApp("ReleaseDetailsPage", (state) => state.runHookWaterfall);
|
|
938
|
-
const { hasI18nEnabled } = runHookWaterfall(
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
);
|
|
967
|
+
const { displayedHeaders, hasI18nEnabled } = runHookWaterfall("ContentReleases/pages/ReleaseDetails/add-locale-in-releases", {
|
|
968
|
+
displayedHeaders: [
|
|
969
|
+
{
|
|
970
|
+
label: {
|
|
971
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
972
|
+
defaultMessage: "name"
|
|
973
|
+
},
|
|
974
|
+
name: "name"
|
|
975
|
+
}
|
|
976
|
+
],
|
|
977
|
+
hasI18nEnabled: false
|
|
978
|
+
});
|
|
951
979
|
const release = releaseData?.data;
|
|
952
980
|
const selectedGroupBy = query?.groupBy || "contentType";
|
|
953
981
|
const {
|
|
@@ -1053,34 +1081,27 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1053
1081
|
defaultMessage: "Group by"
|
|
1054
1082
|
});
|
|
1055
1083
|
const headers = [
|
|
1056
|
-
|
|
1084
|
+
...displayedHeaders,
|
|
1057
1085
|
{
|
|
1058
|
-
label:
|
|
1059
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1060
|
-
defaultMessage: "name"
|
|
1061
|
-
}),
|
|
1062
|
-
name: "name"
|
|
1063
|
-
},
|
|
1064
|
-
{
|
|
1065
|
-
label: formatMessage({
|
|
1086
|
+
label: {
|
|
1066
1087
|
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1067
1088
|
defaultMessage: "content-type"
|
|
1068
|
-
}
|
|
1089
|
+
},
|
|
1069
1090
|
name: "content-type"
|
|
1070
1091
|
},
|
|
1071
1092
|
{
|
|
1072
|
-
label:
|
|
1093
|
+
label: {
|
|
1073
1094
|
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1074
1095
|
defaultMessage: "action"
|
|
1075
|
-
}
|
|
1096
|
+
},
|
|
1076
1097
|
name: "action"
|
|
1077
1098
|
},
|
|
1078
1099
|
...!release.releasedAt ? [
|
|
1079
1100
|
{
|
|
1080
|
-
label:
|
|
1101
|
+
label: {
|
|
1081
1102
|
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1082
1103
|
defaultMessage: "status"
|
|
1083
|
-
}
|
|
1104
|
+
},
|
|
1084
1105
|
name: "status"
|
|
1085
1106
|
}
|
|
1086
1107
|
] : []
|
|
@@ -1118,10 +1139,10 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1118
1139
|
headers,
|
|
1119
1140
|
isLoading: isLoading || isFetching,
|
|
1120
1141
|
children: /* @__PURE__ */ jsxs(Table.Content, { children: [
|
|
1121
|
-
/* @__PURE__ */ jsx(Table.Head, { children: headers.map((
|
|
1142
|
+
/* @__PURE__ */ jsx(Table.Head, { children: headers.map(({ label, name }) => /* @__PURE__ */ jsx(Table.HeaderCell, { label: formatMessage(label), name }, name)) }),
|
|
1122
1143
|
/* @__PURE__ */ jsx(Table.Loading, {}),
|
|
1123
1144
|
/* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
|
|
1124
|
-
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1145
|
+
({ id, contentType, locale, type, entry, status }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1125
1146
|
/* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
1126
1147
|
hasI18nEnabled && /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1127
1148
|
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
|
|
@@ -1150,7 +1171,8 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1150
1171
|
action: type,
|
|
1151
1172
|
schema: contentTypes?.[contentType.uid],
|
|
1152
1173
|
components,
|
|
1153
|
-
entry
|
|
1174
|
+
entry,
|
|
1175
|
+
status
|
|
1154
1176
|
}
|
|
1155
1177
|
) }),
|
|
1156
1178
|
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Flex, { justifyContent: "flex-end", children: /* @__PURE__ */ jsxs(ReleaseActionMenu.Root, { children: [
|
|
@@ -1158,7 +1180,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1158
1180
|
ReleaseActionMenu.ReleaseActionEntryLinkItem,
|
|
1159
1181
|
{
|
|
1160
1182
|
contentTypeUid: contentType.uid,
|
|
1161
|
-
|
|
1183
|
+
documentId: entry.documentId,
|
|
1162
1184
|
locale: locale?.code
|
|
1163
1185
|
}
|
|
1164
1186
|
),
|
|
@@ -1208,13 +1230,24 @@ const ReleaseDetailsPage = () => {
|
|
|
1208
1230
|
skip: !releaseId
|
|
1209
1231
|
}
|
|
1210
1232
|
);
|
|
1233
|
+
const { data: dataTimezone, isLoading: isLoadingTimezone } = useGetReleaseSettingsQuery();
|
|
1211
1234
|
const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();
|
|
1212
1235
|
const [deleteRelease] = useDeleteReleaseMutation();
|
|
1213
1236
|
const toggleEditReleaseModal = () => {
|
|
1214
1237
|
setReleaseModalShown((prev) => !prev);
|
|
1215
1238
|
};
|
|
1239
|
+
const getTimezoneValue = () => {
|
|
1240
|
+
if (releaseData?.timezone) {
|
|
1241
|
+
return releaseData.timezone;
|
|
1242
|
+
} else {
|
|
1243
|
+
if (dataTimezone?.data.defaultTimezone) {
|
|
1244
|
+
return dataTimezone.data.defaultTimezone;
|
|
1245
|
+
}
|
|
1246
|
+
return null;
|
|
1247
|
+
}
|
|
1248
|
+
};
|
|
1216
1249
|
const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);
|
|
1217
|
-
if (isLoadingDetails) {
|
|
1250
|
+
if (isLoadingDetails || isLoadingTimezone) {
|
|
1218
1251
|
return /* @__PURE__ */ jsx(
|
|
1219
1252
|
ReleaseDetailsLayout,
|
|
1220
1253
|
{
|
|
@@ -1229,10 +1262,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1229
1262
|
}
|
|
1230
1263
|
const releaseData = isSuccessDetails && data?.data || null;
|
|
1231
1264
|
const title = releaseData?.name || "";
|
|
1232
|
-
const timezone =
|
|
1265
|
+
const timezone = getTimezoneValue();
|
|
1233
1266
|
const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
|
|
1234
|
-
const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") : void 0;
|
|
1235
|
-
const time = scheduledAt ? format(scheduledAt, "HH:mm") : "";
|
|
1267
|
+
const date = scheduledAt ? format$1(scheduledAt, "yyyy-MM-dd") : void 0;
|
|
1268
|
+
const time = scheduledAt ? format$1(scheduledAt, "HH:mm") : "";
|
|
1236
1269
|
const handleEditRelease = async (values) => {
|
|
1237
1270
|
const response = await updateRelease({
|
|
1238
1271
|
id: releaseId,
|
|
@@ -1320,4 +1353,4 @@ const App = () => {
|
|
|
1320
1353
|
export {
|
|
1321
1354
|
App
|
|
1322
1355
|
};
|
|
1323
|
-
//# sourceMappingURL=App-
|
|
1356
|
+
//# sourceMappingURL=App-B4mkcLmw.mjs.map
|