@strapi/content-releases 5.11.2 → 5.11.3
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/admin/chunks/{App-BEyv0kMo.mjs → App-BkWgp5q_.mjs} +2 -2
- package/dist/admin/chunks/{App-BEyv0kMo.mjs.map → App-BkWgp5q_.mjs.map} +1 -1
- package/dist/admin/chunks/{App-BG-3LItb.js → App-CJiqPP7-.js} +2 -2
- package/dist/admin/chunks/{App-BG-3LItb.js.map → App-CJiqPP7-.js.map} +1 -1
- package/dist/admin/chunks/{PurchaseContentReleases-U5sGMPgR.mjs → PurchaseContentReleases-CzayeVUD.mjs} +70 -50
- package/dist/admin/chunks/PurchaseContentReleases-CzayeVUD.mjs.map +1 -0
- package/dist/admin/chunks/{PurchaseContentReleases-hRg6ejD7.js → PurchaseContentReleases-Z9uEPb5b.js} +70 -50
- package/dist/admin/chunks/PurchaseContentReleases-Z9uEPb5b.js.map +1 -0
- package/dist/admin/chunks/{ReleasesSettingsPage-lky_0-wG.mjs → ReleasesSettingsPage-DUKdFdvx.mjs} +2 -2
- package/dist/admin/chunks/{ReleasesSettingsPage-lky_0-wG.mjs.map → ReleasesSettingsPage-DUKdFdvx.mjs.map} +1 -1
- package/dist/admin/chunks/{ReleasesSettingsPage-DV_y1NJZ.js → ReleasesSettingsPage-KRcoI1bC.js} +2 -2
- package/dist/admin/chunks/{ReleasesSettingsPage-DV_y1NJZ.js.map → ReleasesSettingsPage-KRcoI1bC.js.map} +1 -1
- package/dist/admin/chunks/{index-DEy-8PzZ.mjs → index-DBUaMD56.mjs} +4 -4
- package/dist/admin/chunks/{index-DEy-8PzZ.mjs.map → index-DBUaMD56.mjs.map} +1 -1
- package/dist/admin/chunks/{index-BZaFIG8z.js → index-vjWrvGN3.js} +4 -4
- package/dist/admin/chunks/{index-BZaFIG8z.js.map → index-vjWrvGN3.js.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/package.json +7 -7
- package/dist/admin/chunks/PurchaseContentReleases-U5sGMPgR.mjs.map +0 -1
- package/dist/admin/chunks/PurchaseContentReleases-hRg6ejD7.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App-BEyv0kMo.mjs","sources":["../../../admin/src/components/EntryValidationPopover.tsx","../../../admin/src/components/RelativeTime.tsx","../../../admin/src/components/ReleaseModal.tsx","../../../admin/src/store/hooks.ts","../../../admin/src/utils/api.ts","../../../admin/src/pages/ReleasesPage.tsx","../../../admin/src/pages/ReleaseDetailsPage.tsx","../../../admin/src/pages/App.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { FormErrors, FormValues } from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport { Button, LinkButton, Flex, Typography, Popover } from '@strapi/design-system';\nimport { CheckCircle, CrossCircle, ArrowsCounterClockwise, CaretDown } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl, MessageDescriptor } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport type {\n ReleaseAction,\n ReleaseActionEntry,\n Stage,\n} from '../../../shared/contracts/release-actions';\nimport type { Struct } from '@strapi/types';\n\nconst StyledPopoverFlex = styled(Flex)`\n width: 100%;\n max-width: 256px;\n\n & > * {\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n\n & > *:last-child {\n border-bottom: none;\n }\n`;\n\ninterface EntryValidationPopoverProps {\n action: ReleaseAction['type'];\n schema?: Struct.ContentTypeSchema & {\n hasReviewWorkflow: boolean;\n stageRequiredToPublish?: Stage;\n };\n entry: ReleaseActionEntry;\n status: ReleaseAction['status'];\n}\n\ninterface ValidationStatusProps {\n action: ReleaseAction['type'];\n status: ReleaseAction['status'];\n hasErrors: boolean | null;\n requiredStage?: Stage;\n entryStage?: Stage;\n}\n\nconst EntryStatusTrigger = ({\n action,\n status,\n hasErrors,\n requiredStage,\n entryStage,\n}: ValidationStatusProps) => {\n const { formatMessage } = useIntl();\n\n if (action === 'publish') {\n if (hasErrors || (requiredStage && requiredStage.id !== entryStage?.id)) {\n return (\n <Popover.Trigger>\n <Button\n variant=\"ghost\"\n startIcon={<CrossCircle fill=\"danger600\" />}\n endIcon={<CaretDown />}\n >\n <Typography textColor=\"danger600\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.not-ready',\n defaultMessage: 'Not ready to publish',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n }\n\n if (status === 'draft') {\n return (\n <Popover.Trigger>\n <Button\n variant=\"ghost\"\n startIcon={<CheckCircle fill=\"success600\" />}\n endIcon={<CaretDown />}\n >\n <Typography textColor=\"success600\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n }\n\n if (status === 'modified') {\n return (\n <Popover.Trigger>\n <Button\n variant=\"ghost\"\n startIcon={<ArrowsCounterClockwise fill=\"alternative600\" />}\n endIcon={<CaretDown />}\n >\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"alternative600\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n }\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"ghost\"\n startIcon={<CheckCircle fill=\"success600\" />}\n endIcon={<CaretDown />}\n >\n <Typography textColor=\"success600\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.already-published',\n defaultMessage: 'Already published',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n }\n\n if (status === 'published') {\n return (\n <Popover.Trigger>\n <Button\n variant=\"ghost\"\n startIcon={<CheckCircle fill=\"success600\" />}\n endIcon={<CaretDown />}\n >\n <Typography textColor=\"success600\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-unpublish',\n defaultMessage: 'Ready to unpublish',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n }\n\n return (\n <Popover.Trigger>\n <Button variant=\"ghost\" startIcon={<CheckCircle fill=\"success600\" />} endIcon={<CaretDown />}>\n <Typography textColor=\"success600\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.already-unpublished',\n defaultMessage: 'Already unpublished',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n};\n\ninterface FieldsValidationProps {\n hasErrors: boolean;\n errors: FormErrors<FormValues> | null;\n kind?: string;\n contentTypeUid?: string;\n documentId?: string;\n locale?: string;\n}\n\nconst FieldsValidation = ({\n hasErrors,\n errors,\n kind,\n contentTypeUid,\n documentId,\n locale,\n}: FieldsValidationProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" gap={1} width=\"100%\" padding={5}>\n <Flex gap={2} width=\"100%\">\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields',\n defaultMessage: 'Fields',\n })}\n </Typography>\n {hasErrors ? <CrossCircle fill=\"danger600\" /> : <CheckCircle fill=\"success600\" />}\n </Flex>\n <Typography width=\"100%\" textColor=\"neutral600\">\n {hasErrors\n ? formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.error',\n defaultMessage: '{errors} errors on fields.',\n },\n { errors: errors ? Object.keys(errors).length : 0 }\n )\n : formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.success',\n defaultMessage: 'All fields are filled correctly.',\n })}\n </Typography>\n {hasErrors && (\n <LinkButton\n tag={Link}\n to={{\n pathname: `/content-manager/${kind === 'collectionType' ? 'collection-types' : 'single-types'}/${contentTypeUid}/${documentId}`,\n search: locale\n ? stringify({\n plugins: {\n i18n: {\n locale,\n },\n },\n })\n : '',\n }}\n variant=\"secondary\"\n fullWidth\n state={{ forceValidation: true }}\n >\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.see-errors',\n defaultMessage: 'See errors',\n })}\n </LinkButton>\n )}\n </Flex>\n );\n};\n\nconst getReviewStageIcon = ({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n}: {\n contentTypeHasReviewWorkflow: boolean;\n requiredStage?: Stage;\n entryStage?: Stage;\n}) => {\n if (!contentTypeHasReviewWorkflow) {\n return <CheckCircle fill=\"neutral200\" />;\n }\n if (requiredStage && requiredStage.id !== entryStage?.id) {\n return <CrossCircle fill=\"danger600\" />;\n }\n return <CheckCircle fill=\"success600\" />;\n};\n\nconst getReviewStageMessage = ({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n formatMessage,\n}: {\n contentTypeHasReviewWorkflow: boolean;\n requiredStage?: Stage;\n entryStage?: Stage;\n formatMessage: (messageDescriptor: MessageDescriptor, values?: Record<string, string>) => string;\n}) => {\n if (!contentTypeHasReviewWorkflow) {\n return formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-enabled',\n defaultMessage: 'This entry is not associated to any workflow.',\n });\n }\n\n if (requiredStage && requiredStage.id !== entryStage?.id) {\n return formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-ready',\n defaultMessage: 'This entry is not at the required stage for publishing. ({stageName})',\n },\n {\n stageName: requiredStage?.name ?? '',\n }\n );\n }\n\n if (requiredStage && requiredStage.id === entryStage?.id) {\n return formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.ready',\n defaultMessage: 'This entry is at the required stage for publishing. ({stageName})',\n },\n {\n stageName: requiredStage?.name ?? '',\n }\n );\n }\n\n return formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.stage-not-required',\n defaultMessage: 'No required stage for publication',\n });\n};\n\nconst ReviewStageValidation = ({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n}: {\n contentTypeHasReviewWorkflow: boolean;\n requiredStage?: Stage;\n entryStage?: Stage;\n}) => {\n const { formatMessage } = useIntl();\n\n const Icon = getReviewStageIcon({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n });\n\n return (\n <Flex direction=\"column\" gap={1} width=\"100%\" padding={5}>\n <Flex gap={2} width=\"100%\">\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage',\n defaultMessage: 'Review stage',\n })}\n </Typography>\n {Icon}\n </Flex>\n <Typography textColor=\"neutral600\">\n {getReviewStageMessage({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n formatMessage,\n })}\n </Typography>\n </Flex>\n );\n};\n\nexport const EntryValidationPopover = ({\n schema,\n entry,\n status,\n action,\n}: EntryValidationPopoverProps) => {\n const { validate, isLoading } = unstable_useDocument(\n {\n collectionType: schema?.kind ?? '',\n model: schema?.uid ?? '',\n },\n {\n // useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request\n skip: true,\n }\n );\n\n // Validation errors\n const errors = isLoading ? null : validate(entry);\n const hasErrors = errors ? Object.keys(errors).length > 0 : false;\n\n // Entry stage\n const contentTypeHasReviewWorkflow = schema?.hasReviewWorkflow ?? false;\n const requiredStage = schema?.stageRequiredToPublish;\n const entryStage = entry.strapi_stage;\n\n if (isLoading) {\n return null;\n }\n\n return (\n <Popover.Root>\n <EntryStatusTrigger\n action={action}\n status={status}\n hasErrors={hasErrors}\n requiredStage={requiredStage}\n entryStage={entryStage}\n />\n <Popover.Content>\n <StyledPopoverFlex direction=\"column\">\n <FieldsValidation\n hasErrors={hasErrors}\n errors={errors}\n contentTypeUid={schema?.uid}\n kind={schema?.kind}\n documentId={entry.documentId}\n locale={entry.locale}\n />\n <ReviewStageValidation\n contentTypeHasReviewWorkflow={contentTypeHasReviewWorkflow}\n requiredStage={requiredStage}\n entryStage={entryStage}\n />\n </StyledPopoverFlex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n","import * as React from 'react';\n\nimport { Duration, intervalToDuration, isPast } from 'date-fns';\nimport { useIntl } from 'react-intl';\n\nconst intervals: Array<keyof Duration> = ['years', 'months', 'days', 'hours', 'minutes', 'seconds'];\n\ninterface CustomInterval {\n unit: keyof Duration;\n text: string;\n threshold: number;\n}\n\ninterface RelativeTimeProps extends React.ComponentPropsWithoutRef<'time'> {\n timestamp: Date;\n customIntervals?: CustomInterval[];\n}\n\n/**\n * Displays the relative time between a given timestamp and the current time.\n * You can display a custom message for given time intervals by passing an array of custom intervals.\n *\n * @example\n * ```jsx\n * <caption>Display \"last hour\" if the timestamp is less than an hour ago</caption>\n * <RelativeTime\n * timestamp={new Date('2021-01-01')}\n * customIntervals={[\n * { unit: 'hours', threshold: 1, text: 'last hour' },\n * ]}\n * ```\n */\nconst RelativeTime = React.forwardRef<HTMLTimeElement, RelativeTimeProps>(\n ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {\n const { formatRelativeTime, formatDate, formatTime } = useIntl();\n\n /**\n * TODO: make this auto-update, like a clock.\n */\n const interval = intervalToDuration({\n start: timestamp,\n end: Date.now(),\n // see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.\n }) as Required<Duration>;\n\n const unit = intervals.find((intervalUnit) => {\n return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);\n })!;\n\n const relativeTime = isPast(timestamp) ? -interval[unit] : interval[unit];\n\n // Display custom text if interval is less than the threshold\n const customInterval = customIntervals.find(\n (custom) => interval[custom.unit] < custom.threshold\n );\n\n const displayText = customInterval\n ? customInterval.text\n : formatRelativeTime(relativeTime, unit, { numeric: 'auto' });\n\n return (\n <time\n ref={forwardedRef}\n dateTime={timestamp.toISOString()}\n role=\"time\"\n title={`${formatDate(timestamp)} ${formatTime(timestamp)}`}\n {...restProps}\n >\n {displayText}\n </time>\n );\n }\n);\n\nexport { RelativeTime };\nexport type { CustomInterval, RelativeTimeProps };\n","import * as React from 'react';\n\nimport {\n Button,\n Modal,\n TextInput,\n Typography,\n Checkbox,\n Flex,\n Box,\n DatePicker,\n TimePicker,\n Combobox,\n ComboboxOption,\n Field,\n} from '@strapi/design-system';\nimport { formatISO } from 'date-fns';\nimport { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';\nimport { Formik, Form, useFormikContext } from 'formik';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { pluginId } from '../pluginId';\nimport { getTimezones } from '../utils/time';\nimport { RELEASE_SCHEMA } from '../validation/schemas';\n\nexport interface FormValues {\n name: string;\n date?: string;\n time: string;\n timezone: string | null;\n isScheduled?: boolean;\n scheduledAt: Date | null;\n}\n\ninterface ReleaseModalProps {\n handleClose: () => void;\n handleSubmit: (values: FormValues) => void;\n isLoading?: boolean;\n initialValues: FormValues;\n open?: boolean;\n}\n\nexport const ReleaseModal = ({\n handleClose,\n open,\n handleSubmit,\n initialValues,\n isLoading = false,\n}: ReleaseModalProps) => {\n const { formatMessage } = useIntl();\n const { pathname } = useLocation();\n const isCreatingRelease = pathname === `/plugins/${pluginId}`;\n // Set default first timezone from the list if no system timezone detected\n const { timezoneList, systemTimezone = { value: 'UTC+00:00-Africa/Abidjan ' } } = getTimezones(\n initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : new Date()\n );\n\n /**\n * Generate scheduled time using selected date, time and timezone\n */\n const getScheduledTimestamp = (values: FormValues) => {\n const { date, time, timezone } = values;\n if (!date || !time || !timezone) return null;\n const timezoneWithoutOffset = timezone.split('&')[1];\n return zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);\n };\n\n /**\n * Get timezone with offset to show the selected value in the dropdown\n */\n const getTimezoneWithOffset = () => {\n const currentTimezone = timezoneList.find(\n (timezone) => timezone.value.split('&')[1] === initialValues.timezone\n );\n return currentTimezone?.value || systemTimezone.value;\n };\n\n return (\n <Modal.Root open={open} onOpenChange={handleClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage(\n {\n id: 'content-releases.modal.title',\n defaultMessage:\n '{isCreatingRelease, select, true {New release} other {Edit release}}',\n },\n { isCreatingRelease: isCreatingRelease }\n )}\n </Modal.Title>\n </Modal.Header>\n <Formik\n onSubmit={(values) => {\n handleSubmit({\n ...values,\n timezone: values.timezone ? values.timezone.split('&')[1] : null,\n scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null,\n });\n }}\n initialValues={{\n ...initialValues,\n timezone: initialValues.timezone ? getTimezoneWithOffset() : systemTimezone.value,\n }}\n validationSchema={RELEASE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleChange, setFieldValue }) => {\n return (\n <Form>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Field.Root\n name=\"name\"\n error={\n errors.name &&\n formatMessage({ id: errors.name, defaultMessage: errors.name })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.release-name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput value={values.name} onChange={handleChange} />\n <Field.Error />\n </Field.Root>\n <Box width=\"max-content\">\n <Checkbox\n name=\"isScheduled\"\n checked={values.isScheduled}\n onCheckedChange={(checked) => {\n setFieldValue('isScheduled', checked);\n if (!checked) {\n // Clear scheduling info from a release on unchecking schedule release, which reset scheduling info in DB\n setFieldValue('date', null);\n setFieldValue('time', '');\n setFieldValue('timezone', null);\n } else {\n // On ticking back schedule release date, time and timezone should be restored to the initial state\n setFieldValue('date', initialValues.date);\n setFieldValue('time', initialValues.time);\n setFieldValue(\n 'timezone',\n initialValues.timezone ?? systemTimezone?.value\n );\n }\n }}\n >\n <Typography\n textColor={values.isScheduled ? 'primary600' : 'neutral800'}\n fontWeight={values.isScheduled ? 'semiBold' : 'regular'}\n >\n {formatMessage({\n id: 'modal.form.input.label.schedule-release',\n defaultMessage: 'Schedule release',\n })}\n </Typography>\n </Checkbox>\n </Box>\n {values.isScheduled && (\n <>\n <Flex gap={4} alignItems=\"start\">\n <Box width=\"100%\">\n <Field.Root\n name=\"date\"\n error={\n errors.date &&\n formatMessage({ id: errors.date, defaultMessage: errors.date })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.date',\n defaultMessage: 'Date',\n })}\n </Field.Label>\n <DatePicker\n onChange={(date) => {\n const isoFormatDate = date\n ? formatISO(date, { representation: 'date' })\n : null;\n setFieldValue('date', isoFormatDate);\n }}\n clearLabel={formatMessage({\n id: 'content-releases.modal.form.input.clearLabel',\n defaultMessage: 'Clear',\n })}\n onClear={() => {\n setFieldValue('date', null);\n }}\n value={values.date ? new Date(values.date) : new Date()}\n minDate={utcToZonedTime(new Date(), values.timezone.split('&')[1])}\n />\n <Field.Error />\n </Field.Root>\n </Box>\n <Box width=\"100%\">\n <Field.Root\n name=\"time\"\n error={\n errors.time &&\n formatMessage({ id: errors.time, defaultMessage: errors.time })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.time',\n defaultMessage: 'Time',\n })}\n </Field.Label>\n <TimePicker\n onChange={(time) => {\n setFieldValue('time', time);\n }}\n clearLabel={formatMessage({\n id: 'content-releases.modal.form.input.clearLabel',\n defaultMessage: 'Clear',\n })}\n onClear={() => {\n setFieldValue('time', '');\n }}\n value={values.time || undefined}\n />\n <Field.Error />\n </Field.Root>\n </Box>\n </Flex>\n <TimezoneComponent timezoneOptions={timezoneList} />\n </>\n )}\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n <Button name=\"submit\" loading={isLoading} type=\"submit\">\n {formatMessage(\n {\n id: 'content-releases.modal.form.button.submit',\n defaultMessage: '{isCreatingRelease, select, true {Continue} other {Save}}',\n },\n { isCreatingRelease: isCreatingRelease }\n )}\n </Button>\n </Modal.Footer>\n </Form>\n );\n }}\n </Formik>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\n/**\n * Generates the list of timezones and user's current timezone(system timezone)\n */\ninterface ITimezoneOption {\n offset: string;\n value: string;\n}\n\nconst TimezoneComponent = ({ timezoneOptions }: { timezoneOptions: ITimezoneOption[] }) => {\n const { values, errors, setFieldValue } = useFormikContext<FormValues>();\n const { formatMessage } = useIntl();\n const [timezoneList, setTimezoneList] = React.useState<ITimezoneOption[]>(timezoneOptions);\n\n React.useEffect(() => {\n if (values.date) {\n // Update the timezone offset which varies with DST based on the date selected\n const { timezoneList } = getTimezones(new Date(values.date));\n setTimezoneList(timezoneList);\n\n const updatedTimezone =\n values.timezone &&\n timezoneList.find((tz) => tz.value.split('&')[1] === values.timezone!.split('&')[1]);\n if (updatedTimezone) {\n setFieldValue('timezone', updatedTimezone!.value);\n }\n }\n }, [setFieldValue, values.date, values.timezone]);\n\n return (\n <Field.Root\n name=\"timezone\"\n error={\n errors.timezone && formatMessage({ id: errors.timezone, defaultMessage: errors.timezone })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.timezone',\n defaultMessage: 'Timezone',\n })}\n </Field.Label>\n <Combobox\n autocomplete={{ type: 'list', filter: 'contains' }}\n value={values.timezone || undefined}\n textValue={values.timezone ? values.timezone.replace(/&/, ' ') : undefined} // textValue is required to show the updated DST timezone\n onChange={(timezone) => {\n setFieldValue('timezone', timezone);\n }}\n onTextValueChange={(timezone) => {\n setFieldValue('timezone', timezone);\n }}\n onClear={() => {\n setFieldValue('timezone', '');\n }}\n >\n {timezoneList.map((timezone) => (\n <ComboboxOption key={timezone.value} value={timezone.value}>\n {timezone.value.replace(/&/, ' ')}\n </ComboboxOption>\n ))}\n </Combobox>\n <Field.Error />\n </Field.Root>\n );\n};\n","import { Dispatch } from '@reduxjs/toolkit';\nimport { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';\n\nimport type { Store } from '@strapi/admin/strapi-admin';\n\ntype RootState = ReturnType<Store['getState']>;\n\nconst useTypedDispatch: () => Dispatch = useDispatch;\nconst useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;\n\nexport { useTypedSelector, useTypedDispatch };\n","import { SerializedError } from '@reduxjs/toolkit';\nimport { ApiError } from '@strapi/admin/strapi-admin';\n\ntype BaseQueryError = ApiError | SerializedError;\n\nconst isBaseQueryError = (error?: BaseQueryError): error is BaseQueryError => {\n return typeof error !== 'undefined' && error.name !== undefined;\n};\n\nexport { isBaseQueryError };\nexport type { BaseQueryError };\n","import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n useTracking,\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport {\n Alert,\n Badge,\n Box,\n Button,\n Divider,\n EmptyStateLayout,\n Flex,\n Grid,\n Main,\n Tabs,\n Typography,\n Link,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { format } from 'date-fns';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useLocation, NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { GetReleases, type Release } from '../../../shared/contracts/releases';\nimport { RelativeTime as BaseRelativeTime } from '../components/RelativeTime';\nimport { ReleaseModal, FormValues } from '../components/ReleaseModal';\nimport { PERMISSIONS } from '../constants';\nimport {\n useGetReleasesQuery,\n useGetReleaseSettingsQuery,\n GetReleasesQueryParams,\n useCreateReleaseMutation,\n} from '../services/release';\n\n/* -------------------------------------------------------------------------------------------------\n * ReleasesGrid\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleasesGridProps {\n sectionTitle: 'pending' | 'done';\n releases?: GetReleases.Response['data'];\n isError?: boolean;\n}\n\nconst LinkCard = styled(Link)`\n display: block;\n`;\n\nconst RelativeTime = styled(BaseRelativeTime)`\n display: inline-block;\n &::first-letter {\n text-transform: uppercase;\n }\n`;\n\nconst getBadgeProps = (status: Release['status']) => {\n let color;\n switch (status) {\n case 'ready':\n color = 'success';\n break;\n case 'blocked':\n color = 'warning';\n break;\n case 'failed':\n color = 'danger';\n break;\n case 'done':\n color = 'primary';\n break;\n case 'empty':\n default:\n color = 'neutral';\n }\n\n return {\n textColor: `${color}600`,\n backgroundColor: `${color}100`,\n borderColor: `${color}200`,\n };\n};\n\nconst ReleasesGrid = ({ sectionTitle, releases = [], isError = false }: ReleasesGridProps) => {\n const { formatMessage } = useIntl();\n\n if (isError) {\n return <Page.Error />;\n }\n\n if (releases?.length === 0) {\n return (\n <EmptyStateLayout\n content={formatMessage(\n {\n id: 'content-releases.page.Releases.tab.emptyEntries',\n defaultMessage: 'No releases',\n },\n {\n target: sectionTitle,\n }\n )}\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n );\n }\n\n return (\n <Grid.Root gap={4}>\n {releases.map(({ id, name, scheduledAt, status }) => (\n <Grid.Item col={3} s={6} xs={12} key={id} direction=\"column\" alignItems=\"stretch\">\n <LinkCard tag={NavLink} to={`${id}`} isExternal={false}>\n <Flex\n direction=\"column\"\n justifyContent=\"space-between\"\n padding={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n height=\"100%\"\n width=\"100%\"\n alignItems=\"start\"\n gap={4}\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1}>\n <Typography textColor=\"neutral800\" tag=\"h3\" variant=\"delta\" fontWeight=\"bold\">\n {name}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {scheduledAt ? (\n <RelativeTime timestamp={new Date(scheduledAt)} />\n ) : (\n formatMessage({\n id: 'content-releases.pages.Releases.not-scheduled',\n defaultMessage: 'Not scheduled',\n })\n )}\n </Typography>\n </Flex>\n <Badge {...getBadgeProps(status)}>{status}</Badge>\n </Flex>\n </LinkCard>\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleasesPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledAlert = styled(Alert)`\n button {\n display: none;\n }\n p + div {\n margin-left: auto;\n }\n`;\n\nconst INITIAL_FORM_VALUES = {\n name: '',\n date: format(new Date(), 'yyyy-MM-dd'),\n time: '',\n isScheduled: true,\n scheduledAt: null,\n timezone: null,\n} satisfies FormValues;\n\nconst ReleasesPage = () => {\n const location = useLocation();\n const [releaseModalShown, setReleaseModalShown] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { formatAPIError } = useAPIErrorHandler();\n const [{ query }, setQuery] = useQueryParams<GetReleasesQueryParams>();\n const response = useGetReleasesQuery(query);\n const { data, isLoading: isLoadingSettings } = useGetReleaseSettingsQuery();\n const [createRelease, { isLoading: isSubmittingForm }] = useCreateReleaseMutation();\n const { getFeature } = useLicenseLimits();\n const { maximumReleases = 3 } = getFeature('cms-content-releases') as {\n maximumReleases: number;\n };\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate },\n } = useRBAC(PERMISSIONS);\n\n const { isLoading: isLoadingReleases, isSuccess, isError } = response;\n const activeTab = response?.currentData?.meta?.activeTab || 'pending';\n\n // Check if we have some errors and show a notification to the user to explain the error\n React.useEffect(() => {\n if (location?.state?.errors) {\n toggleNotification({\n type: 'danger',\n title: formatMessage({\n id: 'content-releases.pages.Releases.notification.error.title',\n defaultMessage: 'Your request could not be processed.',\n }),\n message: formatMessage({\n id: 'content-releases.pages.Releases.notification.error.message',\n defaultMessage: 'Please try again or open another release.',\n }),\n });\n navigate('', { replace: true, state: null });\n }\n }, [formatMessage, location?.state?.errors, navigate, toggleNotification]);\n\n const toggleAddReleaseModal = () => {\n setReleaseModalShown((prev) => !prev);\n };\n\n if (isLoadingReleases || isLoadingSettings) {\n return <Page.Loading />;\n }\n\n const totalPendingReleases = (isSuccess && response.currentData?.meta?.pendingReleasesCount) || 0;\n const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;\n\n const handleTabChange = (tabValue: string) => {\n setQuery({\n ...query,\n page: 1,\n pageSize: response?.currentData?.meta?.pagination?.pageSize || 16,\n filters: {\n releasedAt: {\n $notNull: tabValue !== 'pending',\n },\n },\n });\n };\n\n const handleAddRelease = async ({ name, scheduledAt, timezone }: FormValues) => {\n const response = await createRelease({\n name,\n scheduledAt,\n timezone,\n });\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.modal.release-created-notification-success',\n defaultMessage: 'Release created.',\n }),\n });\n\n trackUsage('didCreateRelease');\n navigate(response.data.data.id.toString());\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Main aria-busy={isLoadingReleases || isLoadingSettings}>\n <Layouts.Header\n title={formatMessage({\n id: 'content-releases.pages.Releases.title',\n defaultMessage: 'Releases',\n })}\n subtitle={formatMessage({\n id: 'content-releases.pages.Releases.header-subtitle',\n defaultMessage: 'Create and manage content updates',\n })}\n primaryAction={\n canCreate ? (\n <Button\n startIcon={<Plus />}\n onClick={toggleAddReleaseModal}\n disabled={hasReachedMaximumPendingReleases}\n >\n {formatMessage({\n id: 'content-releases.header.actions.add-release',\n defaultMessage: 'New release',\n })}\n </Button>\n ) : null\n }\n />\n <Layouts.Content>\n <>\n {hasReachedMaximumPendingReleases && (\n <StyledAlert\n marginBottom={6}\n action={\n <Link href=\"https://strapi.io/pricing-cloud\" isExternal>\n {formatMessage({\n id: 'content-releases.pages.Releases.max-limit-reached.action',\n defaultMessage: 'Explore plans',\n })}\n </Link>\n }\n title={formatMessage(\n {\n id: 'content-releases.pages.Releases.max-limit-reached.title',\n defaultMessage:\n 'You have reached the {number} pending {number, plural, one {release} other {releases}} limit.',\n },\n { number: maximumReleases }\n )}\n onClose={() => {}}\n closeLabel=\"\"\n >\n {formatMessage({\n id: 'content-releases.pages.Releases.max-limit-reached.message',\n defaultMessage: 'Upgrade to manage an unlimited number of releases.',\n })}\n </StyledAlert>\n )}\n <Tabs.Root variant=\"simple\" onValueChange={handleTabChange} value={activeTab}>\n <Box paddingBottom={8}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'content-releases.pages.Releases.tab-group.label',\n defaultMessage: 'Releases list',\n })}\n >\n <Tabs.Trigger value=\"pending\">\n {formatMessage(\n {\n id: 'content-releases.pages.Releases.tab.pending',\n defaultMessage: 'Pending ({count})',\n },\n {\n count: totalPendingReleases,\n }\n )}\n </Tabs.Trigger>\n <Tabs.Trigger value=\"done\">\n {formatMessage({\n id: 'content-releases.pages.Releases.tab.done',\n defaultMessage: 'Done',\n })}\n </Tabs.Trigger>\n </Tabs.List>\n <Divider />\n </Box>\n {/* Pending releases */}\n <Tabs.Content value=\"pending\">\n <ReleasesGrid\n sectionTitle=\"pending\"\n releases={response?.currentData?.data}\n isError={isError}\n />\n </Tabs.Content>\n {/* Done releases */}\n <Tabs.Content value=\"done\">\n <ReleasesGrid\n sectionTitle=\"done\"\n releases={response?.currentData?.data}\n isError={isError}\n />\n </Tabs.Content>\n </Tabs.Root>\n <Pagination.Root\n {...response?.currentData?.meta?.pagination}\n defaultPageSize={response?.currentData?.meta?.pagination?.pageSize}\n >\n <Pagination.PageSize options={['8', '16', '32', '64']} />\n <Pagination.Links />\n </Pagination.Root>\n </>\n </Layouts.Content>\n <ReleaseModal\n open={releaseModalShown}\n handleClose={toggleAddReleaseModal}\n handleSubmit={handleAddRelease}\n isLoading={isSubmittingForm}\n initialValues={{\n ...INITIAL_FORM_VALUES,\n timezone: data?.data.defaultTimezone ? data.data.defaultTimezone.split('&')[1] : null,\n }}\n />\n </Main>\n );\n};\n\nexport { ReleasesPage, getBadgeProps };\n","import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n Table,\n BackButton,\n ConfirmDialog,\n useTracking,\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n useStrapiApp,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Main,\n Tr,\n Td,\n Typography,\n Badge,\n SingleSelect,\n SingleSelectOption,\n EmptyStateLayout,\n LinkButton,\n Dialog,\n SimpleMenu,\n MenuItem,\n} from '@strapi/design-system';\nimport { More, Pencil, Trash } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport format from 'date-fns/format';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { useIntl } from 'react-intl';\nimport { useParams, useNavigate, Link as ReactRouterLink, Navigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { EntryValidationPopover } from '../components/EntryValidationPopover';\nimport { RelativeTime } from '../components/RelativeTime';\nimport { ReleaseActionMenu } from '../components/ReleaseActionMenu';\nimport { ReleaseActionOptions } from '../components/ReleaseActionOptions';\nimport { ReleaseModal, FormValues } from '../components/ReleaseModal';\nimport { PERMISSIONS } from '../constants';\nimport {\n GetReleaseActionsQueryParams,\n useGetReleaseActionsQuery,\n useGetReleaseQuery,\n useGetReleaseSettingsQuery,\n useUpdateReleaseMutation,\n useUpdateReleaseActionMutation,\n usePublishReleaseMutation,\n useDeleteReleaseMutation,\n releaseApi,\n} from '../services/release';\nimport { useTypedDispatch } from '../store/hooks';\nimport { isBaseQueryError } from '../utils/api';\nimport { getTimezoneOffset } from '../utils/time';\n\nimport { getBadgeProps } from './ReleasesPage';\n\nimport type {\n ReleaseAction,\n ReleaseActionGroupBy,\n} from '../../../shared/contracts/release-actions';\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsLayout\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseInfoWrapper = styled(Flex)`\n align-self: stretch;\n border-bottom-right-radius: ${({ theme }) => theme.borderRadius};\n border-bottom-left-radius: ${({ theme }) => theme.borderRadius};\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst StyledMenuItem = styled(MenuItem)<{\n disabled?: boolean;\n $variant?: 'neutral' | 'danger';\n}>`\n svg path {\n fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};\n }\n span {\n color: ${({ theme, disabled }) => disabled && theme.colors.neutral500};\n }\n\n &:hover {\n background: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}100`]};\n }\n`;\n\nconst PencilIcon = styled(Pencil)`\n width: ${({ theme }) => theme.spaces[4]};\n height: ${({ theme }) => theme.spaces[4]};\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst TrashIcon = styled(Trash)`\n width: ${({ theme }) => theme.spaces[4]};\n height: ${({ theme }) => theme.spaces[4]};\n path {\n fill: ${({ theme }) => theme.colors.danger600};\n }\n`;\n\ninterface ReleaseDetailsLayoutProps {\n toggleEditReleaseModal: () => void;\n toggleWarningSubmit: () => void;\n children: React.ReactNode;\n}\n\nconst ReleaseDetailsLayout = ({\n toggleEditReleaseModal,\n toggleWarningSubmit,\n children,\n}: ReleaseDetailsLayoutProps) => {\n const { formatMessage, formatDate, formatTime } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const {\n data,\n isLoading: isLoadingDetails,\n error,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const { allowedActions } = useRBAC(PERMISSIONS);\n const { canUpdate, canDelete, canPublish } = allowedActions;\n const dispatch = useTypedDispatch();\n const { trackUsage } = useTracking();\n\n const release = data?.data;\n\n const handlePublishRelease = (id: string) => async () => {\n const response = await publishRelease({ id });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.pages.ReleaseDetails.publish-notification-success',\n defaultMessage: 'Release was published successfully.',\n }),\n });\n\n const { totalEntries, totalPublishedEntries, totalUnpublishedEntries } = response.data.meta;\n\n trackUsage('didPublishRelease', {\n totalEntries,\n totalPublishedEntries,\n totalUnpublishedEntries,\n });\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleRefresh = () => {\n dispatch(\n releaseApi.util.invalidateTags([\n { type: 'ReleaseAction', id: 'LIST' },\n { type: 'Release', id: releaseId },\n ])\n );\n };\n\n const getCreatedByUser = () => {\n if (!release?.createdBy) {\n return null;\n }\n\n // Favor the username\n if (release.createdBy.username) {\n return release.createdBy.username;\n }\n\n // Firstname may not exist if created with SSO\n if (release.createdBy.firstname) {\n return `${release.createdBy.firstname} ${release.createdBy.lastname || ''}`.trim();\n }\n\n // All users must have at least an email\n return release.createdBy.email;\n };\n\n if (isLoadingDetails) {\n return <Page.Loading />;\n }\n\n if ((isBaseQueryError(error) && 'code' in error) || !release) {\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: [\n {\n // @ts-expect-error – TODO: fix this weird error flow\n code: error?.code,\n },\n ],\n }}\n />\n );\n }\n\n const totalEntries = release.actions.meta.count || 0;\n const hasCreatedByUser = Boolean(getCreatedByUser());\n\n const isScheduled = release.scheduledAt && release.timezone;\n const numberOfEntriesText = formatMessage(\n {\n id: 'content-releases.pages.Details.header-subtitle',\n defaultMessage: '{number, plural, =0 {No entries} one {# entry} other {# entries}}',\n },\n { number: totalEntries }\n );\n const scheduledText = isScheduled\n ? formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.header-subtitle.scheduled',\n defaultMessage: 'Scheduled for {date} at {time} ({offset})',\n },\n {\n date: formatDate(new Date(release.scheduledAt!), {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n timeZone: release.timezone!,\n }),\n time: formatTime(new Date(release.scheduledAt!), {\n timeZone: release.timezone!,\n hourCycle: 'h23',\n }),\n offset: getTimezoneOffset(release.timezone!, new Date(release.scheduledAt!)),\n }\n )\n : '';\n\n return (\n <Main aria-busy={isLoadingDetails}>\n <Layouts.Header\n title={release.name}\n subtitle={\n <Flex gap={2} lineHeight={6}>\n <Typography textColor=\"neutral600\" variant=\"epsilon\">\n {numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : '')}\n </Typography>\n <Badge {...getBadgeProps(release.status)}>{release.status}</Badge>\n </Flex>\n }\n navigationAction={<BackButton fallback=\"..\" />}\n primaryAction={\n !release.releasedAt && (\n <Flex gap={2}>\n <SimpleMenuButton\n label={<More />}\n variant=\"tertiary\"\n endIcon={null}\n paddingLeft=\"7px\"\n paddingRight=\"7px\"\n aria-label={formatMessage({\n id: 'content-releases.header.actions.open-release-actions',\n defaultMessage: 'Release edit and delete menu',\n })}\n popoverPlacement=\"bottom-end\"\n >\n <StyledMenuItem disabled={!canUpdate} onSelect={toggleEditReleaseModal}>\n <Flex alignItems=\"center\" gap={2} hasRadius width=\"100%\">\n <PencilIcon />\n <Typography ellipsis>\n {formatMessage({\n id: 'content-releases.header.actions.edit',\n defaultMessage: 'Edit',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n <StyledMenuItem\n disabled={!canDelete}\n onSelect={toggleWarningSubmit}\n $variant=\"danger\"\n >\n <Flex alignItems=\"center\" gap={2} hasRadius width=\"100%\">\n <TrashIcon />\n <Typography ellipsis textColor=\"danger600\">\n {formatMessage({\n id: 'content-releases.header.actions.delete',\n defaultMessage: 'Delete',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n <ReleaseInfoWrapper\n direction=\"column\"\n justifyContent=\"center\"\n alignItems=\"flex-start\"\n gap={1}\n padding={4}\n >\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.header.actions.created',\n defaultMessage: 'Created',\n })}\n </Typography>\n <Typography variant=\"pi\" color=\"neutral300\">\n <RelativeTime timestamp={new Date(release.createdAt)} />\n {formatMessage(\n {\n id: 'content-releases.header.actions.created.description',\n defaultMessage:\n '{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}',\n },\n { createdBy: getCreatedByUser(), hasCreatedByUser }\n )}\n </Typography>\n </ReleaseInfoWrapper>\n </SimpleMenuButton>\n <Button size=\"S\" variant=\"tertiary\" onClick={handleRefresh}>\n {formatMessage({\n id: 'content-releases.header.actions.refresh',\n defaultMessage: 'Refresh',\n })}\n </Button>\n {canPublish ? (\n <Button\n size=\"S\"\n variant=\"default\"\n onClick={handlePublishRelease(release.id.toString())}\n loading={isPublishing}\n disabled={release.actions.meta.count === 0}\n >\n {formatMessage({\n id: 'content-releases.header.actions.publish',\n defaultMessage: 'Publish',\n })}\n </Button>\n ) : null}\n </Flex>\n )\n }\n />\n {children}\n </Main>\n );\n};\n\nconst SimpleMenuButton = styled(SimpleMenu)`\n & > span {\n display: flex;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsBody\n * -----------------------------------------------------------------------------------------------*/\nconst GROUP_BY_OPTIONS = ['contentType', 'locale', 'action'] as const;\nconst GROUP_BY_OPTIONS_NO_LOCALE = ['contentType', 'action'] as const;\nconst getGroupByOptionLabel = (value: (typeof GROUP_BY_OPTIONS)[number]) => {\n if (value === 'locale') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.locales',\n defaultMessage: 'Locales',\n };\n }\n\n if (value === 'action') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.actions',\n defaultMessage: 'Actions',\n };\n }\n\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.content-type',\n defaultMessage: 'Content-Types',\n };\n};\n\ninterface ReleaseDetailsBodyProps {\n releaseId: string;\n}\n\nconst ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<GetReleaseActionsQueryParams>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const {\n data: releaseData,\n isLoading: isReleaseLoading,\n error: releaseError,\n } = useGetReleaseQuery({ id: releaseId });\n const {\n allowedActions: { canUpdate },\n } = useRBAC(PERMISSIONS);\n const runHookWaterfall = useStrapiApp('ReleaseDetailsPage', (state) => state.runHookWaterfall);\n\n // TODO: Migrated displayedHeader to v5\n const { displayedHeaders, hasI18nEnabled }: { displayedHeaders: any; hasI18nEnabled: boolean } =\n runHookWaterfall('ContentReleases/pages/ReleaseDetails/add-locale-in-releases', {\n displayedHeaders: [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.name',\n defaultMessage: 'name',\n },\n name: 'name',\n },\n ],\n hasI18nEnabled: false,\n });\n\n const release = releaseData?.data;\n const selectedGroupBy = query?.groupBy || 'contentType';\n\n const {\n isLoading,\n isFetching,\n isError,\n data,\n error: releaseActionsError,\n } = useGetReleaseActionsQuery({\n ...query,\n releaseId,\n });\n\n const [updateReleaseAction] = useUpdateReleaseActionMutation();\n\n const handleChangeType = async (\n e: React.ChangeEvent<HTMLInputElement>,\n actionId: ReleaseAction['id'],\n actionPath: [string, number]\n ) => {\n const response = await updateReleaseAction({\n params: {\n releaseId,\n actionId,\n },\n body: {\n type: e.target.value as ReleaseAction['type'],\n },\n query, // We are passing the query params to make optimistic updates\n actionPath, // We are passing the action path to found the position in the cache of the action for optimistic updates\n });\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (isLoading || isReleaseLoading) {\n return <Page.Loading />;\n }\n\n const releaseActions = data?.data;\n const releaseMeta = data?.meta;\n const contentTypes = releaseMeta?.contentTypes || {};\n const components = releaseMeta?.components || {};\n\n if (isBaseQueryError(releaseError) || !release) {\n const errorsArray = [];\n if (releaseError && 'code' in releaseError) {\n errorsArray.push({\n code: releaseError.code,\n });\n }\n if (releaseActionsError && 'code' in releaseActionsError) {\n errorsArray.push({\n code: releaseActionsError.code,\n });\n }\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: errorsArray,\n }}\n />\n );\n }\n\n if (isError || !releaseActions) {\n return <Page.Error />;\n }\n\n if (Object.keys(releaseActions).length === 0) {\n return (\n <Layouts.Content>\n <EmptyStateLayout\n action={\n <LinkButton\n tag={ReactRouterLink}\n to={{\n pathname: '/content-manager',\n }}\n style={{ textDecoration: 'none' }}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'content-releases.page.Details.button.openContentManager',\n defaultMessage: 'Open the Content Manager',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'content-releases.pages.Details.tab.emptyEntries',\n defaultMessage:\n 'This release is empty. Open the Content Manager, select an entry and add it to the release.',\n })}\n />\n </Layouts.Content>\n );\n }\n\n const groupByLabel = formatMessage({\n id: 'content-releases.pages.ReleaseDetails.groupBy.aria-label',\n defaultMessage: 'Group by',\n });\n const headers = [\n ...displayedHeaders,\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.content-type',\n defaultMessage: 'content-type',\n },\n name: 'content-type',\n },\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.action',\n defaultMessage: 'action',\n },\n name: 'action',\n },\n ...(!release.releasedAt\n ? [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.status',\n defaultMessage: 'status',\n },\n name: 'status',\n },\n ]\n : []),\n ];\n\n const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;\n\n return (\n <Layouts.Content>\n <Flex gap={8} direction=\"column\" alignItems=\"stretch\">\n <Flex>\n <SingleSelect\n placeholder={groupByLabel}\n aria-label={groupByLabel}\n customizeContent={(value) =>\n formatMessage(\n {\n id: `content-releases.pages.ReleaseDetails.groupBy.label`,\n defaultMessage: `Group by {groupBy}`,\n },\n {\n groupBy: value,\n }\n )\n }\n value={formatMessage(getGroupByOptionLabel(selectedGroupBy))}\n onChange={(value) => setQuery({ groupBy: value as ReleaseActionGroupBy })}\n >\n {options.map((option) => (\n <SingleSelectOption key={option} value={option}>\n {formatMessage(getGroupByOptionLabel(option))}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n {Object.keys(releaseActions).map((key) => (\n <Flex key={`releases-group-${key}`} gap={4} direction=\"column\" alignItems=\"stretch\">\n <Flex role=\"separator\" aria-label={key}>\n <Badge>{key}</Badge>\n </Flex>\n <Table.Root\n rows={releaseActions[key].map((item) => ({\n ...item,\n id: Number(item.entry.id),\n }))}\n headers={headers}\n isLoading={isLoading || isFetching}\n >\n <Table.Content>\n <Table.Head>\n {headers.map(({ label, name }) => (\n <Table.HeaderCell key={name} label={formatMessage(label)} name={name} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Body>\n {releaseActions[key].map(\n ({ id, contentType, locale, type, entry, status }, actionIndex) => (\n <Tr key={id}>\n <Td width=\"25%\" maxWidth=\"200px\">\n <Typography ellipsis>{`${\n contentType.mainFieldValue || entry.id\n }`}</Typography>\n </Td>\n {hasI18nEnabled && (\n <Td width=\"10%\">\n <Typography>{`${locale?.name ? locale.name : '-'}`}</Typography>\n </Td>\n )}\n\n <Td width=\"10%\">\n <Typography>{contentType.displayName || ''}</Typography>\n </Td>\n <Td width=\"20%\">\n {release.releasedAt ? (\n <Typography>\n {formatMessage(\n {\n id: 'content-releases.page.ReleaseDetails.table.action-published',\n defaultMessage:\n 'This entry was <b>{isPublish, select, true {published} other {unpublished}}</b>.',\n },\n {\n isPublish: type === 'publish',\n b: (children: React.ReactNode) => (\n <Typography fontWeight=\"bold\">{children}</Typography>\n ),\n }\n )}\n </Typography>\n ) : (\n <ReleaseActionOptions\n selected={type}\n handleChange={(e) => handleChangeType(e, id, [key, actionIndex])}\n name={`release-action-${id}-type`}\n disabled={!canUpdate}\n />\n )}\n </Td>\n {!release.releasedAt && (\n <>\n <Td width=\"20%\" minWidth=\"200px\">\n <EntryValidationPopover\n action={type}\n schema={contentTypes?.[contentType.uid]}\n entry={entry}\n status={status}\n />\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\">\n <ReleaseActionMenu.Root>\n <ReleaseActionMenu.ReleaseActionEntryLinkItem\n contentTypeUid={contentType.uid}\n documentId={entry.documentId}\n locale={locale?.code}\n />\n <ReleaseActionMenu.DeleteReleaseActionItem\n releaseId={release.id}\n actionId={id}\n />\n </ReleaseActionMenu.Root>\n </Flex>\n </Td>\n </>\n )}\n </Tr>\n )\n )}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n </Flex>\n ))}\n <Pagination.Root\n {...releaseMeta?.pagination}\n defaultPageSize={releaseMeta?.pagination?.pageSize}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n </Layouts.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsPage\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseDetailsPage = () => {\n const { formatMessage } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const navigate = useNavigate();\n const [releaseModalShown, setReleaseModalShown] = React.useState(false);\n const [showWarningSubmit, setWarningSubmit] = React.useState(false);\n\n const {\n isLoading: isLoadingDetails,\n data,\n isSuccess: isSuccessDetails,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const { data: dataTimezone, isLoading: isLoadingTimezone } = useGetReleaseSettingsQuery();\n const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();\n const [deleteRelease] = useDeleteReleaseMutation();\n\n const toggleEditReleaseModal = () => {\n setReleaseModalShown((prev) => !prev);\n };\n\n const getTimezoneValue = () => {\n if (releaseData?.timezone) {\n return releaseData.timezone;\n } else {\n if (dataTimezone?.data.defaultTimezone) {\n return dataTimezone.data.defaultTimezone;\n }\n return null;\n }\n };\n\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n if (isLoadingDetails || isLoadingTimezone) {\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <Page.Loading />\n </ReleaseDetailsLayout>\n );\n }\n\n if (!releaseId) {\n return <Navigate to=\"..\" />;\n }\n\n const releaseData = (isSuccessDetails && data?.data) || null;\n\n const title = releaseData?.name || '';\n const timezone = getTimezoneValue();\n const scheduledAt =\n releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;\n // Just get the date and time to display without considering updated timezone time\n const date = scheduledAt ? format(scheduledAt, 'yyyy-MM-dd') : undefined;\n const time = scheduledAt ? format(scheduledAt, 'HH:mm') : '';\n\n const handleEditRelease = async (values: FormValues) => {\n const response = await updateRelease({\n id: releaseId,\n name: values.name,\n scheduledAt: values.scheduledAt,\n timezone: values.timezone,\n });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.modal.release-updated-notification-success',\n defaultMessage: 'Release updated.',\n }),\n });\n toggleEditReleaseModal();\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleDeleteRelease = async () => {\n const response = await deleteRelease({\n id: releaseId,\n });\n\n if ('data' in response) {\n navigate('..');\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <ReleaseDetailsBody releaseId={releaseId} />\n <ReleaseModal\n open={releaseModalShown}\n handleClose={toggleEditReleaseModal}\n handleSubmit={handleEditRelease}\n isLoading={isLoadingDetails || isSubmittingForm}\n initialValues={{\n name: title || '',\n scheduledAt,\n date,\n time,\n isScheduled: Boolean(scheduledAt),\n timezone,\n }}\n />\n <Dialog.Root open={showWarningSubmit} onOpenChange={toggleWarningSubmit}>\n <ConfirmDialog onConfirm={handleDeleteRelease}>\n {formatMessage({\n id: 'content-releases.dialog.confirmation-message',\n defaultMessage: 'Are you sure you want to delete this release?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </ReleaseDetailsLayout>\n );\n};\n\nexport { ReleaseDetailsPage };\n","import { Page } from '@strapi/admin/strapi-admin';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../constants';\n\nimport { ReleaseDetailsPage } from './ReleaseDetailsPage';\nimport { ReleasesPage } from './ReleasesPage';\n\nexport const App = () => {\n return (\n <Page.Protect permissions={PERMISSIONS.main}>\n <Routes>\n <Route index element={<ReleasesPage />} />\n <Route path={':releaseId'} element={<ReleaseDetailsPage />} />\n </Routes>\n </Page.Protect>\n );\n};\n"],"names":["StyledPopoverFlex","styled","Flex","theme","colors","neutral150","EntryStatusTrigger","action","status","hasErrors","requiredStage","entryStage","formatMessage","useIntl","id","_jsx","Popover","Trigger","Button","variant","startIcon","CrossCircle","fill","endIcon","CaretDown","Typography","textColor","fontWeight","defaultMessage","CheckCircle","ArrowsCounterClockwise","FieldsValidation","errors","kind","contentTypeUid","documentId","locale","_jsxs","direction","gap","width","padding","Object","keys","length","LinkButton","tag","Link","to","pathname","search","stringify","plugins","i18n","fullWidth","state","forceValidation","getReviewStageIcon","contentTypeHasReviewWorkflow","getReviewStageMessage","stageName","name","ReviewStageValidation","Icon","EntryValidationPopover","schema","entry","validate","isLoading","unstable_useDocument","collectionType","model","uid","skip","hasReviewWorkflow","stageRequiredToPublish","strapi_stage","Root","Content","intervals","RelativeTime","React","forwardRef","timestamp","customIntervals","restProps","forwardedRef","formatRelativeTime","formatDate","formatTime","interval","intervalToDuration","start","end","Date","now","unit","find","intervalUnit","includes","relativeTime","isPast","customInterval","custom","threshold","displayText","text","numeric","time","ref","dateTime","toISOString","role","title","ReleaseModal","handleClose","open","handleSubmit","initialValues","useLocation","isCreatingRelease","pluginId","timezoneList","systemTimezone","value","getTimezones","scheduledAt","getScheduledTimestamp","values","date","timezone","timezoneWithoutOffset","split","zonedTimeToUtc","getTimezoneWithOffset","currentTimezone","Modal","onOpenChange","Header","Title","Formik","onSubmit","isScheduled","validationSchema","RELEASE_SCHEMA","validateOnChange","handleChange","setFieldValue","Form","Body","alignItems","Field","error","required","Label","TextInput","onChange","Error","Box","Checkbox","checked","onCheckedChange","_Fragment","DatePicker","isoFormatDate","formatISO","representation","clearLabel","onClear","minDate","utcToZonedTime","TimePicker","undefined","TimezoneComponent","timezoneOptions","Footer","Close","loading","type","useFormikContext","setTimezoneList","useState","useEffect","updatedTimezone","tz","Combobox","autocomplete","filter","textValue","replace","onTextValueChange","map","ComboboxOption","useTypedDispatch","useDispatch","isBaseQueryError","LinkCard","BaseRelativeTime","getBadgeProps","color","backgroundColor","borderColor","ReleasesGrid","sectionTitle","releases","isError","Page","EmptyStateLayout","content","target","icon","EmptyDocuments","Grid","Item","col","s","xs","NavLink","isExternal","justifyContent","hasRadius","background","shadow","height","Badge","StyledAlert","Alert","INITIAL_FORM_VALUES","format","ReleasesPage","location","releaseModalShown","setReleaseModalShown","toggleNotification","useNotification","navigate","useNavigate","formatAPIError","useAPIErrorHandler","query","setQuery","useQueryParams","response","useGetReleasesQuery","data","isLoadingSettings","useGetReleaseSettingsQuery","createRelease","isSubmittingForm","useCreateReleaseMutation","getFeature","useLicenseLimits","maximumReleases","trackUsage","useTracking","allowedActions","canCreate","useRBAC","PERMISSIONS","isLoadingReleases","isSuccess","activeTab","currentData","meta","message","toggleAddReleaseModal","prev","Loading","totalPendingReleases","pendingReleasesCount","hasReachedMaximumPendingReleases","handleTabChange","tabValue","page","pageSize","pagination","filters","releasedAt","$notNull","handleAddRelease","toString","isFetchError","Main","aria-busy","Layouts","subtitle","primaryAction","Plus","onClick","disabled","marginBottom","href","number","onClose","closeLabel","Tabs","onValueChange","paddingBottom","List","aria-label","count","Divider","Pagination","defaultPageSize","PageSize","options","Links","defaultTimezone","ReleaseInfoWrapper","borderRadius","StyledMenuItem","MenuItem","neutral500","$variant","PencilIcon","Pencil","spaces","neutral600","TrashIcon","Trash","danger600","ReleaseDetailsLayout","toggleEditReleaseModal","toggleWarningSubmit","children","releaseId","useParams","isLoadingDetails","useGetReleaseQuery","publishRelease","isPublishing","usePublishReleaseMutation","canUpdate","canDelete","canPublish","dispatch","release","handlePublishRelease","totalEntries","totalPublishedEntries","totalUnpublishedEntries","handleRefresh","releaseApi","util","invalidateTags","getCreatedByUser","createdBy","username","firstname","lastname","trim","email","Navigate","code","actions","hasCreatedByUser","Boolean","numberOfEntriesText","scheduledText","weekday","day","month","year","timeZone","hourCycle","offset","getTimezoneOffset","lineHeight","navigationAction","BackButton","fallback","SimpleMenuButton","label","More","paddingLeft","paddingRight","popoverPlacement","onSelect","ellipsis","createdAt","size","SimpleMenu","GROUP_BY_OPTIONS","GROUP_BY_OPTIONS_NO_LOCALE","getGroupByOptionLabel","ReleaseDetailsBody","releaseData","isReleaseLoading","releaseError","runHookWaterfall","useStrapiApp","displayedHeaders","hasI18nEnabled","selectedGroupBy","groupBy","isFetching","releaseActionsError","useGetReleaseActionsQuery","updateReleaseAction","useUpdateReleaseActionMutation","handleChangeType","e","actionId","actionPath","params","body","releaseActions","releaseMeta","contentTypes","components","errorsArray","push","ReactRouterLink","style","textDecoration","groupByLabel","headers","SingleSelect","placeholder","customizeContent","option","SingleSelectOption","key","Table","rows","item","Number","Head","HeaderCell","contentType","actionIndex","Tr","Td","maxWidth","mainFieldValue","displayName","isPublish","b","ReleaseActionOptions","selected","minWidth","ReleaseActionMenu","ReleaseActionEntryLinkItem","DeleteReleaseActionItem","ReleaseDetailsPage","showWarningSubmit","setWarningSubmit","isSuccessDetails","dataTimezone","isLoadingTimezone","updateRelease","useUpdateReleaseMutation","deleteRelease","useDeleteReleaseMutation","getTimezoneValue","prevState","handleEditRelease","handleDeleteRelease","Dialog","ConfirmDialog","onConfirm","App","Protect","permissions","main","Routes","Route","index","element","path"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"App-BkWgp5q_.mjs","sources":["../../../admin/src/components/EntryValidationPopover.tsx","../../../admin/src/components/RelativeTime.tsx","../../../admin/src/components/ReleaseModal.tsx","../../../admin/src/store/hooks.ts","../../../admin/src/utils/api.ts","../../../admin/src/pages/ReleasesPage.tsx","../../../admin/src/pages/ReleaseDetailsPage.tsx","../../../admin/src/pages/App.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { FormErrors, FormValues } from '@strapi/admin/strapi-admin';\nimport { unstable_useDocument } from '@strapi/content-manager/strapi-admin';\nimport { Button, LinkButton, Flex, Typography, Popover } from '@strapi/design-system';\nimport { CheckCircle, CrossCircle, ArrowsCounterClockwise, CaretDown } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl, MessageDescriptor } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport type {\n ReleaseAction,\n ReleaseActionEntry,\n Stage,\n} from '../../../shared/contracts/release-actions';\nimport type { Struct } from '@strapi/types';\n\nconst StyledPopoverFlex = styled(Flex)`\n width: 100%;\n max-width: 256px;\n\n & > * {\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n\n & > *:last-child {\n border-bottom: none;\n }\n`;\n\ninterface EntryValidationPopoverProps {\n action: ReleaseAction['type'];\n schema?: Struct.ContentTypeSchema & {\n hasReviewWorkflow: boolean;\n stageRequiredToPublish?: Stage;\n };\n entry: ReleaseActionEntry;\n status: ReleaseAction['status'];\n}\n\ninterface ValidationStatusProps {\n action: ReleaseAction['type'];\n status: ReleaseAction['status'];\n hasErrors: boolean | null;\n requiredStage?: Stage;\n entryStage?: Stage;\n}\n\nconst EntryStatusTrigger = ({\n action,\n status,\n hasErrors,\n requiredStage,\n entryStage,\n}: ValidationStatusProps) => {\n const { formatMessage } = useIntl();\n\n if (action === 'publish') {\n if (hasErrors || (requiredStage && requiredStage.id !== entryStage?.id)) {\n return (\n <Popover.Trigger>\n <Button\n variant=\"ghost\"\n startIcon={<CrossCircle fill=\"danger600\" />}\n endIcon={<CaretDown />}\n >\n <Typography textColor=\"danger600\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.not-ready',\n defaultMessage: 'Not ready to publish',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n }\n\n if (status === 'draft') {\n return (\n <Popover.Trigger>\n <Button\n variant=\"ghost\"\n startIcon={<CheckCircle fill=\"success600\" />}\n endIcon={<CaretDown />}\n >\n <Typography textColor=\"success600\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n }\n\n if (status === 'modified') {\n return (\n <Popover.Trigger>\n <Button\n variant=\"ghost\"\n startIcon={<ArrowsCounterClockwise fill=\"alternative600\" />}\n endIcon={<CaretDown />}\n >\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"alternative600\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n }\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"ghost\"\n startIcon={<CheckCircle fill=\"success600\" />}\n endIcon={<CaretDown />}\n >\n <Typography textColor=\"success600\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.already-published',\n defaultMessage: 'Already published',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n }\n\n if (status === 'published') {\n return (\n <Popover.Trigger>\n <Button\n variant=\"ghost\"\n startIcon={<CheckCircle fill=\"success600\" />}\n endIcon={<CaretDown />}\n >\n <Typography textColor=\"success600\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.ready-to-unpublish',\n defaultMessage: 'Ready to unpublish',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n }\n\n return (\n <Popover.Trigger>\n <Button variant=\"ghost\" startIcon={<CheckCircle fill=\"success600\" />} endIcon={<CaretDown />}>\n <Typography textColor=\"success600\" variant=\"omega\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.already-unpublished',\n defaultMessage: 'Already unpublished',\n })}\n </Typography>\n </Button>\n </Popover.Trigger>\n );\n};\n\ninterface FieldsValidationProps {\n hasErrors: boolean;\n errors: FormErrors<FormValues> | null;\n kind?: string;\n contentTypeUid?: string;\n documentId?: string;\n locale?: string;\n}\n\nconst FieldsValidation = ({\n hasErrors,\n errors,\n kind,\n contentTypeUid,\n documentId,\n locale,\n}: FieldsValidationProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" gap={1} width=\"100%\" padding={5}>\n <Flex gap={2} width=\"100%\">\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields',\n defaultMessage: 'Fields',\n })}\n </Typography>\n {hasErrors ? <CrossCircle fill=\"danger600\" /> : <CheckCircle fill=\"success600\" />}\n </Flex>\n <Typography width=\"100%\" textColor=\"neutral600\">\n {hasErrors\n ? formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.error',\n defaultMessage: '{errors} errors on fields.',\n },\n { errors: errors ? Object.keys(errors).length : 0 }\n )\n : formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.success',\n defaultMessage: 'All fields are filled correctly.',\n })}\n </Typography>\n {hasErrors && (\n <LinkButton\n tag={Link}\n to={{\n pathname: `/content-manager/${kind === 'collectionType' ? 'collection-types' : 'single-types'}/${contentTypeUid}/${documentId}`,\n search: locale\n ? stringify({\n plugins: {\n i18n: {\n locale,\n },\n },\n })\n : '',\n }}\n variant=\"secondary\"\n fullWidth\n state={{ forceValidation: true }}\n >\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.fields.see-errors',\n defaultMessage: 'See errors',\n })}\n </LinkButton>\n )}\n </Flex>\n );\n};\n\nconst getReviewStageIcon = ({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n}: {\n contentTypeHasReviewWorkflow: boolean;\n requiredStage?: Stage;\n entryStage?: Stage;\n}) => {\n if (!contentTypeHasReviewWorkflow) {\n return <CheckCircle fill=\"neutral200\" />;\n }\n if (requiredStage && requiredStage.id !== entryStage?.id) {\n return <CrossCircle fill=\"danger600\" />;\n }\n return <CheckCircle fill=\"success600\" />;\n};\n\nconst getReviewStageMessage = ({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n formatMessage,\n}: {\n contentTypeHasReviewWorkflow: boolean;\n requiredStage?: Stage;\n entryStage?: Stage;\n formatMessage: (messageDescriptor: MessageDescriptor, values?: Record<string, string>) => string;\n}) => {\n if (!contentTypeHasReviewWorkflow) {\n return formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-enabled',\n defaultMessage: 'This entry is not associated to any workflow.',\n });\n }\n\n if (requiredStage && requiredStage.id !== entryStage?.id) {\n return formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.not-ready',\n defaultMessage: 'This entry is not at the required stage for publishing. ({stageName})',\n },\n {\n stageName: requiredStage?.name ?? '',\n }\n );\n }\n\n if (requiredStage && requiredStage.id === entryStage?.id) {\n return formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.ready',\n defaultMessage: 'This entry is at the required stage for publishing. ({stageName})',\n },\n {\n stageName: requiredStage?.name ?? '',\n }\n );\n }\n\n return formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage.stage-not-required',\n defaultMessage: 'No required stage for publication',\n });\n};\n\nconst ReviewStageValidation = ({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n}: {\n contentTypeHasReviewWorkflow: boolean;\n requiredStage?: Stage;\n entryStage?: Stage;\n}) => {\n const { formatMessage } = useIntl();\n\n const Icon = getReviewStageIcon({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n });\n\n return (\n <Flex direction=\"column\" gap={1} width=\"100%\" padding={5}>\n <Flex gap={2} width=\"100%\">\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.pages.ReleaseDetails.entry-validation.review-stage',\n defaultMessage: 'Review stage',\n })}\n </Typography>\n {Icon}\n </Flex>\n <Typography textColor=\"neutral600\">\n {getReviewStageMessage({\n contentTypeHasReviewWorkflow,\n requiredStage,\n entryStage,\n formatMessage,\n })}\n </Typography>\n </Flex>\n );\n};\n\nexport const EntryValidationPopover = ({\n schema,\n entry,\n status,\n action,\n}: EntryValidationPopoverProps) => {\n const { validate, isLoading } = unstable_useDocument(\n {\n collectionType: schema?.kind ?? '',\n model: schema?.uid ?? '',\n },\n {\n // useDocument makes a request to get more data about the entry, but we only want to have the validation function so we skip the request\n skip: true,\n }\n );\n\n // Validation errors\n const errors = isLoading ? null : validate(entry);\n const hasErrors = errors ? Object.keys(errors).length > 0 : false;\n\n // Entry stage\n const contentTypeHasReviewWorkflow = schema?.hasReviewWorkflow ?? false;\n const requiredStage = schema?.stageRequiredToPublish;\n const entryStage = entry.strapi_stage;\n\n if (isLoading) {\n return null;\n }\n\n return (\n <Popover.Root>\n <EntryStatusTrigger\n action={action}\n status={status}\n hasErrors={hasErrors}\n requiredStage={requiredStage}\n entryStage={entryStage}\n />\n <Popover.Content>\n <StyledPopoverFlex direction=\"column\">\n <FieldsValidation\n hasErrors={hasErrors}\n errors={errors}\n contentTypeUid={schema?.uid}\n kind={schema?.kind}\n documentId={entry.documentId}\n locale={entry.locale}\n />\n <ReviewStageValidation\n contentTypeHasReviewWorkflow={contentTypeHasReviewWorkflow}\n requiredStage={requiredStage}\n entryStage={entryStage}\n />\n </StyledPopoverFlex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n","import * as React from 'react';\n\nimport { Duration, intervalToDuration, isPast } from 'date-fns';\nimport { useIntl } from 'react-intl';\n\nconst intervals: Array<keyof Duration> = ['years', 'months', 'days', 'hours', 'minutes', 'seconds'];\n\ninterface CustomInterval {\n unit: keyof Duration;\n text: string;\n threshold: number;\n}\n\ninterface RelativeTimeProps extends React.ComponentPropsWithoutRef<'time'> {\n timestamp: Date;\n customIntervals?: CustomInterval[];\n}\n\n/**\n * Displays the relative time between a given timestamp and the current time.\n * You can display a custom message for given time intervals by passing an array of custom intervals.\n *\n * @example\n * ```jsx\n * <caption>Display \"last hour\" if the timestamp is less than an hour ago</caption>\n * <RelativeTime\n * timestamp={new Date('2021-01-01')}\n * customIntervals={[\n * { unit: 'hours', threshold: 1, text: 'last hour' },\n * ]}\n * ```\n */\nconst RelativeTime = React.forwardRef<HTMLTimeElement, RelativeTimeProps>(\n ({ timestamp, customIntervals = [], ...restProps }, forwardedRef) => {\n const { formatRelativeTime, formatDate, formatTime } = useIntl();\n\n /**\n * TODO: make this auto-update, like a clock.\n */\n const interval = intervalToDuration({\n start: timestamp,\n end: Date.now(),\n // see https://github.com/date-fns/date-fns/issues/2891 – No idea why it's all partial it returns it every time.\n }) as Required<Duration>;\n\n const unit = intervals.find((intervalUnit) => {\n return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);\n })!;\n\n const relativeTime = isPast(timestamp) ? -interval[unit] : interval[unit];\n\n // Display custom text if interval is less than the threshold\n const customInterval = customIntervals.find(\n (custom) => interval[custom.unit] < custom.threshold\n );\n\n const displayText = customInterval\n ? customInterval.text\n : formatRelativeTime(relativeTime, unit, { numeric: 'auto' });\n\n return (\n <time\n ref={forwardedRef}\n dateTime={timestamp.toISOString()}\n role=\"time\"\n title={`${formatDate(timestamp)} ${formatTime(timestamp)}`}\n {...restProps}\n >\n {displayText}\n </time>\n );\n }\n);\n\nexport { RelativeTime };\nexport type { CustomInterval, RelativeTimeProps };\n","import * as React from 'react';\n\nimport {\n Button,\n Modal,\n TextInput,\n Typography,\n Checkbox,\n Flex,\n Box,\n DatePicker,\n TimePicker,\n Combobox,\n ComboboxOption,\n Field,\n} from '@strapi/design-system';\nimport { formatISO } from 'date-fns';\nimport { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';\nimport { Formik, Form, useFormikContext } from 'formik';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { pluginId } from '../pluginId';\nimport { getTimezones } from '../utils/time';\nimport { RELEASE_SCHEMA } from '../validation/schemas';\n\nexport interface FormValues {\n name: string;\n date?: string;\n time: string;\n timezone: string | null;\n isScheduled?: boolean;\n scheduledAt: Date | null;\n}\n\ninterface ReleaseModalProps {\n handleClose: () => void;\n handleSubmit: (values: FormValues) => void;\n isLoading?: boolean;\n initialValues: FormValues;\n open?: boolean;\n}\n\nexport const ReleaseModal = ({\n handleClose,\n open,\n handleSubmit,\n initialValues,\n isLoading = false,\n}: ReleaseModalProps) => {\n const { formatMessage } = useIntl();\n const { pathname } = useLocation();\n const isCreatingRelease = pathname === `/plugins/${pluginId}`;\n // Set default first timezone from the list if no system timezone detected\n const { timezoneList, systemTimezone = { value: 'UTC+00:00-Africa/Abidjan ' } } = getTimezones(\n initialValues.scheduledAt ? new Date(initialValues.scheduledAt) : new Date()\n );\n\n /**\n * Generate scheduled time using selected date, time and timezone\n */\n const getScheduledTimestamp = (values: FormValues) => {\n const { date, time, timezone } = values;\n if (!date || !time || !timezone) return null;\n const timezoneWithoutOffset = timezone.split('&')[1];\n return zonedTimeToUtc(`${date} ${time}`, timezoneWithoutOffset);\n };\n\n /**\n * Get timezone with offset to show the selected value in the dropdown\n */\n const getTimezoneWithOffset = () => {\n const currentTimezone = timezoneList.find(\n (timezone) => timezone.value.split('&')[1] === initialValues.timezone\n );\n return currentTimezone?.value || systemTimezone.value;\n };\n\n return (\n <Modal.Root open={open} onOpenChange={handleClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage(\n {\n id: 'content-releases.modal.title',\n defaultMessage:\n '{isCreatingRelease, select, true {New release} other {Edit release}}',\n },\n { isCreatingRelease: isCreatingRelease }\n )}\n </Modal.Title>\n </Modal.Header>\n <Formik\n onSubmit={(values) => {\n handleSubmit({\n ...values,\n timezone: values.timezone ? values.timezone.split('&')[1] : null,\n scheduledAt: values.isScheduled ? getScheduledTimestamp(values) : null,\n });\n }}\n initialValues={{\n ...initialValues,\n timezone: initialValues.timezone ? getTimezoneWithOffset() : systemTimezone.value,\n }}\n validationSchema={RELEASE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleChange, setFieldValue }) => {\n return (\n <Form>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Field.Root\n name=\"name\"\n error={\n errors.name &&\n formatMessage({ id: errors.name, defaultMessage: errors.name })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.release-name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput value={values.name} onChange={handleChange} />\n <Field.Error />\n </Field.Root>\n <Box width=\"max-content\">\n <Checkbox\n name=\"isScheduled\"\n checked={values.isScheduled}\n onCheckedChange={(checked) => {\n setFieldValue('isScheduled', checked);\n if (!checked) {\n // Clear scheduling info from a release on unchecking schedule release, which reset scheduling info in DB\n setFieldValue('date', null);\n setFieldValue('time', '');\n setFieldValue('timezone', null);\n } else {\n // On ticking back schedule release date, time and timezone should be restored to the initial state\n setFieldValue('date', initialValues.date);\n setFieldValue('time', initialValues.time);\n setFieldValue(\n 'timezone',\n initialValues.timezone ?? systemTimezone?.value\n );\n }\n }}\n >\n <Typography\n textColor={values.isScheduled ? 'primary600' : 'neutral800'}\n fontWeight={values.isScheduled ? 'semiBold' : 'regular'}\n >\n {formatMessage({\n id: 'modal.form.input.label.schedule-release',\n defaultMessage: 'Schedule release',\n })}\n </Typography>\n </Checkbox>\n </Box>\n {values.isScheduled && (\n <>\n <Flex gap={4} alignItems=\"start\">\n <Box width=\"100%\">\n <Field.Root\n name=\"date\"\n error={\n errors.date &&\n formatMessage({ id: errors.date, defaultMessage: errors.date })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.date',\n defaultMessage: 'Date',\n })}\n </Field.Label>\n <DatePicker\n onChange={(date) => {\n const isoFormatDate = date\n ? formatISO(date, { representation: 'date' })\n : null;\n setFieldValue('date', isoFormatDate);\n }}\n clearLabel={formatMessage({\n id: 'content-releases.modal.form.input.clearLabel',\n defaultMessage: 'Clear',\n })}\n onClear={() => {\n setFieldValue('date', null);\n }}\n value={values.date ? new Date(values.date) : new Date()}\n minDate={utcToZonedTime(new Date(), values.timezone.split('&')[1])}\n />\n <Field.Error />\n </Field.Root>\n </Box>\n <Box width=\"100%\">\n <Field.Root\n name=\"time\"\n error={\n errors.time &&\n formatMessage({ id: errors.time, defaultMessage: errors.time })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.time',\n defaultMessage: 'Time',\n })}\n </Field.Label>\n <TimePicker\n onChange={(time) => {\n setFieldValue('time', time);\n }}\n clearLabel={formatMessage({\n id: 'content-releases.modal.form.input.clearLabel',\n defaultMessage: 'Clear',\n })}\n onClear={() => {\n setFieldValue('time', '');\n }}\n value={values.time || undefined}\n />\n <Field.Error />\n </Field.Root>\n </Box>\n </Flex>\n <TimezoneComponent timezoneOptions={timezoneList} />\n </>\n )}\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\" name=\"cancel\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n <Button name=\"submit\" loading={isLoading} type=\"submit\">\n {formatMessage(\n {\n id: 'content-releases.modal.form.button.submit',\n defaultMessage: '{isCreatingRelease, select, true {Continue} other {Save}}',\n },\n { isCreatingRelease: isCreatingRelease }\n )}\n </Button>\n </Modal.Footer>\n </Form>\n );\n }}\n </Formik>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\n/**\n * Generates the list of timezones and user's current timezone(system timezone)\n */\ninterface ITimezoneOption {\n offset: string;\n value: string;\n}\n\nconst TimezoneComponent = ({ timezoneOptions }: { timezoneOptions: ITimezoneOption[] }) => {\n const { values, errors, setFieldValue } = useFormikContext<FormValues>();\n const { formatMessage } = useIntl();\n const [timezoneList, setTimezoneList] = React.useState<ITimezoneOption[]>(timezoneOptions);\n\n React.useEffect(() => {\n if (values.date) {\n // Update the timezone offset which varies with DST based on the date selected\n const { timezoneList } = getTimezones(new Date(values.date));\n setTimezoneList(timezoneList);\n\n const updatedTimezone =\n values.timezone &&\n timezoneList.find((tz) => tz.value.split('&')[1] === values.timezone!.split('&')[1]);\n if (updatedTimezone) {\n setFieldValue('timezone', updatedTimezone!.value);\n }\n }\n }, [setFieldValue, values.date, values.timezone]);\n\n return (\n <Field.Root\n name=\"timezone\"\n error={\n errors.timezone && formatMessage({ id: errors.timezone, defaultMessage: errors.timezone })\n }\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'content-releases.modal.form.input.label.timezone',\n defaultMessage: 'Timezone',\n })}\n </Field.Label>\n <Combobox\n autocomplete={{ type: 'list', filter: 'contains' }}\n value={values.timezone || undefined}\n textValue={values.timezone ? values.timezone.replace(/&/, ' ') : undefined} // textValue is required to show the updated DST timezone\n onChange={(timezone) => {\n setFieldValue('timezone', timezone);\n }}\n onTextValueChange={(timezone) => {\n setFieldValue('timezone', timezone);\n }}\n onClear={() => {\n setFieldValue('timezone', '');\n }}\n >\n {timezoneList.map((timezone) => (\n <ComboboxOption key={timezone.value} value={timezone.value}>\n {timezone.value.replace(/&/, ' ')}\n </ComboboxOption>\n ))}\n </Combobox>\n <Field.Error />\n </Field.Root>\n );\n};\n","import { Dispatch } from '@reduxjs/toolkit';\nimport { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';\n\nimport type { Store } from '@strapi/admin/strapi-admin';\n\ntype RootState = ReturnType<Store['getState']>;\n\nconst useTypedDispatch: () => Dispatch = useDispatch;\nconst useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;\n\nexport { useTypedSelector, useTypedDispatch };\n","import { SerializedError } from '@reduxjs/toolkit';\nimport { ApiError } from '@strapi/admin/strapi-admin';\n\ntype BaseQueryError = ApiError | SerializedError;\n\nconst isBaseQueryError = (error?: BaseQueryError): error is BaseQueryError => {\n return typeof error !== 'undefined' && error.name !== undefined;\n};\n\nexport { isBaseQueryError };\nexport type { BaseQueryError };\n","import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n useTracking,\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport { useLicenseLimits } from '@strapi/admin/strapi-admin/ee';\nimport {\n Alert,\n Badge,\n Box,\n Button,\n Divider,\n EmptyStateLayout,\n Flex,\n Grid,\n Main,\n Tabs,\n Typography,\n Link,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { format } from 'date-fns';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useLocation, NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { GetReleases, type Release } from '../../../shared/contracts/releases';\nimport { RelativeTime as BaseRelativeTime } from '../components/RelativeTime';\nimport { ReleaseModal, FormValues } from '../components/ReleaseModal';\nimport { PERMISSIONS } from '../constants';\nimport {\n useGetReleasesQuery,\n useGetReleaseSettingsQuery,\n GetReleasesQueryParams,\n useCreateReleaseMutation,\n} from '../services/release';\n\n/* -------------------------------------------------------------------------------------------------\n * ReleasesGrid\n * -----------------------------------------------------------------------------------------------*/\ninterface ReleasesGridProps {\n sectionTitle: 'pending' | 'done';\n releases?: GetReleases.Response['data'];\n isError?: boolean;\n}\n\nconst LinkCard = styled(Link)`\n display: block;\n`;\n\nconst RelativeTime = styled(BaseRelativeTime)`\n display: inline-block;\n &::first-letter {\n text-transform: uppercase;\n }\n`;\n\nconst getBadgeProps = (status: Release['status']) => {\n let color;\n switch (status) {\n case 'ready':\n color = 'success';\n break;\n case 'blocked':\n color = 'warning';\n break;\n case 'failed':\n color = 'danger';\n break;\n case 'done':\n color = 'primary';\n break;\n case 'empty':\n default:\n color = 'neutral';\n }\n\n return {\n textColor: `${color}600`,\n backgroundColor: `${color}100`,\n borderColor: `${color}200`,\n };\n};\n\nconst ReleasesGrid = ({ sectionTitle, releases = [], isError = false }: ReleasesGridProps) => {\n const { formatMessage } = useIntl();\n\n if (isError) {\n return <Page.Error />;\n }\n\n if (releases?.length === 0) {\n return (\n <EmptyStateLayout\n content={formatMessage(\n {\n id: 'content-releases.page.Releases.tab.emptyEntries',\n defaultMessage: 'No releases',\n },\n {\n target: sectionTitle,\n }\n )}\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n );\n }\n\n return (\n <Grid.Root gap={4}>\n {releases.map(({ id, name, scheduledAt, status }) => (\n <Grid.Item col={3} s={6} xs={12} key={id} direction=\"column\" alignItems=\"stretch\">\n <LinkCard tag={NavLink} to={`${id}`} isExternal={false}>\n <Flex\n direction=\"column\"\n justifyContent=\"space-between\"\n padding={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n height=\"100%\"\n width=\"100%\"\n alignItems=\"start\"\n gap={4}\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1}>\n <Typography textColor=\"neutral800\" tag=\"h3\" variant=\"delta\" fontWeight=\"bold\">\n {name}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {scheduledAt ? (\n <RelativeTime timestamp={new Date(scheduledAt)} />\n ) : (\n formatMessage({\n id: 'content-releases.pages.Releases.not-scheduled',\n defaultMessage: 'Not scheduled',\n })\n )}\n </Typography>\n </Flex>\n <Badge {...getBadgeProps(status)}>{status}</Badge>\n </Flex>\n </LinkCard>\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleasesPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledAlert = styled(Alert)`\n button {\n display: none;\n }\n p + div {\n margin-left: auto;\n }\n`;\n\nconst INITIAL_FORM_VALUES = {\n name: '',\n date: format(new Date(), 'yyyy-MM-dd'),\n time: '',\n isScheduled: true,\n scheduledAt: null,\n timezone: null,\n} satisfies FormValues;\n\nconst ReleasesPage = () => {\n const location = useLocation();\n const [releaseModalShown, setReleaseModalShown] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { formatAPIError } = useAPIErrorHandler();\n const [{ query }, setQuery] = useQueryParams<GetReleasesQueryParams>();\n const response = useGetReleasesQuery(query);\n const { data, isLoading: isLoadingSettings } = useGetReleaseSettingsQuery();\n const [createRelease, { isLoading: isSubmittingForm }] = useCreateReleaseMutation();\n const { getFeature } = useLicenseLimits();\n const { maximumReleases = 3 } = getFeature('cms-content-releases') as {\n maximumReleases: number;\n };\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate },\n } = useRBAC(PERMISSIONS);\n\n const { isLoading: isLoadingReleases, isSuccess, isError } = response;\n const activeTab = response?.currentData?.meta?.activeTab || 'pending';\n\n // Check if we have some errors and show a notification to the user to explain the error\n React.useEffect(() => {\n if (location?.state?.errors) {\n toggleNotification({\n type: 'danger',\n title: formatMessage({\n id: 'content-releases.pages.Releases.notification.error.title',\n defaultMessage: 'Your request could not be processed.',\n }),\n message: formatMessage({\n id: 'content-releases.pages.Releases.notification.error.message',\n defaultMessage: 'Please try again or open another release.',\n }),\n });\n navigate('', { replace: true, state: null });\n }\n }, [formatMessage, location?.state?.errors, navigate, toggleNotification]);\n\n const toggleAddReleaseModal = () => {\n setReleaseModalShown((prev) => !prev);\n };\n\n if (isLoadingReleases || isLoadingSettings) {\n return <Page.Loading />;\n }\n\n const totalPendingReleases = (isSuccess && response.currentData?.meta?.pendingReleasesCount) || 0;\n const hasReachedMaximumPendingReleases = totalPendingReleases >= maximumReleases;\n\n const handleTabChange = (tabValue: string) => {\n setQuery({\n ...query,\n page: 1,\n pageSize: response?.currentData?.meta?.pagination?.pageSize || 16,\n filters: {\n releasedAt: {\n $notNull: tabValue !== 'pending',\n },\n },\n });\n };\n\n const handleAddRelease = async ({ name, scheduledAt, timezone }: FormValues) => {\n const response = await createRelease({\n name,\n scheduledAt,\n timezone,\n });\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.modal.release-created-notification-success',\n defaultMessage: 'Release created.',\n }),\n });\n\n trackUsage('didCreateRelease');\n navigate(response.data.data.id.toString());\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Main aria-busy={isLoadingReleases || isLoadingSettings}>\n <Layouts.Header\n title={formatMessage({\n id: 'content-releases.pages.Releases.title',\n defaultMessage: 'Releases',\n })}\n subtitle={formatMessage({\n id: 'content-releases.pages.Releases.header-subtitle',\n defaultMessage: 'Create and manage content updates',\n })}\n primaryAction={\n canCreate ? (\n <Button\n startIcon={<Plus />}\n onClick={toggleAddReleaseModal}\n disabled={hasReachedMaximumPendingReleases}\n >\n {formatMessage({\n id: 'content-releases.header.actions.add-release',\n defaultMessage: 'New release',\n })}\n </Button>\n ) : null\n }\n />\n <Layouts.Content>\n <>\n {hasReachedMaximumPendingReleases && (\n <StyledAlert\n marginBottom={6}\n action={\n <Link href=\"https://strapi.io/pricing-cloud\" isExternal>\n {formatMessage({\n id: 'content-releases.pages.Releases.max-limit-reached.action',\n defaultMessage: 'Explore plans',\n })}\n </Link>\n }\n title={formatMessage(\n {\n id: 'content-releases.pages.Releases.max-limit-reached.title',\n defaultMessage:\n 'You have reached the {number} pending {number, plural, one {release} other {releases}} limit.',\n },\n { number: maximumReleases }\n )}\n onClose={() => {}}\n closeLabel=\"\"\n >\n {formatMessage({\n id: 'content-releases.pages.Releases.max-limit-reached.message',\n defaultMessage: 'Upgrade to manage an unlimited number of releases.',\n })}\n </StyledAlert>\n )}\n <Tabs.Root variant=\"simple\" onValueChange={handleTabChange} value={activeTab}>\n <Box paddingBottom={8}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'content-releases.pages.Releases.tab-group.label',\n defaultMessage: 'Releases list',\n })}\n >\n <Tabs.Trigger value=\"pending\">\n {formatMessage(\n {\n id: 'content-releases.pages.Releases.tab.pending',\n defaultMessage: 'Pending ({count})',\n },\n {\n count: totalPendingReleases,\n }\n )}\n </Tabs.Trigger>\n <Tabs.Trigger value=\"done\">\n {formatMessage({\n id: 'content-releases.pages.Releases.tab.done',\n defaultMessage: 'Done',\n })}\n </Tabs.Trigger>\n </Tabs.List>\n <Divider />\n </Box>\n {/* Pending releases */}\n <Tabs.Content value=\"pending\">\n <ReleasesGrid\n sectionTitle=\"pending\"\n releases={response?.currentData?.data}\n isError={isError}\n />\n </Tabs.Content>\n {/* Done releases */}\n <Tabs.Content value=\"done\">\n <ReleasesGrid\n sectionTitle=\"done\"\n releases={response?.currentData?.data}\n isError={isError}\n />\n </Tabs.Content>\n </Tabs.Root>\n <Pagination.Root\n {...response?.currentData?.meta?.pagination}\n defaultPageSize={response?.currentData?.meta?.pagination?.pageSize}\n >\n <Pagination.PageSize options={['8', '16', '32', '64']} />\n <Pagination.Links />\n </Pagination.Root>\n </>\n </Layouts.Content>\n <ReleaseModal\n open={releaseModalShown}\n handleClose={toggleAddReleaseModal}\n handleSubmit={handleAddRelease}\n isLoading={isSubmittingForm}\n initialValues={{\n ...INITIAL_FORM_VALUES,\n timezone: data?.data.defaultTimezone ? data.data.defaultTimezone.split('&')[1] : null,\n }}\n />\n </Main>\n );\n};\n\nexport { ReleasesPage, getBadgeProps };\n","import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n Table,\n BackButton,\n ConfirmDialog,\n useTracking,\n useAPIErrorHandler,\n useNotification,\n useQueryParams,\n useRBAC,\n isFetchError,\n useStrapiApp,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Main,\n Tr,\n Td,\n Typography,\n Badge,\n SingleSelect,\n SingleSelectOption,\n EmptyStateLayout,\n LinkButton,\n Dialog,\n SimpleMenu,\n MenuItem,\n} from '@strapi/design-system';\nimport { More, Pencil, Trash } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport format from 'date-fns/format';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport { useIntl } from 'react-intl';\nimport { useParams, useNavigate, Link as ReactRouterLink, Navigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { EntryValidationPopover } from '../components/EntryValidationPopover';\nimport { RelativeTime } from '../components/RelativeTime';\nimport { ReleaseActionMenu } from '../components/ReleaseActionMenu';\nimport { ReleaseActionOptions } from '../components/ReleaseActionOptions';\nimport { ReleaseModal, FormValues } from '../components/ReleaseModal';\nimport { PERMISSIONS } from '../constants';\nimport {\n GetReleaseActionsQueryParams,\n useGetReleaseActionsQuery,\n useGetReleaseQuery,\n useGetReleaseSettingsQuery,\n useUpdateReleaseMutation,\n useUpdateReleaseActionMutation,\n usePublishReleaseMutation,\n useDeleteReleaseMutation,\n releaseApi,\n} from '../services/release';\nimport { useTypedDispatch } from '../store/hooks';\nimport { isBaseQueryError } from '../utils/api';\nimport { getTimezoneOffset } from '../utils/time';\n\nimport { getBadgeProps } from './ReleasesPage';\n\nimport type {\n ReleaseAction,\n ReleaseActionGroupBy,\n} from '../../../shared/contracts/release-actions';\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsLayout\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseInfoWrapper = styled(Flex)`\n align-self: stretch;\n border-bottom-right-radius: ${({ theme }) => theme.borderRadius};\n border-bottom-left-radius: ${({ theme }) => theme.borderRadius};\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst StyledMenuItem = styled(MenuItem)<{\n disabled?: boolean;\n $variant?: 'neutral' | 'danger';\n}>`\n svg path {\n fill: ${({ theme, disabled }) => disabled && theme.colors.neutral500};\n }\n span {\n color: ${({ theme, disabled }) => disabled && theme.colors.neutral500};\n }\n\n &:hover {\n background: ${({ theme, $variant = 'neutral' }) => theme.colors[`${$variant}100`]};\n }\n`;\n\nconst PencilIcon = styled(Pencil)`\n width: ${({ theme }) => theme.spaces[4]};\n height: ${({ theme }) => theme.spaces[4]};\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst TrashIcon = styled(Trash)`\n width: ${({ theme }) => theme.spaces[4]};\n height: ${({ theme }) => theme.spaces[4]};\n path {\n fill: ${({ theme }) => theme.colors.danger600};\n }\n`;\n\ninterface ReleaseDetailsLayoutProps {\n toggleEditReleaseModal: () => void;\n toggleWarningSubmit: () => void;\n children: React.ReactNode;\n}\n\nconst ReleaseDetailsLayout = ({\n toggleEditReleaseModal,\n toggleWarningSubmit,\n children,\n}: ReleaseDetailsLayoutProps) => {\n const { formatMessage, formatDate, formatTime } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const {\n data,\n isLoading: isLoadingDetails,\n error,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const [publishRelease, { isLoading: isPublishing }] = usePublishReleaseMutation();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const { allowedActions } = useRBAC(PERMISSIONS);\n const { canUpdate, canDelete, canPublish } = allowedActions;\n const dispatch = useTypedDispatch();\n const { trackUsage } = useTracking();\n\n const release = data?.data;\n\n const handlePublishRelease = (id: string) => async () => {\n const response = await publishRelease({ id });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.pages.ReleaseDetails.publish-notification-success',\n defaultMessage: 'Release was published successfully.',\n }),\n });\n\n const { totalEntries, totalPublishedEntries, totalUnpublishedEntries } = response.data.meta;\n\n trackUsage('didPublishRelease', {\n totalEntries,\n totalPublishedEntries,\n totalUnpublishedEntries,\n });\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleRefresh = () => {\n dispatch(\n releaseApi.util.invalidateTags([\n { type: 'ReleaseAction', id: 'LIST' },\n { type: 'Release', id: releaseId },\n ])\n );\n };\n\n const getCreatedByUser = () => {\n if (!release?.createdBy) {\n return null;\n }\n\n // Favor the username\n if (release.createdBy.username) {\n return release.createdBy.username;\n }\n\n // Firstname may not exist if created with SSO\n if (release.createdBy.firstname) {\n return `${release.createdBy.firstname} ${release.createdBy.lastname || ''}`.trim();\n }\n\n // All users must have at least an email\n return release.createdBy.email;\n };\n\n if (isLoadingDetails) {\n return <Page.Loading />;\n }\n\n if ((isBaseQueryError(error) && 'code' in error) || !release) {\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: [\n {\n // @ts-expect-error – TODO: fix this weird error flow\n code: error?.code,\n },\n ],\n }}\n />\n );\n }\n\n const totalEntries = release.actions.meta.count || 0;\n const hasCreatedByUser = Boolean(getCreatedByUser());\n\n const isScheduled = release.scheduledAt && release.timezone;\n const numberOfEntriesText = formatMessage(\n {\n id: 'content-releases.pages.Details.header-subtitle',\n defaultMessage: '{number, plural, =0 {No entries} one {# entry} other {# entries}}',\n },\n { number: totalEntries }\n );\n const scheduledText = isScheduled\n ? formatMessage(\n {\n id: 'content-releases.pages.ReleaseDetails.header-subtitle.scheduled',\n defaultMessage: 'Scheduled for {date} at {time} ({offset})',\n },\n {\n date: formatDate(new Date(release.scheduledAt!), {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n timeZone: release.timezone!,\n }),\n time: formatTime(new Date(release.scheduledAt!), {\n timeZone: release.timezone!,\n hourCycle: 'h23',\n }),\n offset: getTimezoneOffset(release.timezone!, new Date(release.scheduledAt!)),\n }\n )\n : '';\n\n return (\n <Main aria-busy={isLoadingDetails}>\n <Layouts.Header\n title={release.name}\n subtitle={\n <Flex gap={2} lineHeight={6}>\n <Typography textColor=\"neutral600\" variant=\"epsilon\">\n {numberOfEntriesText + (isScheduled ? ` - ${scheduledText}` : '')}\n </Typography>\n <Badge {...getBadgeProps(release.status)}>{release.status}</Badge>\n </Flex>\n }\n navigationAction={<BackButton fallback=\"..\" />}\n primaryAction={\n !release.releasedAt && (\n <Flex gap={2}>\n <SimpleMenuButton\n label={<More />}\n variant=\"tertiary\"\n endIcon={null}\n paddingLeft=\"7px\"\n paddingRight=\"7px\"\n aria-label={formatMessage({\n id: 'content-releases.header.actions.open-release-actions',\n defaultMessage: 'Release edit and delete menu',\n })}\n popoverPlacement=\"bottom-end\"\n >\n <StyledMenuItem disabled={!canUpdate} onSelect={toggleEditReleaseModal}>\n <Flex alignItems=\"center\" gap={2} hasRadius width=\"100%\">\n <PencilIcon />\n <Typography ellipsis>\n {formatMessage({\n id: 'content-releases.header.actions.edit',\n defaultMessage: 'Edit',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n <StyledMenuItem\n disabled={!canDelete}\n onSelect={toggleWarningSubmit}\n $variant=\"danger\"\n >\n <Flex alignItems=\"center\" gap={2} hasRadius width=\"100%\">\n <TrashIcon />\n <Typography ellipsis textColor=\"danger600\">\n {formatMessage({\n id: 'content-releases.header.actions.delete',\n defaultMessage: 'Delete',\n })}\n </Typography>\n </Flex>\n </StyledMenuItem>\n <ReleaseInfoWrapper\n direction=\"column\"\n justifyContent=\"center\"\n alignItems=\"flex-start\"\n gap={1}\n padding={4}\n >\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-releases.header.actions.created',\n defaultMessage: 'Created',\n })}\n </Typography>\n <Typography variant=\"pi\" color=\"neutral300\">\n <RelativeTime timestamp={new Date(release.createdAt)} />\n {formatMessage(\n {\n id: 'content-releases.header.actions.created.description',\n defaultMessage:\n '{hasCreatedByUser, select, true { by {createdBy}} other { by deleted user}}',\n },\n { createdBy: getCreatedByUser(), hasCreatedByUser }\n )}\n </Typography>\n </ReleaseInfoWrapper>\n </SimpleMenuButton>\n <Button size=\"S\" variant=\"tertiary\" onClick={handleRefresh}>\n {formatMessage({\n id: 'content-releases.header.actions.refresh',\n defaultMessage: 'Refresh',\n })}\n </Button>\n {canPublish ? (\n <Button\n size=\"S\"\n variant=\"default\"\n onClick={handlePublishRelease(release.id.toString())}\n loading={isPublishing}\n disabled={release.actions.meta.count === 0}\n >\n {formatMessage({\n id: 'content-releases.header.actions.publish',\n defaultMessage: 'Publish',\n })}\n </Button>\n ) : null}\n </Flex>\n )\n }\n />\n {children}\n </Main>\n );\n};\n\nconst SimpleMenuButton = styled(SimpleMenu)`\n & > span {\n display: flex;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsBody\n * -----------------------------------------------------------------------------------------------*/\nconst GROUP_BY_OPTIONS = ['contentType', 'locale', 'action'] as const;\nconst GROUP_BY_OPTIONS_NO_LOCALE = ['contentType', 'action'] as const;\nconst getGroupByOptionLabel = (value: (typeof GROUP_BY_OPTIONS)[number]) => {\n if (value === 'locale') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.locales',\n defaultMessage: 'Locales',\n };\n }\n\n if (value === 'action') {\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.actions',\n defaultMessage: 'Actions',\n };\n }\n\n return {\n id: 'content-releases.pages.ReleaseDetails.groupBy.option.content-type',\n defaultMessage: 'Content-Types',\n };\n};\n\ninterface ReleaseDetailsBodyProps {\n releaseId: string;\n}\n\nconst ReleaseDetailsBody = ({ releaseId }: ReleaseDetailsBodyProps) => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<GetReleaseActionsQueryParams>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const {\n data: releaseData,\n isLoading: isReleaseLoading,\n error: releaseError,\n } = useGetReleaseQuery({ id: releaseId });\n const {\n allowedActions: { canUpdate },\n } = useRBAC(PERMISSIONS);\n const runHookWaterfall = useStrapiApp('ReleaseDetailsPage', (state) => state.runHookWaterfall);\n\n // TODO: Migrated displayedHeader to v5\n const { displayedHeaders, hasI18nEnabled }: { displayedHeaders: any; hasI18nEnabled: boolean } =\n runHookWaterfall('ContentReleases/pages/ReleaseDetails/add-locale-in-releases', {\n displayedHeaders: [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.name',\n defaultMessage: 'name',\n },\n name: 'name',\n },\n ],\n hasI18nEnabled: false,\n });\n\n const release = releaseData?.data;\n const selectedGroupBy = query?.groupBy || 'contentType';\n\n const {\n isLoading,\n isFetching,\n isError,\n data,\n error: releaseActionsError,\n } = useGetReleaseActionsQuery({\n ...query,\n releaseId,\n });\n\n const [updateReleaseAction] = useUpdateReleaseActionMutation();\n\n const handleChangeType = async (\n e: React.ChangeEvent<HTMLInputElement>,\n actionId: ReleaseAction['id'],\n actionPath: [string, number]\n ) => {\n const response = await updateReleaseAction({\n params: {\n releaseId,\n actionId,\n },\n body: {\n type: e.target.value as ReleaseAction['type'],\n },\n query, // We are passing the query params to make optimistic updates\n actionPath, // We are passing the action path to found the position in the cache of the action for optimistic updates\n });\n\n if ('error' in response) {\n if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (isLoading || isReleaseLoading) {\n return <Page.Loading />;\n }\n\n const releaseActions = data?.data;\n const releaseMeta = data?.meta;\n const contentTypes = releaseMeta?.contentTypes || {};\n const components = releaseMeta?.components || {};\n\n if (isBaseQueryError(releaseError) || !release) {\n const errorsArray = [];\n if (releaseError && 'code' in releaseError) {\n errorsArray.push({\n code: releaseError.code,\n });\n }\n if (releaseActionsError && 'code' in releaseActionsError) {\n errorsArray.push({\n code: releaseActionsError.code,\n });\n }\n return (\n <Navigate\n to=\"..\"\n state={{\n errors: errorsArray,\n }}\n />\n );\n }\n\n if (isError || !releaseActions) {\n return <Page.Error />;\n }\n\n if (Object.keys(releaseActions).length === 0) {\n return (\n <Layouts.Content>\n <EmptyStateLayout\n action={\n <LinkButton\n tag={ReactRouterLink}\n to={{\n pathname: '/content-manager',\n }}\n style={{ textDecoration: 'none' }}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'content-releases.page.Details.button.openContentManager',\n defaultMessage: 'Open the Content Manager',\n })}\n </LinkButton>\n }\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'content-releases.pages.Details.tab.emptyEntries',\n defaultMessage:\n 'This release is empty. Open the Content Manager, select an entry and add it to the release.',\n })}\n />\n </Layouts.Content>\n );\n }\n\n const groupByLabel = formatMessage({\n id: 'content-releases.pages.ReleaseDetails.groupBy.aria-label',\n defaultMessage: 'Group by',\n });\n const headers = [\n ...displayedHeaders,\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.content-type',\n defaultMessage: 'content-type',\n },\n name: 'content-type',\n },\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.action',\n defaultMessage: 'action',\n },\n name: 'action',\n },\n ...(!release.releasedAt\n ? [\n {\n label: {\n id: 'content-releases.page.ReleaseDetails.table.header.label.status',\n defaultMessage: 'status',\n },\n name: 'status',\n },\n ]\n : []),\n ];\n\n const options = hasI18nEnabled ? GROUP_BY_OPTIONS : GROUP_BY_OPTIONS_NO_LOCALE;\n\n return (\n <Layouts.Content>\n <Flex gap={8} direction=\"column\" alignItems=\"stretch\">\n <Flex>\n <SingleSelect\n placeholder={groupByLabel}\n aria-label={groupByLabel}\n customizeContent={(value) =>\n formatMessage(\n {\n id: `content-releases.pages.ReleaseDetails.groupBy.label`,\n defaultMessage: `Group by {groupBy}`,\n },\n {\n groupBy: value,\n }\n )\n }\n value={formatMessage(getGroupByOptionLabel(selectedGroupBy))}\n onChange={(value) => setQuery({ groupBy: value as ReleaseActionGroupBy })}\n >\n {options.map((option) => (\n <SingleSelectOption key={option} value={option}>\n {formatMessage(getGroupByOptionLabel(option))}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n {Object.keys(releaseActions).map((key) => (\n <Flex key={`releases-group-${key}`} gap={4} direction=\"column\" alignItems=\"stretch\">\n <Flex role=\"separator\" aria-label={key}>\n <Badge>{key}</Badge>\n </Flex>\n <Table.Root\n rows={releaseActions[key].map((item) => ({\n ...item,\n id: Number(item.entry.id),\n }))}\n headers={headers}\n isLoading={isLoading || isFetching}\n >\n <Table.Content>\n <Table.Head>\n {headers.map(({ label, name }) => (\n <Table.HeaderCell key={name} label={formatMessage(label)} name={name} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Body>\n {releaseActions[key].map(\n ({ id, contentType, locale, type, entry, status }, actionIndex) => (\n <Tr key={id}>\n <Td width=\"25%\" maxWidth=\"200px\">\n <Typography ellipsis>{`${\n contentType.mainFieldValue || entry.id\n }`}</Typography>\n </Td>\n {hasI18nEnabled && (\n <Td width=\"10%\">\n <Typography>{`${locale?.name ? locale.name : '-'}`}</Typography>\n </Td>\n )}\n\n <Td width=\"10%\">\n <Typography>{contentType.displayName || ''}</Typography>\n </Td>\n <Td width=\"20%\">\n {release.releasedAt ? (\n <Typography>\n {formatMessage(\n {\n id: 'content-releases.page.ReleaseDetails.table.action-published',\n defaultMessage:\n 'This entry was <b>{isPublish, select, true {published} other {unpublished}}</b>.',\n },\n {\n isPublish: type === 'publish',\n b: (children: React.ReactNode) => (\n <Typography fontWeight=\"bold\">{children}</Typography>\n ),\n }\n )}\n </Typography>\n ) : (\n <ReleaseActionOptions\n selected={type}\n handleChange={(e) => handleChangeType(e, id, [key, actionIndex])}\n name={`release-action-${id}-type`}\n disabled={!canUpdate}\n />\n )}\n </Td>\n {!release.releasedAt && (\n <>\n <Td width=\"20%\" minWidth=\"200px\">\n <EntryValidationPopover\n action={type}\n schema={contentTypes?.[contentType.uid]}\n entry={entry}\n status={status}\n />\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\">\n <ReleaseActionMenu.Root>\n <ReleaseActionMenu.ReleaseActionEntryLinkItem\n contentTypeUid={contentType.uid}\n documentId={entry.documentId}\n locale={locale?.code}\n />\n <ReleaseActionMenu.DeleteReleaseActionItem\n releaseId={release.id}\n actionId={id}\n />\n </ReleaseActionMenu.Root>\n </Flex>\n </Td>\n </>\n )}\n </Tr>\n )\n )}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n </Flex>\n ))}\n <Pagination.Root\n {...releaseMeta?.pagination}\n defaultPageSize={releaseMeta?.pagination?.pageSize}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n </Layouts.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseDetailsPage\n * -----------------------------------------------------------------------------------------------*/\nconst ReleaseDetailsPage = () => {\n const { formatMessage } = useIntl();\n const { releaseId } = useParams<{ releaseId: string }>();\n const { toggleNotification } = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const navigate = useNavigate();\n const [releaseModalShown, setReleaseModalShown] = React.useState(false);\n const [showWarningSubmit, setWarningSubmit] = React.useState(false);\n\n const {\n isLoading: isLoadingDetails,\n data,\n isSuccess: isSuccessDetails,\n } = useGetReleaseQuery(\n { id: releaseId! },\n {\n skip: !releaseId,\n }\n );\n const { data: dataTimezone, isLoading: isLoadingTimezone } = useGetReleaseSettingsQuery();\n const [updateRelease, { isLoading: isSubmittingForm }] = useUpdateReleaseMutation();\n const [deleteRelease] = useDeleteReleaseMutation();\n\n const toggleEditReleaseModal = () => {\n setReleaseModalShown((prev) => !prev);\n };\n\n const getTimezoneValue = () => {\n if (releaseData?.timezone) {\n return releaseData.timezone;\n } else {\n if (dataTimezone?.data.defaultTimezone) {\n return dataTimezone.data.defaultTimezone;\n }\n return null;\n }\n };\n\n const toggleWarningSubmit = () => setWarningSubmit((prevState) => !prevState);\n\n if (isLoadingDetails || isLoadingTimezone) {\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <Page.Loading />\n </ReleaseDetailsLayout>\n );\n }\n\n if (!releaseId) {\n return <Navigate to=\"..\" />;\n }\n\n const releaseData = (isSuccessDetails && data?.data) || null;\n\n const title = releaseData?.name || '';\n const timezone = getTimezoneValue();\n const scheduledAt =\n releaseData?.scheduledAt && timezone ? utcToZonedTime(releaseData.scheduledAt, timezone) : null;\n // Just get the date and time to display without considering updated timezone time\n const date = scheduledAt ? format(scheduledAt, 'yyyy-MM-dd') : undefined;\n const time = scheduledAt ? format(scheduledAt, 'HH:mm') : '';\n\n const handleEditRelease = async (values: FormValues) => {\n const response = await updateRelease({\n id: releaseId,\n name: values.name,\n scheduledAt: values.scheduledAt,\n timezone: values.timezone,\n });\n\n if ('data' in response) {\n // When the response returns an object with 'data', handle success\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-releases.modal.release-updated-notification-success',\n defaultMessage: 'Release updated.',\n }),\n });\n toggleEditReleaseModal();\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const handleDeleteRelease = async () => {\n const response = await deleteRelease({\n id: releaseId,\n });\n\n if ('data' in response) {\n navigate('..');\n } else if (isFetchError(response.error)) {\n // When the response returns an object with 'error', handle fetch error\n toggleNotification({\n type: 'danger',\n message: formatAPIError(response.error),\n });\n } else {\n // Otherwise, the response returns an object with 'error', handle a generic error\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <ReleaseDetailsLayout\n toggleEditReleaseModal={toggleEditReleaseModal}\n toggleWarningSubmit={toggleWarningSubmit}\n >\n <ReleaseDetailsBody releaseId={releaseId} />\n <ReleaseModal\n open={releaseModalShown}\n handleClose={toggleEditReleaseModal}\n handleSubmit={handleEditRelease}\n isLoading={isLoadingDetails || isSubmittingForm}\n initialValues={{\n name: title || '',\n scheduledAt,\n date,\n time,\n isScheduled: Boolean(scheduledAt),\n timezone,\n }}\n />\n <Dialog.Root open={showWarningSubmit} onOpenChange={toggleWarningSubmit}>\n <ConfirmDialog onConfirm={handleDeleteRelease}>\n {formatMessage({\n id: 'content-releases.dialog.confirmation-message',\n defaultMessage: 'Are you sure you want to delete this release?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </ReleaseDetailsLayout>\n );\n};\n\nexport { ReleaseDetailsPage };\n","import { Page } from '@strapi/admin/strapi-admin';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../constants';\n\nimport { ReleaseDetailsPage } from './ReleaseDetailsPage';\nimport { ReleasesPage } from './ReleasesPage';\n\nexport const App = () => {\n return (\n <Page.Protect permissions={PERMISSIONS.main}>\n <Routes>\n <Route index element={<ReleasesPage />} />\n <Route path={':releaseId'} element={<ReleaseDetailsPage />} />\n </Routes>\n </Page.Protect>\n );\n};\n"],"names":["StyledPopoverFlex","styled","Flex","theme","colors","neutral150","EntryStatusTrigger","action","status","hasErrors","requiredStage","entryStage","formatMessage","useIntl","id","_jsx","Popover","Trigger","Button","variant","startIcon","CrossCircle","fill","endIcon","CaretDown","Typography","textColor","fontWeight","defaultMessage","CheckCircle","ArrowsCounterClockwise","FieldsValidation","errors","kind","contentTypeUid","documentId","locale","_jsxs","direction","gap","width","padding","Object","keys","length","LinkButton","tag","Link","to","pathname","search","stringify","plugins","i18n","fullWidth","state","forceValidation","getReviewStageIcon","contentTypeHasReviewWorkflow","getReviewStageMessage","stageName","name","ReviewStageValidation","Icon","EntryValidationPopover","schema","entry","validate","isLoading","unstable_useDocument","collectionType","model","uid","skip","hasReviewWorkflow","stageRequiredToPublish","strapi_stage","Root","Content","intervals","RelativeTime","React","forwardRef","timestamp","customIntervals","restProps","forwardedRef","formatRelativeTime","formatDate","formatTime","interval","intervalToDuration","start","end","Date","now","unit","find","intervalUnit","includes","relativeTime","isPast","customInterval","custom","threshold","displayText","text","numeric","time","ref","dateTime","toISOString","role","title","ReleaseModal","handleClose","open","handleSubmit","initialValues","useLocation","isCreatingRelease","pluginId","timezoneList","systemTimezone","value","getTimezones","scheduledAt","getScheduledTimestamp","values","date","timezone","timezoneWithoutOffset","split","zonedTimeToUtc","getTimezoneWithOffset","currentTimezone","Modal","onOpenChange","Header","Title","Formik","onSubmit","isScheduled","validationSchema","RELEASE_SCHEMA","validateOnChange","handleChange","setFieldValue","Form","Body","alignItems","Field","error","required","Label","TextInput","onChange","Error","Box","Checkbox","checked","onCheckedChange","_Fragment","DatePicker","isoFormatDate","formatISO","representation","clearLabel","onClear","minDate","utcToZonedTime","TimePicker","undefined","TimezoneComponent","timezoneOptions","Footer","Close","loading","type","useFormikContext","setTimezoneList","useState","useEffect","updatedTimezone","tz","Combobox","autocomplete","filter","textValue","replace","onTextValueChange","map","ComboboxOption","useTypedDispatch","useDispatch","isBaseQueryError","LinkCard","BaseRelativeTime","getBadgeProps","color","backgroundColor","borderColor","ReleasesGrid","sectionTitle","releases","isError","Page","EmptyStateLayout","content","target","icon","EmptyDocuments","Grid","Item","col","s","xs","NavLink","isExternal","justifyContent","hasRadius","background","shadow","height","Badge","StyledAlert","Alert","INITIAL_FORM_VALUES","format","ReleasesPage","location","releaseModalShown","setReleaseModalShown","toggleNotification","useNotification","navigate","useNavigate","formatAPIError","useAPIErrorHandler","query","setQuery","useQueryParams","response","useGetReleasesQuery","data","isLoadingSettings","useGetReleaseSettingsQuery","createRelease","isSubmittingForm","useCreateReleaseMutation","getFeature","useLicenseLimits","maximumReleases","trackUsage","useTracking","allowedActions","canCreate","useRBAC","PERMISSIONS","isLoadingReleases","isSuccess","activeTab","currentData","meta","message","toggleAddReleaseModal","prev","Loading","totalPendingReleases","pendingReleasesCount","hasReachedMaximumPendingReleases","handleTabChange","tabValue","page","pageSize","pagination","filters","releasedAt","$notNull","handleAddRelease","toString","isFetchError","Main","aria-busy","Layouts","subtitle","primaryAction","Plus","onClick","disabled","marginBottom","href","number","onClose","closeLabel","Tabs","onValueChange","paddingBottom","List","aria-label","count","Divider","Pagination","defaultPageSize","PageSize","options","Links","defaultTimezone","ReleaseInfoWrapper","borderRadius","StyledMenuItem","MenuItem","neutral500","$variant","PencilIcon","Pencil","spaces","neutral600","TrashIcon","Trash","danger600","ReleaseDetailsLayout","toggleEditReleaseModal","toggleWarningSubmit","children","releaseId","useParams","isLoadingDetails","useGetReleaseQuery","publishRelease","isPublishing","usePublishReleaseMutation","canUpdate","canDelete","canPublish","dispatch","release","handlePublishRelease","totalEntries","totalPublishedEntries","totalUnpublishedEntries","handleRefresh","releaseApi","util","invalidateTags","getCreatedByUser","createdBy","username","firstname","lastname","trim","email","Navigate","code","actions","hasCreatedByUser","Boolean","numberOfEntriesText","scheduledText","weekday","day","month","year","timeZone","hourCycle","offset","getTimezoneOffset","lineHeight","navigationAction","BackButton","fallback","SimpleMenuButton","label","More","paddingLeft","paddingRight","popoverPlacement","onSelect","ellipsis","createdAt","size","SimpleMenu","GROUP_BY_OPTIONS","GROUP_BY_OPTIONS_NO_LOCALE","getGroupByOptionLabel","ReleaseDetailsBody","releaseData","isReleaseLoading","releaseError","runHookWaterfall","useStrapiApp","displayedHeaders","hasI18nEnabled","selectedGroupBy","groupBy","isFetching","releaseActionsError","useGetReleaseActionsQuery","updateReleaseAction","useUpdateReleaseActionMutation","handleChangeType","e","actionId","actionPath","params","body","releaseActions","releaseMeta","contentTypes","components","errorsArray","push","ReactRouterLink","style","textDecoration","groupByLabel","headers","SingleSelect","placeholder","customizeContent","option","SingleSelectOption","key","Table","rows","item","Number","Head","HeaderCell","contentType","actionIndex","Tr","Td","maxWidth","mainFieldValue","displayName","isPublish","b","ReleaseActionOptions","selected","minWidth","ReleaseActionMenu","ReleaseActionEntryLinkItem","DeleteReleaseActionItem","ReleaseDetailsPage","showWarningSubmit","setWarningSubmit","isSuccessDetails","dataTimezone","isLoadingTimezone","updateRelease","useUpdateReleaseMutation","deleteRelease","useDeleteReleaseMutation","getTimezoneValue","prevState","handleEditRelease","handleDeleteRelease","Dialog","ConfirmDialog","onConfirm","App","Protect","permissions","main","Routes","Route","index","element","path"],"mappings":"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"}
|