@strapi/content-releases 0.0.0-next.836f74517f9a428a4798ed889c3f05057ec6beb1 → 0.0.0-next.8d33a8c285192abcf44a37c79c2e1545437c69e3
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-pNsURCL_.js → App-HjWtUYmc.js} +146 -138
- package/dist/_chunks/App-HjWtUYmc.js.map +1 -0
- package/dist/_chunks/{App-fcvNs2Qb.mjs → App-gu1aiP6i.mjs} +150 -142
- package/dist/_chunks/App-gu1aiP6i.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-gzTuOXiK.js → index-ZNwxYN8H.js} +319 -18
- package/dist/_chunks/index-ZNwxYN8H.js.map +1 -0
- package/dist/_chunks/{index-pxhi8wsT.mjs → index-mvj9PSKd.mjs} +324 -23
- package/dist/_chunks/index-mvj9PSKd.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/server/index.js +290 -158
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +290 -158
- package/dist/server/index.mjs.map +1 -1
- package/package.json +12 -12
- package/dist/_chunks/App-fcvNs2Qb.mjs.map +0 -1
- package/dist/_chunks/App-pNsURCL_.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-gzTuOXiK.js.map +0 -1
- package/dist/_chunks/index-pxhi8wsT.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-mvj9PSKd.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
|
}
|
|
@@ -245,7 +239,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
245
239
|
autocomplete: { type: "list", filter: "contains" },
|
|
246
240
|
name: "timezone",
|
|
247
241
|
value: values.timezone || void 0,
|
|
248
|
-
textValue: values.timezone ? values.timezone.replace(
|
|
242
|
+
textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
|
|
249
243
|
onChange: (timezone) => {
|
|
250
244
|
setFieldValue("timezone", timezone);
|
|
251
245
|
},
|
|
@@ -257,15 +251,18 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
257
251
|
},
|
|
258
252
|
error: errors.timezone,
|
|
259
253
|
required: true,
|
|
260
|
-
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))
|
|
261
255
|
}
|
|
262
256
|
);
|
|
263
257
|
};
|
|
264
258
|
const LinkCard = styled(Link)`
|
|
265
259
|
display: block;
|
|
266
260
|
`;
|
|
267
|
-
const
|
|
268
|
-
|
|
261
|
+
const RelativeTime = styled(RelativeTime$1)`
|
|
262
|
+
display: inline-block;
|
|
263
|
+
&::first-letter {
|
|
264
|
+
text-transform: uppercase;
|
|
265
|
+
}
|
|
269
266
|
`;
|
|
270
267
|
const getBadgeProps = (status) => {
|
|
271
268
|
let color;
|
|
@@ -294,7 +291,6 @@ const getBadgeProps = (status) => {
|
|
|
294
291
|
};
|
|
295
292
|
const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
296
293
|
const { formatMessage } = useIntl();
|
|
297
|
-
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
298
294
|
if (isError) {
|
|
299
295
|
return /* @__PURE__ */ jsx(AnErrorOccurred, {});
|
|
300
296
|
}
|
|
@@ -315,7 +311,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
315
311
|
}
|
|
316
312
|
);
|
|
317
313
|
}
|
|
318
|
-
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(
|
|
319
315
|
Flex,
|
|
320
316
|
{
|
|
321
317
|
direction: "column",
|
|
@@ -331,16 +327,10 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
331
327
|
children: [
|
|
332
328
|
/* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "start", gap: 1, children: [
|
|
333
329
|
/* @__PURE__ */ jsx(Typography, { as: "h3", variant: "delta", fontWeight: "bold", children: name }),
|
|
334
|
-
/* @__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({
|
|
335
331
|
id: "content-releases.pages.Releases.not-scheduled",
|
|
336
332
|
defaultMessage: "Not scheduled"
|
|
337
|
-
})
|
|
338
|
-
{
|
|
339
|
-
id: "content-releases.page.Releases.release-item.entries",
|
|
340
|
-
defaultMessage: "{number, plural, =0 {No entries} one {# entry} other {# entries}}"
|
|
341
|
-
},
|
|
342
|
-
{ number: actions.meta.count }
|
|
343
|
-
) })
|
|
333
|
+
}) })
|
|
344
334
|
] }),
|
|
345
335
|
/* @__PURE__ */ jsx(Badge, { ...getBadgeProps(status), children: status })
|
|
346
336
|
]
|
|
@@ -359,8 +349,7 @@ const INITIAL_FORM_VALUES = {
|
|
|
359
349
|
name: "",
|
|
360
350
|
date: null,
|
|
361
351
|
time: "",
|
|
362
|
-
|
|
363
|
-
isScheduled: window.strapi.future.isEnabled("contentReleasesScheduling"),
|
|
352
|
+
isScheduled: true,
|
|
364
353
|
scheduledAt: null,
|
|
365
354
|
timezone: null
|
|
366
355
|
};
|
|
@@ -710,7 +699,12 @@ const ReleaseDetailsLayout = ({
|
|
|
710
699
|
}
|
|
711
700
|
};
|
|
712
701
|
const handleRefresh = () => {
|
|
713
|
-
dispatch(
|
|
702
|
+
dispatch(
|
|
703
|
+
releaseApi.util.invalidateTags([
|
|
704
|
+
{ type: "ReleaseAction", id: "LIST" },
|
|
705
|
+
{ type: "Release", id: releaseId }
|
|
706
|
+
])
|
|
707
|
+
);
|
|
714
708
|
};
|
|
715
709
|
const getCreatedByUser = () => {
|
|
716
710
|
if (!release?.createdBy) {
|
|
@@ -746,7 +740,6 @@ const ReleaseDetailsLayout = ({
|
|
|
746
740
|
}
|
|
747
741
|
const totalEntries = release.actions.meta.count || 0;
|
|
748
742
|
const hasCreatedByUser = Boolean(getCreatedByUser());
|
|
749
|
-
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
750
743
|
const isScheduled = release.scheduledAt && release.timezone;
|
|
751
744
|
const numberOfEntriesText = formatMessage(
|
|
752
745
|
{
|
|
@@ -781,7 +774,7 @@ const ReleaseDetailsLayout = ({
|
|
|
781
774
|
{
|
|
782
775
|
title: release.name,
|
|
783
776
|
subtitle: /* @__PURE__ */ jsxs(Flex, { gap: 2, lineHeight: 6, children: [
|
|
784
|
-
/* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (
|
|
777
|
+
/* @__PURE__ */ jsx(Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
|
|
785
778
|
/* @__PURE__ */ jsx(Badge, { ...getBadgeProps(release.status), children: release.status })
|
|
786
779
|
] }),
|
|
787
780
|
navigationAction: /* @__PURE__ */ jsx(Link$1, { startIcon: /* @__PURE__ */ jsx(ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
|
|
@@ -853,7 +846,7 @@ const ReleaseDetailsLayout = ({
|
|
|
853
846
|
defaultMessage: "Created"
|
|
854
847
|
}) }),
|
|
855
848
|
/* @__PURE__ */ jsxs(Typography, { variant: "pi", color: "neutral300", children: [
|
|
856
|
-
/* @__PURE__ */ jsx(RelativeTime, { timestamp: new Date(release.createdAt) }),
|
|
849
|
+
/* @__PURE__ */ jsx(RelativeTime$1, { timestamp: new Date(release.createdAt) }),
|
|
857
850
|
formatMessage(
|
|
858
851
|
{
|
|
859
852
|
id: "content-releases.header.actions.created.description",
|
|
@@ -892,6 +885,7 @@ const ReleaseDetailsLayout = ({
|
|
|
892
885
|
] });
|
|
893
886
|
};
|
|
894
887
|
const GROUP_BY_OPTIONS = ["contentType", "locale", "action"];
|
|
888
|
+
const GROUP_BY_OPTIONS_NO_LOCALE = ["contentType", "action"];
|
|
895
889
|
const getGroupByOptionLabel = (value) => {
|
|
896
890
|
if (value === "locale") {
|
|
897
891
|
return {
|
|
@@ -910,6 +904,21 @@ const getGroupByOptionLabel = (value) => {
|
|
|
910
904
|
defaultMessage: "Content-Types"
|
|
911
905
|
};
|
|
912
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
|
+
];
|
|
913
922
|
const ReleaseDetailsBody = () => {
|
|
914
923
|
const { formatMessage } = useIntl();
|
|
915
924
|
const { releaseId } = useParams();
|
|
@@ -925,6 +934,17 @@ const ReleaseDetailsBody = () => {
|
|
|
925
934
|
const {
|
|
926
935
|
allowedActions: { canUpdate }
|
|
927
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
|
+
);
|
|
928
948
|
const release = releaseData?.data;
|
|
929
949
|
const selectedGroupBy = query?.groupBy || "contentType";
|
|
930
950
|
const {
|
|
@@ -1026,6 +1046,7 @@ const ReleaseDetailsBody = () => {
|
|
|
1026
1046
|
}
|
|
1027
1047
|
) });
|
|
1028
1048
|
}
|
|
1049
|
+
const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;
|
|
1029
1050
|
return /* @__PURE__ */ jsx(ContentLayout, { children: /* @__PURE__ */ jsxs(Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
|
|
1030
1051
|
/* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
|
|
1031
1052
|
SingleSelect,
|
|
@@ -1045,7 +1066,7 @@ const ReleaseDetailsBody = () => {
|
|
|
1045
1066
|
),
|
|
1046
1067
|
value: formatMessage(getGroupByOptionLabel(selectedGroupBy)),
|
|
1047
1068
|
onChange: (value) => setQuery({ groupBy: value }),
|
|
1048
|
-
children:
|
|
1069
|
+
children: options.map((option) => /* @__PURE__ */ jsx(SingleSelectOption, { value: option, children: formatMessage(getGroupByOptionLabel(option)) }, option))
|
|
1049
1070
|
}
|
|
1050
1071
|
) }),
|
|
1051
1072
|
Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxs(Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
|
|
@@ -1062,28 +1083,15 @@ const ReleaseDetailsBody = () => {
|
|
|
1062
1083
|
isFetching,
|
|
1063
1084
|
children: /* @__PURE__ */ jsxs(Table.Content, { children: [
|
|
1064
1085
|
/* @__PURE__ */ jsxs(Table.Head, { children: [
|
|
1065
|
-
/* @__PURE__ */ jsx(
|
|
1086
|
+
displayedHeaders.map(({ key: key2, fieldSchema, metadatas, name }) => /* @__PURE__ */ jsx(
|
|
1066
1087
|
Table.HeaderCell,
|
|
1067
1088
|
{
|
|
1068
|
-
fieldSchemaType:
|
|
1069
|
-
label: formatMessage(
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
}
|
|
1075
|
-
),
|
|
1076
|
-
/* @__PURE__ */ jsx(
|
|
1077
|
-
Table.HeaderCell,
|
|
1078
|
-
{
|
|
1079
|
-
fieldSchemaType: "string",
|
|
1080
|
-
label: formatMessage({
|
|
1081
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1082
|
-
defaultMessage: "locale"
|
|
1083
|
-
}),
|
|
1084
|
-
name: "locale"
|
|
1085
|
-
}
|
|
1086
|
-
),
|
|
1089
|
+
fieldSchemaType: fieldSchema.type,
|
|
1090
|
+
label: formatMessage(metadatas.label),
|
|
1091
|
+
name
|
|
1092
|
+
},
|
|
1093
|
+
key2
|
|
1094
|
+
)),
|
|
1087
1095
|
/* @__PURE__ */ jsx(
|
|
1088
1096
|
Table.HeaderCell,
|
|
1089
1097
|
{
|
|
@@ -1122,7 +1130,7 @@ const ReleaseDetailsBody = () => {
|
|
|
1122
1130
|
/* @__PURE__ */ jsx(Table.Body, { children: releaseActions[key].map(
|
|
1123
1131
|
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
1124
1132
|
/* @__PURE__ */ jsx(Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsx(Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
1125
|
-
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1133
|
+
hasI18nEnabled && /* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
1126
1134
|
/* @__PURE__ */ jsx(Td, { width: "10%", children: /* @__PURE__ */ jsx(Typography, { children: contentType.displayName || "" }) }),
|
|
1127
1135
|
/* @__PURE__ */ jsx(Td, { width: "20%", children: release.releasedAt ? /* @__PURE__ */ jsx(Typography, { children: formatMessage(
|
|
1128
1136
|
{
|
|
@@ -1222,7 +1230,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1222
1230
|
const title = releaseData?.name || "";
|
|
1223
1231
|
const timezone = releaseData?.timezone ?? null;
|
|
1224
1232
|
const scheduledAt = releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;
|
|
1225
|
-
const date = scheduledAt ?
|
|
1233
|
+
const date = scheduledAt ? format(scheduledAt, "yyyy-MM-dd") : null;
|
|
1226
1234
|
const time = scheduledAt ? format(scheduledAt, "HH:mm") : "";
|
|
1227
1235
|
const handleEditRelease = async (values) => {
|
|
1228
1236
|
const response = await updateRelease({
|
|
@@ -1239,6 +1247,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1239
1247
|
defaultMessage: "Release updated."
|
|
1240
1248
|
})
|
|
1241
1249
|
});
|
|
1250
|
+
toggleEditReleaseModal();
|
|
1242
1251
|
} else if (isAxiosError(response.error)) {
|
|
1243
1252
|
toggleNotification({
|
|
1244
1253
|
type: "warning",
|
|
@@ -1250,7 +1259,6 @@ const ReleaseDetailsPage = () => {
|
|
|
1250
1259
|
message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
|
|
1251
1260
|
});
|
|
1252
1261
|
}
|
|
1253
|
-
toggleEditReleaseModal();
|
|
1254
1262
|
};
|
|
1255
1263
|
const handleDeleteRelease = async () => {
|
|
1256
1264
|
const response = await deleteRelease({
|
|
@@ -1319,4 +1327,4 @@ const App = () => {
|
|
|
1319
1327
|
export {
|
|
1320
1328
|
App
|
|
1321
1329
|
};
|
|
1322
|
-
//# sourceMappingURL=App-
|
|
1330
|
+
//# sourceMappingURL=App-gu1aiP6i.mjs.map
|