{"version":3,"file":"SettingsPage.mjs","sources":["../../../admin/src/pages/SettingsPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { SerializedError } from '@reduxjs/toolkit';\nimport {\n  Page,\n  useAPIErrorHandler,\n  useNotification,\n  useRBAC,\n  Layouts,\n  BaseQueryError,\n} from '@strapi/admin/strapi-admin';\nimport { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\nimport {\n  Box,\n  EmptyStateLayout,\n  Field,\n  Flex,\n  Tooltip,\n  Toggle,\n  Typography,\n} from '@strapi/design-system';\nimport { Sparkle } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { CreateLocale } from '../components/CreateLocale';\nimport { LocaleTable } from '../components/LocaleTable';\nimport { PERMISSIONS } from '../constants';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetSettingsQuery, useUpdatei18nSettingsMutation } from '../services/settings';\nimport { getTranslation } from '../utils/getTranslation';\n\nconst SettingsErrrorTooltip = ({\n  children,\n  error,\n}: {\n  children: React.ReactNode;\n  error: BaseQueryError | SerializedError | undefined;\n}) => {\n  const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n  if (error) {\n    return (\n      <Tooltip label={formatAPIError(error)} style={{ maxWidth: '200px' }}>\n        {children}\n      </Tooltip>\n    );\n  }\n\n  return children;\n};\n\nconst SettingsPage = () => {\n  const { formatMessage } = useIntl();\n  const { toggleNotification } = useNotification();\n  const { data: locales, isLoading: isLoadingLocales, error } = useGetLocalesQuery();\n  const {\n    isLoading: isLoadingRBAC,\n    allowedActions: { canUpdate, canCreate, canDelete },\n  } = useRBAC(PERMISSIONS);\n  const isAIAvailable = useAIAvailability();\n\n  // Settings state management\n  const {\n    data: settings,\n    isLoading: isLoadingSettings,\n    error: settingsError,\n  } = useGetSettingsQuery();\n  const [updateSettings] = useUpdatei18nSettingsMutation();\n\n  const handleToggleChange = async (checked: boolean) => {\n    try {\n      await updateSettings({ aiLocalizations: checked }).unwrap();\n\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({ id: 'notification.form.success.fields' }),\n      });\n    } catch (err) {\n      console.error(err);\n      toggleNotification({\n        type: 'danger',\n        message: formatMessage({\n          id: 'notification.error',\n          defaultMessage: 'An error occurred',\n        }),\n      });\n    }\n  };\n\n  const isLoading = isLoadingLocales || isLoadingRBAC || isLoadingSettings;\n\n  if (isLoading) {\n    return <Page.Loading />;\n  }\n\n  if (error || !Array.isArray(locales)) {\n    return <Page.Error />;\n  }\n\n  return (\n    <Page.Main tabIndex={-1}>\n      <Layouts.Header\n        primaryAction={<CreateLocale disabled={!canCreate} />}\n        title={formatMessage({\n          id: getTranslation('plugin.name'),\n          defaultMessage: 'Internationalization',\n        })}\n        subtitle={formatMessage({\n          id: getTranslation('Settings.list.description'),\n          defaultMessage: 'Configure the settings',\n        })}\n      />\n      <Layouts.Content>\n        {isAIAvailable && (\n          <Flex background=\"neutral0\" padding={6} marginBottom={6} shadow=\"filterShadow\" hasRadius>\n            <Flex direction=\"column\" alignItems=\"stretch\" gap={1} flex={1}>\n              <Flex gap={1}>\n                <Box color=\"alternative700\">\n                  <Sparkle />\n                </Box>\n                <Typography variant=\"delta\" tag=\"h2\">\n                  {formatMessage({\n                    id: getTranslation('Settings.aiLocalizations.label'),\n                    defaultMessage: 'AI Translations',\n                  })}\n                </Typography>\n              </Flex>\n              <Typography variant=\"pi\" textColor=\"neutral600\" fontSize=\"14px\">\n                {formatMessage({\n                  id: getTranslation('Settings.aiLocalizations.description'),\n                  defaultMessage:\n                    'Everytime you save in the Content Manager, our AI will use your default locale to translate all other locales automatically.',\n                })}\n              </Typography>\n            </Flex>\n            <Field.Root name=\"aiLocalizations\" minWidth=\"200px\">\n              <SettingsErrrorTooltip error={settingsError}>\n                <Toggle\n                  disabled={Boolean(settingsError)}\n                  checked={settings?.data?.aiLocalizations ?? false}\n                  offLabel={formatMessage({\n                    id: 'app.components.ToggleCheckbox.disabled-label',\n                    defaultMessage: 'Disabled',\n                  })}\n                  onLabel={formatMessage({\n                    id: 'app.components.ToggleCheckbox.enabled-label',\n                    defaultMessage: 'Enabled',\n                  })}\n                  onChange={(e) => handleToggleChange(e.target.checked)}\n                />\n              </SettingsErrrorTooltip>\n            </Field.Root>\n          </Flex>\n        )}\n        {locales.length > 0 ? (\n          <LocaleTable locales={locales} canDelete={canDelete} canUpdate={canUpdate} />\n        ) : (\n          <EmptyStateLayout\n            icon={<EmptyDocuments width={undefined} height={undefined} />}\n            content={formatMessage({\n              id: getTranslation('Settings.list.empty.title'),\n              defaultMessage: 'There are no locales',\n            })}\n            action={<CreateLocale disabled={!canCreate} variant=\"secondary\" />}\n          />\n        )}\n      </Layouts.Content>\n    </Page.Main>\n  );\n};\n\nconst ProtectedSettingsPage = () => {\n  return (\n    <Page.Protect permissions={PERMISSIONS.read}>\n      <SettingsPage />\n    </Page.Protect>\n  );\n};\n\nexport { ProtectedSettingsPage, SettingsPage };\n"],"names":["SettingsErrrorTooltip","children","error","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","_jsx","Tooltip","label","style","maxWidth","SettingsPage","formatMessage","useIntl","toggleNotification","useNotification","data","locales","isLoading","isLoadingLocales","useGetLocalesQuery","isLoadingRBAC","allowedActions","canUpdate","canCreate","canDelete","useRBAC","PERMISSIONS","isAIAvailable","useAIAvailability","settings","isLoadingSettings","settingsError","useGetSettingsQuery","updateSettings","useUpdatei18nSettingsMutation","handleToggleChange","checked","aiLocalizations","unwrap","type","message","id","err","console","defaultMessage","Page","Loading","Array","isArray","Error","_jsxs","Main","tabIndex","Layouts","Header","primaryAction","CreateLocale","disabled","title","getTranslation","subtitle","Content","Flex","background","padding","marginBottom","shadow","hasRadius","direction","alignItems","gap","flex","Box","color","Sparkle","Typography","variant","tag","textColor","fontSize","Field","Root","name","minWidth","Toggle","Boolean","offLabel","onLabel","onChange","e","target","length","LocaleTable","EmptyStateLayout","icon","EmptyDocuments","width","undefined","height","content","action","ProtectedSettingsPage","Protect","permissions","read"],"mappings":"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"}