{"version":3,"file":"ReleasesSettingsPage.mjs","sources":["../../../admin/src/pages/ReleasesSettingsPage.tsx"],"sourcesContent":["import {\n  Form,\n  Layouts,\n  Page,\n  useAPIErrorHandler,\n  isFetchError,\n  GradientBadge,\n  useNotification,\n  useField,\n  useRBAC,\n  FormHelpers,\n} from '@strapi/admin/strapi-admin';\nimport {\n  Button,\n  Combobox,\n  ComboboxOption,\n  Field,\n  Flex,\n  Grid,\n  Typography,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useTypedSelector } from '../modules/hooks';\nimport { useGetReleaseSettingsQuery, useUpdateReleaseSettingsMutation } from '../services/release';\nimport { getTimezones } from '../utils/time';\nimport { SETTINGS_SCHEMA } from '../validation/schemas';\n\nimport type { UpdateSettings } from '../../../shared/contracts/settings';\n\ninterface UpdateDefaultTimezone {\n  defaultTimezone: string;\n}\n\nconst ReleasesSettingsPage = () => {\n  const { formatMessage } = useIntl();\n  const { formatAPIError } = useAPIErrorHandler();\n  const { toggleNotification } = useNotification();\n  const { data, isLoading: isLoadingSettings } = useGetReleaseSettingsQuery();\n  const [updateReleaseSettings, { isLoading: isSubmittingForm }] =\n    useUpdateReleaseSettingsMutation();\n  const permissions = useTypedSelector(\n    (state) => state.admin_app.permissions['settings']?.['releases']\n  );\n  const {\n    allowedActions: { canUpdate },\n  } = useRBAC(permissions);\n\n  const { timezoneList } = getTimezones(new Date());\n\n  const handleSubmit = async (\n    body: UpdateSettings.Request['body'],\n    { setErrors }: FormHelpers<UpdateDefaultTimezone>\n  ) => {\n    const { defaultTimezone } = body;\n    const formattedDefaultTimezone = defaultTimezone;\n    const isBodyTimezoneValid = timezoneList.some(\n      (timezone) => timezone.value === formattedDefaultTimezone\n    );\n\n    if (!isBodyTimezoneValid && defaultTimezone) {\n      const errorMessage = formatMessage({\n        id: 'components.Input.error.validation.combobox.invalid',\n        defaultMessage: 'The value provided is not valid',\n      });\n      setErrors({\n        defaultTimezone: errorMessage,\n      });\n      toggleNotification({\n        type: 'danger',\n        message: errorMessage,\n      });\n      return;\n    }\n\n    const newBody =\n      !defaultTimezone || !isBodyTimezoneValid\n        ? { defaultTimezone: null }\n        : { defaultTimezone: formattedDefaultTimezone };\n\n    try {\n      const response = await updateReleaseSettings(newBody);\n\n      if ('data' in response) {\n        toggleNotification({\n          type: 'success',\n          message: formatMessage({\n            id: 'content-releases.pages.Settings.releases.setting.default-timezone-notification-success',\n            defaultMessage: 'Default timezone updated.',\n          }),\n        });\n      } else if (isFetchError(response.error)) {\n        toggleNotification({\n          type: 'danger',\n          message: formatAPIError(response.error),\n        });\n      } else {\n        toggleNotification({\n          type: 'danger',\n          message: formatMessage({\n            id: 'notification.error',\n            defaultMessage: 'An error occurred',\n          }),\n        });\n      }\n    } catch (error) {\n      toggleNotification({\n        type: 'danger',\n        message: formatMessage({\n          id: 'notification.error',\n          defaultMessage: 'An error occurred',\n        }),\n      });\n    }\n  };\n\n  if (isLoadingSettings) {\n    return <Page.Loading />;\n  }\n\n  const releasePageTitle = formatMessage({\n    id: 'content-releases.pages.Releases.title',\n    defaultMessage: 'Releases',\n  });\n\n  return (\n    <>\n      <Page.Title>\n        {formatMessage(\n          { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n          {\n            name: releasePageTitle,\n          }\n        )}\n      </Page.Title>\n      <Page.Main aria-busy={isLoadingSettings} tabIndex={-1}>\n        <Form\n          method=\"PUT\"\n          initialValues={{\n            defaultTimezone: data?.data.defaultTimezone,\n          }}\n          onSubmit={handleSubmit}\n          validationSchema={SETTINGS_SCHEMA}\n        >\n          {({ modified, isSubmitting }: { modified: boolean; isSubmitting: boolean }) => {\n            return (\n              <>\n                <Layouts.Header\n                  primaryAction={\n                    canUpdate ? (\n                      <Button\n                        disabled={!modified || isSubmittingForm}\n                        loading={isSubmitting}\n                        startIcon={<Check />}\n                        type=\"submit\"\n                        fullWidth\n                      >\n                        {formatMessage({\n                          id: 'global.save',\n                          defaultMessage: 'Save',\n                        })}\n                      </Button>\n                    ) : null\n                  }\n                  secondaryAction={\n                    <GradientBadge\n                      label={formatMessage({\n                        id: 'components.premiumFeature.title',\n                        defaultMessage: 'Premium feature',\n                      })}\n                    />\n                  }\n                  title={releasePageTitle}\n                  subtitle={formatMessage({\n                    id: 'content-releases.pages.Settings.releases.description',\n                    defaultMessage: 'Create and manage content updates',\n                  })}\n                />\n                <Layouts.Content>\n                  <Flex\n                    direction=\"column\"\n                    background=\"neutral0\"\n                    alignItems=\"stretch\"\n                    padding={6}\n                    gap={6}\n                    shadow=\"filterShadow\"\n                    hasRadius\n                  >\n                    <Typography variant=\"delta\" tag=\"h2\">\n                      {formatMessage({\n                        id: 'content-releases.pages.Settings.releases.preferences.title',\n                        defaultMessage: 'Preferences',\n                      })}\n                    </Typography>\n                    <Grid.Root>\n                      <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n                        <TimezoneDropdown />\n                      </Grid.Item>\n                    </Grid.Root>\n                  </Flex>\n                </Layouts.Content>\n              </>\n            );\n          }}\n        </Form>\n      </Page.Main>\n    </>\n  );\n};\n\nconst TimezoneDropdown = () => {\n  const permissions = useTypedSelector(\n    (state) => state.admin_app.permissions['settings']?.['releases']\n  );\n  const {\n    allowedActions: { canUpdate },\n  } = useRBAC(permissions);\n  const { formatMessage } = useIntl();\n  const { timezoneList } = getTimezones(new Date());\n  const field = useField('defaultTimezone');\n  return (\n    <Field.Root\n      name=\"defaultTimezone\"\n      hint={formatMessage({\n        id: 'content-releases.pages.Settings.releases.timezone.hint',\n        defaultMessage: 'The timezone of every release can still be changed individually.',\n      })}\n      error={field.error}\n    >\n      <Field.Label>\n        {formatMessage({\n          id: 'content-releases.pages.Settings.releases.timezone.label',\n          defaultMessage: 'Default timezone',\n        })}\n      </Field.Label>\n      <Combobox\n        autocomplete={{ type: 'list', filter: 'contains' }}\n        onTextValueChange={(value) => field.onChange('defaultTimezone', value)}\n        onChange={(value) => {\n          if ((field.value && value) || !field.value) {\n            field.onChange('defaultTimezone', value);\n          }\n        }}\n        onClear={() => field.onChange('defaultTimezone', '')}\n        value={field.value}\n        disabled={!canUpdate}\n      >\n        {timezoneList.map((timezone) => (\n          <ComboboxOption key={timezone.value} value={timezone.value}>\n            {timezone.value.replace(/&/, ' ')}\n          </ComboboxOption>\n        ))}\n      </Combobox>\n      <Field.Hint />\n      <Field.Error />\n    </Field.Root>\n  );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedSettingsPage\n * -----------------------------------------------------------------------------------------------*/\n\nexport const ProtectedReleasesSettingsPage = () => {\n  const permissions = useTypedSelector(\n    (state) => state.admin_app.permissions['settings']?.['releases']?.read\n  );\n\n  return (\n    <Page.Protect permissions={permissions}>\n      <ReleasesSettingsPage />\n    </Page.Protect>\n  );\n};\n"],"names":["ReleasesSettingsPage","formatMessage","useIntl","formatAPIError","useAPIErrorHandler","toggleNotification","useNotification","data","isLoading","isLoadingSettings","useGetReleaseSettingsQuery","updateReleaseSettings","isSubmittingForm","useUpdateReleaseSettingsMutation","permissions","useTypedSelector","state","admin_app","allowedActions","canUpdate","useRBAC","timezoneList","getTimezones","Date","handleSubmit","body","setErrors","defaultTimezone","formattedDefaultTimezone","isBodyTimezoneValid","some","timezone","value","errorMessage","id","defaultMessage","type","message","newBody","response","isFetchError","error","_jsx","Page","Loading","releasePageTitle","_jsxs","_Fragment","Title","name","Main","aria-busy","tabIndex","Form","method","initialValues","onSubmit","validationSchema","SETTINGS_SCHEMA","modified","isSubmitting","Layouts","Header","primaryAction","Button","disabled","loading","startIcon","Check","fullWidth","secondaryAction","GradientBadge","label","title","subtitle","Content","Flex","direction","background","alignItems","padding","gap","shadow","hasRadius","Typography","variant","tag","Grid","Root","Item","col","xs","TimezoneDropdown","field","useField","Field","hint","Label","Combobox","autocomplete","filter","onTextValueChange","onChange","onClear","map","ComboboxOption","replace","Hint","Error","ProtectedReleasesSettingsPage","read","Protect"],"mappings":"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"}