@strapi/content-releases 5.25.0 → 5.27.0

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.
@@ -259,142 +259,144 @@ const ReleasesPage = ()=>{
259
259
  });
260
260
  }
261
261
  };
262
- return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Main, {
263
- "aria-busy": isLoadingReleases || isLoadingSettings,
264
- children: [
265
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Header, {
266
- title: formatMessage({
267
- id: 'content-releases.pages.Releases.title',
268
- defaultMessage: 'Releases'
269
- }),
270
- secondaryAction: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.GradientBadge, {
271
- label: formatMessage({
272
- id: 'components.premiumFeature.title',
273
- defaultMessage: 'Premium feature'
274
- })
275
- }),
276
- subtitle: formatMessage({
277
- id: 'content-releases.pages.Releases.header-subtitle',
278
- defaultMessage: 'Create and manage content updates'
262
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Root, {
263
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Main, {
264
+ "aria-busy": isLoadingReleases || isLoadingSettings,
265
+ children: [
266
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Header, {
267
+ title: formatMessage({
268
+ id: 'content-releases.pages.Releases.title',
269
+ defaultMessage: 'Releases'
270
+ }),
271
+ secondaryAction: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.GradientBadge, {
272
+ label: formatMessage({
273
+ id: 'components.premiumFeature.title',
274
+ defaultMessage: 'Premium feature'
275
+ })
276
+ }),
277
+ subtitle: formatMessage({
278
+ id: 'content-releases.pages.Releases.header-subtitle',
279
+ defaultMessage: 'Create and manage content updates'
280
+ }),
281
+ primaryAction: canCreate ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
282
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
283
+ onClick: toggleAddReleaseModal,
284
+ disabled: hasReachedMaximumPendingReleases,
285
+ children: formatMessage({
286
+ id: 'content-releases.header.actions.add-release',
287
+ defaultMessage: 'New release'
288
+ })
289
+ }) : null
279
290
  }),
280
- primaryAction: canCreate ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
281
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
282
- onClick: toggleAddReleaseModal,
283
- disabled: hasReachedMaximumPendingReleases,
284
- children: formatMessage({
285
- id: 'content-releases.header.actions.add-release',
286
- defaultMessage: 'New release'
287
- })
288
- }) : null
289
- }),
290
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Content, {
291
- children: /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
292
- children: [
293
- hasReachedMaximumPendingReleases && /*#__PURE__*/ jsxRuntime.jsx(StyledAlert, {
294
- marginBottom: 6,
295
- action: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Link, {
296
- href: "https://strapi.io/pricing-cloud",
297
- isExternal: true,
291
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Content, {
292
+ children: /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
293
+ children: [
294
+ hasReachedMaximumPendingReleases && /*#__PURE__*/ jsxRuntime.jsx(StyledAlert, {
295
+ marginBottom: 6,
296
+ action: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Link, {
297
+ href: "https://strapi.io/pricing-cloud",
298
+ isExternal: true,
299
+ children: formatMessage({
300
+ id: 'content-releases.pages.Releases.max-limit-reached.action',
301
+ defaultMessage: 'Explore plans'
302
+ })
303
+ }),
304
+ title: formatMessage({
305
+ id: 'content-releases.pages.Releases.max-limit-reached.title',
306
+ defaultMessage: 'You have reached the {number} pending {number, plural, one {release} other {releases}} limit.'
307
+ }, {
308
+ number: maximumReleases
309
+ }),
310
+ onClose: ()=>{},
311
+ closeLabel: "",
298
312
  children: formatMessage({
299
- id: 'content-releases.pages.Releases.max-limit-reached.action',
300
- defaultMessage: 'Explore plans'
313
+ id: 'content-releases.pages.Releases.max-limit-reached.message',
314
+ defaultMessage: 'Upgrade to manage an unlimited number of releases.'
301
315
  })
302
316
  }),
303
- title: formatMessage({
304
- id: 'content-releases.pages.Releases.max-limit-reached.title',
305
- defaultMessage: 'You have reached the {number} pending {number, plural, one {release} other {releases}} limit.'
306
- }, {
307
- number: maximumReleases
308
- }),
309
- onClose: ()=>{},
310
- closeLabel: "",
311
- children: formatMessage({
312
- id: 'content-releases.pages.Releases.max-limit-reached.message',
313
- defaultMessage: 'Upgrade to manage an unlimited number of releases.'
314
- })
315
- }),
316
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.Root, {
317
- variant: "simple",
318
- onValueChange: handleTabChange,
319
- value: activeTab,
320
- children: [
321
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
322
- paddingBottom: 8,
323
- children: [
324
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.List, {
325
- "aria-label": formatMessage({
326
- id: 'content-releases.pages.Releases.tab-group.label',
327
- defaultMessage: 'Releases list'
328
- }),
329
- children: [
330
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Trigger, {
331
- value: "pending",
332
- children: formatMessage({
333
- id: 'content-releases.pages.Releases.tab.pending',
334
- defaultMessage: 'Pending ({count})'
335
- }, {
336
- count: totalPendingReleases
337
- })
317
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.Root, {
318
+ variant: "simple",
319
+ onValueChange: handleTabChange,
320
+ value: activeTab,
321
+ children: [
322
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
323
+ paddingBottom: 8,
324
+ children: [
325
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.List, {
326
+ "aria-label": formatMessage({
327
+ id: 'content-releases.pages.Releases.tab-group.label',
328
+ defaultMessage: 'Releases list'
338
329
  }),
339
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Trigger, {
340
- value: "done",
341
- children: formatMessage({
342
- id: 'content-releases.pages.Releases.tab.done',
343
- defaultMessage: 'Done'
330
+ children: [
331
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Trigger, {
332
+ value: "pending",
333
+ children: formatMessage({
334
+ id: 'content-releases.pages.Releases.tab.pending',
335
+ defaultMessage: 'Pending ({count})'
336
+ }, {
337
+ count: totalPendingReleases
338
+ })
339
+ }),
340
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Trigger, {
341
+ value: "done",
342
+ children: formatMessage({
343
+ id: 'content-releases.pages.Releases.tab.done',
344
+ defaultMessage: 'Done'
345
+ })
344
346
  })
345
- })
346
- ]
347
- }),
348
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {})
349
- ]
350
- }),
351
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
352
- value: "pending",
353
- children: /*#__PURE__*/ jsxRuntime.jsx(ReleasesGrid, {
354
- sectionTitle: "pending",
355
- releases: response?.currentData?.data,
356
- isError: isError
357
- })
358
- }),
359
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
360
- value: "done",
361
- children: /*#__PURE__*/ jsxRuntime.jsx(ReleasesGrid, {
362
- sectionTitle: "done",
363
- releases: response?.currentData?.data,
364
- isError: isError
347
+ ]
348
+ }),
349
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {})
350
+ ]
351
+ }),
352
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
353
+ value: "pending",
354
+ children: /*#__PURE__*/ jsxRuntime.jsx(ReleasesGrid, {
355
+ sectionTitle: "pending",
356
+ releases: response?.currentData?.data,
357
+ isError: isError
358
+ })
359
+ }),
360
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
361
+ value: "done",
362
+ children: /*#__PURE__*/ jsxRuntime.jsx(ReleasesGrid, {
363
+ sectionTitle: "done",
364
+ releases: response?.currentData?.data,
365
+ isError: isError
366
+ })
365
367
  })
