@strapi/content-releases 0.0.0-next.583e758623dc82206a4b2758d01dd5948b6e3f6a → 0.0.0-next.5c40a85ef0a0541375210234c3490574da1f5fb5
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-P1kyM3gT.js → App-dLXY5ei3.js} +149 -140
- package/dist/_chunks/App-dLXY5ei3.js.map +1 -0
- package/dist/_chunks/{App-6ugQxqYE.mjs → App-jrh58sXY.mjs} +153 -144
- package/dist/_chunks/App-jrh58sXY.mjs.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-HrREghh3.js} +11 -3
- package/dist/_chunks/en-HrREghh3.js.map +1 -0
- package/dist/_chunks/{en-WuuhP6Bn.mjs → en-ltT1TlKQ.mjs} +11 -3
- package/dist/_chunks/en-ltT1TlKQ.mjs.map +1 -0
- package/dist/_chunks/{index-2xzbhaQP.js → index-CVO0Rqdm.js} +320 -18
- package/dist/_chunks/index-CVO0Rqdm.js.map +1 -0
- package/dist/_chunks/{index-_eBuegHN.mjs → index-PiOGBETy.mjs} +325 -23
- package/dist/_chunks/index-PiOGBETy.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/server/index.js +331 -159
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +331 -159
- package/dist/server/index.mjs.map +1 -1
- package/package.json +12 -12
- package/dist/_chunks/App-6ugQxqYE.mjs.map +0 -1
- package/dist/_chunks/App-P1kyM3gT.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-2xzbhaQP.js.map +0 -1
- package/dist/_chunks/index-_eBuegHN.mjs.map +0 -1
|
@@ -1,17 +1,17 @@
|
|
|
1
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";
|
|
2
|
+
import { RelativeTime as RelativeTime$1, useNotification, useAPIErrorHandler, useQueryParams, useTracking, LoadingIndicatorPage, CheckPermissions, PageSizeURLQuery, PaginationURLQuery, AnErrorOccurred, ConfirmDialog, useRBAC, useStrapiApp, NoContent, Table, CheckPagePermissions } from "@strapi/helper-plugin";
|
|
3
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-
|
|
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-PiOGBETy.mjs";
|
|
5
5
|
import * as React from "react";
|
|
6
6
|
import { useLicenseLimits, unstable_useDocument } from "@strapi/admin/strapi-admin";
|
|
7
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";
|
|
8
8
|
import { Link, Menu, LinkButton } from "@strapi/design-system/v2";
|
|
9
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 { formatISO
|
|
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";
|
|
@@ -47,7 +47,6 @@ const ReleaseModal = ({
|
|
|
47
47
|
const { formatMessage } = useIntl();
|
|
48
48
|
const { pathname } = useLocation();
|
|
49
49
|
const isCreatingRelease = pathname === `/plugins/${pluginId}`;
|
|
50
|
-
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
51
50
|
const { timezoneList, systemTimezone = { value: "UTC+00:00-Africa/Abidjan " } } = getTimezones(
|
|
52
51
|
initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : /* @__PURE__ */ new Date()
|
|
53
52
|
);
|
|
@@ -55,13 +54,12 @@ const ReleaseModal = ({
|
|
|
55
54
|
const { date, time, timezone } = values;
|
|
56
55
|
if (!date || !time || !timezone)
|
|
57
56
|
return null;
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
return zonedTimeToUtc(formattedDate, timezoneWithoutOffset);
|
|
57
|
+
const timezoneWithoutOffset = timezone.split("&")[1];
|
|
58
|
+
return zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);
|
|
61
59
|
};
|
|
62
60
|
const getTimezoneWithOffset = () => {
|
|
63
61
|
const currentTimezone = timezoneList.find(
|
|
64
|
-
(timezone) => timezone.value.split("
|
|
62
|
+
(timezone) => timezone.value.split("&")[1] === initialValues.timezone
|
|
65
63
|
);
|
|
66
64
|
return currentTimezone?.value || systemTimezone.value;
|
|
67
65
|
};
|
|
@@ -79,7 +77,7 @@ const ReleaseModal = ({
|
|
|
79
77
|
onSubmit: (values) => {
|
|
80
78
|
handleSubmit({
|
|
81
79
|
...values,
|
|
82
|
-
timezone: values.timezone ? values.timezone.split("
|
|
80
|
+
timezone: values.timezone ? values.timezone.split("&")[1] : null,
|
|
83
81
|
scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null
|
|
84
82
|
});
|
|
85
83
|
},
|
|
@@ -105,92 +103,88 @@ const ReleaseModal = ({
|
|
|
105
103
|
required: true
|
|
106
104
|
}
|
|
107
105
|
),
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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: () => {
|
|
117
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: () => {
|
|
118
180
|
setFieldValue("time", "");
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
children: /* @__PURE__ */ jsx(
|
|
130
|
-
Typography,
|
|
131
|
-
{
|
|
132
|
-
textColor: values.isScheduled ? "primary600" : "neutral800",
|
|
133
|
-
fontWeight: values.isScheduled ? "semiBold" : "regular",
|
|
134
|
-
children: formatMessage({
|
|
135
|
-
id: "modal.form.input.label.schedule-release",
|
|
136
|
-
defaultMessage: "Schedule release"
|
|
137
|
-
})
|
|
138
|
-
}
|
|
139
|
-
)
|
|
140
|
-
}
|
|
141
|
-
) }),
|
|
142
|
-
values.isScheduled && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
143
|
-
/* @__PURE__ */ jsxs(Flex, { gap: 4, alignItems: "start", children: [
|
|
144
|
-
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
|
|
145
|
-
DatePicker,
|
|
146
|
-
{
|
|
147
|
-
label: formatMessage({
|
|
148
|
-
id: "content-releases.modal.form.input.label.date",
|
|
149
|
-
defaultMessage: "Date"
|
|
150
|
-
}),
|
|
151
|
-
name: "date",
|
|
152
|
-
error: errors.date,
|
|
153
|
-
onChange: (date) => {
|
|
154
|
-
const isoFormatDate = date ? formatISO(date, { representation: "date" }) : null;
|
|
155
|
-
setFieldValue("date", isoFormatDate);
|
|
156
|
-
},
|
|
157
|
-
clearLabel: formatMessage({
|
|
158
|
-
id: "content-releases.modal.form.input.clearLabel",
|
|
159
|
-
defaultMessage: "Clear"
|
|
160
|
-
}),
|
|
161
|
-
onClear: () => {
|
|
162
|
-
setFieldValue("date", null);
|
|
163
|
-
},
|
|
164
|
-
selectedDate: values.date || void 0,
|
|
165
|
-
required: true
|
|
166
|
-
}
|
|
167
|
-
) }),
|
|
168
|
-
/* @__PURE__ */ jsx(Box, { width: "100%", children: /* @__PURE__ */ jsx(
|
|
169
|
-
TimePicker,
|
|
170
|
-
{
|
|
171
|
-
label: formatMessage({
|
|
172
|
-
id: "content-releases.modal.form.input.label.time",
|
|
173
|
-
defaultMessage: "Time"
|
|
174
|
-
}),
|
|
175
|
-
name: "time",
|
|
176
|
-
error: errors.time,
|
|
177
|
-
onChange: (time) => {
|
|
178
|
-
setFieldValue("time", time);
|
|
179
|
-
},
|
|
180
|
-
clearLabel: formatMessage({
|
|
181
|
-
id: "content-releases.modal.form.input.clearLabel",
|
|
182
|
-
defaultMessage: "Clear"
|
|
183
|
-
}),
|
|
184
|
-
onClear: () => {
|
|
185
|
-
setFieldValue("time", "");
|
|
186
|
-
},
|
|
187
|
-
value: values.time || void 0,
|
|
188
|
-
required: true
|
|
189
|
-
}
|
|
190
|
-
) })
|
|
191
|
-
] }),
|
|
192
|
-
/* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
|
|
193
|
-
] })
|
|
181
|
+
},
|
|
182
|
+
value: values.time || void 0,
|
|
183
|
+
required: true
|
|
184
|
+
}
|
|
185
|
+
) })
|
|
186
|
+
] }),
|
|
187
|
+
/* @__PURE__ */ jsx(TimezoneComponent, { timezoneOptions: timezoneList })
|
|
194
188
|
] })
|
|
195
189
|
] }) }),
|
|
196
190
|
/* @__PURE__ */ jsx(
|
|
@@ -214,10 +208,10 @@ const ReleaseModal = ({
|
|
|
214
208
|
const getTimezones = (selectedDate) => {
|
|
215
209
|
const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
|
|
216
210
|
const utcOffset = getTimezoneOffset(timezone, selectedDate);
|
|
217
|
-
return { offset: utcOffset, value: `${utcOffset}
|
|
211
|
+
return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
|
|
218
212
|
});
|
|
219
213
|
const systemTimezone = timezoneList.find(
|
|
220
|
-
(timezone) => timezone.value.split("
|
|
214
|
+
(timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
221
215
|
);
|
|
222
216
|
return { timezoneList, systemTimezone };
|
|
223
217
|
};
|
|
@@ -229,7 +223,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
229
223
|
if (values.date) {
|
|
230
224
|
const { timezoneList: timezoneList2 } = getTimezones(new Date(values.date));
|
|
231
225
|
setTimezoneList(timezoneList2);
|
|
232
|
-
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]);
|
|
233
227
|
if (updatedTimezone) {
|
|
234
228
|
setFieldValue("timezone", updatedTimezone.value);
|
|
235
229
|
}
|
|
@@ -242,9 +236,10 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
242
236
|
id: "content-releases.modal.form.input.label.timezone",
|
|
243
237
|
defaultMessage: "Timezone"
|
|
244
238
|
}),
|
|
239
|
+
autocomplete: { type: "list", filter: "contains" },
|
|
245
240
|
name: "timezone",
|
|
246
241
|
value: values.timezone || void 0,
|
|
247
|
-
textValue: values.timezone ? values.timezone.replace(
|
|
242
|
+
textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
|
|
248
243
|
onChange: (timezone) => {
|
|
249
244
|
setFieldValue("timezone", timezone);
|
|
250
245
|
},
|
|
@@ -256,15 +251,18 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
256
251
|
},
|
|
257
252
|
error: errors.timezone,
|
|
258
253
|
required: true,
|
|
259
|
-
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))
|
|
260
255
|
}
|
|
261
256
|
);
|
|
262
257
|
};
|
|
263
258
|
const LinkCard = styled(Link)`
|
|
264
259
|
display: block;
|
|
265
260
|
`;
|
|
266
|
-
const
|
|
267
|
-
|
|
261
|
+
const RelativeTime = styled(RelativeTime$1)`
|
|
262
|
+
display: inline-block;
|
|
263
|
+
&::first-letter {
|
|
264
|
+
text-transform: uppercase;
|
|
265
|
+
}
|
|
268
266
|
`;
|
|
269
267
|
const getBadgeProps = (status) => {
|
|
270
268
|
let color;
|
|
@@ -293,7 +291,6 @@ const getBadgeProps = (status) => {
|
|
|
293
291
|
};
|
|
294
292
|
const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
295
293
|
const { formatMessage } = useIntl();
|
|
296
|
-
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
297
294
|
if (isError) {
|
|
298
295
|
return /* @__PURE__ */ jsx(AnErrorOccurred, {});
|
|
299
296
|
}
|
|
@@ -314,7 +311,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
314
311
|
}
|
|
315
312
|
);
|
|
316
313
|
}
|
|
317
|
-
return /* @__PURE__ */ jsx(Grid, { gap: 4, children: releases.map(({ id, name,
|
|
314
|
+
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(
|
|
318
315
|
Flex,
|
|
319
316
|
{
|
|
320
317
|
direction: "column",
|
|
@@ -330,16 +327,10 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
330
327
|
children: [
|
|
331
328
|
/* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "start", gap: 1, children: [
|
|
332
329
|
/* @__PURE__ */ jsx(Typography, { as: "h3", variant: "delta", fontWeight: "bold", children: name }),
|
|
333
|
-
/* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children:
|
|
330
|
+
/* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
|
|
334
331
|
id: "content-releases.pages.Releases.not-scheduled",
|
|
335
332
|
defaultMessage: "Not scheduled"
|
|
336
|
-
})
|
|
337
|
-
{
|
|
338
|
-
id: "content-releases.page.Releases.release-item.entries",
|
|
339
|
-
defaultMessage: "{number, plural, =0 {No entries} one {# entry} other {# entries}}"
|
|
340
|
-
},
|
|
341
|
-
{ number: actions.meta.count }
|
|
342
|
-
) })
|
|
333
|
+
}) })
|
|
343
334
|
] }),
|
|
344
335
|
/* @__PURE__ */ jsx(Badge, { ...getBadgeProps(status), children: status })
|
|
345
336
|
]
|
|
@@ -358,8 +349,7 @@ const INITIAL_FORM_VALUES = {
|
|
|
358
349
|
name: "",
|
|
359
350
|
date: null,
|
|
360
351
|
time: "",
|
|
361
|
-
|
|
362
|
-
isScheduled: window.strapi.future.isEnabled("contentReleasesScheduling"),
|
|
352
|
+
isScheduled: true,
|
|
363
353
|
scheduledAt: null,
|
|
364
354
|
timezone: null
|
|
365
355
|
};
|
|
@@ -709,7 +699,12 @@ const ReleaseDetailsLayout = ({
|
|
|
709
699
|
}
|
|
710
700
|
};
|
|
711
701
|
const handleRefresh = () => {
|
|
712
|
-
dispatch(
|
|
702
|
+
dispatch(
|
|
703
|
+
releaseApi.util.invalidateTags([
|
|
704
|
+
{ type: "ReleaseAction", id: "LIST" },
|
|
705
|
+
{ type: "Release", id: releaseId }
|
|
706
|
+
])
|
|
707
|
+
);
|
|
713
708
|
};
|
|
714
709
|
const getCreatedByUser = () => {
|
|
715
710
|
if (!release?.createdBy) {
|
|
@@ -745,7 +740,6 @@ const ReleaseDetailsLayout = ({
|
|
|
745
740
|
}
|
|
746
741
|
const totalEntries = release.actions.meta.count || 0;
|
|
747
742
|
const hasCreatedByUser = Boolean(getCreatedByUser());
|
|
748
|
-
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
749
743
|
const isScheduled = release.scheduledAt && release.timezone;
|
|
750
744
|
const numberOfEntriesText = formatMessage(
|
|
751
745
|
{
|
|
@@ -780,7 +774,7 @@ const ReleaseDetailsLayout = ({
|
|
|
780
774
|
{
|
|
781
775
|
title: release.name,
|
|
782
776
|
subtitle: /* @__PURE__ */ jsxs(Flex, { gap: 2, lineHeight: 6, children: [
|
|
783
|
-
/* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (
|
|
777
|
+
/* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
|
|
784
778
|
/* @__PURE__ */ jsx(Badge, { ...getBadgeProps(release.status), children: release.status })
|
|
785
779
|
] }),
|
|
786
780
|
navigationAction: /* @__PURE__ */ jsx(Link$1, { startIcon: /* @__PURE__ */ jsx(ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
|
|
@@ -852,7 +846,7 @@ const ReleaseDetailsLayout = ({
|
|
|
852
846
|
defaultMessage: "Created"
|
|
853
847
|
}) }),
|
|
854
848
|
/* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
|
|
855
|
-
/* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(release.createdAt) }),
|
|
849
|
+
/* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
|
|
856
850
|
formatMessage(
|
|
857
851
|
{
|
|
858
852
|
id: "content-releases.header.actions.created.description",
|
|
@@ -891,6 +885,7 @@ const ReleaseDetailsLayout = ({
|
|
|
891
885
|
] });
|
|
892
886
|
};
|
|
893
887
|
const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
|
|
888
|
+
const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
|
|
894
889
|
const getGroupByOptionLabel = (value) => {
|
|
895
890
|
if (value === "locale") {
|
|
896
891
|
return {
|
|
@@ -909,6 +904,21 @@ const getGroupByOptionLabel = (value) => {
|
|
|
909
904
|
defaultMessage: "Content-Types"
|
|
910
905
|
};
|
|
911
906
|
};
|
|
907
|
+
const DEFAULT_RELEASE_DETAILS_HEADER = [
|
|
908
|
+
{
|
|
909
|
+
key: "__name__",
|
|
910
|
+
fieldSchema: { type: "string" },
|
|
911
|
+
metadatas: {
|
|
912
|
+
label: {
|
|
913
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
914
|
+
defaultMessage: "name"
|
|
915
|
+
},
|
|
916
|
+
searchable: false,
|
|
917
|
+
sortable: false
|
|
918
|
+
},
|
|
919
|
+
name: "name"
|
|
920
|
+
}
|
|
921
|
+
];
|
|
912
922
|
const ReleaseDetailsBody = () => {
|
|
913
923
|
const { formatMessage } = useIntl();
|
|
914
924
|
const { releaseId } = useParams();
|
|
@@ -924,6 +934,17 @@ const ReleaseDetailsBody = () => {
|
|
|
924
934
|
const {
|
|
925
935
|
allowedActions: { canUpdate }
|
|
926
936
|
} = useRBAC(PERMISSIONS);
|
|
937
|
+
const { runHookWaterfall } = useStrapiApp();
|
|
938
|
+
const {
|
|
939
|
+
displayedHeaders,
|
|
940
|
+
hasI18nEnabled
|
|
941
|
+
} = runHookWaterfall(
|
|
942
|
+
"ContentReleases/pages/ReleaseDetails/add-locale-in-releases",
|
|
943
|
+
{
|
|
944
|
+
displayedHeaders: DEFAULT_RELEASE_DETAILS_HEADER,
|
|
945
|
+
hasI18nEnabled: false
|
|
946
|
+
}
|
|
947
|
+
);
|
|
927
948
|
const release = releaseData?.data;
|
|
928
949
|
const selectedGroupBy = query?.groupBy || "contentType";
|
|
929
950
|
const {
|
|
@@ -1025,6 +1046,7 @@ const ReleaseDetailsBody = () => {
|
|
|
1025
1046
|
}
|
|
1026
1047
|
) });
|
|
1027
1048
|
}
|
|
1049
|
+
const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
|
|
1028
1050
|
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
|
|
1029
1051
|
/* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
|
|
1030
1052
|
SingleSelect,
|
|
@@ -1044,7 +1066,7 @@ const ReleaseDetailsBody = () => {
|
|
|
1044
1066
|
),
|
|
1045
1067
|
value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
|
|
1046
1068
|
onChange: (value) => setQuery({ groupBy: value }),
|
|
1047
|
-
children:
|
|
1069
|
+
children: options.map((option) => /* @__PURE__ */ jsx(SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
|
|
1048
1070
|
}
|
|
1049
1071
|
) }),
|
|
1050
1072
|
Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxs(Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
|
|
@@ -1061,28 +1083,15 @@ const ReleaseDetailsBody = () => {
|
|
|
1061
1083
|
isFetching,
|
|
1062
1084
|
children: /* @__PURE__ */ jsxs(Table.Content, { children: [
|
|
1063
1085
|
/* @__PURE__ */ jsxs(Table.Head, { children: [
|
|
1064
|
-
/* @__PURE__ */ jsx(
|
|
1086
|
+
displayedHeaders.map(({ key: key2, fieldSchema, metadatas, name }) => /* @__PURE__ */ jsx(
|
|
1065
1087
|
Table.HeaderCell,
|
|
1066
1088
|
{
|
|
1067
|
-
fieldSchemaType:
|
|
1068
|
-
label: formatMessage(
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
}
|
|
1074
|
-
),
|
|
1075
|
-
/* @__PURE__ */ jsx(
|
|
1076
|
-
Table.HeaderCell,
|
|
1077
|
-
{
|
|
1078
|
-
fieldSchemaType: "string",
|
|
1079
|
-
label: formatMessage({
|
|
1080
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1081
|
-
defaultMessage: "locale"
|
|
1082
|
-
}),
|
|
1083
|
-
name: "locale"
|
|
1084
|
-
}
|
|
1085
|
-
),
|
|
1089
|
+
fieldSchemaType: fieldSchema.type,
|
|
1090
|
+
label: formatMessage(metadatas.label),
|
|
1091
|
+
name
|
|
1092
|
+
},
|
|
1093
|
+
key2
|
|
1094
|
+
)),
|
|
1086
1095
|
/* @__PURE__ */ jsx(
|
|
1087
1096
|
Table.HeaderCell,
|
|
1088
1097
|
{
|
|
@@ -1121,7 +1130,7 @@ const ReleaseDetailsBody = () => {
|
|
|
1121
1130
|
/* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
|
|
1122
1131
|
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1123
1132
|
/* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
1124
|
-
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1133
|
+
hasI18nEnabled && /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1125
1134
|
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
|
|
1126
1135
|
/* @__PURE__ */ jsx(Td, { width: "20%", children: release.releasedAt ? /* @__PURE__ */ jsx(Typography, { children: formatMessage(
|
|
1127
1136
|
{
|
|
@@ -1193,7 +1202,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1193
1202
|
const { releaseId } = useParams();
|
|
1194
1203
|
const toggleNotification = useNotification();
|
|
1195
1204
|
const { formatAPIError } = useAPIErrorHandler();
|
|
1196
|
-
const {
|
|
1205
|
+
const { replace } = useHistory();
|
|
1197
1206
|
const [releaseModalShown, setReleaseModalShown] = React.useState(false);
|
|
1198
1207
|
const [showWarningSubmit, setWarningSubmit] = React.useState(false);
|
|
1199
1208
|
const {
|
|
@@ -1221,7 +1230,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1221
1230
|
const title = releaseData?.name || "";
|
|
1222
1231
|
const timezone = releaseData?.timezone ?? null;
|
|
1223
1232
|
const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
|
|
1224
|
-
const date = scheduledAt ?
|
|
1233
|
+
const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") : null;
|
|
1225
1234
|
const time = scheduledAt ? format(scheduledAt, "HH:mm") : "";
|
|
1226
1235
|
const handleEditRelease = async (values) => {
|
|
1227
1236
|
const response = await updateRelease({
|
|
@@ -1238,6 +1247,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1238
1247
|
defaultMessage: "Release updated."
|
|
1239
1248
|
})
|
|
1240
1249
|
});
|
|
1250
|
+
toggleEditReleaseModal();
|
|
1241
1251
|
} else if (isAxiosError(response.error)) {
|
|
1242
1252
|
toggleNotification({
|
|
1243
1253
|
type: "warning",
|
|
@@ -1249,14 +1259,13 @@ const ReleaseDetailsPage = () => {
|
|
|
1249
1259
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1250
1260
|
});
|
|
1251
1261
|
}
|
|
1252
|
-
toggleEditReleaseModal();
|
|
1253
1262
|
};
|
|
1254
1263
|
const handleDeleteRelease = async () => {
|
|
1255
1264
|
const response = await deleteRelease({
|
|
1256
1265
|
id: releaseId
|
|
1257
1266
|
});
|
|
1258
1267
|
if ("data" in response) {
|
|
1259
|
-
|
|
1268
|
+
replace("/plugins/content-releases");
|
|
1260
1269
|
} else if (isAxiosError(response.error)) {
|
|
1261
1270
|
toggleNotification({
|
|
1262
1271
|
type: "warning",
|
|
@@ -1318,4 +1327,4 @@ const App = () => {
|
|
|
1318
1327
|
export {
|
|
1319
1328
|
App
|
|
1320
1329
|
};
|
|
1321
|
-
//# sourceMappingURL=App-
|
|
1330
|
+
//# sourceMappingURL=App-jrh58sXY.mjs.map
|