{"version":3,"file":"ReleasesPage.mjs","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                fullWidth\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","fullWidth","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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"}