366
- })
367
- ]
368
- }),
369
- /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Pagination.Root, {
370
- ...response?.currentData?.meta?.pagination,
371
- defaultPageSize: response?.currentData?.meta?.pagination?.pageSize,
372
- children: [
373
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, {
374
- options: [
375
- '8',
376
- '16',
377
- '32',
378
- '64'
379
- ]
380
- }),
381
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
382
- ]
383
- })
384
- ]
368
+ ]
369
+ }),
370
+ /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Pagination.Root, {
371
+ ...response?.currentData?.meta?.pagination,
372
+ defaultPageSize: response?.currentData?.meta?.pagination?.pageSize,
373
+ children: [
374
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, {
375
+ options: [
376
+ '8',
377
+ '16',
378
+ '32',
379
+ '64'
380
+ ]
381
+ }),
382
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
383
+ ]
384
+ })
385
+ ]
386
+ })
387
+ }),
388
+ /*#__PURE__*/ jsxRuntime.jsx(ReleaseModal.ReleaseModal, {
389
+ open: releaseModalShown,
390
+ handleClose: toggleAddReleaseModal,
391
+ handleSubmit: handleAddRelease,
392
+ isLoading: isSubmittingForm,
393
+ initialValues: {
394
+ ...INITIAL_FORM_VALUES,
395
+ timezone: data?.data.defaultTimezone ? data.data.defaultTimezone.split('&')[1] : null
396
+ }
385
397
  })
386
- }),
387
- /*#__PURE__*/ jsxRuntime.jsx(ReleaseModal.ReleaseModal, {
388
- open: releaseModalShown,
389
- handleClose: toggleAddReleaseModal,
390
- handleSubmit: handleAddRelease,
391
- isLoading: isSubmittingForm,
392
- initialValues: {
393
- ...INITIAL_FORM_VALUES,
394
- timezone: data?.data.defaultTimezone ? data.data.defaultTimezone.split('&')[1] : null
395
- }
396
- })
397
- ]
398
+ ]
399
+ })
398
400
  });
399
401
  };
400
402
 
