@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,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const
|
|
4
|
+
const helperPlugin = require("@strapi/helper-plugin");
|
|
5
5
|
const reactRouterDom = require("react-router-dom");
|
|
6
|
-
const index = require("./index-
|
|
6
|
+
const index = require("./index-RYVGXFeL.js");
|
|
7
7
|
const React = require("react");
|
|
8
|
+
const strapiAdmin = require("@strapi/admin/strapi-admin");
|
|
8
9
|
const designSystem = require("@strapi/design-system");
|
|
9
10
|
const v2 = require("@strapi/design-system/v2");
|
|
10
|
-
const helperPlugin = require("@strapi/helper-plugin");
|
|
11
11
|
const icons = require("@strapi/icons");
|
|
12
12
|
const format = require("date-fns/format");
|
|
13
13
|
const dateFnsTz = require("date-fns-tz");
|
|
@@ -43,36 +43,6 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
|
43
43
|
const format__default = /* @__PURE__ */ _interopDefault(format);
|
|
44
44
|
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
|
45
45
|
const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
|
|
46
|
-
const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
|
|
47
|
-
const RelativeTime = React__namespace.forwardRef(
|
|
48
|
-
({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {
|
|
49
|
-
const { formatRelativeTime, formatDate, formatTime } = reactIntl.useIntl();
|
|
50
|
-
const interval = dateFns.intervalToDuration({
|
|
51
|
-
start: timestamp,
|
|
52
|
-
end: Date.now()
|
|
53
|
-
// see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.
|
|
54
|
-
});
|
|
55
|
-
const unit = intervals.find((intervalUnit) => {
|
|
56
|
-
return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
|
|
57
|
-
});
|
|
58
|
-
const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
|
|
59
|
-
const customInterval = customIntervals.find(
|
|
60
|
-
(custom) => interval[custom.unit] < custom.threshold
|
|
61
|
-
);
|
|
62
|
-
const displayText = customInterval ? customInterval.text : formatRelativeTime(relativeTime, unit, { numeric: "auto" });
|
|
63
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
-
"time",
|
|
65
|
-
{
|
|
66
|
-
ref: forwardedRef,
|
|
67
|
-
dateTime: timestamp.toISOString(),
|
|
68
|
-
role: "time",
|
|
69
|
-
title: `${formatDate(timestamp)} ${formatTime(timestamp)}`,
|
|
70
|
-
...restProps,
|
|
71
|
-
children: displayText
|
|
72
|
-
}
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
);
|
|
76
46
|
const RELEASE_SCHEMA = yup__namespace.object().shape({
|
|
77
47
|
name: yup__namespace.string().trim().required(),
|
|
78
48
|
scheduledAt: yup__namespace.string().nullable(),
|
|
@@ -102,7 +72,6 @@ const ReleaseModal = ({
|
|
|
102
72
|
const { formatMessage } = reactIntl.useIntl();
|
|
103
73
|
const { pathname } = reactRouterDom.useLocation();
|
|
104
74
|
const isCreatingRelease = pathname === `/plugins/${index.pluginId}`;
|
|
105
|
-
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
106
75
|
const { timezoneList, systemTimezone = { value: "UTC+00:00-Africa/Abidjan " } } = getTimezones(
|
|
107
76
|
initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : /* @__PURE__ */ new Date()
|
|
108
77
|
);
|
|
@@ -110,13 +79,12 @@ const ReleaseModal = ({
|
|
|
110
79
|
const { date, time, timezone } = values;
|
|
111
80
|
if (!date || !time || !timezone)
|
|
112
81
|
return null;
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
return dateFnsTz.zonedTimeToUtc(formattedDate, timezoneWithoutOffset);
|
|
82
|
+
const timezoneWithoutOffset = timezone.split("&")[1];
|
|
83
|
+
return dateFnsTz.zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);
|
|
116
84
|
};
|
|
117
85
|
const getTimezoneWithOffset = () => {
|
|
118
86
|
const currentTimezone = timezoneList.find(
|
|
119
|
-
(timezone) => timezone.value.split("
|
|
87
|
+
(timezone) => timezone.value.split("&")[1] === initialValues.timezone
|
|
120
88
|
);
|
|
121
89
|
return currentTimezone?.value || systemTimezone.value;
|
|
122
90
|
};
|
|
@@ -134,7 +102,7 @@ const ReleaseModal = ({
|
|
|
134
102
|
onSubmit: (values) => {
|
|
135
103
|
handleSubmit({
|
|
136
104
|
...values,
|
|
137
|
-
timezone: values.timezone ? values.timezone.split("
|
|
105
|
+
timezone: values.timezone ? values.timezone.split("&")[1] : null,
|
|
138
106
|
scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null
|
|
139
107
|
});
|
|
140
108
|
},
|
|
@@ -160,92 +128,88 @@ const ReleaseModal = ({
|
|
|
160
128
|
required: true
|
|
161
129
|
}
|
|
162
130
|
),
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
131
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "max-content", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
132
|
+
designSystem.Checkbox,
|
|
133
|
+
{
|
|
134
|
+
name: "isScheduled",
|
|
135
|
+
value: values.isScheduled,
|
|
136
|
+
onChange: (event) => {
|
|
137
|
+
setFieldValue("isScheduled", event.target.checked);
|
|
138
|
+
if (!event.target.checked) {
|
|
139
|
+
setFieldValue("date", null);
|
|
140
|
+
setFieldValue("time", "");
|
|
141
|
+
setFieldValue("timezone", null);
|
|
142
|
+
} else {
|
|
143
|
+
setFieldValue("date", initialValues.date);
|
|
144
|
+
setFieldValue("time", initialValues.time);
|
|
145
|
+
setFieldValue("timezone", initialValues.timezone ?? systemTimezone?.value);
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
149
|
+
designSystem.Typography,
|
|
150
|
+
{
|
|
151
|
+
textColor: values.isScheduled ? "primary600" : "neutral800",
|
|
152
|
+
fontWeight: values.isScheduled ? "semiBold" : "regular",
|
|
153
|
+
children: formatMessage({
|
|
154
|
+
id: "modal.form.input.label.schedule-release",
|
|
155
|
+
defaultMessage: "Schedule release"
|
|
156
|
+
})
|
|
157
|
+
}
|
|
158
|
+
)
|
|
159
|
+
}
|
|
160
|
+
) }),
|
|
161
|
+
values.isScheduled && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
162
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, alignItems: "start", children: [
|
|
163
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
164
|
+
designSystem.DatePicker,
|
|
165
|
+
{
|
|
166
|
+
label: formatMessage({
|
|
167
|
+
id: "content-releases.modal.form.input.label.date",
|
|
168
|
+
defaultMessage: "Date"
|
|
169
|
+
}),
|
|
170
|
+
name: "date",
|
|
171
|
+
error: errors.date,
|
|
172
|
+
onChange: (date) => {
|
|
173
|
+
const isoFormatDate = date ? dateFns.formatISO(date, { representation: "date" }) : null;
|
|
174
|
+
setFieldValue("date", isoFormatDate);
|
|
175
|
+
},
|
|
176
|
+
clearLabel: formatMessage({
|
|
177
|
+
id: "content-releases.modal.form.input.clearLabel",
|
|
178
|
+
defaultMessage: "Clear"
|
|
179
|
+
}),
|
|
180
|
+
onClear: () => {
|
|
172
181
|
setFieldValue("date", null);
|
|
182
|
+
},
|
|
183
|
+
selectedDate: values.date || void 0,
|
|
184
|
+
required: true,
|
|
185
|
+
minDate: dateFnsTz.utcToZonedTime(/* @__PURE__ */ new Date(), values.timezone.split("&")[1])
|
|
186
|
+
}
|
|
187
|
+
) }),
|
|
188
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
189
|
+
designSystem.TimePicker,
|
|
190
|
+
{
|
|
191
|
+
label: formatMessage({
|
|
192
|
+
id: "content-releases.modal.form.input.label.time",
|
|
193
|
+
defaultMessage: "Time"
|
|
194
|
+
}),
|
|
195
|
+
name: "time",
|
|
196
|
+
error: errors.time,
|
|
197
|
+
onChange: (time) => {
|
|
198
|
+
setFieldValue("time", time);
|
|
199
|
+
},
|
|
200
|
+
clearLabel: formatMessage({
|
|
201
|
+
id: "content-releases.modal.form.input.clearLabel",
|
|
202
|
+
defaultMessage: "Clear"
|
|
203
|
+
}),
|
|
204
|
+
onClear: () => {
|
|
173
205
|
setFieldValue("time", "");
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
);
|
|
182
|
-
}
|
|
183
|
-
},
|
|
184
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
185
|
-
designSystem.Typography,
|
|
186
|
-
{
|
|
187
|
-
textColor: values.isScheduled ? "primary600" : "neutral800",
|
|
188
|
-
fontWeight: values.isScheduled ? "semiBold" : "regular",
|
|
189
|
-
children: formatMessage({
|
|
190
|
-
id: "modal.form.input.label.schedule-release",
|
|
191
|
-
defaultMessage: "Schedule release"
|
|
192
|
-
})
|
|
193
|
-
}
|
|
194
|
-
)
|
|
195
|
-
}
|
|
196
|
-
) }),
|
|
197
|
-
values.isScheduled && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
198
|
-
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, alignItems: "start", children: [
|
|
199
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
200
|
-
designSystem.DatePicker,
|
|
201
|
-
{
|
|
202
|
-
label: formatMessage({
|
|
203
|
-
id: "content-releases.modal.form.input.label.date",
|
|
204
|
-
defaultMessage: "Date"
|
|
205
|
-
}),
|
|
206
|
-
name: "date",
|
|
207
|
-
error: errors.date,
|
|
208
|
-
onChange: (date) => {
|
|
209
|
-
const isoFormatDate = date ? dateFns.formatISO(date, { representation: "date" }) : null;
|
|
210
|
-
setFieldValue("date", isoFormatDate);
|
|
211
|
-
},
|
|
212
|
-
clearLabel: formatMessage({
|
|
213
|
-
id: "content-releases.modal.form.input.clearLabel",
|
|
214
|
-
defaultMessage: "Clear"
|
|
215
|
-
}),
|
|
216
|
-
onClear: () => {
|
|
217
|
-
setFieldValue("date", null);
|
|
218
|
-
},
|
|
219
|
-
selectedDate: values.date || void 0,
|
|
220
|
-
required: true
|
|
221
|
-
}
|
|
222
|
-
) }),
|
|
223
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
224
|
-
designSystem.TimePicker,
|
|
225
|
-
{
|
|
226
|
-
label: formatMessage({
|
|
227
|
-
id: "content-releases.modal.form.input.label.time",
|
|
228
|
-
defaultMessage: "Time"
|
|
229
|
-
}),
|
|
230
|
-
name: "time",
|
|
231
|
-
error: errors.time,
|
|
232
|
-
onChange: (time) => {
|
|
233
|
-
setFieldValue("time", time);
|
|
234
|
-
},
|
|
235
|
-
clearLabel: formatMessage({
|
|
236
|
-
id: "content-releases.modal.form.input.clearLabel",
|
|
237
|
-
defaultMessage: "Clear"
|
|
238
|
-
}),
|
|
239
|
-
onClear: () => {
|
|
240
|
-
setFieldValue("time", "");
|
|
241
|
-
},
|
|
242
|
-
value: values.time || void 0,
|
|
243
|
-
required: true
|
|
244
|
-
}
|
|
245
|
-
) })
|
|
246
|
-
] }),
|
|
247
|
-
/* @__PURE__ */ jsxRuntime.jsx(TimezoneComponent, { timezoneOptions: timezoneList })
|
|
248
|
-
] })
|
|
206
|
+
},
|
|
207
|
+
value: values.time || void 0,
|
|
208
|
+
required: true
|
|
209
|
+
}
|
|
210
|
+
) })
|
|
211
|
+
] }),
|
|
212
|
+
/* @__PURE__ */ jsxRuntime.jsx(TimezoneComponent, { timezoneOptions: timezoneList })
|
|
249
213
|
] })
|
|
250
214
|
] }) }),
|
|
251
215
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -269,10 +233,10 @@ const ReleaseModal = ({
|
|
|
269
233
|
const getTimezones = (selectedDate) => {
|
|
270
234
|
const timezoneList = Intl.supportedValuesOf("timeZone").map((timezone) => {
|
|
271
235
|
const utcOffset = index.getTimezoneOffset(timezone, selectedDate);
|
|
272
|
-
return { offset: utcOffset, value: `${utcOffset}
|
|
236
|
+
return { offset: utcOffset, value: `${utcOffset}&${timezone}` };
|
|
273
237
|
});
|
|
274
238
|
const systemTimezone = timezoneList.find(
|
|
275
|
-
(timezone) => timezone.value.split("
|
|
239
|
+
(timezone) => timezone.value.split("&")[1] === Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
276
240
|
);
|
|
277
241
|
return { timezoneList, systemTimezone };
|
|
278
242
|
};
|
|
@@ -284,7 +248,7 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
284
248
|
if (values.date) {
|
|
285
249
|
const { timezoneList: timezoneList2 } = getTimezones(new Date(values.date));
|
|
286
250
|
setTimezoneList(timezoneList2);
|
|
287
|
-
const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("
|
|
251
|
+
const updatedTimezone = values.timezone && timezoneList2.find((tz) => tz.value.split("&")[1] === values.timezone.split("&")[1]);
|
|
288
252
|
if (updatedTimezone) {
|
|
289
253
|
setFieldValue("timezone", updatedTimezone.value);
|
|
290
254
|
}
|
|
@@ -297,9 +261,10 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
297
261
|
id: "content-releases.modal.form.input.label.timezone",
|
|
298
262
|
defaultMessage: "Timezone"
|
|
299
263
|
}),
|
|
264
|
+
autocomplete: { type: "list", filter: "contains" },
|
|
300
265
|
name: "timezone",
|
|
301
266
|
value: values.timezone || void 0,
|
|
302
|
-
textValue: values.timezone ? values.timezone.replace(
|
|
267
|
+
textValue: values.timezone ? values.timezone.replace(/&/, " ") : void 0,
|
|
303
268
|
onChange: (timezone) => {
|
|
304
269
|
setFieldValue("timezone", timezone);
|
|
305
270
|
},
|
|
@@ -311,14 +276,14 @@ const TimezoneComponent = ({ timezoneOptions }) => {
|
|
|
311
276
|
},
|
|
312
277
|
error: errors.timezone,
|
|
313
278
|
required: true,
|
|
314
|
-
children: timezoneList.map((timezone) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.ComboboxOption, { value: timezone.value, children: timezone.value.replace(
|
|
279
|
+
children: timezoneList.map((timezone) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.ComboboxOption, { value: timezone.value, children: timezone.value.replace(/&/, " ") }, timezone.value))
|
|
315
280
|
}
|
|
316
281
|
);
|
|
317
282
|
};
|
|
318
283
|
const LinkCard = styled__default.default(v2.Link)`
|
|
319
284
|
display: block;
|
|
320
285
|
`;
|
|
321
|
-
const CapitalizeRelativeTime = styled__default.default(RelativeTime)`
|
|
286
|
+
const CapitalizeRelativeTime = styled__default.default(helperPlugin.RelativeTime)`
|
|
322
287
|
text-transform: capitalize;
|
|
323
288
|
`;
|
|
324
289
|
const getBadgeProps = (status) => {
|
|
@@ -348,9 +313,8 @@ const getBadgeProps = (status) => {
|
|
|
348
313
|
};
|
|
349
314
|
const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
350
315
|
const { formatMessage } = reactIntl.useIntl();
|
|
351
|
-
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
352
316
|
if (isError) {
|
|
353
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
317
|
+
return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {});
|
|
354
318
|
}
|
|
355
319
|
if (releases?.length === 0) {
|
|
356
320
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -369,7 +333,7 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
369
333
|
}
|
|
370
334
|
);
|
|
371
335
|
}
|
|
372
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid, { gap: 4, children: releases.map(({ id, name,
|
|
336
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid, { gap: 4, children: releases.map(({ id, name, scheduledAt, status }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.GridItem, { col: 3, s: 6, xs: 12, children: /* @__PURE__ */ jsxRuntime.jsx(LinkCard, { href: `content-releases/${id}`, isExternal: false, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
373
337
|
designSystem.Flex,
|
|
374
338
|
{
|
|
375
339
|
direction: "column",
|
|
@@ -385,16 +349,10 @@ const ReleasesGrid = ({ sectionTitle, releases = [], isError = false }) => {
|
|
|
385
349
|
children: [
|
|
386
350
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "start", gap: 1, children: [
|
|
387
351
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { as: "h3", variant: "delta", fontWeight: "bold", children: name }),
|
|
388
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children:
|
|
352
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: scheduledAt ? /* @__PURE__ */ jsxRuntime.jsx(CapitalizeRelativeTime, { timestamp: new Date(scheduledAt) }) : formatMessage({
|
|
389
353
|
id: "content-releases.pages.Releases.not-scheduled",
|
|
390
354
|
defaultMessage: "Not scheduled"
|
|
391
|
-
})
|
|
392
|
-
{
|
|
393
|
-
id: "content-releases.page.Releases.release-item.entries",
|
|
394
|
-
defaultMessage: "{number, plural, =0 {No entries} one {# entry} other {# entries}}"
|
|
395
|
-
},
|
|
396
|
-
{ number: actions.meta.count }
|
|
397
|
-
) })
|
|
355
|
+
}) })
|
|
398
356
|
] }),
|
|
399
357
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { ...getBadgeProps(status), children: status })
|
|
400
358
|
]
|
|
@@ -413,8 +371,7 @@ const INITIAL_FORM_VALUES = {
|
|
|
413
371
|
name: "",
|
|
414
372
|
date: null,
|
|
415
373
|
time: "",
|
|
416
|
-
|
|
417
|
-
isScheduled: window.strapi.future.isEnabled("contentReleasesScheduling"),
|
|
374
|
+
isScheduled: true,
|
|
418
375
|
scheduledAt: null,
|
|
419
376
|
timezone: null
|
|
420
377
|
};
|
|
@@ -424,7 +381,7 @@ const ReleasesPage = () => {
|
|
|
424
381
|
const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
|
|
425
382
|
const toggleNotification = helperPlugin.useNotification();
|
|
426
383
|
const { formatMessage } = reactIntl.useIntl();
|
|
427
|
-
const
|
|
384
|
+
const { push, replace } = reactRouterDom.useHistory();
|
|
428
385
|
const { formatAPIError } = helperPlugin.useAPIErrorHandler();
|
|
429
386
|
const [{ query }, setQuery] = helperPlugin.useQueryParams();
|
|
430
387
|
const response = index.useGetReleasesQuery(query);
|
|
@@ -448,9 +405,9 @@ const ReleasesPage = () => {
|
|
|
448
405
|
defaultMessage: "Please try again or open another release."
|
|
449
406
|
})
|
|
450
407
|
});
|
|
451
|
-
|
|
408
|
+
replace({ state: null });
|
|
452
409
|
}
|
|
453
|
-
}, [formatMessage, location?.state?.errors,
|
|
410
|
+
}, [formatMessage, location?.state?.errors, replace, toggleNotification]);
|
|
454
411
|
React__namespace.useEffect(() => {
|
|
455
412
|
if (tabRef.current) {
|
|
456
413
|
tabRef.current._handlers.setSelectedTabIndex(activeTabIndex);
|
|
@@ -460,7 +417,7 @@ const ReleasesPage = () => {
|
|
|
460
417
|
setReleaseModalShown((prev) => !prev);
|
|
461
418
|
};
|
|
462
419
|
if (isLoading) {
|
|
463
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
420
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoading, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
|
|
464
421
|
}
|
|
465
422
|
const totalPendingReleases = isSuccess && response.currentData?.meta?.pendingReleasesCount || 0;
|
|
466
423
|
const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;
|
|
@@ -491,7 +448,7 @@ const ReleasesPage = () => {
|
|
|
491
448
|
})
|
|
492
449
|
});
|
|
493
450
|
trackUsage("didCreateRelease");
|
|
494
|
-
|
|
451
|
+
push(`/plugins/content-releases/${response2.data.data.id}`);
|
|
495
452
|
} else if (index.isAxiosError(response2.error)) {
|
|
496
453
|
toggleNotification({
|
|
497
454
|
type: "warning",
|
|
@@ -606,17 +563,23 @@ const ReleasesPage = () => {
|
|
|
606
563
|
]
|
|
607
564
|
}
|
|
608
565
|
),
|
|
609
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
566
|
+
response.currentData?.meta?.pagination?.total ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
|
|
567
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
568
|
+
helperPlugin.PageSizeURLQuery,
|
|
569
|
+
{
|
|
570
|
+
options: ["8", "16", "32", "64"],
|
|
571
|
+
defaultValue: response?.currentData?.meta?.pagination?.pageSize.toString()
|
|
572
|
+
}
|
|
573
|
+
),
|
|
574
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
575
|
+
helperPlugin.PaginationURLQuery,
|
|
576
|
+
{
|
|
577
|
+
pagination: {
|
|
578
|
+
pageCount: response?.currentData?.meta?.pagination?.pageCount || 0
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
)
|
|
582
|
+
] }) : null
|
|
620
583
|
] }) }),
|
|
621
584
|
releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
|
|
622
585
|
ReleaseModal,
|
|
@@ -664,18 +627,14 @@ const TrashIcon = styled__default.default(icons.Trash)`
|
|
|
664
627
|
const TypographyMaxWidth = styled__default.default(designSystem.Typography)`
|
|
665
628
|
max-width: 300px;
|
|
666
629
|
`;
|
|
667
|
-
const EntryValidationText = ({ action, schema, entry }) => {
|
|
630
|
+
const EntryValidationText = ({ action, schema, components, entry }) => {
|
|
668
631
|
const { formatMessage } = reactIntl.useIntl();
|
|
669
|
-
const { validate } = strapiAdmin.unstable_useDocument(
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
skip: !schema
|
|
676
|
-
}
|
|
677
|
-
);
|
|
678
|
-
const errors = validate(entry) ?? {};
|
|
632
|
+
const { validate } = strapiAdmin.unstable_useDocument();
|
|
633
|
+
const { errors } = validate(entry, {
|
|
634
|
+
contentType: schema,
|
|
635
|
+
components,
|
|
636
|
+
isCreatingEntry: false
|
|
637
|
+
});
|
|
679
638
|
if (Object.keys(errors).length > 0) {
|
|
680
639
|
const validationErrorsMessages = Object.entries(errors).map(
|
|
681
640
|
([key, value]) => formatMessage(
|
|
@@ -723,12 +682,7 @@ const ReleaseDetailsLayout = ({
|
|
|
723
682
|
isLoading: isLoadingDetails,
|
|
724
683
|
isError,
|
|
725
684
|
error
|
|
726
|
-
} = index.useGetReleaseQuery(
|
|
727
|
-
{ id: releaseId },
|
|
728
|
-
{
|
|
729
|
-
skip: !releaseId
|
|
730
|
-
}
|
|
731
|
-
);
|
|
685
|
+
} = index.useGetReleaseQuery({ id: releaseId });
|
|
732
686
|
const [publishRelease, { isLoading: isPublishing }] = index.usePublishReleaseMutation();
|
|
733
687
|
const toggleNotification = helperPlugin.useNotification();
|
|
734
688
|
const { formatAPIError } = helperPlugin.useAPIErrorHandler();
|
|
@@ -738,8 +692,8 @@ const ReleaseDetailsLayout = ({
|
|
|
738
692
|
const dispatch = index.useTypedDispatch();
|
|
739
693
|
const { trackUsage } = helperPlugin.useTracking();
|
|
740
694
|
const release = data?.data;
|
|
741
|
-
const handlePublishRelease =
|
|
742
|
-
const response = await publishRelease({ id });
|
|
695
|
+
const handlePublishRelease = async () => {
|
|
696
|
+
const response = await publishRelease({ id: releaseId });
|
|
743
697
|
if ("data" in response) {
|
|
744
698
|
toggleNotification({
|
|
745
699
|
type: "success",
|
|
@@ -767,7 +721,12 @@ const ReleaseDetailsLayout = ({
|
|
|
767
721
|
}
|
|
768
722
|
};
|
|
769
723
|
const handleRefresh = () => {
|
|
770
|
-
dispatch(
|
|
724
|
+
dispatch(
|
|
725
|
+
index.releaseApi.util.invalidateTags([
|
|
726
|
+
{ type: "ReleaseAction", id: "LIST" },
|
|
727
|
+
{ type: "Release", id: releaseId }
|
|
728
|
+
])
|
|
729
|
+
);
|
|
771
730
|
};
|
|
772
731
|
const getCreatedByUser = () => {
|
|
773
732
|
if (!release?.createdBy) {
|
|
@@ -782,26 +741,27 @@ const ReleaseDetailsLayout = ({
|
|
|
782
741
|
return release.createdBy.email;
|
|
783
742
|
};
|
|
784
743
|
if (isLoadingDetails) {
|
|
785
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
744
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { "aria-busy": isLoadingDetails, children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
|
|
786
745
|
}
|
|
787
746
|
if (isError || !release) {
|
|
788
747
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
789
|
-
reactRouterDom.
|
|
748
|
+
reactRouterDom.Redirect,
|
|
790
749
|
{
|
|
791
|
-
to:
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
750
|
+
to: {
|
|
751
|
+
pathname: "/plugins/content-releases",
|
|
752
|
+
state: {
|
|
753
|
+
errors: [
|
|
754
|
+
{
|
|
755
|
+
code: error?.code
|
|
756
|
+
}
|
|
757
|
+
]
|
|
758
|
+
}
|
|
798
759
|
}
|
|
799
760
|
}
|
|
800
761
|
);
|
|
801
762
|
}
|
|
802
763
|
const totalEntries = release.actions.meta.count || 0;
|
|
803
764
|
const hasCreatedByUser = Boolean(getCreatedByUser());
|
|
804
|
-
const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
|
|
805
765
|
const isScheduled = release.scheduledAt && release.timezone;
|
|
806
766
|
const numberOfEntriesText = formatMessage(
|
|
807
767
|
{
|
|
@@ -836,10 +796,13 @@ const ReleaseDetailsLayout = ({
|
|
|
836
796
|
{
|
|
837
797
|
title: release.name,
|
|
838
798
|
subtitle: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, lineHeight: 6, children: [
|
|
839
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (
|
|
799
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral600", variant: "epsilon", children: numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : "") }),
|
|
840
800
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { ...getBadgeProps(release.status), children: release.status })
|
|
841
801
|
] }),
|
|
842
|
-
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(
|
|
802
|
+
navigationAction: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Link, { startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowLeft, {}), to: "/plugins/content-releases", children: formatMessage({
|
|
803
|
+
id: "global.back",
|
|
804
|
+
defaultMessage: "Back"
|
|
805
|
+
}) }),
|
|
843
806
|
primaryAction: !release.releasedAt && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
|
844
807
|
/* @__PURE__ */ jsxRuntime.jsxs(v2.Menu.Root, { children: [
|
|
845
808
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -905,7 +868,7 @@ const ReleaseDetailsLayout = ({
|
|
|
905
868
|
defaultMessage: "Created"
|
|
906
869
|
}) }),
|
|
907
870
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", color: "neutral300", children: [
|
|
908
|
-
/* @__PURE__ */ jsxRuntime.jsx(RelativeTime, { timestamp: new Date(release.createdAt) }),
|
|
871
|
+
/* @__PURE__ */ jsxRuntime.jsx(helperPlugin.RelativeTime, { timestamp: new Date(release.createdAt) }),
|
|
909
872
|
formatMessage(
|
|
910
873
|
{
|
|
911
874
|
id: "content-releases.header.actions.created.description",
|
|
@@ -928,7 +891,7 @@ const ReleaseDetailsLayout = ({
|
|
|
928
891
|
{
|
|
929
892
|
size: "S",
|
|
930
893
|
variant: "default",
|
|
931
|
-
onClick: handlePublishRelease
|
|
894
|
+
onClick: handlePublishRelease,
|
|
932
895
|
loading: isPublishing,
|
|
933
896
|
disabled: release.actions.meta.count === 0,
|
|
934
897
|
children: formatMessage({
|
|
@@ -962,8 +925,9 @@ const getGroupByOptionLabel = (value) => {
|
|
|
962
925
|
defaultMessage: "Content-Types"
|
|
963
926
|
};
|
|
964
927
|
};
|
|
965
|
-
const ReleaseDetailsBody = (
|
|
928
|
+
const ReleaseDetailsBody = () => {
|
|
966
929
|
const { formatMessage } = reactIntl.useIntl();
|
|
930
|
+
const { releaseId } = reactRouterDom.useParams();
|
|
967
931
|
const [{ query }, setQuery] = helperPlugin.useQueryParams();
|
|
968
932
|
const toggleNotification = helperPlugin.useNotification();
|
|
969
933
|
const { formatAPIError } = helperPlugin.useAPIErrorHandler();
|
|
@@ -1018,7 +982,7 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1018
982
|
}
|
|
1019
983
|
};
|
|
1020
984
|
if (isLoading || isReleaseLoading) {
|
|
1021
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
985
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) });
|
|
1022
986
|
}
|
|
1023
987
|
const releaseActions = data?.data;
|
|
1024
988
|
const releaseMeta = data?.meta;
|
|
@@ -1037,22 +1001,28 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1037
1001
|
});
|
|
1038
1002
|
}
|
|
1039
1003
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1040
|
-
reactRouterDom.
|
|
1004
|
+
reactRouterDom.Redirect,
|
|
1041
1005
|
{
|
|
1042
|
-
to:
|
|
1043
|
-
|
|
1044
|
-
|
|
1006
|
+
to: {
|
|
1007
|
+
pathname: "/plugins/content-releases",
|
|
1008
|
+
state: {
|
|
1009
|
+
errors: errorsArray
|
|
1010
|
+
}
|
|
1045
1011
|
}
|
|
1046
1012
|
}
|
|
1047
1013
|
);
|
|
1048
1014
|
}
|
|
1049
1015
|
if (isError || !releaseActions) {
|
|
1050
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1016
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.AnErrorOccurred, {}) });
|
|
1051
1017
|
}
|
|
1052
1018
|
if (Object.keys(releaseActions).length === 0) {
|
|
1053
1019
|
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1054
|
-
|
|
1020
|
+
helperPlugin.NoContent,
|
|
1055
1021
|
{
|
|
1022
|
+
content: {
|
|
1023
|
+
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1024
|
+
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1025
|
+
},
|
|
1056
1026
|
action: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1057
1027
|
v2.LinkButton,
|
|
1058
1028
|
{
|
|
@@ -1067,54 +1037,10 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1067
1037
|
defaultMessage: "Open the Content Manager"
|
|
1068
1038
|
})
|
|
1069
1039
|
}
|
|
1070
|
-
)
|
|
1071
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.EmptyDocuments, { width: "10rem" }),
|
|
1072
|
-
content: formatMessage({
|
|
1073
|
-
id: "content-releases.pages.Details.tab.emptyEntries",
|
|
1074
|
-
defaultMessage: "This release is empty. Open the Content Manager, select an entry and add it to the release."
|
|
1075
|
-
})
|
|
1040
|
+
)
|
|
1076
1041
|
}
|
|
1077
1042
|
) });
|
|
1078
1043
|
}
|
|
1079
|
-
const headers = [
|
|
1080
|
-
{
|
|
1081
|
-
label: formatMessage({
|
|
1082
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1083
|
-
defaultMessage: "name"
|
|
1084
|
-
}),
|
|
1085
|
-
name: "name"
|
|
1086
|
-
},
|
|
1087
|
-
{
|
|
1088
|
-
label: formatMessage({
|
|
1089
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1090
|
-
defaultMessage: "locale"
|
|
1091
|
-
}),
|
|
1092
|
-
name: "locale"
|
|
1093
|
-
},
|
|
1094
|
-
{
|
|
1095
|
-
label: formatMessage({
|
|
1096
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1097
|
-
defaultMessage: "content-type"
|
|
1098
|
-
}),
|
|
1099
|
-
name: "content-type"
|
|
1100
|
-
},
|
|
1101
|
-
{
|
|
1102
|
-
label: formatMessage({
|
|
1103
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1104
|
-
defaultMessage: "action"
|
|
1105
|
-
}),
|
|
1106
|
-
name: "action"
|
|
1107
|
-
},
|
|
1108
|
-
...!release.releasedAt ? [
|
|
1109
|
-
{
|
|
1110
|
-
label: formatMessage({
|
|
1111
|
-
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1112
|
-
defaultMessage: "status"
|
|
1113
|
-
}),
|
|
1114
|
-
name: "status"
|
|
1115
|
-
}
|
|
1116
|
-
] : []
|
|
1117
|
-
];
|
|
1118
1044
|
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 8, direction: "column", alignItems: "stretch", children: [
|
|
1119
1045
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1120
1046
|
designSystem.SingleSelect,
|
|
@@ -1140,18 +1066,75 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1140
1066
|
Object.keys(releaseActions).map((key) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
|
|
1141
1067
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { role: "separator", "aria-label": key, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { children: key }) }),
|
|
1142
1068
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1143
|
-
|
|
1069
|
+
helperPlugin.Table.Root,
|
|
1144
1070
|
{
|
|
1145
1071
|
rows: releaseActions[key].map((item) => ({
|
|
1146
1072
|
...item,
|
|
1147
1073
|
id: Number(item.entry.id)
|
|
1148
1074
|
})),
|
|
1149
|
-
|
|
1150
|
-
isLoading
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
/* @__PURE__ */ jsxRuntime.
|
|
1154
|
-
|
|
1075
|
+
colCount: releaseActions[key].length,
|
|
1076
|
+
isLoading,
|
|
1077
|
+
isFetching,
|
|
1078
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Content, { children: [
|
|
1079
|
+
/* @__PURE__ */ jsxRuntime.jsxs(helperPlugin.Table.Head, { children: [
|
|
1080
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1081
|
+
helperPlugin.Table.HeaderCell,
|
|
1082
|
+
{
|
|
1083
|
+
fieldSchemaType: "string",
|
|
1084
|
+
label: formatMessage({
|
|
1085
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.name",
|
|
1086
|
+
defaultMessage: "name"
|
|
1087
|
+
}),
|
|
1088
|
+
name: "name"
|
|
1089
|
+
}
|
|
1090
|
+
),
|
|
1091
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1092
|
+
helperPlugin.Table.HeaderCell,
|
|
1093
|
+
{
|
|
1094
|
+
fieldSchemaType: "string",
|
|
1095
|
+
label: formatMessage({
|
|
1096
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.locale",
|
|
1097
|
+
defaultMessage: "locale"
|
|
1098
|
+
}),
|
|
1099
|
+
name: "locale"
|
|
1100
|
+
}
|
|
1101
|
+
),
|
|
1102
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1103
|
+
helperPlugin.Table.HeaderCell,
|
|
1104
|
+
{
|
|
1105
|
+
fieldSchemaType: "string",
|
|
1106
|
+
label: formatMessage({
|
|
1107
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.content-type",
|
|
1108
|
+
defaultMessage: "content-type"
|
|
1109
|
+
}),
|
|
1110
|
+
name: "content-type"
|
|
1111
|
+
}
|
|
1112
|
+
),
|
|
1113
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1114
|
+
helperPlugin.Table.HeaderCell,
|
|
1115
|
+
{
|
|
1116
|
+
fieldSchemaType: "string",
|
|
1117
|
+
label: formatMessage({
|
|
1118
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.action",
|
|
1119
|
+
defaultMessage: "action"
|
|
1120
|
+
}),
|
|
1121
|
+
name: "action"
|
|
1122
|
+
}
|
|
1123
|
+
),
|
|
1124
|
+
!release.releasedAt && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1125
|
+
helperPlugin.Table.HeaderCell,
|
|
1126
|
+
{
|
|
1127
|
+
fieldSchemaType: "string",
|
|
1128
|
+
label: formatMessage({
|
|
1129
|
+
id: "content-releases.page.ReleaseDetails.table.header.label.status",
|
|
1130
|
+
defaultMessage: "status"
|
|
1131
|
+
}),
|
|
1132
|
+
name: "status"
|
|
1133
|
+
}
|
|
1134
|
+
)
|
|
1135
|
+
] }),
|
|
1136
|
+
/* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.LoadingBody, {}),
|
|
1137
|
+
/* @__PURE__ */ jsxRuntime.jsx(helperPlugin.Table.Body, { children: releaseActions[key].map(
|
|
1155
1138
|
({ id, contentType, locale, type, entry }, actionIndex) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
|
|
1156
1139
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "25%", maxWidth: "200px", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: `${contentType.mainFieldValue || entry.id}` }) }),
|
|
1157
1140
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { width: "10%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: `${locale?.name ? locale.name : "-"}` }) }),
|
|
@@ -1208,17 +1191,17 @@ const ReleaseDetailsBody = ({ releaseId }) => {
|
|
|
1208
1191
|
}
|
|
1209
1192
|
)
|
|
1210
1193
|
] }, `releases-group-${key}`)),
|
|
1211
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
)
|
|
1194
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingTop: 4, alignItems: "flex-end", justifyContent: "space-between", children: [
|
|
1195
|
+
/* @__PURE__ */ jsxRuntime.jsx(helperPlugin.PageSizeURLQuery, { defaultValue: releaseMeta?.pagination?.pageSize.toString() }),
|
|
1196
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1197
|
+
helperPlugin.PaginationURLQuery,
|
|
1198
|
+
{
|
|
1199
|
+
pagination: {
|
|
1200
|
+
pageCount: releaseMeta?.pagination?.pageCount || 0
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
1203
|
+
)
|
|
1204
|
+
] })
|
|
1222
1205
|
] }) });
|
|
1223
1206
|
};
|
|
1224
1207
|
const ReleaseDetailsPage = () => {
|
|
@@ -1226,19 +1209,14 @@ const ReleaseDetailsPage = () => {
|
|
|
1226
1209
|
const { releaseId } = reactRouterDom.useParams();
|
|
1227
1210
|
const toggleNotification = helperPlugin.useNotification();
|
|
1228
1211
|
const { formatAPIError } = helperPlugin.useAPIErrorHandler();
|
|
1229
|
-
const
|
|
1212
|
+
const { replace } = reactRouterDom.useHistory();
|
|
1230
1213
|
const [releaseModalShown, setReleaseModalShown] = React__namespace.useState(false);
|
|
1231
1214
|
const [showWarningSubmit, setWarningSubmit] = React__namespace.useState(false);
|
|
1232
1215
|
const {
|
|
1233
1216
|
isLoading: isLoadingDetails,
|
|
1234
1217
|
data,
|
|
1235
1218
|
isSuccess: isSuccessDetails
|
|
1236
|
-
} = index.useGetReleaseQuery(
|
|
1237
|
-
{ id: releaseId },
|
|
1238
|
-
{
|
|
1239
|
-
skip: !releaseId
|
|
1240
|
-
}
|
|
1241
|
-
);
|
|
1219
|
+
} = index.useGetReleaseQuery({ id: releaseId });
|
|
1242
1220
|
const [updateRelease, { isLoading: isSubmittingForm }] = index.useUpdateReleaseMutation();
|
|
1243
1221
|
const [deleteRelease, { isLoading: isDeletingRelease }] = index.useDeleteReleaseMutation();
|
|
1244
1222
|
const toggleEditReleaseModal = () => {
|
|
@@ -1251,18 +1229,15 @@ const ReleaseDetailsPage = () => {
|
|
|
1251
1229
|
{
|
|
1252
1230
|
toggleEditReleaseModal,
|
|
1253
1231
|
toggleWarningSubmit,
|
|
1254
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1232
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.ContentLayout, { children: /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.LoadingIndicatorPage, {}) })
|
|
1255
1233
|
}
|
|
1256
1234
|
);
|
|
1257
1235
|
}
|
|
1258
|
-
if (!releaseId) {
|
|
1259
|
-
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: ".." });
|
|
1260
|
-
}
|
|
1261
1236
|
const releaseData = isSuccessDetails && data?.data || null;
|
|
1262
1237
|
const title = releaseData?.name || "";
|
|
1263
1238
|
const timezone = releaseData?.timezone ?? null;
|
|
1264
1239
|
const scheduledAt = releaseData?.scheduledAt && timezone ? dateFnsTz.utcToZonedTime(releaseData.scheduledAt, timezone) : null;
|
|
1265
|
-
const date = scheduledAt ?
|
|
1240
|
+
const date = scheduledAt ? format__default.default(scheduledAt, "yyyy-MM-dd") : null;
|
|
1266
1241
|
const time = scheduledAt ? format__default.default(scheduledAt, "HH:mm") : "";
|
|
1267
1242
|
const handleEditRelease = async (values) => {
|
|
1268
1243
|
const response = await updateRelease({
|
|
@@ -1297,7 +1272,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1297
1272
|
id: releaseId
|
|
1298
1273
|
});
|
|
1299
1274
|
if ("data" in response) {
|
|
1300
|
-
|
|
1275
|
+
replace("/plugins/content-releases");
|
|
1301
1276
|
} else if (index.isAxiosError(response.error)) {
|
|
1302
1277
|
toggleNotification({
|
|
1303
1278
|
type: "warning",
|
|
@@ -1316,7 +1291,7 @@ const ReleaseDetailsPage = () => {
|
|
|
1316
1291
|
toggleEditReleaseModal,
|
|
1317
1292
|
toggleWarningSubmit,
|
|
1318
1293
|
children: [
|
|
1319
|
-
/* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, {
|
|
1294
|
+
/* @__PURE__ */ jsxRuntime.jsx(ReleaseDetailsBody, {}),
|
|
1320
1295
|
releaseModalShown && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1321
1296
|
ReleaseModal,
|
|
1322
1297
|
{
|
|
@@ -1351,10 +1326,10 @@ const ReleaseDetailsPage = () => {
|
|
|
1351
1326
|
);
|
|
1352
1327
|
};
|
|
1353
1328
|
const App = () => {
|
|
1354
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1355
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, {
|
|
1356
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, {
|
|
1329
|
+
return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: index.PERMISSIONS.main, children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Switch, { children: [
|
|
1330
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}`, component: ReleasesPage }),
|
|
1331
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { exact: true, path: `/plugins/${index.pluginId}/:releaseId`, component: ReleaseDetailsPage })
|
|
1357
1332
|
] }) });
|
|
1358
1333
|
};
|
|
1359
1334
|
exports.App = App;
|
|
1360
|
-
//# sourceMappingURL=App-
|
|
1335
|
+
//# sourceMappingURL=App-ftICpqDz.js.map
|