@strapi/content-releases 0.0.0-experimental.defd8568ae03ef8d52f86e1f3541979f953c3941 → 0.0.0-experimental.e14656d3b8681880212c13260b9a2b340c182f2d
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-O0ZO-S35.mjs → App-DMILern_.mjs} +409 -396
- package/dist/_chunks/App-DMILern_.mjs.map +1 -0
- package/dist/_chunks/{App-C0DlH0im.js → App-fAgiijnc.js} +412 -401
- package/dist/_chunks/App-fAgiijnc.js.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-DAHdUpAA.js → PurchaseContentReleases-Be3acS2L.js} +4 -3
- package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-Ex09YpKR.mjs → PurchaseContentReleases-_MxP6-Dt.mjs} +5 -4
- package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +1 -0
- package/dist/_chunks/ReleasesSettingsPage-YVZJH-oN.js +178 -0
- package/dist/_chunks/ReleasesSettingsPage-YVZJH-oN.js.map +1 -0
- package/dist/_chunks/ReleasesSettingsPage-dwoRuXB-.mjs +178 -0
- package/dist/_chunks/ReleasesSettingsPage-dwoRuXB-.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-DoZNNtsb.js → index--_NWfuDG.js} +681 -585
- package/dist/_chunks/index--_NWfuDG.js.map +1 -0
- package/dist/_chunks/{index-DjDPK8kb.mjs → index-CYsQToWs.mjs} +690 -592
- package/dist/_chunks/index-CYsQToWs.mjs.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/ReleaseAction.d.ts +1 -1
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +3 -3
- 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/ReleaseModal.d.ts +3 -2
- 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 +53 -370
- package/dist/admin/src/utils/api.d.ts +6 -0
- 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 +17 -18
- package/dist/_chunks/App-C0DlH0im.js.map +0 -1
- package/dist/_chunks/App-O0ZO-S35.mjs.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-DAHdUpAA.js.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-Ex09YpKR.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-DjDPK8kb.mjs.map +0 -1
- package/dist/_chunks/index-DoZNNtsb.js.map +0 -1
- package/dist/admin/src/services/axios.d.ts +0 -29
- 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
|
-
import { useNotification, useAPIErrorHandler, useQueryParams, useTracking, useRBAC, Page, Pagination, ConfirmDialog, BackButton, useStrapiApp, Table } from "@strapi/admin/strapi-admin";
|
|
3
|
-
import { useLocation, useNavigate, useParams, Navigate, Link as Link$1, Routes, Route } from "react-router-dom";
|
|
4
|
-
import { g as
|
|
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 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-CYsQToWs.mjs";
|
|
5
5
|
import * as React from "react";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
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, 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";
|
|
8
9
|
import { EmptyDocuments } from "@strapi/icons/symbols";
|
|
9
|
-
import
|
|
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
|
-
import styled from "styled-components";
|
|
14
|
-
import { intervalToDuration, isPast, formatISO } from "date-fns";
|
|
13
|
+
import { styled } from "styled-components";
|
|
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,28 +46,9 @@ 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,
|
|
51
|
+
open,
|
|
71
52
|
handleSubmit,
|
|
72
53
|
initialValues,
|
|
73
54
|
isLoading = false
|
|
@@ -91,8 +72,8 @@ const ReleaseModal = ({
|
|
|
91
72
|
);
|
|
92
73
|
return currentTimezone?.value || systemTimezone.value;
|
|
93
74
|
};
|
|
94
|
-
return /* @__PURE__ */
|
|
95
|
-
/* @__PURE__ */ jsx(
|
|
75
|
+
return /* @__PURE__ */ jsx(Modal.Root, { open, onOpenChange: handleClose, children: /* @__PURE__ */ jsxs(Modal.Content, { children: [
|
|
76
|
+
/* @__PURE__ */ jsx(Modal.Header, { children: /* @__PURE__ */ jsx(Modal.Title, { children: formatMessage(
|
|
96
77
|
{
|
|
97
78
|
id: "content-releases.modal.title",
|
|
98
79
|
defaultMessage: "{isCreatingRelease, select, true {New release} other {Edit release}}"
|
|
@@ -115,133 +96,143 @@ const ReleaseModal = ({
|
|
|
115
96
|
},
|
|
116
97
|
validationSchema: RELEASE_SCHEMA,
|
|
117
98
|
validateOnChange: false,
|
|
118
|
-
children: ({ values, errors, handleChange, setFieldValue }) =>
|
|
119
|
-
|
|
120
|
-
/* @__PURE__ */ jsx(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
defaultMessage:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
setFieldValue("
|
|
144
|
-
|
|
145
|
-
} else {
|
|
146
|
-
setFieldValue("date", initialValues.date);
|
|
147
|
-
setFieldValue("time", initialValues.time);
|
|
148
|
-
setFieldValue("timezone", initialValues.timezone ?? systemTimezone?.value);
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
children: /* @__PURE__ */ jsx(
|
|
152
|
-
Typography,
|
|
153
|
-
{
|
|
154
|
-
textColor: values.isScheduled ? "primary600" : "neutral800",
|
|
155
|
-
fontWeight: values.isScheduled ? "semiBold" : "regular",
|
|
156
|
-
children: formatMessage({
|
|
157
|
-
id: "modal.form.input.label.schedule-release",
|
|
158
|
-
defaultMessage: "Schedule release"
|
|
159
|
-
})
|
|
160
|
-
}
|
|
161
|
-
)
|
|
162
|
-
}
|
|
163
|
-
) }),
|
|
164
|
-
values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
165
|
-
/* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
|
|
166
|
-
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
|
|
167
|
-
DatePicker,
|
|
168
|
-
{
|
|
169
|
-
label: formatMessage({
|
|
170
|
-
id: "content-releases.modal.form.input.label.date",
|
|
171
|
-
defaultMessage: "Date"
|
|
172
|
-
}),
|
|
173
|
-
name: "date",
|
|
174
|
-
error: errors.date,
|
|
175
|
-
onChange: (date) => {
|
|
176
|
-
const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
|
|
177
|
-
setFieldValue("date", isoFormatDate);
|
|
178
|
-
},
|
|
179
|
-
clearLabel: formatMessage({
|
|
180
|
-
id: "content-releases.modal.form.input.clearLabel",
|
|
181
|
-
defaultMessage: "Clear"
|
|
182
|
-
}),
|
|
183
|
-
onClear: () => {
|
|
99
|
+
children: ({ values, errors, handleChange, setFieldValue }) => {
|
|
100
|
+
return /* @__PURE__ */ jsxs(Form, { children: [
|
|
101
|
+
/* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
|
|
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
|
+
),
|
|
118
|
+
/* @__PURE__ */ jsx(Box, { width: "max-content", children: /* @__PURE__ */ jsx(
|
|
119
|
+
Checkbox,
|
|
120
|
+
{
|
|
121
|
+
name: "isScheduled",
|
|
122
|
+
checked: values.isScheduled,
|
|
123
|
+
onCheckedChange: (checked) => {
|
|
124
|
+
setFieldValue("isScheduled", checked);
|
|
125
|
+
if (!checked) {
|
|
184
126
|
setFieldValue("date", null);
|
|
185
|
-
},
|
|
186
|
-
selectedDate: values.date || void 0,
|
|
187
|
-
required: true,
|
|
188
|
-
minDate: utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
|
|
189
|
-
}
|
|
190
|
-
) }),
|
|
191
|
-
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
|
|
192
|
-
TimePicker,
|
|
193
|
-
{
|
|
194
|
-
label: formatMessage({
|
|
195
|
-
id: "content-releases.modal.form.input.label.time",
|
|
196
|
-
defaultMessage: "Time"
|
|
197
|
-
}),
|
|
198
|
-
name: "time",
|
|
199
|
-
error: errors.time,
|
|
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
127
|
setFieldValue("time", "");
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
128
|
+
setFieldValue("timezone", null);
|
|
129
|
+
} else {
|
|
130
|
+
setFieldValue("date", initialValues.date);
|
|
131
|
+
setFieldValue("time", initialValues.time);
|
|
132
|
+
setFieldValue(
|
|
133
|
+
"timezone",
|
|
134
|
+
initialValues.timezone ?? systemTimezone?.value
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
children: /* @__PURE__ */ jsx(
|
|
139
|
+
Typography,
|
|
140
|
+
{
|
|
141
|
+
textColor: values.isScheduled ? "primary600" : "neutral800",
|
|
142
|
+
fontWeight: values.isScheduled ? "semiBold" : "regular",
|
|
143
|
+
children: formatMessage({
|
|
144
|
+
id: "modal.form.input.label.schedule-release",
|
|
145
|
+
defaultMessage: "Schedule release"
|
|
146
|
+
})
|
|
147
|
+
}
|
|
148
|
+
)
|
|
149
|
+
}
|
|
150
|
+
) }),
|
|
151
|
+
values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
152
|
+
/* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
|
|
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
|
+
) })
|
|
217
|
+
] }),
|
|
218
|
+
/* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
|
|
219
|
+
] })
|
|
220
|
+
] }) }),
|
|
221
|
+
/* @__PURE__ */ jsxs(Modal.Footer, { children: [
|
|
222
|
+
/* @__PURE__ */ jsx(Modal.Close, { children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }) }),
|
|
223
|
+
/* @__PURE__ */ jsx(Button, { name: "submit", loading: isLoading, type: "submit", children: formatMessage(
|
|
223
224
|
{
|
|
224
225
|
id: "content-releases.modal.form.button.submit",
|
|
225
226
|
defaultMessage: "{isCreatingRelease, select, true {Continue} other {Save}}"
|
|
226
227
|
},
|
|
227
228
|
{ isCreatingRelease }
|
|
228
229
|
) })
|
|
229
|
-
}
|
|
230
|
-
)
|
|
231
|
-
|
|
230
|
+
] })
|
|
231
|
+
] });
|
|
232
|
+
}
|
|
232
233
|
}
|
|
233
234
|
)
|
|
234
|
-
] });
|
|
235
|
-
};
|
|
236
|
-
const getTimezones = (selectedDate) => {
|
|
237
|
-
const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
|
|
238
|
-
const utcOffset = getTimezoneOffset(timezone, selectedDate);
|
|
239
|
-
return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
|
|
240
|
-
});
|
|
241
|
-
const systemTimezone = timezoneList.find(
|
|
242
|
-
(timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
243
|
-
);
|
|
244
|
-
return { timezoneList, systemTimezone };
|
|
235
|
+
] }) });
|
|
245
236
|
};
|
|
246
237
|
const TimezoneComponent = ({ timezoneOptions }) => {
|
|
247
238
|
const { values, errors, setFieldValue } = useFormikContext();
|
|
@@ -257,33 +248,44 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
257
248
|
}
|
|
258
249
|
}
|
|
259
250
|
}, [setFieldValue, values.date, values.timezone]);
|
|
260
|
-
return /* @__PURE__ */
|
|
261
|
-
|
|
251
|
+
return /* @__PURE__ */ jsxs(
|
|
252
|
+
Field.Root,
|
|
262
253
|
{
|
|
263
|
-
label: formatMessage({
|
|
264
|
-
id: "content-releases.modal.form.input.label.timezone",
|
|
265
|
-
defaultMessage: "Timezone"
|
|
266
|
-
}),
|
|
267
|
-
autocomplete: { type: "list", filter: "contains" },
|
|
268
254
|
name: "timezone",
|
|
269
|
-
|
|
270
|
-
textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
|
|
271
|
-
onChange: (timezone) => {
|
|
272
|
-
setFieldValue("timezone", timezone);
|
|
273
|
-
},
|
|
274
|
-
onTextValueChange: (timezone) => {
|
|
275
|
-
setFieldValue("timezone", timezone);
|
|
276
|
-
},
|
|
277
|
-
onClear: () => {
|
|
278
|
-
setFieldValue("timezone", "");
|
|
279
|
-
},
|
|
280
|
-
error: errors.timezone,
|
|
255
|
+
error: errors.timezone && formatMessage({ id: errors.timezone, defaultMessage: errors.timezone }),
|
|
281
256
|
required: true,
|
|
282
|
-
children:
|
|
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
|
+
]
|
|
283
282
|
}
|
|
284
283
|
);
|
|
285
284
|
};
|
|
286
285
|
const useTypedDispatch = useDispatch;
|
|
286
|
+
const isBaseQueryError = (error) => {
|
|
287
|
+
return typeof error !== "undefined" && error.name !== void 0;
|
|
288
|
+
};
|
|
287
289
|
const LinkCard = styled(Link)`
|
|
288
290
|
display: block;
|
|
289
291
|
`;
|
|
@@ -340,7 +342,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
340
342
|
}
|
|
341
343
|
);
|
|
342
344
|
}
|
|
343
|
-
return /* @__PURE__ */ jsx(Grid, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsx(
|
|
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",
|
|
@@ -355,7 +357,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
355
357
|
gap: 4,
|
|
356
358
|
children: [
|
|
357
359
|
/* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "start", gap: 1, children: [
|
|
358
|
-
/* @__PURE__ */ jsx(Typography, {
|
|
360
|
+
/* @__PURE__ */ jsx(Typography, { textColor: "neutral800", tag: "h3", variant: "delta", fontWeight: "bold", children: name }),
|
|
359
361
|
/* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
|
|
360
362
|
id: "content-releases.pages.Releases.not-scheduled",
|
|
361
363
|
defaultMessage: "Not scheduled"
|
|
@@ -376,14 +378,13 @@ 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,
|
|
383
385
|
timezone: null
|
|
384
386
|
};
|
|
385
387
|
const ReleasesPage = () => {
|
|
386
|
-
const tabRef = React.useRef(null);
|
|
387
388
|
const location = useLocation();
|
|
388
389
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
389
390
|
const { toggleNotification } = useNotification();
|
|
@@ -392,6 +393,7 @@ const ReleasesPage = () => {
|
|
|
392
393
|
const { formatAPIError } = useAPIErrorHandler();
|
|
393
394
|
const [{ query }, setQuery] = useQueryParams();
|
|
394
395
|
const response = useGetReleasesQuery(query);
|
|
396
|
+
const { data, isLoading: isLoadingSettings } = useGetReleaseSettingsQuery();
|
|
395
397
|
const [createRelease, { isLoading: isSubmittingForm }] = useCreateReleaseMutation();
|
|
396
398
|
const { getFeature } = useLicenseLimits();
|
|
397
399
|
const { maximumReleases = 3 } = getFeature("cms-content-releases");
|
|
@@ -399,9 +401,8 @@ const ReleasesPage = () => {
|
|
|
399
401
|
const {
|
|
400
402
|
allowedActions: { canCreate }
|
|
401
403
|
} = useRBAC(PERMISSIONS);
|
|
402
|
-
const { isLoading, isSuccess, isError } = response;
|
|
404
|
+
const { isLoading: isLoadingReleases, isSuccess, isError } = response;
|
|
403
405
|
const activeTab = response?.currentData?.meta?.activeTab || "pending";
|
|
404
|
-
const activeTabIndex = ["pending", "done"].indexOf(activeTab);
|
|
405
406
|
React.useEffect(() => {
|
|
406
407
|
if (location?.state?.errors) {
|
|
407
408
|
toggleNotification({
|
|
@@ -418,27 +419,22 @@ const ReleasesPage = () => {
|
|
|
418
419
|
navigate("", { replace: true, state: null });
|
|
419
420
|
}
|
|
420
421
|
}, [formatMessage, location?.state?.errors, navigate, toggleNotification]);
|
|
421
|
-
React.useEffect(() => {
|
|
422
|
-
if (tabRef.current) {
|
|
423
|
-
tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
|
|
424
|
-
}
|
|
425
|
-
}, [activeTabIndex]);
|
|
426
422
|
const toggleAddReleaseModal = () => {
|
|
427
423
|
setReleaseModalShown((prev) => !prev);
|
|
428
424
|
};
|
|
429
|
-
if (
|
|
425
|
+
if (isLoadingReleases || isLoadingSettings) {
|
|
430
426
|
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
431
427
|
}
|
|
432
428
|
const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
|
|
433
429
|
const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
|
|
434
|
-
const handleTabChange = (
|
|
430
|
+
const handleTabChange = (tabValue) => {
|
|
435
431
|
setQuery({
|
|
436
432
|
...query,
|
|
437
433
|
page: 1,
|
|
438
434
|
pageSize: response?.currentData?.meta?.pagination?.pageSize || 16,
|
|
439
435
|
filters: {
|
|
440
436
|
releasedAt: {
|
|
441
|
-
$notNull:
|
|
437
|
+
$notNull: tabValue !== "pending"
|
|
442
438
|
}
|
|
443
439
|
}
|
|
444
440
|
});
|
|
@@ -459,7 +455,7 @@ const ReleasesPage = () => {
|
|
|
459
455
|
});
|
|
460
456
|
trackUsage("didCreateRelease");
|
|
461
457
|
navigate(response2.data.data.id.toString());
|
|
462
|
-
} else if (
|
|
458
|
+
} else if (isFetchError(response2.error)) {
|
|
463
459
|
toggleNotification({
|
|
464
460
|
type: "danger",
|
|
465
461
|
message: formatAPIError(response2.error)
|
|
@@ -471,9 +467,9 @@ const ReleasesPage = () => {
|
|
|
471
467
|
});
|
|
472
468
|
}
|
|
473
469
|
};
|
|
474
|
-
return /* @__PURE__ */ jsxs(Main, { "aria-busy":
|
|
470
|
+
return /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoadingReleases || isLoadingSettings, children: [
|
|
475
471
|
/* @__PURE__ */ jsx(
|
|
476
|
-
|
|
472
|
+
Layouts.Header,
|
|
477
473
|
{
|
|
478
474
|
title: formatMessage({
|
|
479
475
|
id: "content-releases.pages.Releases.title",
|
|
@@ -497,7 +493,7 @@ const ReleasesPage = () => {
|
|
|
497
493
|
) : null
|
|
498
494
|
}
|
|
499
495
|
),
|
|
500
|
-
/* @__PURE__ */ jsx(
|
|
496
|
+
/* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
501
497
|
hasReachedMaximumPendingReleases && /* @__PURE__ */ jsx(
|
|
502
498
|
StyledAlert,
|
|
503
499
|
{
|
|
@@ -522,21 +518,17 @@ const ReleasesPage = () => {
|
|
|
522
518
|
})
|
|
523
519
|
}
|
|
524
520
|
),
|
|
525
|
-
/* @__PURE__ */ jsxs(
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
children: [
|
|
537
|
-
/* @__PURE__ */ jsxs(Box, { paddingBottom: 8, children: [
|
|
538
|
-
/* @__PURE__ */ jsxs(Tabs, { children: [
|
|
539
|
-
/* @__PURE__ */ jsx(Tab, { children: formatMessage(
|
|
521
|
+
/* @__PURE__ */ jsxs(Tabs.Root, { variant: "simple", onValueChange: handleTabChange, value: activeTab, children: [
|
|
522
|
+
/* @__PURE__ */ jsxs(Box, { paddingBottom: 8, children: [
|
|
523
|
+
/* @__PURE__ */ jsxs(
|
|
524
|
+
Tabs.List,
|
|
525
|
+
{
|
|
526
|
+
"aria-label": formatMessage({
|
|
527
|
+
id: "content-releases.pages.Releases.tab-group.label",
|
|
528
|
+
defaultMessage: "Releases list"
|
|
529
|
+
}),
|
|
530
|
+
children: [
|
|
531
|
+
/* @__PURE__ */ jsx(Tabs.Trigger, { value: "pending", children: formatMessage(
|
|
540
532
|
{
|
|
541
533
|
id: "content-releases.pages.Releases.tab.pending",
|
|
542
534
|
defaultMessage: "Pending ({count})"
|
|
@@ -545,34 +537,32 @@ const ReleasesPage = () => {
|
|
|
545
537
|
count: totalPendingReleases
|
|
546
538
|
}
|
|
547
539
|
) }),
|
|
548
|
-
/* @__PURE__ */ jsx(
|
|
540
|
+
/* @__PURE__ */ jsx(Tabs.Trigger, { value: "done", children: formatMessage({
|
|
549
541
|
id: "content-releases.pages.Releases.tab.done",
|
|
550
542
|
defaultMessage: "Done"
|
|
551
543
|
}) })
|
|
552
|
-
]
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
}
|
|
575
|
-
),
|
|
544
|
+
]
|
|
545
|
+
}
|
|
546
|
+
),
|
|
547
|
+
/* @__PURE__ */ jsx(Divider, {})
|
|
548
|
+
] }),
|
|
549
|
+
/* @__PURE__ */ jsx(Tabs.Content, { value: "pending", children: /* @__PURE__ */ jsx(
|
|
550
|
+
ReleasesGrid,
|
|
551
|
+
{
|
|
552
|
+
sectionTitle: "pending",
|
|
553
|
+
releases: response?.currentData?.data,
|
|
554
|
+
isError
|
|
555
|
+
}
|
|
556
|
+
) }),
|
|
557
|
+
/* @__PURE__ */ jsx(Tabs.Content, { value: "done", children: /* @__PURE__ */ jsx(
|
|
558
|
+
ReleasesGrid,
|
|
559
|
+
{
|
|
560
|
+
sectionTitle: "done",
|
|
561
|
+
releases: response?.currentData?.data,
|
|
562
|
+
isError
|
|
563
|
+
}
|
|
564
|
+
) })
|
|
565
|
+
] }),
|
|
576
566
|
/* @__PURE__ */ jsxs(
|
|
577
567
|
Pagination.Root,
|
|
578
568
|
{
|
|
@@ -585,13 +575,17 @@ const ReleasesPage = () => {
|
|
|
585
575
|
}
|
|
586
576
|
)
|
|
587
577
|
] }) }),
|
|
588
|
-
|
|
578
|
+
/* @__PURE__ */ jsx(
|
|
589
579
|
ReleaseModal,
|
|
590
580
|
{
|
|
581
|
+
open: releaseModalShown,
|
|
591
582
|
handleClose: toggleAddReleaseModal,
|
|
592
583
|
handleSubmit: handleAddRelease,
|
|
593
584
|
isLoading: isSubmittingForm,
|
|
594
|
-
initialValues:
|
|
585
|
+
initialValues: {
|
|
586
|
+
...INITIAL_FORM_VALUES,
|
|
587
|
+
timezone: data?.data.defaultTimezone ? data.data.defaultTimezone.split("&")[1] : null
|
|
588
|
+
}
|
|
595
589
|
}
|
|
596
590
|
)
|
|
597
591
|
] });
|
|
@@ -602,7 +596,7 @@ const ReleaseInfoWrapper = styled(Flex)`
|
|
|
602
596
|
border-bottom-left-radius: ${({ theme }) => theme.borderRadius};
|
|
603
597
|
border-top: 1px solid ${({ theme }) => theme.colors.neutral150};
|
|
604
598
|
`;
|
|
605
|
-
const StyledMenuItem = styled(
|
|
599
|
+
const StyledMenuItem = styled(MenuItem)`
|
|
606
600
|
svg path {
|
|
607
601
|
fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};
|
|
608
602
|
}
|
|
@@ -611,7 +605,7 @@ const StyledMenuItem = styled(Menu.Item)`
|
|
|
611
605
|
}
|
|
612
606
|
|
|
613
607
|
&:hover {
|
|
614
|
-
background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
|
|
608
|
+
background: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}100`]};
|
|
615
609
|
}
|
|
616
610
|
`;
|
|
617
611
|
const PencilIcon = styled(Pencil)`
|
|
@@ -631,41 +625,72 @@ const TrashIcon = styled(Trash)`
|
|
|
631
625
|
const TypographyMaxWidth = styled(Typography)`
|
|
632
626
|
max-width: 300px;
|
|
633
627
|
`;
|
|
634
|
-
const EntryValidationText = ({ action, schema, entry }) => {
|
|
628
|
+
const EntryValidationText = ({ action, schema, entry, status }) => {
|
|
635
629
|
const { formatMessage } = useIntl();
|
|
636
|
-
const { validate } = unstable_useDocument(
|
|
630
|
+
const { validate, isLoading } = unstable_useDocument(
|
|
637
631
|
{
|
|
638
632
|
collectionType: schema?.kind ?? "",
|
|
639
633
|
model: schema?.uid ?? ""
|
|
640
634
|
},
|
|
641
635
|
{
|
|
642
|
-
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
|
|
643
638
|
}
|
|
644
639
|
);
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
const validationErrorsMessages = Object.entries(errors).map(
|
|
648
|
-
([key, value]) => formatMessage(
|
|
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(TypographyMaxWidth, { textColor: "danger600", variant: "omega", fontWeight: "semiBold", ellipsis: true, children: validationErrorsMessages }) })
|
|
656
|
-
] });
|
|
640
|
+
if (isLoading) {
|
|
641
|
+
return null;
|
|
657
642
|
}
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
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
|
+
}
|
|
669
694
|
}
|
|
670
695
|
return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
671
696
|
/* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
|
|
@@ -688,7 +713,6 @@ const ReleaseDetailsLayout = ({
|
|
|
688
713
|
const {
|
|
689
714
|
data,
|
|
690
715
|
isLoading: isLoadingDetails,
|
|
691
|
-
isError,
|
|
692
716
|
error
|
|
693
717
|
} = useGetReleaseQuery(
|
|
694
718
|
{ id: releaseId },
|
|
@@ -720,7 +744,7 @@ const ReleaseDetailsLayout = ({
|
|
|
720
744
|
totalPublishedEntries,
|
|
721
745
|
totalUnpublishedEntries
|
|
722
746
|
});
|
|
723
|
-
} else if (
|
|
747
|
+
} else if (isFetchError(response.error)) {
|
|
724
748
|
toggleNotification({
|
|
725
749
|
type: "danger",
|
|
726
750
|
message: formatAPIError(response.error)
|
|
@@ -755,7 +779,7 @@ const ReleaseDetailsLayout = ({
|
|
|
755
779
|
if (isLoadingDetails) {
|
|
756
780
|
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
757
781
|
}
|
|
758
|
-
if (
|
|
782
|
+
if (isBaseQueryError(error) && "code" in error || !release) {
|
|
759
783
|
return /* @__PURE__ */ jsx(
|
|
760
784
|
Navigate,
|
|
761
785
|
{
|
|
@@ -763,6 +787,7 @@ const ReleaseDetailsLayout = ({
|
|
|
763
787
|
state: {
|
|
764
788
|
errors: [
|
|
765
789
|
{
|
|
790
|
+
// @ts-expect-error – TODO: fix this weird error flow
|
|
766
791
|
code: error?.code
|
|
767
792
|
}
|
|
768
793
|
]
|
|
@@ -802,7 +827,7 @@ const ReleaseDetailsLayout = ({
|
|
|
802
827
|
) : "";
|
|
803
828
|
return /* @__PURE__ */ jsxs(Main, { "aria-busy": isLoadingDetails, children: [
|
|
804
829
|
/* @__PURE__ */ jsx(
|
|
805
|
-
|
|
830
|
+
Layouts.Header,
|
|
806
831
|
{
|
|
807
832
|
title: release.name,
|
|
808
833
|
subtitle: /* @__PURE__ */ jsxs(Flex, { gap: 2, lineHeight: 6, children: [
|
|
@@ -811,84 +836,71 @@ const ReleaseDetailsLayout = ({
|
|
|
811
836
|
] }),
|
|
812
837
|
navigationAction: /* @__PURE__ */ jsx(BackButton, {}),
|
|
813
838
|
primaryAction: !release.releasedAt && /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
814
|
-
/* @__PURE__ */ jsxs(
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
{
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
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"
|
|
844
871
|
}) })
|
|
845
|
-
] }) }),
|
|
846
|
-
/* @__PURE__ */ jsx(
|
|
847
|
-
StyledMenuItem,
|
|
848
|
-
{
|
|
849
|
-
disabled: !canDelete,
|
|
850
|
-
onSelect: toggleWarningSubmit,
|
|
851
|
-
variant: "danger",
|
|
852
|
-
children: /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, hasRadius: true, width: "100%", children: [
|
|
853
|
-
/* @__PURE__ */ jsx(TrashIcon, {}),
|
|
854
|
-
/* @__PURE__ */ jsx(Typography, { ellipsis: true, textColor: "danger600", children: formatMessage({
|
|
855
|
-
id: "content-releases.header.actions.delete",
|
|
856
|
-
defaultMessage: "Delete"
|
|
857
|
-
}) })
|
|
858
|
-
] })
|
|
859
|
-
}
|
|
860
|
-
)
|
|
861
|
-
]
|
|
862
|
-
}
|
|
863
|
-
),
|
|
864
|
-
/* @__PURE__ */ jsxs(
|
|
865
|
-
ReleaseInfoWrapper,
|
|
866
|
-
{
|
|
867
|
-
direction: "column",
|
|
868
|
-
justifyContent: "center",
|
|
869
|
-
alignItems: "flex-start",
|
|
870
|
-
gap: 1,
|
|
871
|
-
padding: 5,
|
|
872
|
-
children: [
|
|
873
|
-
/* @__PURE__ */ jsx(Typography, { variant: "pi", fontWeight: "bold", children: formatMessage({
|
|
874
|
-
id: "content-releases.header.actions.created",
|
|
875
|
-
defaultMessage: "Created"
|
|
876
|
-
}) }),
|
|
877
|
-
/* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
|
|
878
|
-
/* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
|
|
879
|
-
formatMessage(
|
|
880
|
-
{
|
|
881
|
-
id: "content-releases.header.actions.created.description",
|
|
882
|
-
defaultMessage: "{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}"
|
|
883
|
-
},
|
|
884
|
-
{ createdBy: getCreatedByUser(), hasCreatedByUser }
|
|
885
|
-
)
|
|
886
872
|
] })
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
873
|
+
}
|
|
874
|
+
),
|
|
875
|
+
/* @__PURE__ */ jsxs(
|
|
876
|
+
ReleaseInfoWrapper,
|
|
877
|
+
{
|
|
878
|
+
direction: "column",
|
|
879
|
+
justifyContent: "center",
|
|
880
|
+
alignItems: "flex-start",
|
|
881
|
+
gap: 1,
|
|
882
|
+
padding: 5,
|
|
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
|
+
),
|
|
892
904
|
/* @__PURE__ */ jsx(Button, { size: "S", variant: "tertiary", onClick: handleRefresh, children: formatMessage({
|
|
893
905
|
id: "content-releases.header.actions.refresh",
|
|
894
906
|
defaultMessage: "Refresh"
|
|
@@ -913,6 +925,11 @@ const ReleaseDetailsLayout = ({
|
|
|
913
925
|
children
|
|
914
926
|
] });
|
|
915
927
|
};
|
|
928
|
+
const SimpleMenuButton = styled(SimpleMenu)`
|
|
929
|
+
& > span {
|
|
930
|
+
display: flex;
|
|
931
|
+
}
|
|
932
|
+
`;
|
|
916
933
|
const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
|
|
917
934
|
const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
|
|
918
935
|
const getGroupByOptionLabel = (value) => {
|
|
@@ -941,26 +958,24 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
941
958
|
const {
|
|
942
959
|
data: releaseData,
|
|
943
960
|
isLoading: isReleaseLoading,
|
|
944
|
-
isError: isReleaseError,
|
|
945
961
|
error: releaseError
|
|
946
962
|
} = useGetReleaseQuery({ id: releaseId });
|
|
947
963
|
const {
|
|
948
964
|
allowedActions: { canUpdate }
|
|
949
965
|
} = useRBAC(PERMISSIONS);
|
|
950
966
|
const runHookWaterfall = useStrapiApp("ReleaseDetailsPage", (state) => state.runHookWaterfall);
|
|
951
|
-
const { hasI18nEnabled } = runHookWaterfall(
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
);
|
|
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
|
+
});
|
|
964
979
|
const release = releaseData?.data;
|
|
965
980
|
const selectedGroupBy = query?.groupBy || "contentType";
|
|
966
981
|
const {
|
|
@@ -989,7 +1004,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
989
1004
|
// We are passing the action path to found the position in the cache of the action for optimistic updates
|
|
990
1005
|
});
|
|
991
1006
|
if ("error" in response) {
|
|
992
|
-
if (
|
|
1007
|
+
if (isFetchError(response.error)) {
|
|
993
1008
|
toggleNotification({
|
|
994
1009
|
type: "danger",
|
|
995
1010
|
message: formatAPIError(response.error)
|
|
@@ -1009,14 +1024,14 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1009
1024
|
const releaseMeta = data?.meta;
|
|
1010
1025
|
const contentTypes = releaseMeta?.contentTypes || {};
|
|
1011
1026
|
const components = releaseMeta?.components || {};
|
|
1012
|
-
if (
|
|
1027
|
+
if (isBaseQueryError(releaseError) || !release) {
|
|
1013
1028
|
const errorsArray = [];
|
|
1014
|
-
if (releaseError) {
|
|
1029
|
+
if (releaseError && "code" in releaseError) {
|
|
1015
1030
|
errorsArray.push({
|
|
1016
1031
|
code: releaseError.code
|
|
1017
1032
|
});
|
|
1018
1033
|
}
|
|
1019
|
-
if (releaseActionsError) {
|
|
1034
|
+
if (releaseActionsError && "code" in releaseActionsError) {
|
|
1020
1035
|
errorsArray.push({
|
|
1021
1036
|
code: releaseActionsError.code
|
|
1022
1037
|
});
|
|
@@ -1035,13 +1050,13 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1035
1050
|
return /* @__PURE__ */ jsx(Page.Error, {});
|
|
1036
1051
|
}
|
|
1037
1052
|
if (Object.keys(releaseActions).length === 0) {
|
|
1038
|
-
return /* @__PURE__ */ jsx(
|
|
1053
|
+
return /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsx(
|
|
1039
1054
|
EmptyStateLayout,
|
|
1040
1055
|
{
|
|
1041
1056
|
action: /* @__PURE__ */ jsx(
|
|
1042
1057
|
LinkButton,
|
|
1043
1058
|
{
|
|
1044
|
-
|
|
1059
|
+
tag: Link$1,
|
|
1045
1060
|
to: {
|
|
1046
1061
|
pathname: "/content-manager"
|
|
1047
1062
|
},
|
|
@@ -1066,40 +1081,33 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1066
1081
|
defaultMessage: "Group by"
|
|
1067
1082
|
});
|
|
1068
1083
|
const headers = [
|
|
1069
|
-
|
|
1070
|
-
{
|
|
1071
|
-
label: formatMessage({
|
|
1072
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1073
|
-
defaultMessage: "name"
|
|
1074
|
-
}),
|
|
1075
|
-
name: "name"
|
|
1076
|
-
},
|
|
1084
|
+
...displayedHeaders,
|
|
1077
1085
|
{
|
|
1078
|
-
label:
|
|
1086
|
+
label: {
|
|
1079
1087
|
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1080
1088
|
defaultMessage: "content-type"
|
|
1081
|
-
}
|
|
1089
|
+
},
|
|
1082
1090
|
name: "content-type"
|
|
1083
1091
|
},
|
|
1084
1092
|
{
|
|
1085
|
-
label:
|
|
1093
|
+
label: {
|
|
1086
1094
|
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1087
1095
|
defaultMessage: "action"
|
|
1088
|
-
}
|
|
1096
|
+
},
|
|
1089
1097
|
name: "action"
|
|
1090
1098
|
},
|
|
1091
1099
|
...!release.releasedAt ? [
|
|
1092
1100
|
{
|
|
1093
|
-
label:
|
|
1101
|
+
label: {
|
|
1094
1102
|
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1095
1103
|
defaultMessage: "status"
|
|
1096
|
-
}
|
|
1104
|
+
},
|
|
1097
1105
|
name: "status"
|
|
1098
1106
|
}
|
|
1099
1107
|
] : []
|
|
1100
1108
|
];
|
|
1101
1109
|
const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
|
|
1102
|
-
return /* @__PURE__ */ jsx(
|
|
1110
|
+
return /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
|
|
1103
1111
|
/* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
|
|
1104
1112
|
SingleSelect,
|
|
1105
1113
|
{
|
|
@@ -1131,10 +1139,10 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1131
1139
|
headers,
|
|
1132
1140
|
isLoading: isLoading || isFetching,
|
|
1133
1141
|
children: /* @__PURE__ */ jsxs(Table.Content, { children: [
|
|
1134
|
-
/* @__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)) }),
|
|
1135
1143
|
/* @__PURE__ */ jsx(Table.Loading, {}),
|
|
1136
1144
|
/* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
|
|
1137
|
-
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1145
|
+
({ id, contentType, locale, type, entry, status }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1138
1146
|
/* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
1139
1147
|
hasI18nEnabled && /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1140
1148
|
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
|
|
@@ -1163,7 +1171,8 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1163
1171
|
action: type,
|
|
1164
1172
|
schema: contentTypes?.[contentType.uid],
|
|
1165
1173
|
components,
|
|
1166
|
-
entry
|
|
1174
|
+
entry,
|
|
1175
|
+
status
|
|
1167
1176
|
}
|
|
1168
1177
|
) }),
|
|
1169
1178
|
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Flex, { justifyContent: "flex-end", children: /* @__PURE__ */ jsxs(ReleaseActionMenu.Root, { children: [
|
|
@@ -1171,7 +1180,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1171
1180
|
ReleaseActionMenu.ReleaseActionEntryLinkItem,
|
|
1172
1181
|
{
|
|
1173
1182
|
contentTypeUid: contentType.uid,
|
|
1174
|
-
|
|
1183
|
+
documentId: entry.documentId,
|
|
1175
1184
|
locale: locale?.code
|
|
1176
1185
|
}
|
|
1177
1186
|
),
|
|
@@ -1221,13 +1230,24 @@ const ReleaseDetailsPage = () => {
|
|
|
1221
1230
|
skip: !releaseId
|
|
1222
1231
|
}
|
|
1223
1232
|
);
|
|
1233
|
+
const { data: dataTimezone, isLoading: isLoadingTimezone } = useGetReleaseSettingsQuery();
|
|
1224
1234
|
const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();
|
|
1225
1235
|
const [deleteRelease] = useDeleteReleaseMutation();
|
|
1226
1236
|
const toggleEditReleaseModal = () => {
|
|
1227
1237
|
setReleaseModalShown((prev) => !prev);
|
|
1228
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
|
+
};
|
|
1229
1249
|
const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);
|
|
1230
|
-
if (isLoadingDetails) {
|
|
1250
|
+
if (isLoadingDetails || isLoadingTimezone) {
|
|
1231
1251
|
return /* @__PURE__ */ jsx(
|
|
1232
1252
|
ReleaseDetailsLayout,
|
|
1233
1253
|
{
|
|
@@ -1242,10 +1262,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1242
1262
|
}
|
|
1243
1263
|
const releaseData = isSuccessDetails && data?.data || null;
|
|
1244
1264
|
const title = releaseData?.name || "";
|
|
1245
|
-
const timezone =
|
|
1265
|
+
const timezone = getTimezoneValue();
|
|
1246
1266
|
const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
|
|
1247
|
-
const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") :
|
|
1248
|
-
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") : "";
|
|
1249
1269
|
const handleEditRelease = async (values) => {
|
|
1250
1270
|
const response = await updateRelease({
|
|
1251
1271
|
id: releaseId,
|
|
@@ -1262,7 +1282,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1262
1282
|
})
|
|
1263
1283
|
});
|
|
1264
1284
|
toggleEditReleaseModal();
|
|
1265
|
-
} else if (
|
|
1285
|
+
} else if (isFetchError(response.error)) {
|
|
1266
1286
|
toggleNotification({
|
|
1267
1287
|
type: "danger",
|
|
1268
1288
|
message: formatAPIError(response.error)
|
|
@@ -1280,7 +1300,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1280
1300
|
});
|
|
1281
1301
|
if ("data" in response) {
|
|
1282
1302
|
navigate("..");
|
|
1283
|
-
} else if (
|
|
1303
|
+
} else if (isFetchError(response.error)) {
|
|
1284
1304
|
toggleNotification({
|
|
1285
1305
|
type: "danger",
|
|
1286
1306
|
message: formatAPIError(response.error)
|
|
@@ -1299,9 +1319,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1299
1319
|
toggleWarningSubmit,
|
|
1300
1320
|
children: [
|
|
1301
1321
|
/* @__PURE__ */ jsx(ReleaseDetailsBody, { releaseId }),
|
|
1302
|
-
|
|
1322
|
+
/* @__PURE__ */ jsx(
|
|
1303
1323
|
ReleaseModal,
|
|
1304
1324
|
{
|
|
1325
|
+
open: releaseModalShown,
|
|
1305
1326
|
handleClose: toggleEditReleaseModal,
|
|
1306
1327
|
handleSubmit: handleEditRelease,
|
|
1307
1328
|
isLoading: isLoadingDetails || isSubmittingForm,
|
|
@@ -1315,18 +1336,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1315
1336
|
}
|
|
1316
1337
|
}
|
|
1317
1338
|
),
|
|
1318
|
-
/* @__PURE__ */ jsx(
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
onClose: toggleWarningSubmit,
|
|
1323
|
-
onConfirm: handleDeleteRelease,
|
|
1324
|
-
children: formatMessage({
|
|
1325
|
-
id: "content-releases.dialog.confirmation-message",
|
|
1326
|
-
defaultMessage: "Are you sure you want to delete this release?"
|
|
1327
|
-
})
|
|
1328
|
-
}
|
|
1329
|
-
)
|
|
1339
|
+
/* @__PURE__ */ jsx(Dialog.Root, { open: showWarningSubmit, onOpenChange: toggleWarningSubmit, children: /* @__PURE__ */ jsx(ConfirmDialog, { onConfirm: handleDeleteRelease, children: formatMessage({
|
|
1340
|
+
id: "content-releases.dialog.confirmation-message",
|
|
1341
|
+
defaultMessage: "Are you sure you want to delete this release?"
|
|
1342
|
+
}) }) })
|
|
1330
1343
|
]
|
|
1331
1344
|
}
|
|
1332
1345
|
);
|
|
@@ -1340,4 +1353,4 @@ const App = () => {
|
|
|
1340
1353
|
export {
|
|
1341
1354
|
App
|
|
1342
1355
|
};
|
|
1343
|
-
//# sourceMappingURL=App-
|
|
1356
|
+
//# sourceMappingURL=App-DMILern_.mjs.map
|