@@ -1 +1 @@
1
- {"version":3,"file":"ReleasesPage.js","sources":["../../../admin/src/pages/ReleasesPage.tsx"],"sourcesContent":["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 GradientBadge,\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 secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\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"],"names":["LinkCard","styled","Link","RelativeTime","BaseRelativeTime","getBadgeProps","status","color","textColor","backgroundColor","borderColor","ReleasesGrid","sectionTitle","releases","isError","formatMessage","useIntl","_jsx","Page","Error","length","EmptyStateLayout","content","id","defaultMessage","target","icon","EmptyDocuments","width","Grid","Root","gap","map","name","scheduledAt","Item","col","s","xs","direction","alignItems","tag","NavLink","to","isExternal","_jsxs","Flex","justifyContent","padding","hasRadius","background","shadow","height","Typography","variant","fontWeight","timestamp","Date","Badge","StyledAlert","Alert","INITIAL_FORM_VALUES","date","format","time","isScheduled","timezone","ReleasesPage","location","useLocation","releaseModalShown","setReleaseModalShown","React","useState","toggleNotification","useNotification","navigate","useNavigate","formatAPIError","useAPIErrorHandler","query","setQuery","useQueryParams","response","useGetReleasesQuery","data","isLoading","isLoadingSettings","useGetReleaseSettingsQuery","createRelease","isSubmittingForm","useCreateReleaseMutation","getFeature","useLicenseLimits","maximumReleases","trackUsage","useTracking","allowedActions","canCreate","useRBAC","PERMISSIONS","isLoadingReleases","isSuccess","activeTab","currentData","meta","useEffect","state","errors","type","title","message","replace","toggleAddReleaseModal","prev","Loading","totalPendingReleases","pendingReleasesCount","hasReachedMaximumPendingReleases","handleTabChange","tabValue","page","pageSize","pagination","filters","releasedAt","$notNull","handleAddRelease","toString","isFetchError","error","Main","aria-busy","Layouts","Header","secondaryAction","GradientBadge","label","subtitle","primaryAction","Button","startIcon","Plus","onClick","disabled","Content","_Fragment","marginBottom","action","href","number","onClose","closeLabel","Tabs","onValueChange","value","Box","paddingBottom","List","aria-label","Trigger","count","Divider","Pagination","defaultPageSize","PageSize","options","Links","ReleaseModal","open","handleClose","handleSubmit","initialValues","defaultTimezone","split"],"mappings":"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"}
1
+ {"version":3,"file":"ReleasesPage.js","sources":["../../../admin/src/pages/ReleasesPage.tsx"],"sourcesContent":["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 GradientBadge,\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 <Layouts.Root>\n <Main aria-busy={isLoadingReleases || isLoadingSettings}>\n <Layouts.Header\n title={formatMessage({\n id: 'content-releases.pages.Releases.title',\n defaultMessage: 'Releases',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\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 </Layouts.Root>\n );\n};\n\nexport { ReleasesPage, getBadgeProps };\n"],"names":["LinkCard","styled","Link","RelativeTime","BaseRelativeTime","getBadgeProps","status","color","textColor","backgroundColor","borderColor","ReleasesGrid","sectionTitle","releases","isError","formatMessage","useIntl","_jsx","Page","Error","length","EmptyStateLayout","content","id","defaultMessage","target","icon","EmptyDocuments","width","Grid","Root","gap","map","name","scheduledAt","Item","col","s","xs","direction","alignItems","tag","NavLink","to","isExternal","_jsxs","Flex","justifyContent","padding","hasRadius","background","shadow","height","Typography","variant","fontWeight","timestamp","Date","Badge","StyledAlert","Alert","INITIAL_FORM_VALUES","date","format","time","isScheduled","timezone","ReleasesPage","location","useLocation","releaseModalShown","setReleaseModalShown","React","useState","toggleNotification","useNotification","navigate","useNavigate","formatAPIError","useAPIErrorHandler","query","setQuery","useQueryParams","response","useGetReleasesQuery","data","isLoading","isLoadingSettings","useGetReleaseSettingsQuery","createRelease","isSubmittingForm","useCreateReleaseMutation","getFeature","useLicenseLimits","maximumReleases","trackUsage","useTracking","allowedActions","canCreate","useRBAC","PERMISSIONS","isLoadingReleases","isSuccess","activeTab","currentData","meta","useEffect","state","errors","type","title","message","replace","toggleAddReleaseModal","prev","Loading","totalPendingReleases","pendingReleasesCount","hasReachedMaximumPendingReleases","handleTabChange","tabValue","page","pageSize","pagination","filters","releasedAt","$notNull","handleAddRelease","toString","isFetchError","error","Layouts","Main","aria-busy","Header","secondaryAction","GradientBadge","label","subtitle","primaryAction","Button","startIcon","Plus","onClick","disabled","Content","_Fragment","marginBottom","action","href","number","onClose","closeLabel","Tabs","onValueChange","value","Box","paddingBottom","List","aria-label","Trigger","count","Divider","Pagination","defaultPageSize","PageSize","options","Links","ReleaseModal","open","handleClose","handleSubmit","initialValues","defaultTimezone","split"],"mappings":"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"}