@strapi/content-releases 0.0.0-experimental.e3e48deb89bd0a1b6cc69b698696566fa7854a95 → 0.0.0-experimental.e47108ccbbc4ad1bfaf4526fa6b70d6ace1ca7a9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{App-PQlYzNfb.mjs → App-XbK-TdJn.mjs} +258 -283
- package/dist/_chunks/App-XbK-TdJn.mjs.map +1 -0
- package/dist/_chunks/{App-lzeJz92X.js → App-ftICpqDz.js} +256 -281
- package/dist/_chunks/App-ftICpqDz.js.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-Clm0iACO.mjs → PurchaseContentReleases-3tRbmbY3.mjs} +2 -2
- package/dist/_chunks/PurchaseContentReleases-3tRbmbY3.mjs.map +1 -0
- package/dist/_chunks/{PurchaseContentReleases-YhAPgpG9.js → PurchaseContentReleases-bpIYXOfu.js} +2 -2
- package/dist/_chunks/PurchaseContentReleases-bpIYXOfu.js.map +1 -0
- package/dist/_chunks/{en-gcJJ5htG.js → en-4CUzVH2g.js} +2 -3
- package/dist/_chunks/en-4CUzVH2g.js.map +1 -0
- package/dist/_chunks/{en-WuuhP6Bn.mjs → en-pOJ6G5fC.mjs} +2 -3
- package/dist/_chunks/en-pOJ6G5fC.mjs.map +1 -0
- package/dist/_chunks/{index--4AgLDzb.mjs → index-8LrruHqK.mjs} +33 -27
- package/dist/_chunks/index-8LrruHqK.mjs.map +1 -0
- package/dist/_chunks/{index-Nf1JfI-m.js → index-RYVGXFeL.js} +29 -23
- package/dist/_chunks/index-RYVGXFeL.js.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/server/index.js +344 -203
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +344 -204
- package/dist/server/index.mjs.map +1 -1
- package/package.json +21 -14
- package/dist/_chunks/App-PQlYzNfb.mjs.map +0 -1
- package/dist/_chunks/App-lzeJz92X.js.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +0 -1
- package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +0 -1
- package/dist/_chunks/en-WuuhP6Bn.mjs.map +0 -1
- package/dist/_chunks/en-gcJJ5htG.js.map +0 -1
- package/dist/_chunks/index--4AgLDzb.mjs.map +0 -1
- package/dist/_chunks/index-Nf1JfI-m.js.map +0 -1
- package/dist/admin/src/components/CMReleasesContainer.d.ts +0 -1
- package/dist/admin/src/components/RelativeTime.d.ts +0 -28
- package/dist/admin/src/components/ReleaseActionMenu.d.ts +0 -26
- package/dist/admin/src/components/ReleaseActionOptions.d.ts +0 -9
- package/dist/admin/src/components/ReleaseModal.d.ts +0 -16
- package/dist/admin/src/constants.d.ts +0 -58
- package/dist/admin/src/index.d.ts +0 -3
- package/dist/admin/src/pages/App.d.ts +0 -1
- package/dist/admin/src/pages/PurchaseContentReleases.d.ts +0 -2
- package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +0 -2
- package/dist/admin/src/pages/ReleasesPage.d.ts +0 -8
- package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +0 -181
- package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +0 -39
- package/dist/admin/src/pluginId.d.ts +0 -1
- package/dist/admin/src/services/axios.d.ts +0 -29
- package/dist/admin/src/services/release.d.ts +0 -369
- package/dist/admin/src/store/hooks.d.ts +0 -7
- package/dist/admin/src/utils/time.d.ts +0 -1
- package/dist/server/src/bootstrap.d.ts +0 -5
- package/dist/server/src/bootstrap.d.ts.map +0 -1
- package/dist/server/src/constants.d.ts +0 -12
- package/dist/server/src/constants.d.ts.map +0 -1
- package/dist/server/src/content-types/index.d.ts +0 -99
- package/dist/server/src/content-types/index.d.ts.map +0 -1
- package/dist/server/src/content-types/release/index.d.ts +0 -48
- package/dist/server/src/content-types/release/index.d.ts.map +0 -1
- package/dist/server/src/content-types/release/schema.d.ts +0 -47
- package/dist/server/src/content-types/release/schema.d.ts.map +0 -1
- package/dist/server/src/content-types/release-action/index.d.ts +0 -50
- package/dist/server/src/content-types/release-action/index.d.ts.map +0 -1
- package/dist/server/src/content-types/release-action/schema.d.ts +0 -49
- package/dist/server/src/content-types/release-action/schema.d.ts.map +0 -1
- package/dist/server/src/controllers/index.d.ts +0 -18
- package/dist/server/src/controllers/index.d.ts.map +0 -1
- package/dist/server/src/controllers/release-action.d.ts +0 -9
- package/dist/server/src/controllers/release-action.d.ts.map +0 -1
- package/dist/server/src/controllers/release.d.ts +0 -11
- package/dist/server/src/controllers/release.d.ts.map +0 -1
- package/dist/server/src/controllers/validation/release-action.d.ts +0 -3
- package/dist/server/src/controllers/validation/release-action.d.ts.map +0 -1
- package/dist/server/src/controllers/validation/release.d.ts +0 -2
- package/dist/server/src/controllers/validation/release.d.ts.map +0 -1
- package/dist/server/src/destroy.d.ts +0 -5
- package/dist/server/src/destroy.d.ts.map +0 -1
- package/dist/server/src/index.d.ts +0 -2092
- package/dist/server/src/index.d.ts.map +0 -1
- package/dist/server/src/migrations/index.d.ts +0 -10
- package/dist/server/src/migrations/index.d.ts.map +0 -1
- package/dist/server/src/register.d.ts +0 -5
- package/dist/server/src/register.d.ts.map +0 -1
- package/dist/server/src/routes/index.d.ts +0 -35
- package/dist/server/src/routes/index.d.ts.map +0 -1
- package/dist/server/src/routes/release-action.d.ts +0 -18
- package/dist/server/src/routes/release-action.d.ts.map +0 -1
- package/dist/server/src/routes/release.d.ts +0 -18
- package/dist/server/src/routes/release.d.ts.map +0 -1
- package/dist/server/src/services/index.d.ts +0 -1826
- package/dist/server/src/services/index.d.ts.map +0 -1
- package/dist/server/src/services/release.d.ts +0 -66
- package/dist/server/src/services/release.d.ts.map +0 -1
- package/dist/server/src/services/scheduling.d.ts +0 -18
- package/dist/server/src/services/scheduling.d.ts.map +0 -1
- package/dist/server/src/services/validation.d.ts +0 -14
- package/dist/server/src/services/validation.d.ts.map +0 -1
- package/dist/server/src/utils/index.d.ts +0 -14
- package/dist/server/src/utils/index.d.ts.map +0 -1
- package/dist/shared/contracts/release-actions.d.ts +0 -105
- package/dist/shared/contracts/release-actions.d.ts.map +0 -1
- package/dist/shared/contracts/releases.d.ts +0 -166
- package/dist/shared/contracts/releases.d.ts.map +0 -1
- package/dist/shared/types.d.ts +0 -24
- package/dist/shared/types.d.ts.map +0 -1
- package/dist/shared/validation-schemas.d.ts +0 -2
- package/dist/shared/validation-schemas.d.ts.map +0 -1
|
@@ -1,53 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { useLocation,
|
|
4
|
-
import { g as getTimezoneOffset, p as pluginId, u as useGetReleasesQuery, a as useCreateReleaseMutation, P as PERMISSIONS, i as isAxiosError, b as useGetReleaseQuery, c as useUpdateReleaseMutation, d as useDeleteReleaseMutation, e as usePublishReleaseMutation, f as useTypedDispatch, h as useGetReleaseActionsQuery, j as useUpdateReleaseActionMutation, R as ReleaseActionOptions, k as ReleaseActionMenu, r as releaseApi } from "./index
|
|
1
|
+
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { RelativeTime, useNotification, useAPIErrorHandler, useQueryParams, useTracking, LoadingIndicatorPage, CheckPermissions, PageSizeURLQuery, PaginationURLQuery, AnErrorOccurred, ConfirmDialog, useRBAC, NoContent, Table, CheckPagePermissions } from "@strapi/helper-plugin";
|
|
3
|
+
import { useLocation, useHistory, useParams, Redirect, Link as Link$2, Switch, Route } from "react-router-dom";
|
|
4
|
+
import { g as getTimezoneOffset, p as pluginId, u as useGetReleasesQuery, a as useCreateReleaseMutation, P as PERMISSIONS, i as isAxiosError, b as useGetReleaseQuery, c as useUpdateReleaseMutation, d as useDeleteReleaseMutation, e as usePublishReleaseMutation, f as useTypedDispatch, h as useGetReleaseActionsQuery, j as useUpdateReleaseActionMutation, R as ReleaseActionOptions, k as ReleaseActionMenu, r as releaseApi } from "./index-8LrruHqK.mjs";
|
|
5
5
|
import * as React from "react";
|
|
6
|
-
import {
|
|
6
|
+
import { useLicenseLimits, unstable_useDocument } from "@strapi/admin/strapi-admin";
|
|
7
|
+
import { ModalLayout, ModalHeader, Typography, ModalBody, Flex, TextInput, Box, Checkbox, DatePicker, TimePicker, ModalFooter, Button, Combobox, ComboboxOption, Alert, Main, HeaderLayout, ContentLayout, TabGroup, Tabs, Tab, Divider, TabPanels, TabPanel, EmptyStateLayout, Grid, GridItem, Badge, Link as Link$1, IconButton, SingleSelect, SingleSelectOption, Tr, Td, Icon, Tooltip } from "@strapi/design-system";
|
|
7
8
|
import { Link, Menu, LinkButton } from "@strapi/design-system/v2";
|
|
8
|
-
import {
|
|
9
|
-
import { Plus, EmptyDocuments, Pencil, Trash, More, CrossCircle, CheckCircle } from "@strapi/icons";
|
|
9
|
+
import { Plus, EmptyDocuments, Pencil, Trash, ArrowLeft, More, CrossCircle, CheckCircle } from "@strapi/icons";
|
|
10
10
|
import format from "date-fns/format";
|
|
11
|
-
import {
|
|
11
|
+
import { utcToZonedTime, zonedTimeToUtc } from "date-fns-tz";
|
|
12
12
|
import { useIntl } from "react-intl";
|
|
13
13
|
import styled from "styled-components";
|
|
14
|
-
import {
|
|
14
|
+
import { formatISO } from "date-fns";
|
|
15
15
|
import { Formik, Form, useFormikContext } from "formik";
|
|
16
16
|
import * as yup from "yup";
|
|
17
17
|
import "@reduxjs/toolkit/query";
|
|
18
18
|
import "axios";
|
|
19
19
|
import "@reduxjs/toolkit/query/react";
|
|
20
20
|
import "react-redux";
|
|
21
|
-
const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
|
|
22
|
-
const RelativeTime = React.forwardRef(
|
|
23
|
-
({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
|
|
24
|
-
const { formatRelativeTime, formatDate, formatTime } = useIntl();
|
|
25
|
-
const interval = intervalToDuration({
|
|
26
|
-
start: timestamp,
|
|
27
|
-
end: Date.now()
|
|
28
|
-
// see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.
|
|
29
|
-
});
|
|
30
|
-
const unit = intervals.find((intervalUnit) => {
|
|
31
|
-
return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
|
|
32
|
-
});
|
|
33
|
-
const relativeTime = isPast(timestamp) ? -interval[unit] : interval[unit];
|
|
34
|
-
const customInterval = customIntervals.find(
|
|
35
|
-
(custom) => interval[custom.unit] < custom.threshold
|
|
36
|
-
);
|
|
37
|
-
const displayText = customInterval ? customInterval.text : formatRelativeTime(relativeTime, unit, { numeric: "auto" });
|
|
38
|
-
return /* @__PURE__ */ jsx(
|
|
39
|
-
"time",
|
|
40
|
-
{
|
|
41
|
-
ref: forwardedRef,
|
|
42
|
-
dateTime: timestamp.toISOString(),
|
|
43
|
-
role: "time",
|
|
44
|
-
title: `${formatDate(timestamp)} ${formatTime(timestamp)}`,
|
|
45
|
-
...restProps,
|
|
46
|
-
children: displayText
|
|
47
|
-
}
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
);
|
|
51
21
|
const RELEASE_SCHEMA = yup.object().shape({
|
|
52
22
|
name: yup.string().trim().required(),
|
|
53
23
|
scheduledAt: yup.string().nullable(),
|
|
@@ -77,7 +47,6 @@ const ReleaseModal = ({
|
|
|
77
47
|
const { formatMessage } = useIntl();
|
|
78
48
|
const { pathname } = useLocation();
|
|
79
49
|
const isCreatingRelease = pathname === `/plugins/${pluginId}`;
|
|
80
|
-
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
81
50
|
const { timezoneList, systemTimezone = { value: "UTC+00:00-Africa/Abidjan " } } = getTimezones(
|
|
82
51
|
initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : /* @__PURE__ */ new Date()
|
|
83
52
|
);
|
|
@@ -85,13 +54,12 @@ const ReleaseModal = ({
|
|
|
85
54
|
const { date, time, timezone } = values;
|
|
86
55
|
if (!date || !time || !timezone)
|
|
87
56
|
return null;
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
return zonedTimeToUtc(formattedDate, timezoneWithoutOffset);
|
|
57
|
+
const timezoneWithoutOffset = timezone.split("&")[1];
|
|
58
|
+
return zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);
|
|
91
59
|
};
|
|
92
60
|
const getTimezoneWithOffset = () => {
|
|
93
61
|
const currentTimezone = timezoneList.find(
|
|
94
|
-
(timezone) => timezone.value.split("
|
|
62
|
+
(timezone) => timezone.value.split("&")[1] === initialValues.timezone
|
|
95
63
|
);
|
|
96
64
|
return currentTimezone?.value || systemTimezone.value;
|
|
97
65
|
};
|
|
@@ -109,7 +77,7 @@ const ReleaseModal = ({
|
|
|
109
77
|
onSubmit: (values) => {
|
|
110
78
|
handleSubmit({
|
|
111
79
|
...values,
|
|
112
|
-
timezone: values.timezone ? values.timezone.split("
|
|
80
|
+
timezone: values.timezone ? values.timezone.split("&")[1] : null,
|
|
113
81
|
scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null
|
|
114
82
|
});
|
|
115
83
|
},
|
|
@@ -135,92 +103,88 @@ const ReleaseModal = ({
|
|
|
135
103
|
required: true
|
|
136
104
|
}
|
|
137
105
|
),
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
106
|
+
/* @__PURE__ */ jsx(Box, { width: "max-content", children: /* @__PURE__ */ jsx(
|
|
107
|
+
Checkbox,
|
|
108
|
+
{
|
|
109
|
+
name: "isScheduled",
|
|
110
|
+
value: values.isScheduled,
|
|
111
|
+
onChange: (event) => {
|
|
112
|
+
setFieldValue("isScheduled", event.target.checked);
|
|
113
|
+
if (!event.target.checked) {
|
|
114
|
+
setFieldValue("date", null);
|
|
115
|
+
setFieldValue("time", "");
|
|
116
|
+
setFieldValue("timezone", null);
|
|
117
|
+
} else {
|
|
118
|
+
setFieldValue("date", initialValues.date);
|
|
119
|
+
setFieldValue("time", initialValues.time);
|
|
120
|
+
setFieldValue("timezone", initialValues.timezone ?? systemTimezone?.value);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
children: /* @__PURE__ */ jsx(
|
|
124
|
+
Typography,
|
|
125
|
+
{
|
|
126
|
+
textColor: values.isScheduled ? "primary600" : "neutral800",
|
|
127
|
+
fontWeight: values.isScheduled ? "semiBold" : "regular",
|
|
128
|
+
children: formatMessage({
|
|
129
|
+
id: "modal.form.input.label.schedule-release",
|
|
130
|
+
defaultMessage: "Schedule release"
|
|
131
|
+
})
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
) }),
|
|
136
|
+
values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
137
|
+
/* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
|
|
138
|
+
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
|
|
139
|
+
DatePicker,
|
|
140
|
+
{
|
|
141
|
+
label: formatMessage({
|
|
142
|
+
id: "content-releases.modal.form.input.label.date",
|
|
143
|
+
defaultMessage: "Date"
|
|
144
|
+
}),
|
|
145
|
+
name: "date",
|
|
146
|
+
error: errors.date,
|
|
147
|
+
onChange: (date) => {
|
|
148
|
+
const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
|
|
149
|
+
setFieldValue("date", isoFormatDate);
|
|
150
|
+
},
|
|
151
|
+
clearLabel: formatMessage({
|
|
152
|
+
id: "content-releases.modal.form.input.clearLabel",
|
|
153
|
+
defaultMessage: "Clear"
|
|
154
|
+
}),
|
|
155
|
+
onClear: () => {
|
|
147
156
|
setFieldValue("date", null);
|
|
157
|
+
},
|
|
158
|
+
selectedDate: values.date || void 0,
|
|
159
|
+
required: true,
|
|
160
|
+
minDate: utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
|
|
161
|
+
}
|
|
162
|
+
) }),
|
|
163
|
+
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
|
|
164
|
+
TimePicker,
|
|
165
|
+
{
|
|
166
|
+
label: formatMessage({
|
|
167
|
+
id: "content-releases.modal.form.input.label.time",
|
|
168
|
+
defaultMessage: "Time"
|
|
169
|
+
}),
|
|
170
|
+
name: "time",
|
|
171
|
+
error: errors.time,
|
|
172
|
+
onChange: (time) => {
|
|
173
|
+
setFieldValue("time", time);
|
|
174
|
+
},
|
|
175
|
+
clearLabel: formatMessage({
|
|
176
|
+
id: "content-releases.modal.form.input.clearLabel",
|
|
177
|
+
defaultMessage: "Clear"
|
|
178
|
+
}),
|
|
179
|
+
onClear: () => {
|
|
148
180
|
setFieldValue("time", "");
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
},
|
|
159
|
-
children: /* @__PURE__ */ jsx(
|
|
160
|
-
Typography,
|
|
161
|
-
{
|
|
162
|
-
textColor: values.isScheduled ? "primary600" : "neutral800",
|
|
163
|
-
fontWeight: values.isScheduled ? "semiBold" : "regular",
|
|
164
|
-
children: formatMessage({
|
|
165
|
-
id: "modal.form.input.label.schedule-release",
|
|
166
|
-
defaultMessage: "Schedule release"
|
|
167
|
-
})
|
|
168
|
-
}
|
|
169
|
-
)
|
|
170
|
-
}
|
|
171
|
-
) }),
|
|
172
|
-
values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
173
|
-
/* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
|
|
174
|
-
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
|
|
175
|
-
DatePicker,
|
|
176
|
-
{
|
|
177
|
-
label: formatMessage({
|
|
178
|
-
id: "content-releases.modal.form.input.label.date",
|
|
179
|
-
defaultMessage: "Date"
|
|
180
|
-
}),
|
|
181
|
-
name: "date",
|
|
182
|
-
error: errors.date,
|
|
183
|
-
onChange: (date) => {
|
|
184
|
-
const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
|
|
185
|
-
setFieldValue("date", isoFormatDate);
|
|
186
|
-
},
|
|
187
|
-
clearLabel: formatMessage({
|
|
188
|
-
id: "content-releases.modal.form.input.clearLabel",
|
|
189
|
-
defaultMessage: "Clear"
|
|
190
|
-
}),
|
|
191
|
-
onClear: () => {
|
|
192
|
-
setFieldValue("date", null);
|
|
193
|
-
},
|
|
194
|
-
selectedDate: values.date || void 0,
|
|
195
|
-
required: true
|
|
196
|
-
}
|
|
197
|
-
) }),
|
|
198
|
-
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
|
|
199
|
-
TimePicker,
|
|
200
|
-
{
|
|
201
|
-
label: formatMessage({
|
|
202
|
-
id: "content-releases.modal.form.input.label.time",
|
|
203
|
-
defaultMessage: "Time"
|
|
204
|
-
}),
|
|
205
|
-
name: "time",
|
|
206
|
-
error: errors.time,
|
|
207
|
-
onChange: (time) => {
|
|
208
|
-
setFieldValue("time", time);
|
|
209
|
-
},
|
|
210
|
-
clearLabel: formatMessage({
|
|
211
|
-
id: "content-releases.modal.form.input.clearLabel",
|
|
212
|
-
defaultMessage: "Clear"
|
|
213
|
-
}),
|
|
214
|
-
onClear: () => {
|
|
215
|
-
setFieldValue("time", "");
|
|
216
|
-
},
|
|
217
|
-
value: values.time || void 0,
|
|
218
|
-
required: true
|
|
219
|
-
}
|
|
220
|
-
) })
|
|
221
|
-
] }),
|
|
222
|
-
/* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
|
|
223
|
-
] })
|
|
181
|
+
},
|
|
182
|
+
value: values.time || void 0,
|
|
183
|
+
required: true
|
|
184
|
+
}
|
|
185
|
+
) })
|
|
186
|
+
] }),
|
|
187
|
+
/* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
|
|
224
188
|
] })
|
|
225
189
|
] }) }),
|
|
226
190
|
/* @__PURE__ */ jsx(
|
|
@@ -244,10 +208,10 @@ const ReleaseModal = ({
|
|
|
244
208
|
const getTimezones = (selectedDate) => {
|
|
245
209
|
const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
|
|
246
210
|
const utcOffset = getTimezoneOffset(timezone, selectedDate);
|
|
247
|
-
return { offset: utcOffset, value: `${utcOffset}
|
|
211
|
+
return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
|
|
248
212
|
});
|
|
249
213
|
const systemTimezone = timezoneList.find(
|
|
250
|
-
(timezone) => timezone.value.split("
|
|
214
|
+
(timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
251
215
|
);
|
|
252
216
|
return { timezoneList, systemTimezone };
|
|
253
217
|
};
|
|
@@ -259,7 +223,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
259
223
|
if (values.date) {
|
|
260
224
|
const { timezoneList: timezoneList2 } = getTimezones(new Date(values.date));
|
|
261
225
|
setTimezoneList(timezoneList2);
|
|
262
|
-
const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("
|
|
226
|
+
const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("&")[1] === values.timezone.split("&")[1]);
|
|
263
227
|
if (updatedTimezone) {
|
|
264
228
|
setFieldValue("timezone", updatedTimezone.value);
|
|
265
229
|
}
|
|
@@ -272,9 +236,10 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
272
236
|
id: "content-releases.modal.form.input.label.timezone",
|
|
273
237
|
defaultMessage: "Timezone"
|
|
274
238
|
}),
|
|
239
|
+
autocomplete: { type: "list", filter: "contains" },
|
|
275
240
|
name: "timezone",
|
|
276
241
|
value: values.timezone || void 0,
|
|
277
|
-
textValue: values.timezone ? values.timezone.replace(
|
|
242
|
+
textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
|
|
278
243
|
onChange: (timezone) => {
|
|
279
244
|
setFieldValue("timezone", timezone);
|
|
280
245
|
},
|
|
@@ -286,7 +251,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
286
251
|
},
|
|
287
252
|
error: errors.timezone,
|
|
288
253
|
required: true,
|
|
289
|
-
children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace(
|
|
254
|
+
children: timezoneList.map((timezone) => /* @__PURE__ */ jsx(ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
|
|
290
255
|
}
|
|
291
256
|
);
|
|
292
257
|
};
|
|
@@ -323,9 +288,8 @@ const getBadgeProps = (status) => {
|
|
|
323
288
|
};
|
|
324
289
|
const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
325
290
|
const { formatMessage } = useIntl();
|
|
326
|
-
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
327
291
|
if (isError) {
|
|
328
|
-
return /* @__PURE__ */ jsx(
|
|
292
|
+
return /* @__PURE__ */ jsx(AnErrorOccurred, {});
|
|
329
293
|
}
|
|
330
294
|
if (releases?.length === 0) {
|
|
331
295
|
return /* @__PURE__ */ jsx(
|
|
@@ -344,7 +308,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
344
308
|
}
|
|
345
309
|
);
|
|
346
310
|
}
|
|
347
|
-
return /* @__PURE__ */ jsx(Grid, { gap: 4, children: releases.map(({ id, name,
|
|
311
|
+
return /* @__PURE__ */ jsx(Grid, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsx(GridItem, { col: 3, s: 6, xs: 12, children: /* @__PURE__ */ jsx(LinkCard, { href: `content-releases/${id}`, isExternal: false, children: /* @__PURE__ */ jsxs(
|
|
348
312
|
Flex,
|
|
349
313
|
{
|
|
350
314
|
direction: "column",
|
|
@@ -360,16 +324,10 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
360
324
|
children: [
|
|
361
325
|
/* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "start", gap: 1, children: [
|
|
362
326
|
/* @__PURE__ */ jsx(Typography, { as: "h3", variant: "delta", fontWeight: "bold", children: name }),
|
|
363
|
-
/* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children:
|
|
327
|
+
/* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(CapitalizeRelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
|
|
364
328
|
id: "content-releases.pages.Releases.not-scheduled",
|
|
365
329
|
defaultMessage: "Not scheduled"
|
|
366
|
-
})
|
|
367
|
-
{
|
|
368
|
-
id: "content-releases.page.Releases.release-item.entries",
|
|
369
|
-
defaultMessage: "{number, plural, =0 {No entries} one {# entry} other {# entries}}"
|
|
370
|
-
},
|
|
371
|
-
{ number: actions.meta.count }
|
|
372
|
-
) })
|
|
330
|
+
}) })
|
|
373
331
|
] }),
|
|
374
332
|
/* @__PURE__ */ jsx(Badge, { ...getBadgeProps(status), children: status })
|
|
375
333
|
]
|
|
@@ -388,8 +346,7 @@ const INITIAL_FORM_VALUES = {
|
|
|
388
346
|
name: "",
|
|
389
347
|
date: null,
|
|
390
348
|
time: "",
|
|
391
|
-
|
|
392
|
-
isScheduled: window.strapi.future.isEnabled("contentReleasesScheduling"),
|
|
349
|
+
isScheduled: true,
|
|
393
350
|
scheduledAt: null,
|
|
394
351
|
timezone: null
|
|
395
352
|
};
|
|
@@ -399,7 +356,7 @@ const ReleasesPage = () => {
|
|
|
399
356
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
400
357
|
const toggleNotification = useNotification();
|
|
401
358
|
const { formatMessage } = useIntl();
|
|
402
|
-
const
|
|
359
|
+
const { push, replace } = useHistory();
|
|
403
360
|
const { formatAPIError } = useAPIErrorHandler();
|
|
404
361
|
const [{ query }, setQuery] = useQueryParams();
|
|
405
362
|
const response = useGetReleasesQuery(query);
|
|
@@ -423,9 +380,9 @@ const ReleasesPage = () => {
|
|
|
423
380
|
defaultMessage: "Please try again or open another release."
|
|
424
381
|
})
|
|
425
382
|
});
|
|
426
|
-
|
|
383
|
+
replace({ state: null });
|
|
427
384
|
}
|
|
428
|
-
}, [formatMessage, location?.state?.errors,
|
|
385
|
+
}, [formatMessage, location?.state?.errors, replace, toggleNotification]);
|
|
429
386
|
React.useEffect(() => {
|
|
430
387
|
if (tabRef.current) {
|
|
431
388
|
tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
|
|
@@ -435,7 +392,7 @@ const ReleasesPage = () => {
|
|
|
435
392
|
setReleaseModalShown((prev) => !prev);
|
|
436
393
|
};
|
|
437
394
|
if (isLoading) {
|
|
438
|
-
return /* @__PURE__ */ jsx(
|
|
395
|
+
return /* @__PURE__ */ jsx(Main, { "aria-busy": isLoading, children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) });
|
|
439
396
|
}
|
|
440
397
|
const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
|
|
441
398
|
const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
|
|
@@ -466,7 +423,7 @@ const ReleasesPage = () => {
|
|
|
466
423
|
})
|
|
467
424
|
});
|
|
468
425
|
trackUsage("didCreateRelease");
|
|
469
|
-
|
|
426
|
+
push(`/plugins/content-releases/${response2.data.data.id}`);
|
|
470
427
|
} else if (isAxiosError(response2.error)) {
|
|
471
428
|
toggleNotification({
|
|
472
429
|
type: "warning",
|
|
@@ -581,17 +538,23 @@ const ReleasesPage = () => {
|
|
|
581
538
|
]
|
|
582
539
|
}
|
|
583
540
|
),
|
|
584
|
-
/* @__PURE__ */ jsxs(
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
541
|
+
response.currentData?.meta?.pagination?.total ? /* @__PURE__ */ jsxs(Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
|
|
542
|
+
/* @__PURE__ */ jsx(
|
|
543
|
+
PageSizeURLQuery,
|
|
544
|
+
{
|
|
545
|
+
options: ["8", "16", "32", "64"],
|
|
546
|
+
defaultValue: response?.currentData?.meta?.pagination?.pageSize.toString()
|
|
547
|
+
}
|
|
548
|
+
),
|
|
549
|
+
/* @__PURE__ */ jsx(
|
|
550
|
+
PaginationURLQuery,
|
|
551
|
+
{
|
|
552
|
+
pagination: {
|
|
553
|
+
pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
)
|
|
557
|
+
] }) : null
|
|
595
558
|
] }) }),
|
|
596
559
|
releaseModalShown && /* @__PURE__ */ jsx(
|
|
597
560
|
ReleaseModal,
|
|
@@ -639,18 +602,14 @@ const TrashIcon = styled(Trash)`
|
|
|
639
602
|
const TypographyMaxWidth = styled(Typography)`
|
|
640
603
|
max-width: 300px;
|
|
641
604
|
`;
|
|
642
|
-
const EntryValidationText = ({ action, schema, entry }) => {
|
|
605
|
+
const EntryValidationText = ({ action, schema, components, entry }) => {
|
|
643
606
|
const { formatMessage } = useIntl();
|
|
644
|
-
const { validate } = unstable_useDocument(
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
skip: !schema
|
|
651
|
-
}
|
|
652
|
-
);
|
|
653
|
-
const errors = validate(entry) ?? {};
|
|
607
|
+
const { validate } = unstable_useDocument();
|
|
608
|
+
const { errors } = validate(entry, {
|
|
609
|
+
contentType: schema,
|
|
610
|
+
components,
|
|
611
|
+
isCreatingEntry: false
|
|
612
|
+
});
|
|
654
613
|
if (Object.keys(errors).length > 0) {
|
|
655
614
|
const validationErrorsMessages = Object.entries(errors).map(
|
|
656
615
|
([key, value]) => formatMessage(
|
|
@@ -698,12 +657,7 @@ const ReleaseDetailsLayout = ({
|
|
|
698
657
|
isLoading: isLoadingDetails,
|
|
699
658
|
isError,
|
|
700
659
|
error
|
|
701
|
-
} = useGetReleaseQuery(
|
|
702
|
-
{ id: releaseId },
|
|
703
|
-
{
|
|
704
|
-
skip: !releaseId
|
|
705
|
-
}
|
|
706
|
-
);
|
|
660
|
+
} = useGetReleaseQuery({ id: releaseId });
|
|
707
661
|
const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();
|
|
708
662
|
const toggleNotification = useNotification();
|
|
709
663
|
const { formatAPIError } = useAPIErrorHandler();
|
|
@@ -713,8 +667,8 @@ const ReleaseDetailsLayout = ({
|
|
|
713
667
|
const dispatch = useTypedDispatch();
|
|
714
668
|
const { trackUsage } = useTracking();
|
|
715
669
|
const release = data?.data;
|
|
716
|
-
const handlePublishRelease =
|
|
717
|
-
const response = await publishRelease({ id });
|
|
670
|
+
const handlePublishRelease = async () => {
|
|
671
|
+
const response = await publishRelease({ id: releaseId });
|
|
718
672
|
if ("data" in response) {
|
|
719
673
|
toggleNotification({
|
|
720
674
|
type: "success",
|
|
@@ -742,7 +696,12 @@ const ReleaseDetailsLayout = ({
|
|
|
742
696
|
}
|
|
743
697
|
};
|
|
744
698
|
const handleRefresh = () => {
|
|
745
|
-
dispatch(
|
|
699
|
+
dispatch(
|
|
700
|
+
releaseApi.util.invalidateTags([
|
|
701
|
+
{ type: "ReleaseAction", id: "LIST" },
|
|
702
|
+
{ type: "Release", id: releaseId }
|
|
703
|
+
])
|
|
704
|
+
);
|
|
746
705
|
};
|
|
747
706
|
const getCreatedByUser = () => {
|
|
748
707
|
if (!release?.createdBy) {
|
|
@@ -757,26 +716,27 @@ const ReleaseDetailsLayout = ({
|
|
|
757
716
|
return release.createdBy.email;
|
|
758
717
|
};
|
|
759
718
|
if (isLoadingDetails) {
|
|
760
|
-
return /* @__PURE__ */ jsx(
|
|
719
|
+
return /* @__PURE__ */ jsx(Main, { "aria-busy": isLoadingDetails, children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) });
|
|
761
720
|
}
|
|
762
721
|
if (isError || !release) {
|
|
763
722
|
return /* @__PURE__ */ jsx(
|
|
764
|
-
|
|
723
|
+
Redirect,
|
|
765
724
|
{
|
|
766
|
-
to:
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
725
|
+
to: {
|
|
726
|
+
pathname: "/plugins/content-releases",
|
|
727
|
+
state: {
|
|
728
|
+
errors: [
|
|
729
|
+
{
|
|
730
|
+
code: error?.code
|
|
731
|
+
}
|
|
732
|
+
]
|
|
733
|
+
}
|
|
773
734
|
}
|
|
774
735
|
}
|
|
775
736
|
);
|
|
776
737
|
}
|
|
777
738
|
const totalEntries = release.actions.meta.count || 0;
|
|
778
739
|
const hasCreatedByUser = Boolean(getCreatedByUser());
|
|
779
|
-
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
780
740
|
const isScheduled = release.scheduledAt && release.timezone;
|
|
781
741
|
const numberOfEntriesText = formatMessage(
|
|
782
742
|
{
|
|
@@ -811,10 +771,13 @@ const ReleaseDetailsLayout = ({
|
|
|
811
771
|
{
|
|
812
772
|
title: release.name,
|
|
813
773
|
subtitle: /* @__PURE__ */ jsxs(Flex, { gap: 2, lineHeight: 6, children: [
|
|
814
|
-
/* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (
|
|
774
|
+
/* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
|
|
815
775
|
/* @__PURE__ */ jsx(Badge, { ...getBadgeProps(release.status), children: release.status })
|
|
816
776
|
] }),
|
|
817
|
-
navigationAction: /* @__PURE__ */ jsx(
|
|
777
|
+
navigationAction: /* @__PURE__ */ jsx(Link$1, { startIcon: /* @__PURE__ */ jsx(ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
|
|
778
|
+
id: "global.back",
|
|
779
|
+
defaultMessage: "Back"
|
|
780
|
+
}) }),
|
|
818
781
|
primaryAction: !release.releasedAt && /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
|
|
819
782
|
/* @__PURE__ */ jsxs(Menu.Root, { children: [
|
|
820
783
|
/* @__PURE__ */ jsx(
|
|
@@ -903,7 +866,7 @@ const ReleaseDetailsLayout = ({
|
|
|
903
866
|
{
|
|
904
867
|
size: "S",
|
|
905
868
|
variant: "default",
|
|
906
|
-
onClick: handlePublishRelease
|
|
869
|
+
onClick: handlePublishRelease,
|
|
907
870
|
loading: isPublishing,
|
|
908
871
|
disabled: release.actions.meta.count === 0,
|
|
909
872
|
children: formatMessage({
|
|
@@ -937,8 +900,9 @@ const getGroupByOptionLabel = (value) => {
|
|
|
937
900
|
defaultMessage: "Content-Types"
|
|
938
901
|
};
|
|
939
902
|
};
|
|
940
|
-
const ReleaseDetailsBody = (
|
|
903
|
+
const ReleaseDetailsBody = () => {
|
|
941
904
|
const { formatMessage } = useIntl();
|
|
905
|
+
const { releaseId } = useParams();
|
|
942
906
|
const [{ query }, setQuery] = useQueryParams();
|
|
943
907
|
const toggleNotification = useNotification();
|
|
944
908
|
const { formatAPIError } = useAPIErrorHandler();
|
|
@@ -993,7 +957,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
993
957
|
}
|
|
994
958
|
};
|
|
995
959
|
if (isLoading || isReleaseLoading) {
|
|
996
|
-
return /* @__PURE__ */ jsx(
|
|
960
|
+
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) });
|
|
997
961
|
}
|
|
998
962
|
const releaseActions = data?.data;
|
|
999
963
|
const releaseMeta = data?.meta;
|
|
@@ -1012,26 +976,32 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1012
976
|
});
|
|
1013
977
|
}
|
|
1014
978
|
return /* @__PURE__ */ jsx(
|
|
1015
|
-
|
|
979
|
+
Redirect,
|
|
1016
980
|
{
|
|
1017
|
-
to:
|
|
1018
|
-
|
|
1019
|
-
|
|
981
|
+
to: {
|
|
982
|
+
pathname: "/plugins/content-releases",
|
|
983
|
+
state: {
|
|
984
|
+
errors: errorsArray
|
|
985
|
+
}
|
|
1020
986
|
}
|
|
1021
987
|
}
|
|
1022
988
|
);
|
|
1023
989
|
}
|
|
1024
990
|
if (isError || !releaseActions) {
|
|
1025
|
-
return /* @__PURE__ */ jsx(
|
|
991
|
+
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(AnErrorOccurred, {}) });
|
|
1026
992
|
}
|
|
1027
993
|
if (Object.keys(releaseActions).length === 0) {
|
|
1028
994
|
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(
|
|
1029
|
-
|
|
995
|
+
NoContent,
|
|
1030
996
|
{
|
|
997
|
+
content: {
|
|
998
|
+
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
999
|
+
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1000
|
+
},
|
|
1031
1001
|
action: /* @__PURE__ */ jsx(
|
|
1032
1002
|
LinkButton,
|
|
1033
1003
|
{
|
|
1034
|
-
as: Link$
|
|
1004
|
+
as: Link$2,
|
|
1035
1005
|
to: {
|
|
1036
1006
|
pathname: "/content-manager"
|
|
1037
1007
|
},
|
|
@@ -1042,54 +1012,10 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1042
1012
|
defaultMessage: "Open the Content Manager"
|
|
1043
1013
|
})
|
|
1044
1014
|
}
|
|
1045
|
-
)
|
|
1046
|
-
icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "10rem" }),
|
|
1047
|
-
content: formatMessage({
|
|
1048
|
-
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1049
|
-
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1050
|
-
})
|
|
1015
|
+
)
|
|
1051
1016
|
}
|
|
1052
1017
|
) });
|
|
1053
1018
|
}
|
|
1054
|
-
const headers = [
|
|
1055
|
-
{
|
|
1056
|
-
label: formatMessage({
|
|
1057
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1058
|
-
defaultMessage: "name"
|
|
1059
|
-
}),
|
|
1060
|
-
name: "name"
|
|
1061
|
-
},
|
|
1062
|
-
{
|
|
1063
|
-
label: formatMessage({
|
|
1064
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1065
|
-
defaultMessage: "locale"
|
|
1066
|
-
}),
|
|
1067
|
-
name: "locale"
|
|
1068
|
-
},
|
|
1069
|
-
{
|
|
1070
|
-
label: formatMessage({
|
|
1071
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1072
|
-
defaultMessage: "content-type"
|
|
1073
|
-
}),
|
|
1074
|
-
name: "content-type"
|
|
1075
|
-
},
|
|
1076
|
-
{
|
|
1077
|
-
label: formatMessage({
|
|
1078
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1079
|
-
defaultMessage: "action"
|
|
1080
|
-
}),
|
|
1081
|
-
name: "action"
|
|
1082
|
-
},
|
|
1083
|
-
...!release.releasedAt ? [
|
|
1084
|
-
{
|
|
1085
|
-
label: formatMessage({
|
|
1086
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1087
|
-
defaultMessage: "status"
|
|
1088
|
-
}),
|
|
1089
|
-
name: "status"
|
|
1090
|
-
}
|
|
1091
|
-
] : []
|
|
1092
|
-
];
|
|
1093
1019
|
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
|
|
1094
1020
|
/* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
|
|
1095
1021
|
SingleSelect,
|
|
@@ -1121,11 +1047,68 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1121
1047
|
...item,
|
|
1122
1048
|
id: Number(item.entry.id)
|
|
1123
1049
|
})),
|
|
1124
|
-
|
|
1125
|
-
isLoading
|
|
1050
|
+
colCount: releaseActions[key].length,
|
|
1051
|
+
isLoading,
|
|
1052
|
+
isFetching,
|
|
1126
1053
|
children: /* @__PURE__ */ jsxs(Table.Content, { children: [
|
|
1127
|
-
/* @__PURE__ */
|
|
1128
|
-
|
|
1054
|
+
/* @__PURE__ */ jsxs(Table.Head, { children: [
|
|
1055
|
+
/* @__PURE__ */ jsx(
|
|
1056
|
+
Table.HeaderCell,
|
|
1057
|
+
{
|
|
1058
|
+
fieldSchemaType: "string",
|
|
1059
|
+
label: formatMessage({
|
|
1060
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1061
|
+
defaultMessage: "name"
|
|
1062
|
+
}),
|
|
1063
|
+
name: "name"
|
|
1064
|
+
}
|
|
1065
|
+
),
|
|
1066
|
+
/* @__PURE__ */ jsx(
|
|
1067
|
+
Table.HeaderCell,
|
|
1068
|
+
{
|
|
1069
|
+
fieldSchemaType: "string",
|
|
1070
|
+
label: formatMessage({
|
|
1071
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1072
|
+
defaultMessage: "locale"
|
|
1073
|
+
}),
|
|
1074
|
+
name: "locale"
|
|
1075
|
+
}
|
|
1076
|
+
),
|
|
1077
|
+
/* @__PURE__ */ jsx(
|
|
1078
|
+
Table.HeaderCell,
|
|
1079
|
+
{
|
|
1080
|
+
fieldSchemaType: "string",
|
|
1081
|
+
label: formatMessage({
|
|
1082
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1083
|
+
defaultMessage: "content-type"
|
|
1084
|
+
}),
|
|
1085
|
+
name: "content-type"
|
|
1086
|
+
}
|
|
1087
|
+
),
|
|
1088
|
+
/* @__PURE__ */ jsx(
|
|
1089
|
+
Table.HeaderCell,
|
|
1090
|
+
{
|
|
1091
|
+
fieldSchemaType: "string",
|
|
1092
|
+
label: formatMessage({
|
|
1093
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1094
|
+
defaultMessage: "action"
|
|
1095
|
+
}),
|
|
1096
|
+
name: "action"
|
|
1097
|
+
}
|
|
1098
|
+
),
|
|
1099
|
+
!release.releasedAt && /* @__PURE__ */ jsx(
|
|
1100
|
+
Table.HeaderCell,
|
|
1101
|
+
{
|
|
1102
|
+
fieldSchemaType: "string",
|
|
1103
|
+
label: formatMessage({
|
|
1104
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1105
|
+
defaultMessage: "status"
|
|
1106
|
+
}),
|
|
1107
|
+
name: "status"
|
|
1108
|
+
}
|
|
1109
|
+
)
|
|
1110
|
+
] }),
|
|
1111
|
+
/* @__PURE__ */ jsx(Table.LoadingBody, {}),
|
|
1129
1112
|
/* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
|
|
1130
1113
|
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1131
1114
|
/* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
@@ -1183,17 +1166,17 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1183
1166
|
}
|
|
1184
1167
|
)
|
|
1185
1168
|
] }, `releases-group-${key}`)),
|
|
1186
|
-
/* @__PURE__ */ jsxs(
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
)
|
|
1169
|
+
/* @__PURE__ */ jsxs(Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
|
|
1170
|
+
/* @__PURE__ */ jsx(PageSizeURLQuery, { defaultValue: releaseMeta?.pagination?.pageSize.toString() }),
|
|
1171
|
+
/* @__PURE__ */ jsx(
|
|
1172
|
+
PaginationURLQuery,
|
|
1173
|
+
{
|
|
1174
|
+
pagination: {
|
|
1175
|
+
pageCount: releaseMeta?.pagination?.pageCount || 0
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
)
|
|
1179
|
+
] })
|
|
1197
1180
|
] }) });
|
|
1198
1181
|
};
|
|
1199
1182
|
const ReleaseDetailsPage = () => {
|
|
@@ -1201,19 +1184,14 @@ const ReleaseDetailsPage = () => {
|
|
|
1201
1184
|
const { releaseId } = useParams();
|
|
1202
1185
|
const toggleNotification = useNotification();
|
|
1203
1186
|
const { formatAPIError } = useAPIErrorHandler();
|
|
1204
|
-
const
|
|
1187
|
+
const { replace } = useHistory();
|
|
1205
1188
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
1206
1189
|
const [showWarningSubmit, setWarningSubmit] = React.useState(false);
|
|
1207
1190
|
const {
|
|
1208
1191
|
isLoading: isLoadingDetails,
|
|
1209
1192
|
data,
|
|
1210
1193
|
isSuccess: isSuccessDetails
|
|
1211
|
-
} = useGetReleaseQuery(
|
|
1212
|
-
{ id: releaseId },
|
|
1213
|
-
{
|
|
1214
|
-
skip: !releaseId
|
|
1215
|
-
}
|
|
1216
|
-
);
|
|
1194
|
+
} = useGetReleaseQuery({ id: releaseId });
|
|
1217
1195
|
const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();
|
|
1218
1196
|
const [deleteRelease, { isLoading: isDeletingRelease }] = useDeleteReleaseMutation();
|
|
1219
1197
|
const toggleEditReleaseModal = () => {
|
|
@@ -1226,18 +1204,15 @@ const ReleaseDetailsPage = () => {
|
|
|
1226
1204
|
{
|
|
1227
1205
|
toggleEditReleaseModal,
|
|
1228
1206
|
toggleWarningSubmit,
|
|
1229
|
-
children: /* @__PURE__ */ jsx(
|
|
1207
|
+
children: /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsx(LoadingIndicatorPage, {}) })
|
|
1230
1208
|
}
|
|
1231
1209
|
);
|
|
1232
1210
|
}
|
|
1233
|
-
if (!releaseId) {
|
|
1234
|
-
return /* @__PURE__ */ jsx(Navigate, { to: ".." });
|
|
1235
|
-
}
|
|
1236
1211
|
const releaseData = isSuccessDetails && data?.data || null;
|
|
1237
1212
|
const title = releaseData?.name || "";
|
|
1238
1213
|
const timezone = releaseData?.timezone ?? null;
|
|
1239
1214
|
const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
|
|
1240
|
-
const date = scheduledAt ?
|
|
1215
|
+
const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") : null;
|
|
1241
1216
|
const time = scheduledAt ? format(scheduledAt, "HH:mm") : "";
|
|
1242
1217
|
const handleEditRelease = async (values) => {
|
|
1243
1218
|
const response = await updateRelease({
|
|
@@ -1272,7 +1247,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1272
1247
|
id: releaseId
|
|
1273
1248
|
});
|
|
1274
1249
|
if ("data" in response) {
|
|
1275
|
-
|
|
1250
|
+
replace("/plugins/content-releases");
|
|
1276
1251
|
} else if (isAxiosError(response.error)) {
|
|
1277
1252
|
toggleNotification({
|
|
1278
1253
|
type: "warning",
|
|
@@ -1291,7 +1266,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1291
1266
|
toggleEditReleaseModal,
|
|
1292
1267
|
toggleWarningSubmit,
|
|
1293
1268
|
children: [
|
|
1294
|
-
/* @__PURE__ */ jsx(ReleaseDetailsBody, {
|
|
1269
|
+
/* @__PURE__ */ jsx(ReleaseDetailsBody, {}),
|
|
1295
1270
|
releaseModalShown && /* @__PURE__ */ jsx(
|
|
1296
1271
|
ReleaseModal,
|
|
1297
1272
|
{
|
|
@@ -1326,12 +1301,12 @@ const ReleaseDetailsPage = () => {
|
|
|
1326
1301
|
);
|
|
1327
1302
|
};
|
|
1328
1303
|
const App = () => {
|
|
1329
|
-
return /* @__PURE__ */ jsx(
|
|
1330
|
-
/* @__PURE__ */ jsx(Route, {
|
|
1331
|
-
/* @__PURE__ */ jsx(Route, {
|
|
1304
|
+
return /* @__PURE__ */ jsx(CheckPagePermissions, { permissions: PERMISSIONS.main, children: /* @__PURE__ */ jsxs(Switch, { children: [
|
|
1305
|
+
/* @__PURE__ */ jsx(Route, { exact: true, path: `/plugins/${pluginId}`, component: ReleasesPage }),
|
|
1306
|
+
/* @__PURE__ */ jsx(Route, { exact: true, path: `/plugins/${pluginId}/:releaseId`, component: ReleaseDetailsPage })
|
|
1332
1307
|
] }) });
|
|
1333
1308
|
};
|
|
1334
1309
|
export {
|
|
1335
1310
|
App
|
|
1336
1311
|
};
|
|
1337
|
-
//# sourceMappingURL=App-
|
|
1312
|
+
//# sourceMappingURL=App-XbK-TdJn.mjs.map
|