@strapi/i18n 5.58.0 → 5.59.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.
Files changed (43) hide show
  1. package/dist/admin/components/BulkLocaleActionModal.js +4 -3
  2. package/dist/admin/components/BulkLocaleActionModal.js.map +1 -1
  3. package/dist/admin/components/BulkLocaleActionModal.mjs +4 -3
  4. package/dist/admin/components/BulkLocaleActionModal.mjs.map +1 -1
  5. package/dist/admin/components/CMHeaderActions.js +1 -1
  6. package/dist/admin/components/CMHeaderActions.js.map +1 -1
  7. package/dist/admin/components/CMHeaderActions.mjs +1 -1
  8. package/dist/admin/components/CMHeaderActions.mjs.map +1 -1
  9. package/dist/admin/components/LocaleTable.js +2 -1
  10. package/dist/admin/components/LocaleTable.js.map +1 -1
  11. package/dist/admin/components/LocaleTable.mjs +2 -1
  12. package/dist/admin/components/LocaleTable.mjs.map +1 -1
  13. package/dist/admin/middlewares/rbac-middleware.js.map +1 -1
  14. package/dist/admin/middlewares/rbac-middleware.mjs.map +1 -1
  15. package/dist/admin/translations/da.json.js +2 -2
  16. package/dist/admin/translations/da.json.mjs +2 -2
  17. package/dist/admin/translations/de.json.js +2 -2
  18. package/dist/admin/translations/de.json.mjs +2 -2
  19. package/dist/admin/translations/es.json.js +2 -2
  20. package/dist/admin/translations/es.json.mjs +2 -2
  21. package/dist/admin/translations/fr.json.js +2 -2
  22. package/dist/admin/translations/fr.json.mjs +2 -2
  23. package/dist/admin/translations/ko.json.js +2 -2
  24. package/dist/admin/translations/ko.json.mjs +2 -2
  25. package/dist/admin/translations/pl.json.js +2 -2
  26. package/dist/admin/translations/pl.json.mjs +2 -2
  27. package/dist/admin/translations/ru.json.js +1 -1
  28. package/dist/admin/translations/ru.json.mjs +1 -1
  29. package/dist/admin/translations/tr.json.js +2 -2
  30. package/dist/admin/translations/tr.json.mjs +2 -2
  31. package/dist/admin/translations/zh-Hans.json.js +2 -2
  32. package/dist/admin/translations/zh-Hans.json.mjs +2 -2
  33. package/dist/admin/translations/zh.json.js +2 -2
  34. package/dist/admin/translations/zh.json.mjs +2 -2
  35. package/dist/server/services/ai-localizations.js +9 -9
  36. package/dist/server/services/ai-localizations.js.map +1 -1
  37. package/dist/server/services/ai-localizations.mjs +9 -9
  38. package/dist/server/services/ai-localizations.mjs.map +1 -1
  39. package/dist/server/services/sanitize/index.js +3 -3
  40. package/dist/server/services/sanitize/index.js.map +1 -1
  41. package/dist/server/services/sanitize/index.mjs +3 -3
  42. package/dist/server/services/sanitize/index.mjs.map +1 -1
  43. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"CMHeaderActions.mjs","sources":["../../../admin/src/components/CMHeaderActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { skipToken } from '@reduxjs/toolkit/query';\nimport {\n useNotification,\n useQueryParams,\n Table,\n useAPIErrorHandler,\n useForm,\n} from '@strapi/admin/strapi-admin';\nimport {\n type DocumentActionComponent,\n type DocumentActionProps,\n unstable_useDocument as useDocument,\n unstable_useDocumentActions as useDocumentActions,\n buildValidParams,\n HeaderActionProps,\n} from '@strapi/content-manager/strapi-admin';\nimport {\n Flex,\n Status,\n Typography,\n Button,\n Modal,\n Field,\n SingleSelect,\n SingleSelectOption,\n Dialog,\n type StatusVariant,\n Box,\n Link,\n} from '@strapi/design-system';\nimport { WarningCircle, ListPlus, Trash, Earth, Cross, Plus, Sparkle, Loader } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useAILocalizationJobsPolling } from '../hooks/useAILocalizationJobsPolling';\nimport { useAITranslationsAvailability } from '../hooks/useAITranslations';\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetAILocalizationJobsByDocumentQuery } from '../services/aiLocalizationJobs';\nimport { useLazyGetFillFromLocaleDataQuery } from '../services/fillFromLocale';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetManyDraftRelationCountQuery } from '../services/relations';\nimport { useGetSettingsQuery } from '../services/settings';\nimport { getTranslation } from '../utils/getTranslation';\nimport { capitalize } from '../utils/strings';\n\nimport { BulkLocaleActionModal, type LocaleValidationErrors } from './BulkLocaleActionModal';\n\nimport type { Locale } from '../../../shared/contracts/locales';\nimport type { I18nBaseQuery } from '../types';\nimport type { Modules } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * LocalePickerAction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LocaleOptionProps {\n isDraftAndPublishEnabled: boolean;\n locale: Locale;\n status: 'draft' | 'published' | 'modified';\n entryExists: boolean;\n translationStatus?: 'processing' | 'failed' | 'completed' | undefined;\n}\n\nconst statusVariants: Record<LocaleOptionProps['status'], StatusVariant> = {\n draft: 'secondary',\n published: 'success',\n modified: 'alternative',\n};\n\nconst LocaleOption = ({\n isDraftAndPublishEnabled,\n locale,\n status,\n entryExists,\n}: LocaleOptionProps) => {\n const { formatMessage } = useIntl();\n\n if (!entryExists) {\n return formatMessage(\n {\n id: getTranslation('CMEditViewLocalePicker.locale.create'),\n defaultMessage: 'Create <bold>{locale}</bold> locale',\n },\n {\n bold: (locale: React.ReactNode) => <b>{locale}</b>,\n locale: locale.name,\n }\n );\n }\n\n return (\n <Flex width=\"100%\" gap={1} justifyContent=\"space-between\">\n <Typography>{locale.name}</Typography>\n {isDraftAndPublishEnabled ? (\n <Status\n display=\"flex\"\n paddingLeft=\"6px\"\n paddingRight=\"6px\"\n paddingTop=\"2px\"\n paddingBottom=\"2px\"\n size=\"S\"\n variant={statusVariants[status]}\n >\n <Typography tag=\"span\" variant=\"pi\" fontWeight=\"bold\">\n {capitalize(status)}\n </Typography>\n </Status>\n ) : null}\n </Flex>\n );\n};\n\nconst LocaleOptionStartIcon = ({\n entryWithLocaleExists,\n translationStatus,\n index,\n}: {\n entryWithLocaleExists: boolean;\n translationStatus?: 'processing' | 'failed' | 'completed' | undefined;\n index?: number;\n}) => {\n const isAiAvailable = useAITranslationsAvailability();\n\n if (!entryWithLocaleExists) {\n return <Plus />;\n }\n\n if (isAiAvailable && index !== 0 && translationStatus === 'failed') {\n return <WarningCircle fill=\"warning600\" />;\n }\n\n return null;\n};\n\nconst LocalePickerAction = ({\n document,\n meta,\n model,\n collectionType,\n documentId,\n}: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<I18nBaseQuery>();\n const { hasI18n, canCreate, canRead } = useI18n();\n const { data: locales = [] } = useGetLocalesQuery();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const { schema } = useDocument({\n model,\n collectionType,\n documentId,\n params: { locale: currentDesiredLocale },\n });\n const { data: jobData } = useGetAILocalizationJobsByDocumentQuery({\n documentId: documentId!,\n model: model!,\n collectionType: collectionType!,\n });\n const { data: settings } = useGetSettingsQuery();\n const isAiAvailable = useAITranslationsAvailability();\n\n const handleSelect = React.useCallback(\n (value: string) => {\n setQuery(\n {\n plugins: {\n ...query.plugins,\n i18n: {\n locale: value,\n },\n },\n },\n 'push',\n true\n );\n },\n [query.plugins, setQuery]\n );\n\n // Non-localized prefill is handled in `useDocument.getInitialFormValues`\n // so inherited values persist in initial form state, even after form resets or re-initialization.\n // Doing this here with setValues would not persist if the cache is reused.\n\n React.useEffect(() => {\n if (!Array.isArray(locales) || !hasI18n) {\n return;\n }\n /**\n * Handle the case where the current locale query param doesn't exist\n * in the list of available locales, so we redirect to the default locale\n * when the user has access to it, or the first locale they can access.\n */\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const accessibleLocales = locales.filter((locale) => canRead.includes(locale.code));\n const targetLocale =\n accessibleLocales.find((locale) => locale.isDefault) ?? accessibleLocales[0];\n if (!doesLocaleExist && targetLocale?.code) {\n handleSelect(targetLocale.code);\n }\n }, [handleSelect, hasI18n, locales, currentDesiredLocale, canRead]);\n\n const currentLocale = Array.isArray(locales)\n ? locales.find((locale) => locale.code === currentDesiredLocale)\n : undefined;\n\n // Use meta.availableLocales instead of document.localizations\n // meta.availableLocales contains all locales for the document, even when creating new locales\n const availableLocales = meta?.availableLocales ?? [];\n const documentLocalizations = document?.localizations ?? [];\n\n // Prefer meta.availableLocales as it's more reliable, fallback to document.localizations\n const allLocalizations = availableLocales.length > 0 ? availableLocales : documentLocalizations;\n\n const allCurrentLocales = [\n { status: getDocumentStatus(document, meta), locale: currentLocale?.code },\n ...allLocalizations,\n ];\n\n if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n return null;\n }\n\n const displayedLocales = locales.filter((locale) => {\n /**\n * If you can read we allow you to see the locale exists\n * otherwise the locale is hidden.\n */\n return canRead.includes(locale.code);\n });\n\n const localesSortingDefaultFirst = displayedLocales.sort((a, b) =>\n a.isDefault ? -1 : b.isDefault ? 1 : 0\n );\n\n return {\n label: formatMessage({\n id: getTranslation('Settings.locales.modal.locales.label'),\n defaultMessage: 'Locales',\n }),\n options: localesSortingDefaultFirst.map((locale, index) => {\n const entryWithLocaleExists = allCurrentLocales.some((doc) => doc.locale === locale.code);\n\n const currentLocaleDoc = allCurrentLocales.find((doc) =>\n 'locale' in doc ? doc.locale === locale.code : false\n );\n\n const permissionsToCheck = currentLocaleDoc ? canRead : canCreate;\n\n if (isAiAvailable && settings?.data?.aiLocalizations) {\n return {\n _render: () => (\n <React.Fragment key={index}>\n <SingleSelectOption\n disabled={!permissionsToCheck.includes(locale.code)}\n key={locale.code}\n startIcon={\n <LocaleOptionStartIcon\n entryWithLocaleExists={entryWithLocaleExists}\n translationStatus={jobData?.data?.status}\n index={index}\n />\n }\n value={locale.code}\n >\n <LocaleOption\n isDraftAndPublishEnabled={!!schema?.options?.draftAndPublish}\n locale={locale}\n status={currentLocaleDoc?.status}\n entryExists={entryWithLocaleExists}\n />\n </SingleSelectOption>\n {localesSortingDefaultFirst.length > 1 && index === 0 && (\n <Box paddingRight={4} paddingLeft={4} paddingTop={2} paddingBottom={2}>\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('CMEditViewLocalePicker.locale.ai-translations'),\n defaultMessage: 'AI Translations',\n })}\n </Typography>\n </Box>\n )}\n </React.Fragment>\n ),\n };\n }\n\n return {\n disabled: !permissionsToCheck.includes(locale.code),\n value: locale.code,\n label: (\n <LocaleOption\n isDraftAndPublishEnabled={!!schema?.options?.draftAndPublish}\n locale={locale}\n status={currentLocaleDoc?.status}\n entryExists={entryWithLocaleExists}\n translationStatus={jobData?.data?.status}\n />\n ),\n startIcon: <LocaleOptionStartIcon entryWithLocaleExists={entryWithLocaleExists} />,\n };\n }),\n customizeContent: () => currentLocale?.name,\n onSelect: handleSelect,\n value: currentLocale,\n };\n};\n\ntype UseDocument = typeof useDocument;\n\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AISettingsStatusAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst AITranslationStatusIcon = styled(Status)<{ $isAISettingEnabled: boolean }>`\n display: flex;\n gap: ${({ theme }) => theme.spaces[1]};\n justify-content: center;\n align-items: center;\n height: 3.2rem;\n width: 3.2rem;\n\n // Disabled state\n ${({ $isAISettingEnabled, theme }) =>\n !$isAISettingEnabled &&\n `\n background-color: ${theme.colors.neutral150};\n `}\n\n svg {\n ${({ $isAISettingEnabled, theme }) =>\n !$isAISettingEnabled &&\n `\n fill: ${theme.colors.neutral300};\n `}\n }\n`;\n\nconst SpinningLoader = styled(Loader)`\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n\n animation: spin 2s linear infinite;\n`;\n\nconst AITranslationStatusAction = ({ documentId, model, collectionType }: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const isAIAvailable = useAITranslationsAvailability();\n const { data: settings } = useGetSettingsQuery();\n const isAISettingEnabled = settings?.data?.aiLocalizations;\n const { hasI18n } = useI18n();\n\n // Poll for AI localizations jobs when AI is enabled and we have a documentId\n const { status } = useAILocalizationJobsPolling({\n documentId,\n model,\n collectionType,\n });\n const statusVariant = (() => {\n if (status === 'failed') {\n return 'warning';\n }\n\n if (isAISettingEnabled) {\n return 'alternative';\n }\n\n return 'neutral';\n })();\n\n // Do not display this action when i18n is not available\n if (!hasI18n) {\n return null;\n }\n\n // Do not display this action when AI is not available\n if (!isAIAvailable) {\n return null;\n }\n\n return {\n _status: {\n message: (\n <Flex\n height=\"100%\"\n alignItems=\"center\"\n aria-label={formatMessage({\n id: getTranslation('CMEditViewAITranslation.status-aria-label'),\n defaultMessage: 'AI Translation Status',\n })}\n >\n <AITranslationStatusIcon\n $isAISettingEnabled={Boolean(isAISettingEnabled)}\n variant={statusVariant}\n size=\"S\"\n >\n {status === 'processing' ? <SpinningLoader /> : <Sparkle />}\n </AITranslationStatusIcon>\n </Flex>\n ),\n tooltip: (\n <Flex direction=\"column\" padding={4} alignItems=\"flex-start\" width=\"25rem\">\n <Typography variant=\"pi\" fontWeight=\"600\">\n {formatMessage(\n {\n id: getTranslation('CMEditViewAITranslation.status-title'),\n defaultMessage:\n '{enabled, select, true {AI translation enabled} false {AI translation disabled} other {AI translation disabled}}',\n },\n { enabled: isAISettingEnabled }\n )}\n </Typography>\n <Typography variant=\"pi\" paddingTop={1} paddingBottom={3}>\n {formatMessage({\n id: getTranslation('CMEditViewAITranslation.status-description'),\n defaultMessage:\n 'Our AI translates content in all locales each time you save a modification in the default locale.',\n })}\n </Typography>\n <Link\n fontSize=\"inherit\"\n tag={NavLink}\n to=\"/settings/internationalization\"\n style={{ alignSelf: 'flex-end' }}\n >\n <Typography variant=\"pi\" textAlign=\"right\">\n {formatMessage(\n {\n id: getTranslation('CMEditViewAITranslation.settings-link'),\n defaultMessage:\n '{enabled, select, true {Disable it in settings} false {Enable it in settings} other {Enable it in settings}}',\n },\n { enabled: isAISettingEnabled }\n )}\n </Typography>\n </Link>\n </Flex>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FillFromAnotherLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst FillFromAnotherLocaleAction = ({\n documentId,\n meta,\n model,\n collectionType,\n}: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams<I18nBaseQuery>();\n const { hasI18n } = useI18n();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const [localeSelected, setLocaleSelected] = React.useState<string | null>(null);\n const setValues = useForm('FillFromAnotherLocale', (state) => state.setValues);\n\n const [getFillFromLocaleData, { isLoading: isFillFromLocaleLoading }] =\n useLazyGetFillFromLocaleDataQuery();\n const { data: locales = [] } = useGetLocalesQuery();\n\n const isAIAvailable = useAITranslationsAvailability();\n const { data: settings } = useGetSettingsQuery();\n const isAISettingEnabled = settings?.data?.aiLocalizations;\n\n const availableLocales = Array.isArray(locales)\n ? locales.filter((locale) => meta?.availableLocales.some((l) => l.locale === locale.code))\n : [];\n\n const fillFromLocale = (onClose: () => void) => async () => {\n if (!localeSelected || !currentDesiredLocale) {\n return;\n }\n\n try {\n const { data } = await getFillFromLocaleData({\n model,\n documentId,\n sourceLocale: localeSelected,\n targetLocale: currentDesiredLocale,\n collectionType: collectionType as 'collection-types' | 'single-types',\n }).unwrap();\n\n if (data) {\n setValues(data);\n }\n\n onClose();\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(err as Parameters<typeof formatAPIError>[0]),\n });\n }\n };\n\n if (!hasI18n) {\n return null;\n }\n\n // Do not display this action when AI is available and AI translations are enabled\n if (isAIAvailable && isAISettingEnabled) {\n return null;\n }\n\n return {\n type: 'icon',\n icon: <Earth />,\n disabled: availableLocales.length === 0,\n label: formatMessage({\n id: getTranslation('CMEditViewCopyLocale.copy-text'),\n defaultMessage: 'Fill in from another locale',\n }),\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: ({ onClose }: { onClose: () => void }) => (\n <>\n <Dialog.Body>\n <Flex direction=\"column\" gap={3}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.body'),\n defaultMessage:\n 'Your current content will be erased and filled by the content of the selected locale:',\n })}\n </Typography>\n <Field.Root width=\"100%\">\n <Field.Label>\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.field.label'),\n defaultMessage: 'Locale',\n })}\n </Field.Label>\n <SingleSelect\n value={localeSelected}\n placeholder={formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.field.placeholder'),\n defaultMessage: 'Select one locale...',\n })}\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={(value) => setLocaleSelected(value)}\n >\n {availableLocales.map((locale) => (\n <SingleSelectOption key={locale.code} value={locale.code}>\n {locale.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Flex gap={2} width=\"100%\">\n <Button\n flex=\"auto\"\n variant=\"tertiary\"\n onClick={onClose}\n disabled={isFillFromLocaleLoading}\n >\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.cancel-text'),\n defaultMessage: 'No, cancel',\n })}\n </Button>\n <Button\n flex=\"auto\"\n variant=\"success\"\n onClick={fillFromLocale(onClose)}\n loading={isFillFromLocaleLoading}\n disabled={isFillFromLocaleLoading}\n >\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.submit-text'),\n defaultMessage: 'Yes, fill in',\n })}\n </Button>\n </Flex>\n </Dialog.Footer>\n </>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeleteLocaleAction: DocumentActionComponent = ({\n document,\n documentId,\n model,\n collectionType,\n}) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { hasI18n, canDelete } = useI18n();\n\n // Get the current locale object, using the URL instead of document so it works while creating\n const [{ query }] = useQueryParams<I18nBaseQuery>();\n const { data: locales = [] } = useGetLocalesQuery();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const locale = !('error' in locales) && locales.find((loc) => loc.code === currentDesiredLocale);\n\n if (!hasI18n) {\n return null;\n }\n\n return {\n disabled:\n (document?.locale && !canDelete.includes(document.locale)) || !document || !document.id,\n position: ['header', 'table-row'],\n label: formatMessage(\n {\n id: getTranslation('actions.delete.label'),\n defaultMessage: 'Delete entry ({locale})',\n },\n { locale: locale && locale.name }\n ),\n icon: <StyledTrash />,\n variant: 'danger',\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('actions.delete.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: getTranslation('actions.delete.dialog.body'),\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n const unableToDelete =\n // We are unable to delete a collection type without a document ID\n // & unable to delete generally if there is no document locale\n (collectionType !== 'single-types' && !documentId) || !document?.locale;\n\n if (unableToDelete) {\n console.error(\n \"You're trying to delete a document without an id or locale, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: getTranslation('actions.delete.error'),\n defaultMessage: 'An error occurred while trying to delete the document locale.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: { locale: document.locale },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n },\n },\n };\n};\n\nexport type LocaleStatus = {\n locale: string;\n status: Modules.Documents.Params.PublicationStatus.Kind | 'modified';\n};\n\ninterface ExtendedDocumentActionProps extends DocumentActionProps {\n action?: 'bulk-publish' | 'bulk-unpublish';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleAction\n *\n * This component is used to handle bulk publish and unpublish actions on locales.\n * -----------------------------------------------------------------------------------------------*/\n\nconst BulkLocaleAction: DocumentActionComponent = ({\n document,\n documentId,\n model,\n collectionType,\n action,\n meta,\n}: ExtendedDocumentActionProps) => {\n const locale = document?.locale ?? null;\n const [{ query }] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const isOnPublishedTab = query.status === 'published';\n\n const { formatMessage } = useIntl();\n const { hasI18n, canPublish } = useI18n();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [selectedRows, setSelectedRows] = React.useState<Array<LocaleStatus & { id: string }>>([]);\n const [isDraftRelationConfirmationOpen, setIsDraftRelationConfirmationOpen] =\n React.useState<boolean>(false);\n\n const { publishMany: publishManyAction, unpublishMany: unpublishManyAction } =\n useDocumentActions();\n\n const { schema, validate } = useDocument(\n {\n model,\n collectionType,\n documentId,\n params: {\n locale,\n },\n },\n {\n // No need to fetch the document, the data is already available in the `document` prop\n skip: true,\n }\n );\n\n const { data: localesMetadata = [] } = useGetLocalesQuery(hasI18n ? undefined : skipToken);\n\n const headers = [\n {\n label: formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: getTranslation('CMEditViewBulkLocale.status'),\n defaultMessage: 'Status',\n }),\n name: 'status',\n },\n {\n label: formatMessage({\n id: getTranslation('CMEditViewBulkLocale.publication-status'),\n defaultMessage: 'Publication Status',\n }),\n name: 'publication-status',\n },\n ];\n\n // Extract the rows for the bulk locale publish modal and any validation\n // errors per locale\n const [rows, validationErrors] = React.useMemo<[LocaleStatus[], LocaleValidationErrors]>(() => {\n if (!document) {\n return [[], {}];\n }\n\n const metaLocalizations = (meta?.availableLocales ?? []).map((locale) => ({\n locale: locale.locale,\n status: (locale.status ?? 'draft') as LocaleStatus['status'],\n }));\n\n const documentLocalizations = (\n (document.localizations ?? []) as Array<{\n locale?: string | null;\n status?: Modules.Documents.Params.PublicationStatus.Kind | 'modified' | null;\n }>\n ).map((doc) => ({\n locale: doc.locale ?? undefined,\n status: (doc.status ?? 'draft') as LocaleStatus['status'],\n }));\n\n const localesMap = new Map<string, LocaleStatus>();\n\n metaLocalizations.forEach(({ locale, status }) => {\n if (locale) {\n localesMap.set(locale, { locale, status });\n }\n });\n\n documentLocalizations.forEach(({ locale, status }) => {\n if (locale) {\n localesMap.set(locale, { locale, status });\n }\n });\n\n // Build the rows for the bulk locale publish modal by combining the current\n // document with all the available locales from the document meta\n const locales: LocaleStatus[] = [];\n\n if (document?.locale) {\n locales.push({\n locale: document.locale,\n status: (document.status ?? 'draft') as LocaleStatus['status'],\n });\n }\n\n locales.push(\n ...Array.from(localesMap.entries())\n .filter(([locale]) => locale !== document?.locale)\n .map(([, value]) => value)\n );\n\n if (locales.length === 0 && document?.locale) {\n locales.push({\n locale: document.locale,\n status: (document.status ?? 'draft') as LocaleStatus['status'],\n });\n }\n\n // Validate the current document locale only. Other locales have minimal\n // data populated for performance reasons and will be validated server-side\n // during the actual bulk publish operation.\n const errors: LocaleValidationErrors = {};\n if (document.locale) {\n const validation = validate(document as Modules.Documents.AnyDocument);\n if (validation !== null) {\n errors[document.locale] = validation;\n }\n }\n\n return [locales, errors];\n }, [document, meta?.availableLocales, validate]);\n\n const isBulkPublish = action === 'bulk-publish';\n const localesForAction = selectedRows.reduce((acc: string[], selectedRow: LocaleStatus) => {\n const isValidLocale =\n // Validation errors are irrelevant if we are trying to unpublish\n !isBulkPublish || !Object.keys(validationErrors).includes(selectedRow.locale);\n\n const shouldAddLocale = isBulkPublish\n ? selectedRow.status !== 'published' && isValidLocale\n : selectedRow.status !== 'draft' && isValidLocale;\n\n if (shouldAddLocale) {\n acc.push(selectedRow.locale);\n }\n\n return acc;\n }, []);\n\n // TODO skipping this for now as there is a bug with the draft relation count that will be worked on separately\n // see https://www.notion.so/strapi/Count-draft-relations-56901b492efb45ab90d42fe975b32bd8?pvs=4\n const enableDraftRelationsCount = false;\n const {\n data: draftRelationsCount = 0,\n isLoading: isDraftRelationsLoading,\n error: isDraftRelationsError,\n } = useGetManyDraftRelationCountQuery(\n {\n model,\n documentIds: [documentId!],\n locale: localesForAction,\n },\n {\n skip: !enableDraftRelationsCount || !documentId || localesForAction.length === 0,\n }\n );\n\n React.useEffect(() => {\n if (isDraftRelationsError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(isDraftRelationsError),\n });\n }\n }, [isDraftRelationsError, toggleNotification, formatAPIError]);\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n if (!hasI18n) {\n return null;\n }\n\n if (!documentId) {\n return null;\n }\n\n // This document action can be enabled given that draft and publish and i18n are\n // enabled and we can publish the current locale.\n\n const publish = async () => {\n await publishManyAction({\n model,\n documentIds: [documentId],\n params: {\n ...params,\n locale: localesForAction,\n },\n });\n\n setSelectedRows([]);\n };\n\n const unpublish = async () => {\n await unpublishManyAction({\n model,\n documentIds: [documentId],\n params: {\n ...params,\n locale: localesForAction,\n },\n });\n\n setSelectedRows([]);\n };\n\n const handleAction = async () => {\n if (draftRelationsCount > 0) {\n setIsDraftRelationConfirmationOpen(true);\n } else if (isBulkPublish) {\n await publish();\n } else {\n await unpublish();\n }\n };\n\n if (isDraftRelationConfirmationOpen) {\n return {\n label: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n variant: 'danger',\n dialog: {\n onCancel: () => {\n setIsDraftRelationConfirmationOpen(false);\n },\n onConfirm: async () => {\n await publish();\n\n setIsDraftRelationConfirmationOpen(false);\n },\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('actions.publish.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <WarningCircle width=\"2.4rem\" height=\"2.4rem\" fill=\"danger600\" />\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewBulkLocale.draft-relation-warning'),\n defaultMessage:\n 'Some locales are related to draft entries. Publishing them could leave broken links in your app.',\n })}\n </Typography>\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewBulkLocale.continue-confirmation'),\n defaultMessage: 'Are you sure you want to continue?',\n })}\n </Typography>\n </Flex>\n ),\n },\n };\n }\n\n const hasPermission = selectedRows\n .map(({ locale }) => locale)\n .every((locale) => canPublish.includes(locale));\n\n return {\n label: formatMessage({\n id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n }),\n variant: isBulkPublish ? 'secondary' : 'danger',\n icon: isBulkPublish ? <ListPlus /> : <Cross />,\n disabled: isOnPublishedTab || canPublish.length === 0,\n position: ['panel'],\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n }),\n content: () => {\n return (\n <Table.Root\n headers={headers}\n rows={rows.map((row) => ({\n ...row,\n id: row.locale,\n }))}\n selectedRows={selectedRows}\n onSelectedRowsChange={(tableSelectedRows) => setSelectedRows(tableSelectedRows)}\n >\n <BulkLocaleActionModal\n validationErrors={validationErrors}\n headers={headers}\n rows={rows}\n localesMetadata={localesMetadata as Locale[]}\n action={action ?? 'bulk-publish'}\n />\n </Table.Root>\n );\n },\n footer: () => (\n <Modal.Footer justifyContent=\"flex-end\">\n <Button\n loading={isDraftRelationsLoading}\n disabled={!hasPermission || localesForAction.length === 0}\n variant=\"default\"\n onClick={handleAction}\n >\n {formatMessage({\n id: isBulkPublish ? 'app.utils.publish' : 'app.utils.unpublish',\n defaultMessage: isBulkPublish ? 'Publish' : 'Unpublish',\n })}\n </Button>\n </Modal.Footer>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocalePublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocalePublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n return BulkLocaleAction({ action: 'bulk-publish', ...props });\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleUnpublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocaleUnpublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n return BulkLocaleAction({ action: 'bulk-unpublish', ...props });\n};\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledTrash = styled(Trash)`\n path {\n fill: currentColor;\n }\n`;\n\nexport {\n BulkLocalePublishAction,\n BulkLocaleUnpublishAction,\n DeleteLocaleAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n AITranslationStatusAction,\n};\n"],"names":["statusVariants","draft","published","modified","LocaleOption","isDraftAndPublishEnabled","locale","status","entryExists","formatMessage","useIntl","id","getTranslation","defaultMessage","bold","_jsx","b","name","_jsxs","Flex","width","gap","justifyContent","Typography","Status","display","paddingLeft","paddingRight","paddingTop","paddingBottom","size","variant","tag","fontWeight","capitalize","LocaleOptionStartIcon","entryWithLocaleExists","translationStatus","index","isAiAvailable","useAITranslationsAvailability","Plus","WarningCircle","fill","LocalePickerAction","document","meta","model","collectionType","documentId","query","setQuery","useQueryParams","hasI18n","canCreate","canRead","useI18n","data","locales","useGetLocalesQuery","currentDesiredLocale","plugins","i18n","schema","useDocument","params","jobData","useGetAILocalizationJobsByDocumentQuery","settings","useGetSettingsQuery","handleSelect","React","useCallback","value","useEffect","Array","isArray","doesLocaleExist","find","loc","code","accessibleLocales","filter","includes","targetLocale","isDefault","currentLocale","undefined","availableLocales","documentLocalizations","localizations","allLocalizations","length","allCurrentLocales","getDocumentStatus","displayedLocales","localesSortingDefaultFirst","sort","a","label","options","map","some","doc","currentLocaleDoc","permissionsToCheck","aiLocalizations","_render","Fragment","SingleSelectOption","disabled","startIcon","draftAndPublish","Box","customizeContent","onSelect","docStatus","statuses","availableStatus","publishedAt","AITranslationStatusIcon","styled","theme","spaces","$isAISettingEnabled","colors","neutral150","neutral300","SpinningLoader","Loader","AITranslationStatusAction","isAIAvailable","isAISettingEnabled","useAILocalizationJobsPolling","statusVariant","_status","message","height","alignItems","aria-label","Boolean","Sparkle","tooltip","direction","padding","enabled","Link","fontSize","NavLink","to","style","alignSelf","textAlign","FillFromAnotherLocaleAction","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","localeSelected","setLocaleSelected","useState","setValues","useForm","state","getFillFromLocaleData","isLoading","isFillFromLocaleLoading","useLazyGetFillFromLocaleDataQuery","l","fillFromLocale","onClose","sourceLocale","unwrap","err","type","icon","Earth","dialog","title","content","_Fragment","Dialog","Body","Field","Root","Label","SingleSelect","placeholder","onChange","Footer","Button","flex","onClick","loading","DeleteLocaleAction","navigate","useNavigate","delete","deleteAction","useDocumentActions","canDelete","position","StyledTrash","onConfirm","unableToDelete","console","error","res","pathname","replace","BulkLocaleAction","action","useMemo","buildValidParams","isOnPublishedTab","canPublish","selectedRows","setSelectedRows","isDraftRelationConfirmationOpen","setIsDraftRelationConfirmationOpen","publishMany","publishManyAction","unpublishMany","unpublishManyAction","validate","skip","localesMetadata","skipToken","headers","rows","validationErrors","metaLocalizations","localesMap","Map","forEach","set","push","from","entries","errors","validation","isBulkPublish","localesForAction","reduce","acc","selectedRow","isValidLocale","Object","keys","shouldAddLocale","draftRelationsCount","isDraftRelationsLoading","isDraftRelationsError","useGetManyDraftRelationCountQuery","documentIds","publish","unpublish","handleAction","onCancel","hasPermission","every","ListPlus","Cross","Table","row","onSelectedRowsChange","tableSelectedRows","BulkLocaleActionModal","footer","Modal","BulkLocalePublishAction","props","BulkLocaleUnpublishAction","Trash"],"mappings":"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"}
1
+ {"version":3,"file":"CMHeaderActions.mjs","sources":["../../../admin/src/components/CMHeaderActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { skipToken } from '@reduxjs/toolkit/query';\nimport {\n useNotification,\n useQueryParams,\n Table,\n useAPIErrorHandler,\n useForm,\n} from '@strapi/admin/strapi-admin';\nimport {\n type DocumentActionComponent,\n type DocumentActionProps,\n unstable_useDocument as useDocument,\n unstable_useDocumentActions as useDocumentActions,\n buildValidParams,\n HeaderActionProps,\n} from '@strapi/content-manager/strapi-admin';\nimport {\n Flex,\n Status,\n Typography,\n Button,\n Modal,\n Field,\n SingleSelect,\n SingleSelectOption,\n Dialog,\n type StatusVariant,\n Box,\n Link,\n} from '@strapi/design-system';\nimport { WarningCircle, ListPlus, Trash, Earth, Cross, Plus, Sparkle, Loader } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useAILocalizationJobsPolling } from '../hooks/useAILocalizationJobsPolling';\nimport { useAITranslationsAvailability } from '../hooks/useAITranslations';\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetAILocalizationJobsByDocumentQuery } from '../services/aiLocalizationJobs';\nimport { useLazyGetFillFromLocaleDataQuery } from '../services/fillFromLocale';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetManyDraftRelationCountQuery } from '../services/relations';\nimport { useGetSettingsQuery } from '../services/settings';\nimport { getTranslation } from '../utils/getTranslation';\nimport { capitalize } from '../utils/strings';\n\nimport { BulkLocaleActionModal, type LocaleValidationErrors } from './BulkLocaleActionModal';\n\nimport type { Locale } from '../../../shared/contracts/locales';\nimport type { I18nBaseQuery } from '../types';\nimport type { Modules } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * LocalePickerAction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface LocaleOptionProps {\n isDraftAndPublishEnabled: boolean;\n locale: Locale;\n status: 'draft' | 'published' | 'modified';\n entryExists: boolean;\n translationStatus?: 'processing' | 'failed' | 'completed' | undefined;\n}\n\nconst statusVariants: Record<LocaleOptionProps['status'], StatusVariant> = {\n draft: 'secondary',\n published: 'success',\n modified: 'alternative',\n};\n\nconst LocaleOption = ({\n isDraftAndPublishEnabled,\n locale,\n status,\n entryExists,\n}: LocaleOptionProps) => {\n const { formatMessage } = useIntl();\n\n if (!entryExists) {\n return formatMessage(\n {\n id: getTranslation('CMEditViewLocalePicker.locale.create'),\n defaultMessage: 'Create <bold>{locale}</bold> locale',\n },\n {\n bold: (locale: React.ReactNode) => <b>{locale}</b>,\n locale: locale.name,\n }\n );\n }\n\n return (\n <Flex width=\"100%\" gap={1} justifyContent=\"space-between\">\n <Typography>{locale.name}</Typography>\n {isDraftAndPublishEnabled ? (\n <Status\n display=\"flex\"\n paddingLeft=\"6px\"\n paddingRight=\"6px\"\n paddingTop=\"2px\"\n paddingBottom=\"2px\"\n size=\"S\"\n variant={statusVariants[status]}\n >\n <Typography tag=\"span\" variant=\"pi\" fontWeight=\"bold\">\n {capitalize(status)}\n </Typography>\n </Status>\n ) : null}\n </Flex>\n );\n};\n\nconst LocaleOptionStartIcon = ({\n entryWithLocaleExists,\n translationStatus,\n index,\n}: {\n entryWithLocaleExists: boolean;\n translationStatus?: 'processing' | 'failed' | 'completed' | undefined;\n index?: number;\n}) => {\n const isAiAvailable = useAITranslationsAvailability();\n\n if (!entryWithLocaleExists) {\n return <Plus />;\n }\n\n if (isAiAvailable && index !== 0 && translationStatus === 'failed') {\n return <WarningCircle fill=\"warning600\" />;\n }\n\n return null;\n};\n\nconst LocalePickerAction = ({\n document,\n meta,\n model,\n collectionType,\n documentId,\n}: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const [{ query }, setQuery] = useQueryParams<I18nBaseQuery>();\n const { hasI18n, canCreate, canRead } = useI18n();\n const { data: locales = [] } = useGetLocalesQuery();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const { schema } = useDocument({\n model,\n collectionType,\n documentId,\n params: { locale: currentDesiredLocale },\n });\n const { data: jobData } = useGetAILocalizationJobsByDocumentQuery({\n documentId: documentId!,\n model: model!,\n collectionType: collectionType!,\n });\n const { data: settings } = useGetSettingsQuery();\n const isAiAvailable = useAITranslationsAvailability();\n\n const handleSelect = React.useCallback(\n (value: string) => {\n setQuery(\n {\n plugins: {\n ...query.plugins,\n i18n: {\n locale: value,\n },\n },\n },\n 'push',\n true\n );\n },\n [query.plugins, setQuery]\n );\n\n // Non-localized prefill is handled in `useDocument.getInitialFormValues`\n // so inherited values persist in initial form state, even after form resets or re-initialization.\n // Doing this here with setValues would not persist if the cache is reused.\n\n React.useEffect(() => {\n if (!Array.isArray(locales) || !hasI18n) {\n return;\n }\n /**\n * Handle the case where the current locale query param doesn't exist\n * in the list of available locales, so we redirect to the default locale\n * when the user has access to it, or the first locale they can access.\n */\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const accessibleLocales = locales.filter((locale) => canRead.includes(locale.code));\n const targetLocale =\n accessibleLocales.find((locale) => locale.isDefault) ?? accessibleLocales[0];\n if (!doesLocaleExist && targetLocale?.code) {\n handleSelect(targetLocale.code);\n }\n }, [handleSelect, hasI18n, locales, currentDesiredLocale, canRead]);\n\n const currentLocale = Array.isArray(locales)\n ? locales.find((locale) => locale.code === currentDesiredLocale)\n : undefined;\n\n // Use meta.availableLocales instead of document.localizations\n // meta.availableLocales contains all locales for the document, even when creating new locales\n const availableLocales = meta?.availableLocales ?? [];\n const documentLocalizations = document?.localizations ?? [];\n\n // Prefer meta.availableLocales as it's more reliable, fallback to document.localizations\n const allLocalizations = availableLocales.length > 0 ? availableLocales : documentLocalizations;\n\n const allCurrentLocales = [\n { status: getDocumentStatus(document, meta), locale: currentLocale?.code },\n ...allLocalizations,\n ];\n\n if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {\n return null;\n }\n\n const displayedLocales = locales.filter((locale) => {\n /**\n * If you can read we allow you to see the locale exists\n * otherwise the locale is hidden.\n */\n return canRead.includes(locale.code);\n });\n\n const localesSortingDefaultFirst = displayedLocales.sort((a, b) =>\n a.isDefault ? -1 : b.isDefault ? 1 : 0\n );\n\n return {\n label: formatMessage({\n id: getTranslation('Settings.locales.modal.locales.label'),\n defaultMessage: 'Locales',\n }),\n options: localesSortingDefaultFirst.map((locale, index) => {\n const entryWithLocaleExists = allCurrentLocales.some((doc) => doc.locale === locale.code);\n\n const currentLocaleDoc = allCurrentLocales.find((doc) =>\n 'locale' in doc ? doc.locale === locale.code : false\n );\n\n const permissionsToCheck = currentLocaleDoc ? canRead : canCreate;\n\n if (isAiAvailable && settings?.data?.aiLocalizations) {\n return {\n _render: () => (\n <React.Fragment key={locale.code}>\n <SingleSelectOption\n disabled={!permissionsToCheck.includes(locale.code)}\n key={locale.code}\n startIcon={\n <LocaleOptionStartIcon\n entryWithLocaleExists={entryWithLocaleExists}\n translationStatus={jobData?.data?.status}\n index={index}\n />\n }\n value={locale.code}\n >\n <LocaleOption\n isDraftAndPublishEnabled={!!schema?.options?.draftAndPublish}\n locale={locale}\n status={currentLocaleDoc?.status}\n entryExists={entryWithLocaleExists}\n />\n </SingleSelectOption>\n {localesSortingDefaultFirst.length > 1 && index === 0 && (\n <Box paddingRight={4} paddingLeft={4} paddingTop={2} paddingBottom={2}>\n <Typography variant=\"sigma\">\n {formatMessage({\n id: getTranslation('CMEditViewLocalePicker.locale.ai-translations'),\n defaultMessage: 'AI Translations',\n })}\n </Typography>\n </Box>\n )}\n </React.Fragment>\n ),\n };\n }\n\n return {\n disabled: !permissionsToCheck.includes(locale.code),\n value: locale.code,\n label: (\n <LocaleOption\n isDraftAndPublishEnabled={!!schema?.options?.draftAndPublish}\n locale={locale}\n status={currentLocaleDoc?.status}\n entryExists={entryWithLocaleExists}\n translationStatus={jobData?.data?.status}\n />\n ),\n startIcon: <LocaleOptionStartIcon entryWithLocaleExists={entryWithLocaleExists} />,\n };\n }),\n customizeContent: () => currentLocale?.name,\n onSelect: handleSelect,\n value: currentLocale,\n };\n};\n\ntype UseDocument = typeof useDocument;\n\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AISettingsStatusAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst AITranslationStatusIcon = styled(Status)<{ $isAISettingEnabled: boolean }>`\n display: flex;\n gap: ${({ theme }) => theme.spaces[1]};\n justify-content: center;\n align-items: center;\n height: 3.2rem;\n width: 3.2rem;\n\n // Disabled state\n ${({ $isAISettingEnabled, theme }) =>\n !$isAISettingEnabled &&\n `\n background-color: ${theme.colors.neutral150};\n `}\n\n svg {\n ${({ $isAISettingEnabled, theme }) =>\n !$isAISettingEnabled &&\n `\n fill: ${theme.colors.neutral300};\n `}\n }\n`;\n\nconst SpinningLoader = styled(Loader)`\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n\n animation: spin 2s linear infinite;\n`;\n\nconst AITranslationStatusAction = ({ documentId, model, collectionType }: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const isAIAvailable = useAITranslationsAvailability();\n const { data: settings } = useGetSettingsQuery();\n const isAISettingEnabled = settings?.data?.aiLocalizations;\n const { hasI18n } = useI18n();\n\n // Poll for AI localizations jobs when AI is enabled and we have a documentId\n const { status } = useAILocalizationJobsPolling({\n documentId,\n model,\n collectionType,\n });\n const statusVariant = (() => {\n if (status === 'failed') {\n return 'warning';\n }\n\n if (isAISettingEnabled) {\n return 'alternative';\n }\n\n return 'neutral';\n })();\n\n // Do not display this action when i18n is not available\n if (!hasI18n) {\n return null;\n }\n\n // Do not display this action when AI is not available\n if (!isAIAvailable) {\n return null;\n }\n\n return {\n _status: {\n message: (\n <Flex\n height=\"100%\"\n alignItems=\"center\"\n aria-label={formatMessage({\n id: getTranslation('CMEditViewAITranslation.status-aria-label'),\n defaultMessage: 'AI Translation Status',\n })}\n >\n <AITranslationStatusIcon\n $isAISettingEnabled={Boolean(isAISettingEnabled)}\n variant={statusVariant}\n size=\"S\"\n >\n {status === 'processing' ? <SpinningLoader /> : <Sparkle />}\n </AITranslationStatusIcon>\n </Flex>\n ),\n tooltip: (\n <Flex direction=\"column\" padding={4} alignItems=\"flex-start\" width=\"25rem\">\n <Typography variant=\"pi\" fontWeight=\"600\">\n {formatMessage(\n {\n id: getTranslation('CMEditViewAITranslation.status-title'),\n defaultMessage:\n '{enabled, select, true {AI translation enabled} false {AI translation disabled} other {AI translation disabled}}',\n },\n { enabled: isAISettingEnabled }\n )}\n </Typography>\n <Typography variant=\"pi\" paddingTop={1} paddingBottom={3}>\n {formatMessage({\n id: getTranslation('CMEditViewAITranslation.status-description'),\n defaultMessage:\n 'Our AI translates content in all locales each time you save a modification in the default locale.',\n })}\n </Typography>\n <Link\n fontSize=\"inherit\"\n tag={NavLink}\n to=\"/settings/internationalization\"\n style={{ alignSelf: 'flex-end' }}\n >\n <Typography variant=\"pi\" textAlign=\"right\">\n {formatMessage(\n {\n id: getTranslation('CMEditViewAITranslation.settings-link'),\n defaultMessage:\n '{enabled, select, true {Disable it in settings} false {Enable it in settings} other {Enable it in settings}}',\n },\n { enabled: isAISettingEnabled }\n )}\n </Typography>\n </Link>\n </Flex>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FillFromAnotherLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst FillFromAnotherLocaleAction = ({\n documentId,\n meta,\n model,\n collectionType,\n}: HeaderActionProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [{ query }] = useQueryParams<I18nBaseQuery>();\n const { hasI18n } = useI18n();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const [localeSelected, setLocaleSelected] = React.useState<string | null>(null);\n const setValues = useForm('FillFromAnotherLocale', (state) => state.setValues);\n\n const [getFillFromLocaleData, { isLoading: isFillFromLocaleLoading }] =\n useLazyGetFillFromLocaleDataQuery();\n const { data: locales = [] } = useGetLocalesQuery();\n\n const isAIAvailable = useAITranslationsAvailability();\n const { data: settings } = useGetSettingsQuery();\n const isAISettingEnabled = settings?.data?.aiLocalizations;\n\n const availableLocales = Array.isArray(locales)\n ? locales.filter((locale) => meta?.availableLocales.some((l) => l.locale === locale.code))\n : [];\n\n const fillFromLocale = (onClose: () => void) => async () => {\n if (!localeSelected || !currentDesiredLocale) {\n return;\n }\n\n try {\n const { data } = await getFillFromLocaleData({\n model,\n documentId,\n sourceLocale: localeSelected,\n targetLocale: currentDesiredLocale,\n collectionType: collectionType as 'collection-types' | 'single-types',\n }).unwrap();\n\n if (data) {\n setValues(data);\n }\n\n onClose();\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(err as Parameters<typeof formatAPIError>[0]),\n });\n }\n };\n\n if (!hasI18n) {\n return null;\n }\n\n // Do not display this action when AI is available and AI translations are enabled\n if (isAIAvailable && isAISettingEnabled) {\n return null;\n }\n\n return {\n type: 'icon',\n icon: <Earth />,\n disabled: availableLocales.length === 0,\n label: formatMessage({\n id: getTranslation('CMEditViewCopyLocale.copy-text'),\n defaultMessage: 'Fill in from another locale',\n }),\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: ({ onClose }: { onClose: () => void }) => (\n <>\n <Dialog.Body>\n <Flex direction=\"column\" gap={3}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.body'),\n defaultMessage:\n 'Your current content will be erased and filled by the content of the selected locale:',\n })}\n </Typography>\n <Field.Root width=\"100%\">\n <Field.Label>\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.field.label'),\n defaultMessage: 'Locale',\n })}\n </Field.Label>\n <SingleSelect\n value={localeSelected}\n placeholder={formatMessage({\n id: getTranslation('CMEditViewCopyLocale.dialog.field.placeholder'),\n defaultMessage: 'Select one locale...',\n })}\n // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.\n onChange={(value) => setLocaleSelected(value)}\n >\n {availableLocales.map((locale) => (\n <SingleSelectOption key={locale.code} value={locale.code}>\n {locale.name}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Field.Root>\n </Flex>\n </Dialog.Body>\n <Dialog.Footer>\n <Flex gap={2} width=\"100%\">\n <Button\n flex=\"auto\"\n variant=\"tertiary\"\n onClick={onClose}\n disabled={isFillFromLocaleLoading}\n >\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.cancel-text'),\n defaultMessage: 'No, cancel',\n })}\n </Button>\n <Button\n flex=\"auto\"\n variant=\"success\"\n onClick={fillFromLocale(onClose)}\n loading={isFillFromLocaleLoading}\n disabled={isFillFromLocaleLoading}\n >\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.submit-text'),\n defaultMessage: 'Yes, fill in',\n })}\n </Button>\n </Flex>\n </Dialog.Footer>\n </>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DeleteLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst DeleteLocaleAction: DocumentActionComponent = ({\n document,\n documentId,\n model,\n collectionType,\n}) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { delete: deleteAction, isLoading } = useDocumentActions();\n const { hasI18n, canDelete } = useI18n();\n\n // Get the current locale object, using the URL instead of document so it works while creating\n const [{ query }] = useQueryParams<I18nBaseQuery>();\n const { data: locales = [] } = useGetLocalesQuery();\n const currentDesiredLocale = query.plugins?.i18n?.locale;\n const locale = !('error' in locales) && locales.find((loc) => loc.code === currentDesiredLocale);\n\n if (!hasI18n) {\n return null;\n }\n\n return {\n disabled:\n (document?.locale && !canDelete.includes(document.locale)) || !document || !document.id,\n position: ['header', 'table-row'],\n label: formatMessage(\n {\n id: getTranslation('actions.delete.label'),\n defaultMessage: 'Delete entry ({locale})',\n },\n { locale: locale && locale.name }\n ),\n icon: <StyledTrash />,\n variant: 'danger',\n dialog: {\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('actions.delete.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" gap={2}>\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n <Typography tag=\"p\" variant=\"omega\" textAlign=\"center\">\n {formatMessage({\n id: getTranslation('actions.delete.dialog.body'),\n defaultMessage: 'Are you sure?',\n })}\n </Typography>\n </Flex>\n ),\n loading: isLoading,\n onConfirm: async () => {\n const unableToDelete =\n // We are unable to delete a collection type without a document ID\n // & unable to delete generally if there is no document locale\n (collectionType !== 'single-types' && !documentId) || !document?.locale;\n\n if (unableToDelete) {\n console.error(\n \"You're trying to delete a document without an id or locale, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: getTranslation('actions.delete.error'),\n defaultMessage: 'An error occurred while trying to delete the document locale.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await deleteAction({\n documentId,\n model,\n collectionType,\n params: { locale: document.locale },\n });\n\n if (!('error' in res)) {\n navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });\n }\n },\n },\n };\n};\n\nexport type LocaleStatus = {\n locale: string;\n status: Modules.Documents.Params.PublicationStatus.Kind | 'modified';\n};\n\ninterface ExtendedDocumentActionProps extends DocumentActionProps {\n action?: 'bulk-publish' | 'bulk-unpublish';\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleAction\n *\n * This component is used to handle bulk publish and unpublish actions on locales.\n * -----------------------------------------------------------------------------------------------*/\n\nconst BulkLocaleAction: DocumentActionComponent = ({\n document,\n documentId,\n model,\n collectionType,\n action,\n meta,\n}: ExtendedDocumentActionProps) => {\n const locale = document?.locale ?? null;\n const [{ query }] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const isOnPublishedTab = query.status === 'published';\n\n const { formatMessage } = useIntl();\n const { hasI18n, canPublish } = useI18n();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [selectedRows, setSelectedRows] = React.useState<Array<LocaleStatus & { id: string }>>([]);\n const [isDraftRelationConfirmationOpen, setIsDraftRelationConfirmationOpen] =\n React.useState<boolean>(false);\n\n const { publishMany: publishManyAction, unpublishMany: unpublishManyAction } =\n useDocumentActions();\n\n const { schema, validate } = useDocument(\n {\n model,\n collectionType,\n documentId,\n params: {\n locale,\n },\n },\n {\n // No need to fetch the document, the data is already available in the `document` prop\n skip: true,\n }\n );\n\n const { data: localesMetadata = [] } = useGetLocalesQuery(hasI18n ? undefined : skipToken);\n\n const headers = [\n {\n label: formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n }),\n name: 'name',\n },\n {\n label: formatMessage({\n id: getTranslation('CMEditViewBulkLocale.status'),\n defaultMessage: 'Status',\n }),\n name: 'status',\n },\n {\n label: formatMessage({\n id: getTranslation('CMEditViewBulkLocale.publication-status'),\n defaultMessage: 'Publication Status',\n }),\n name: 'publication-status',\n },\n ];\n\n // Extract the rows for the bulk locale publish modal and any validation\n // errors per locale\n const [rows, validationErrors] = React.useMemo<[LocaleStatus[], LocaleValidationErrors]>(() => {\n if (!document) {\n return [[], {}];\n }\n\n const metaLocalizations = (meta?.availableLocales ?? []).map((locale) => ({\n locale: locale.locale,\n status: (locale.status ?? 'draft') as LocaleStatus['status'],\n }));\n\n const documentLocalizations = (\n (document.localizations ?? []) as Array<{\n locale?: string | null;\n status?: Modules.Documents.Params.PublicationStatus.Kind | 'modified' | null;\n }>\n ).map((doc) => ({\n locale: doc.locale ?? undefined,\n status: (doc.status ?? 'draft') as LocaleStatus['status'],\n }));\n\n const localesMap = new Map<string, LocaleStatus>();\n\n metaLocalizations.forEach(({ locale, status }) => {\n if (locale) {\n localesMap.set(locale, { locale, status });\n }\n });\n\n documentLocalizations.forEach(({ locale, status }) => {\n if (locale) {\n localesMap.set(locale, { locale, status });\n }\n });\n\n // Build the rows for the bulk locale publish modal by combining the current\n // document with all the available locales from the document meta\n const locales: LocaleStatus[] = [];\n\n if (document?.locale) {\n locales.push({\n locale: document.locale,\n status: (document.status ?? 'draft') as LocaleStatus['status'],\n });\n }\n\n locales.push(\n ...Array.from(localesMap.entries())\n .filter(([locale]) => locale !== document?.locale)\n .map(([, value]) => value)\n );\n\n if (locales.length === 0 && document?.locale) {\n locales.push({\n locale: document.locale,\n status: (document.status ?? 'draft') as LocaleStatus['status'],\n });\n }\n\n // Validate the current document locale only. Other locales have minimal\n // data populated for performance reasons and will be validated server-side\n // during the actual bulk publish operation.\n const errors: LocaleValidationErrors = {};\n if (document.locale) {\n const validation = validate(document as Modules.Documents.AnyDocument);\n if (validation !== null) {\n errors[document.locale] = validation;\n }\n }\n\n return [locales, errors];\n }, [document, meta?.availableLocales, validate]);\n\n const isBulkPublish = action === 'bulk-publish';\n const localesForAction = selectedRows.reduce((acc: string[], selectedRow: LocaleStatus) => {\n const isValidLocale =\n // Validation errors are irrelevant if we are trying to unpublish\n !isBulkPublish || !Object.keys(validationErrors).includes(selectedRow.locale);\n\n const shouldAddLocale = isBulkPublish\n ? selectedRow.status !== 'published' && isValidLocale\n : selectedRow.status !== 'draft' && isValidLocale;\n\n if (shouldAddLocale) {\n acc.push(selectedRow.locale);\n }\n\n return acc;\n }, []);\n\n // TODO skipping this for now as there is a bug with the draft relation count that will be worked on separately\n // see https://www.notion.so/strapi/Count-draft-relations-56901b492efb45ab90d42fe975b32bd8?pvs=4\n const enableDraftRelationsCount = false;\n const {\n data: draftRelationsCount = 0,\n isLoading: isDraftRelationsLoading,\n error: isDraftRelationsError,\n } = useGetManyDraftRelationCountQuery(\n {\n model,\n documentIds: [documentId!],\n locale: localesForAction,\n },\n {\n skip: !enableDraftRelationsCount || !documentId || localesForAction.length === 0,\n }\n );\n\n React.useEffect(() => {\n if (isDraftRelationsError) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(isDraftRelationsError),\n });\n }\n }, [isDraftRelationsError, toggleNotification, formatAPIError]);\n\n if (!schema?.options?.draftAndPublish) {\n return null;\n }\n\n if (!hasI18n) {\n return null;\n }\n\n if (!documentId) {\n return null;\n }\n\n // This document action can be enabled given that draft and publish and i18n are\n // enabled and we can publish the current locale.\n\n const publish = async () => {\n await publishManyAction({\n model,\n documentIds: [documentId],\n params: {\n ...params,\n locale: localesForAction,\n },\n });\n\n setSelectedRows([]);\n };\n\n const unpublish = async () => {\n await unpublishManyAction({\n model,\n documentIds: [documentId],\n params: {\n ...params,\n locale: localesForAction,\n },\n });\n\n setSelectedRows([]);\n };\n\n const handleAction = async () => {\n if (draftRelationsCount > 0) {\n setIsDraftRelationConfirmationOpen(true);\n } else if (isBulkPublish) {\n await publish();\n } else {\n await unpublish();\n }\n };\n\n if (isDraftRelationConfirmationOpen) {\n return {\n label: formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n }),\n variant: 'danger',\n dialog: {\n onCancel: () => {\n setIsDraftRelationConfirmationOpen(false);\n },\n onConfirm: async () => {\n await publish();\n\n setIsDraftRelationConfirmationOpen(false);\n },\n type: 'dialog',\n title: formatMessage({\n id: getTranslation('actions.publish.dialog.title'),\n defaultMessage: 'Confirmation',\n }),\n content: (\n <Flex direction=\"column\" alignItems=\"center\" gap={2}>\n <WarningCircle width=\"2.4rem\" height=\"2.4rem\" fill=\"danger600\" />\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewBulkLocale.draft-relation-warning'),\n defaultMessage:\n 'Some locales are related to draft entries. Publishing them could leave broken links in your app.',\n })}\n </Typography>\n <Typography textAlign=\"center\">\n {formatMessage({\n id: getTranslation('CMEditViewBulkLocale.continue-confirmation'),\n defaultMessage: 'Are you sure you want to continue?',\n })}\n </Typography>\n </Flex>\n ),\n },\n };\n }\n\n const hasPermission = selectedRows\n .map(({ locale }) => locale)\n .every((locale) => canPublish.includes(locale));\n\n return {\n label: formatMessage({\n id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n }),\n variant: isBulkPublish ? 'secondary' : 'danger',\n icon: isBulkPublish ? <ListPlus /> : <Cross />,\n disabled: isOnPublishedTab || canPublish.length === 0,\n position: ['panel'],\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),\n defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`,\n }),\n content: () => {\n return (\n <Table.Root\n headers={headers}\n rows={rows.map((row) => ({\n ...row,\n id: row.locale,\n }))}\n selectedRows={selectedRows}\n onSelectedRowsChange={(tableSelectedRows) => setSelectedRows(tableSelectedRows)}\n >\n <BulkLocaleActionModal\n validationErrors={validationErrors}\n headers={headers}\n rows={rows}\n localesMetadata={localesMetadata as Locale[]}\n action={action ?? 'bulk-publish'}\n />\n </Table.Root>\n );\n },\n footer: () => (\n <Modal.Footer justifyContent=\"flex-end\">\n <Button\n loading={isDraftRelationsLoading}\n disabled={!hasPermission || localesForAction.length === 0}\n variant=\"default\"\n onClick={handleAction}\n >\n {formatMessage({\n id: isBulkPublish ? 'app.utils.publish' : 'app.utils.unpublish',\n defaultMessage: isBulkPublish ? 'Publish' : 'Unpublish',\n })}\n </Button>\n </Modal.Footer>\n ),\n },\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocalePublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocalePublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n return BulkLocaleAction({ action: 'bulk-publish', ...props });\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BulkLocaleUnpublishAction\n * -----------------------------------------------------------------------------------------------*/\nconst BulkLocaleUnpublishAction: DocumentActionComponent = (props: ExtendedDocumentActionProps) => {\n return BulkLocaleAction({ action: 'bulk-unpublish', ...props });\n};\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledTrash = styled(Trash)`\n path {\n fill: currentColor;\n }\n`;\n\nexport {\n BulkLocalePublishAction,\n BulkLocaleUnpublishAction,\n DeleteLocaleAction,\n LocalePickerAction,\n FillFromAnotherLocaleAction,\n AITranslationStatusAction,\n};\n"],"names":["statusVariants","draft","published","modified","LocaleOption","isDraftAndPublishEnabled","locale","status","entryExists","formatMessage","useIntl","id","getTranslation","defaultMessage","bold","_jsx","b","name","_jsxs","Flex","width","gap","justifyContent","Typography","Status","display","paddingLeft","paddingRight","paddingTop","paddingBottom","size","variant","tag","fontWeight","capitalize","LocaleOptionStartIcon","entryWithLocaleExists","translationStatus","index","isAiAvailable","useAITranslationsAvailability","Plus","WarningCircle","fill","LocalePickerAction","document","meta","model","collectionType","documentId","query","setQuery","useQueryParams","hasI18n","canCreate","canRead","useI18n","data","locales","useGetLocalesQuery","currentDesiredLocale","plugins","i18n","schema","useDocument","params","jobData","useGetAILocalizationJobsByDocumentQuery","settings","useGetSettingsQuery","handleSelect","React","useCallback","value","useEffect","Array","isArray","doesLocaleExist","find","loc","code","accessibleLocales","filter","includes","targetLocale","isDefault","currentLocale","undefined","availableLocales","documentLocalizations","localizations","allLocalizations","length","allCurrentLocales","getDocumentStatus","displayedLocales","localesSortingDefaultFirst","sort","a","label","options","map","some","doc","currentLocaleDoc","permissionsToCheck","aiLocalizations","_render","Fragment","SingleSelectOption","disabled","startIcon","draftAndPublish","Box","customizeContent","onSelect","docStatus","statuses","availableStatus","publishedAt","AITranslationStatusIcon","styled","theme","spaces","$isAISettingEnabled","colors","neutral150","neutral300","SpinningLoader","Loader","AITranslationStatusAction","isAIAvailable","isAISettingEnabled","useAILocalizationJobsPolling","statusVariant","_status","message","height","alignItems","aria-label","Boolean","Sparkle","tooltip","direction","padding","enabled","Link","fontSize","NavLink","to","style","alignSelf","textAlign","FillFromAnotherLocaleAction","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","localeSelected","setLocaleSelected","useState","setValues","useForm","state","getFillFromLocaleData","isLoading","isFillFromLocaleLoading","useLazyGetFillFromLocaleDataQuery","l","fillFromLocale","onClose","sourceLocale","unwrap","err","type","icon","Earth","dialog","title","content","_Fragment","Dialog","Body","Field","Root","Label","SingleSelect","placeholder","onChange","Footer","Button","flex","onClick","loading","DeleteLocaleAction","navigate","useNavigate","delete","deleteAction","useDocumentActions","canDelete","position","StyledTrash","onConfirm","unableToDelete","console","error","res","pathname","replace","BulkLocaleAction","action","useMemo","buildValidParams","isOnPublishedTab","canPublish","selectedRows","setSelectedRows","isDraftRelationConfirmationOpen","setIsDraftRelationConfirmationOpen","publishMany","publishManyAction","unpublishMany","unpublishManyAction","validate","skip","localesMetadata","skipToken","headers","rows","validationErrors","metaLocalizations","localesMap","Map","forEach","set","push","from","entries","errors","validation","isBulkPublish","localesForAction","reduce","acc","selectedRow","isValidLocale","Object","keys","shouldAddLocale","draftRelationsCount","isDraftRelationsLoading","isDraftRelationsError","useGetManyDraftRelationCountQuery","documentIds","publish","unpublish","handleAction","onCancel","hasPermission","every","ListPlus","Cross","Table","row","onSelectedRowsChange","tableSelectedRows","BulkLocaleActionModal","footer","Modal","BulkLocalePublishAction","props","BulkLocaleUnpublishAction","Trash"],"mappings":"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"}
@@ -28,7 +28,8 @@ function _interopNamespace(e) {
28
28
 
29
29
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
30
 
31
- const LocaleTable = ({ locales = [], canDelete, canUpdate })=>{
31
+ const EMPTY_LOCALES = [];
32
+ const LocaleTable = ({ locales = EMPTY_LOCALES, canDelete, canUpdate })=>{
32
33
  const [editLocaleId, setEditLocaleId] = React__namespace.useState();
33
34
  const { formatMessage } = reactIntl.useIntl();
34
35
  const handleClick = (localeId)=>()=>{
@@ -1 +1 @@
1
- {"version":3,"file":"LocaleTable.js","sources":["../../../admin/src/components/LocaleTable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Flex,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../utils/getTranslation';\n\nimport { DeleteLocale } from './DeleteLocale';\nimport { EditLocale, EditModal } from './EditLocale';\n\nimport type { Locale } from '../../../shared/contracts/locales';\n\n/* -------------------------------------------------------------------------------------------------\n * LocaleTable\n * -----------------------------------------------------------------------------------------------*/\n\ntype LocaleTableProps = {\n locales?: Locale[];\n canDelete?: boolean;\n canUpdate?: boolean;\n onDeleteLocale?: (locale: Locale) => void;\n onEditLocale?: (locale: Locale) => void;\n};\n\nconst LocaleTable = ({ locales = [], canDelete, canUpdate }: LocaleTableProps) => {\n const [editLocaleId, setEditLocaleId] = React.useState<Locale['id']>();\n const { formatMessage } = useIntl();\n\n const handleClick = (localeId: Locale['id']) => () => {\n if (canUpdate) {\n setEditLocaleId(localeId);\n }\n };\n\n return (\n <Table colCount={4} rowCount={locales.length + 1}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.id'),\n defaultMessage: 'ID',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.displayName'),\n defaultMessage: 'Display name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.default-locale'),\n defaultMessage: 'Default locale',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>Actions</VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {locales.map((locale) => (\n <React.Fragment key={locale.id}>\n <Tr\n onClick={handleClick(locale.id)}\n style={{ cursor: canUpdate ? 'pointer' : 'default' }}\n >\n <Td>\n <Typography textColor=\"neutral800\">{locale.id}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{locale.name}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">\n {locale.isDefault\n ? formatMessage({\n id: getTranslation('Settings.locales.default'),\n defaultMessage: 'Default',\n })\n : null}\n </Typography>\n </Td>\n <Td>\n <Flex gap={1} justifyContent=\"flex-end\" onClick={(e) => e.stopPropagation()}>\n {canUpdate && <EditLocale {...locale} />}\n {canDelete && !locale.isDefault && <DeleteLocale {...locale} />}\n </Flex>\n </Td>\n </Tr>\n <EditModal\n {...locale}\n onOpenChange={() => setEditLocaleId(undefined)}\n open={editLocaleId === locale.id}\n />\n </React.Fragment>\n ))}\n </Tbody>\n </Table>\n );\n};\n\nexport { LocaleTable };\nexport type { LocaleTableProps };\n"],"names":["LocaleTable","locales","canDelete","canUpdate","editLocaleId","setEditLocaleId","React","useState","formatMessage","useIntl","handleClick","localeId","_jsxs","Table","colCount","rowCount","length","_jsx","Thead","Tr","Th","Typography","variant","textColor","id","getTranslation","defaultMessage","VisuallyHidden","Tbody","map","locale","Fragment","onClick","style","cursor","Td","name","isDefault","Flex","gap","justifyContent","e","stopPropagation","EditLocale","DeleteLocale","EditModal","onOpenChange","undefined","open"],"mappings":"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"}
1
+ {"version":3,"file":"LocaleTable.js","sources":["../../../admin/src/components/LocaleTable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Flex,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../utils/getTranslation';\n\nimport { DeleteLocale } from './DeleteLocale';\nimport { EditLocale, EditModal } from './EditLocale';\n\nimport type { Locale } from '../../../shared/contracts/locales';\n\nconst EMPTY_LOCALES: NonNullable<LocaleTableProps['locales']> = [];\n\n/* -------------------------------------------------------------------------------------------------\n * LocaleTable\n * -----------------------------------------------------------------------------------------------*/\n\ntype LocaleTableProps = {\n locales?: Locale[];\n canDelete?: boolean;\n canUpdate?: boolean;\n onDeleteLocale?: (locale: Locale) => void;\n onEditLocale?: (locale: Locale) => void;\n};\n\nconst LocaleTable = ({ locales = EMPTY_LOCALES, canDelete, canUpdate }: LocaleTableProps) => {\n const [editLocaleId, setEditLocaleId] = React.useState<Locale['id']>();\n const { formatMessage } = useIntl();\n\n const handleClick = (localeId: Locale['id']) => () => {\n if (canUpdate) {\n setEditLocaleId(localeId);\n }\n };\n\n return (\n <Table colCount={4} rowCount={locales.length + 1}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.id'),\n defaultMessage: 'ID',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.displayName'),\n defaultMessage: 'Display name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.default-locale'),\n defaultMessage: 'Default locale',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>Actions</VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {locales.map((locale) => (\n <React.Fragment key={locale.id}>\n <Tr\n onClick={handleClick(locale.id)}\n style={{ cursor: canUpdate ? 'pointer' : 'default' }}\n >\n <Td>\n <Typography textColor=\"neutral800\">{locale.id}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{locale.name}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">\n {locale.isDefault\n ? formatMessage({\n id: getTranslation('Settings.locales.default'),\n defaultMessage: 'Default',\n })\n : null}\n </Typography>\n </Td>\n <Td>\n <Flex gap={1} justifyContent=\"flex-end\" onClick={(e) => e.stopPropagation()}>\n {canUpdate && <EditLocale {...locale} />}\n {canDelete && !locale.isDefault && <DeleteLocale {...locale} />}\n </Flex>\n </Td>\n </Tr>\n <EditModal\n {...locale}\n onOpenChange={() => setEditLocaleId(undefined)}\n open={editLocaleId === locale.id}\n />\n </React.Fragment>\n ))}\n </Tbody>\n </Table>\n );\n};\n\nexport { LocaleTable };\nexport type { LocaleTableProps };\n"],"names":["EMPTY_LOCALES","LocaleTable","locales","canDelete","canUpdate","editLocaleId","setEditLocaleId","React","useState","formatMessage","useIntl","handleClick","localeId","_jsxs","Table","colCount","rowCount","length","_jsx","Thead","Tr","Th","Typography","variant","textColor","id","getTranslation","defaultMessage","VisuallyHidden","Tbody","map","locale","Fragment","onClick","style","cursor","Td","name","isDefault","Flex","gap","justifyContent","e","stopPropagation","EditLocale","DeleteLocale","EditModal","onOpenChange","undefined","open"],"mappings":"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"}
@@ -6,7 +6,8 @@ import { getTranslation } from '../utils/getTranslation.mjs';
6
6
  import { DeleteLocale } from './DeleteLocale.mjs';
7
7
  import { EditLocale, EditModal } from './EditLocale.mjs';
8
8
 
9
- const LocaleTable = ({ locales = [], canDelete, canUpdate })=>{
9
+ const EMPTY_LOCALES = [];
10
+ const LocaleTable = ({ locales = EMPTY_LOCALES, canDelete, canUpdate })=>{
10
11
  const [editLocaleId, setEditLocaleId] = React.useState();
11
12
  const { formatMessage } = useIntl();
12
13
  const handleClick = (localeId)=>()=>{
@@ -1 +1 @@
1
- {"version":3,"file":"LocaleTable.mjs","sources":["../../../admin/src/components/LocaleTable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Flex,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../utils/getTranslation';\n\nimport { DeleteLocale } from './DeleteLocale';\nimport { EditLocale, EditModal } from './EditLocale';\n\nimport type { Locale } from '../../../shared/contracts/locales';\n\n/* -------------------------------------------------------------------------------------------------\n * LocaleTable\n * -----------------------------------------------------------------------------------------------*/\n\ntype LocaleTableProps = {\n locales?: Locale[];\n canDelete?: boolean;\n canUpdate?: boolean;\n onDeleteLocale?: (locale: Locale) => void;\n onEditLocale?: (locale: Locale) => void;\n};\n\nconst LocaleTable = ({ locales = [], canDelete, canUpdate }: LocaleTableProps) => {\n const [editLocaleId, setEditLocaleId] = React.useState<Locale['id']>();\n const { formatMessage } = useIntl();\n\n const handleClick = (localeId: Locale['id']) => () => {\n if (canUpdate) {\n setEditLocaleId(localeId);\n }\n };\n\n return (\n <Table colCount={4} rowCount={locales.length + 1}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.id'),\n defaultMessage: 'ID',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.displayName'),\n defaultMessage: 'Display name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.default-locale'),\n defaultMessage: 'Default locale',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>Actions</VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {locales.map((locale) => (\n <React.Fragment key={locale.id}>\n <Tr\n onClick={handleClick(locale.id)}\n style={{ cursor: canUpdate ? 'pointer' : 'default' }}\n >\n <Td>\n <Typography textColor=\"neutral800\">{locale.id}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{locale.name}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">\n {locale.isDefault\n ? formatMessage({\n id: getTranslation('Settings.locales.default'),\n defaultMessage: 'Default',\n })\n : null}\n </Typography>\n </Td>\n <Td>\n <Flex gap={1} justifyContent=\"flex-end\" onClick={(e) => e.stopPropagation()}>\n {canUpdate && <EditLocale {...locale} />}\n {canDelete && !locale.isDefault && <DeleteLocale {...locale} />}\n </Flex>\n </Td>\n </Tr>\n <EditModal\n {...locale}\n onOpenChange={() => setEditLocaleId(undefined)}\n open={editLocaleId === locale.id}\n />\n </React.Fragment>\n ))}\n </Tbody>\n </Table>\n );\n};\n\nexport { LocaleTable };\nexport type { LocaleTableProps };\n"],"names":["LocaleTable","locales","canDelete","canUpdate","editLocaleId","setEditLocaleId","React","useState","formatMessage","useIntl","handleClick","localeId","_jsxs","Table","colCount","rowCount","length","_jsx","Thead","Tr","Th","Typography","variant","textColor","id","getTranslation","defaultMessage","VisuallyHidden","Tbody","map","locale","Fragment","onClick","style","cursor","Td","name","isDefault","Flex","gap","justifyContent","e","stopPropagation","EditLocale","DeleteLocale","EditModal","onOpenChange","undefined","open"],"mappings":"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"}
1
+ {"version":3,"file":"LocaleTable.mjs","sources":["../../../admin/src/components/LocaleTable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Flex,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../utils/getTranslation';\n\nimport { DeleteLocale } from './DeleteLocale';\nimport { EditLocale, EditModal } from './EditLocale';\n\nimport type { Locale } from '../../../shared/contracts/locales';\n\nconst EMPTY_LOCALES: NonNullable<LocaleTableProps['locales']> = [];\n\n/* -------------------------------------------------------------------------------------------------\n * LocaleTable\n * -----------------------------------------------------------------------------------------------*/\n\ntype LocaleTableProps = {\n locales?: Locale[];\n canDelete?: boolean;\n canUpdate?: boolean;\n onDeleteLocale?: (locale: Locale) => void;\n onEditLocale?: (locale: Locale) => void;\n};\n\nconst LocaleTable = ({ locales = EMPTY_LOCALES, canDelete, canUpdate }: LocaleTableProps) => {\n const [editLocaleId, setEditLocaleId] = React.useState<Locale['id']>();\n const { formatMessage } = useIntl();\n\n const handleClick = (localeId: Locale['id']) => () => {\n if (canUpdate) {\n setEditLocaleId(localeId);\n }\n };\n\n return (\n <Table colCount={4} rowCount={locales.length + 1}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.id'),\n defaultMessage: 'ID',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.displayName'),\n defaultMessage: 'Display name',\n })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTranslation('Settings.locales.row.default-locale'),\n defaultMessage: 'Default locale',\n })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>Actions</VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {locales.map((locale) => (\n <React.Fragment key={locale.id}>\n <Tr\n onClick={handleClick(locale.id)}\n style={{ cursor: canUpdate ? 'pointer' : 'default' }}\n >\n <Td>\n <Typography textColor=\"neutral800\">{locale.id}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{locale.name}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">\n {locale.isDefault\n ? formatMessage({\n id: getTranslation('Settings.locales.default'),\n defaultMessage: 'Default',\n })\n : null}\n </Typography>\n </Td>\n <Td>\n <Flex gap={1} justifyContent=\"flex-end\" onClick={(e) => e.stopPropagation()}>\n {canUpdate && <EditLocale {...locale} />}\n {canDelete && !locale.isDefault && <DeleteLocale {...locale} />}\n </Flex>\n </Td>\n </Tr>\n <EditModal\n {...locale}\n onOpenChange={() => setEditLocaleId(undefined)}\n open={editLocaleId === locale.id}\n />\n </React.Fragment>\n ))}\n </Tbody>\n </Table>\n );\n};\n\nexport { LocaleTable };\nexport type { LocaleTableProps };\n"],"names":["EMPTY_LOCALES","LocaleTable","locales","canDelete","canUpdate","editLocaleId","setEditLocaleId","React","useState","formatMessage","useIntl","handleClick","localeId","_jsxs","Table","colCount","rowCount","length","_jsx","Thead","Tr","Th","Typography","variant","textColor","id","getTranslation","defaultMessage","VisuallyHidden","Tbody","map","locale","Fragment","onClick","style","cursor","Td","name","isDefault","Flex","gap","justifyContent","e","stopPropagation","EditLocale","DeleteLocale","EditModal","onOpenChange","undefined","open"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rbac-middleware.js","sources":["../../../admin/src/middlewares/rbac-middleware.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as qs from 'qs';\nimport { matchPath } from 'react-router-dom';\n\nimport type { RBACMiddleware } from '@strapi/admin/strapi-admin';\n\nconst localeMiddleware: RBACMiddleware = (ctx) => (next) => (permissions) => {\n const match = matchPath('/content-manager/:collectionType/:model?/:id', ctx.pathname);\n\n if (!match) {\n return next(permissions);\n }\n\n const search = qs.parse(ctx.search);\n\n if (typeof search !== 'object') {\n return next(permissions);\n }\n\n if (!('plugins' in search && typeof search.plugins === 'object')) {\n return next(permissions);\n }\n\n if (\n !(\n 'i18n' in search.plugins &&\n typeof search.plugins.i18n === 'object' &&\n !Array.isArray(search.plugins.i18n)\n )\n ) {\n return next(permissions);\n }\n\n const { locale } = search.plugins.i18n;\n\n if (typeof locale !== 'string') {\n return next(permissions);\n }\n\n const revisedPermissions = permissions.filter(\n (permission) =>\n !permission.properties?.locales || permission.properties.locales.includes(locale)\n );\n\n return next(revisedPermissions);\n};\n\nexport { localeMiddleware };\n"],"names":["localeMiddleware","ctx","next","permissions","match","matchPath","pathname","search","qs","parse","plugins","i18n","Array","isArray","locale","revisedPermissions","filter","permission","properties","locales","includes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,gBAAAA,GAAmC,CAACC,GAAAA,GAAQ,CAACC,OAAS,CAACC,WAAAA,GAAAA;AAC3D,YAAA,MAAMC,KAAAA,GAAQC,wBAAAA,CAAU,8CAAA,EAAgDJ,GAAAA,CAAIK,QAAQ,CAAA;AAEpF,YAAA,IAAI,CAACF,KAAAA,EAAO;AACV,gBAAA,OAAOF,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAMI,MAAAA,GAASC,aAAAA,CAAGC,KAAK,CAACR,IAAIM,MAAM,CAAA;YAElC,IAAI,OAAOA,WAAW,QAAA,EAAU;AAC9B,gBAAA,OAAOL,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;YAEA,IAAI,EAAE,SAAA,IAAaI,MAAAA,IAAU,OAAOA,MAAAA,CAAOG,OAAO,KAAK,QAAO,CAAA,EAAI;AAChE,gBAAA,OAAOR,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;YAEA,IACE,EACE,MAAA,IAAUI,MAAAA,CAAOG,OAAO,IACxB,OAAOH,MAAAA,CAAOG,OAAO,CAACC,IAAI,KAAK,QAAA,IAC/B,CAACC,MAAMC,OAAO,CAACN,OAAOG,OAAO,CAACC,IAAI,CAAA,CAAA,EAEpC;AACA,gBAAA,OAAOT,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAM,EAAEW,MAAM,EAAE,GAAGP,MAAAA,CAAOG,OAAO,CAACC,IAAI;YAEtC,IAAI,OAAOG,WAAW,QAAA,EAAU;AAC9B,gBAAA,OAAOZ,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAMY,qBAAqBZ,WAAAA,CAAYa,MAAM,CAC3C,CAACC,aACC,CAACA,UAAAA,CAAWC,UAAU,EAAEC,WAAWF,UAAAA,CAAWC,UAAU,CAACC,OAAO,CAACC,QAAQ,CAACN,MAAAA,CAAAA,CAAAA;AAG9E,YAAA,OAAOZ,IAAAA,CAAKa,kBAAAA,CAAAA;AACd,QAAA;;;;"}
1
+ {"version":3,"file":"rbac-middleware.js","sources":["../../../admin/src/middlewares/rbac-middleware.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as qs from 'qs';\nimport { matchPath } from 'react-router-dom';\n\nimport type { RBACMiddleware } from '@strapi/admin/strapi-admin';\n\nconst localeMiddleware: RBACMiddleware = (ctx) => (next) => (permissions) => {\n const match = matchPath('/content-manager/:collectionType/:model?/:id', ctx.pathname);\n\n if (!match) {\n return next(permissions);\n }\n\n const search = qs.parse(ctx.search);\n\n if (typeof search !== 'object') {\n return next(permissions);\n }\n\n if (!('plugins' in search && typeof search.plugins === 'object')) {\n return next(permissions);\n }\n\n if (!(\n 'i18n' in search.plugins &&\n typeof search.plugins.i18n === 'object' &&\n !Array.isArray(search.plugins.i18n)\n )) {\n return next(permissions);\n }\n\n const { locale } = search.plugins.i18n;\n\n if (typeof locale !== 'string') {\n return next(permissions);\n }\n\n const revisedPermissions = permissions.filter(\n (permission) =>\n !permission.properties?.locales || permission.properties.locales.includes(locale)\n );\n\n return next(revisedPermissions);\n};\n\nexport { localeMiddleware };\n"],"names":["localeMiddleware","ctx","next","permissions","match","matchPath","pathname","search","qs","parse","plugins","i18n","Array","isArray","locale","revisedPermissions","filter","permission","properties","locales","includes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,gBAAAA,GAAmC,CAACC,GAAAA,GAAQ,CAACC,OAAS,CAACC,WAAAA,GAAAA;AAC3D,YAAA,MAAMC,KAAAA,GAAQC,wBAAAA,CAAU,8CAAA,EAAgDJ,GAAAA,CAAIK,QAAQ,CAAA;AAEpF,YAAA,IAAI,CAACF,KAAAA,EAAO;AACV,gBAAA,OAAOF,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAMI,MAAAA,GAASC,aAAAA,CAAGC,KAAK,CAACR,IAAIM,MAAM,CAAA;YAElC,IAAI,OAAOA,WAAW,QAAA,EAAU;AAC9B,gBAAA,OAAOL,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;YAEA,IAAI,EAAE,SAAA,IAAaI,MAAAA,IAAU,OAAOA,MAAAA,CAAOG,OAAO,KAAK,QAAO,CAAA,EAAI;AAChE,gBAAA,OAAOR,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;YAEA,IAAI,EACF,MAAA,IAAUI,MAAAA,CAAOG,OAAO,IACxB,OAAOH,MAAAA,CAAOG,OAAO,CAACC,IAAI,KAAK,QAAA,IAC/B,CAACC,MAAMC,OAAO,CAACN,OAAOG,OAAO,CAACC,IAAI,CAAA,CAAA,EACjC;AACD,gBAAA,OAAOT,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAM,EAAEW,MAAM,EAAE,GAAGP,MAAAA,CAAOG,OAAO,CAACC,IAAI;YAEtC,IAAI,OAAOG,WAAW,QAAA,EAAU;AAC9B,gBAAA,OAAOZ,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAMY,qBAAqBZ,WAAAA,CAAYa,MAAM,CAC3C,CAACC,aACC,CAACA,UAAAA,CAAWC,UAAU,EAAEC,WAAWF,UAAAA,CAAWC,UAAU,CAACC,OAAO,CAACC,QAAQ,CAACN,MAAAA,CAAAA,CAAAA;AAG9E,YAAA,OAAOZ,IAAAA,CAAKa,kBAAAA,CAAAA;AACd,QAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"rbac-middleware.mjs","sources":["../../../admin/src/middlewares/rbac-middleware.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as qs from 'qs';\nimport { matchPath } from 'react-router-dom';\n\nimport type { RBACMiddleware } from '@strapi/admin/strapi-admin';\n\nconst localeMiddleware: RBACMiddleware = (ctx) => (next) => (permissions) => {\n const match = matchPath('/content-manager/:collectionType/:model?/:id', ctx.pathname);\n\n if (!match) {\n return next(permissions);\n }\n\n const search = qs.parse(ctx.search);\n\n if (typeof search !== 'object') {\n return next(permissions);\n }\n\n if (!('plugins' in search && typeof search.plugins === 'object')) {\n return next(permissions);\n }\n\n if (\n !(\n 'i18n' in search.plugins &&\n typeof search.plugins.i18n === 'object' &&\n !Array.isArray(search.plugins.i18n)\n )\n ) {\n return next(permissions);\n }\n\n const { locale } = search.plugins.i18n;\n\n if (typeof locale !== 'string') {\n return next(permissions);\n }\n\n const revisedPermissions = permissions.filter(\n (permission) =>\n !permission.properties?.locales || permission.properties.locales.includes(locale)\n );\n\n return next(revisedPermissions);\n};\n\nexport { localeMiddleware };\n"],"names":["localeMiddleware","ctx","next","permissions","match","matchPath","pathname","search","qs","parse","plugins","i18n","Array","isArray","locale","revisedPermissions","filter","permission","properties","locales","includes"],"mappings":";;;AAMA,MAAMA,gBAAAA,GAAmC,CAACC,GAAAA,GAAQ,CAACC,OAAS,CAACC,WAAAA,GAAAA;AAC3D,YAAA,MAAMC,KAAAA,GAAQC,SAAAA,CAAU,8CAAA,EAAgDJ,GAAAA,CAAIK,QAAQ,CAAA;AAEpF,YAAA,IAAI,CAACF,KAAAA,EAAO;AACV,gBAAA,OAAOF,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAMI,MAAAA,GAASC,EAAAA,CAAGC,KAAK,CAACR,IAAIM,MAAM,CAAA;YAElC,IAAI,OAAOA,WAAW,QAAA,EAAU;AAC9B,gBAAA,OAAOL,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;YAEA,IAAI,EAAE,SAAA,IAAaI,MAAAA,IAAU,OAAOA,MAAAA,CAAOG,OAAO,KAAK,QAAO,CAAA,EAAI;AAChE,gBAAA,OAAOR,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;YAEA,IACE,EACE,MAAA,IAAUI,MAAAA,CAAOG,OAAO,IACxB,OAAOH,MAAAA,CAAOG,OAAO,CAACC,IAAI,KAAK,QAAA,IAC/B,CAACC,MAAMC,OAAO,CAACN,OAAOG,OAAO,CAACC,IAAI,CAAA,CAAA,EAEpC;AACA,gBAAA,OAAOT,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAM,EAAEW,MAAM,EAAE,GAAGP,MAAAA,CAAOG,OAAO,CAACC,IAAI;YAEtC,IAAI,OAAOG,WAAW,QAAA,EAAU;AAC9B,gBAAA,OAAOZ,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAMY,qBAAqBZ,WAAAA,CAAYa,MAAM,CAC3C,CAACC,aACC,CAACA,UAAAA,CAAWC,UAAU,EAAEC,WAAWF,UAAAA,CAAWC,UAAU,CAACC,OAAO,CAACC,QAAQ,CAACN,MAAAA,CAAAA,CAAAA;AAG9E,YAAA,OAAOZ,IAAAA,CAAKa,kBAAAA,CAAAA;AACd,QAAA;;;;"}
1
+ {"version":3,"file":"rbac-middleware.mjs","sources":["../../../admin/src/middlewares/rbac-middleware.ts"],"sourcesContent":["/* eslint-disable check-file/filename-naming-convention */\nimport * as qs from 'qs';\nimport { matchPath } from 'react-router-dom';\n\nimport type { RBACMiddleware } from '@strapi/admin/strapi-admin';\n\nconst localeMiddleware: RBACMiddleware = (ctx) => (next) => (permissions) => {\n const match = matchPath('/content-manager/:collectionType/:model?/:id', ctx.pathname);\n\n if (!match) {\n return next(permissions);\n }\n\n const search = qs.parse(ctx.search);\n\n if (typeof search !== 'object') {\n return next(permissions);\n }\n\n if (!('plugins' in search && typeof search.plugins === 'object')) {\n return next(permissions);\n }\n\n if (!(\n 'i18n' in search.plugins &&\n typeof search.plugins.i18n === 'object' &&\n !Array.isArray(search.plugins.i18n)\n )) {\n return next(permissions);\n }\n\n const { locale } = search.plugins.i18n;\n\n if (typeof locale !== 'string') {\n return next(permissions);\n }\n\n const revisedPermissions = permissions.filter(\n (permission) =>\n !permission.properties?.locales || permission.properties.locales.includes(locale)\n );\n\n return next(revisedPermissions);\n};\n\nexport { localeMiddleware };\n"],"names":["localeMiddleware","ctx","next","permissions","match","matchPath","pathname","search","qs","parse","plugins","i18n","Array","isArray","locale","revisedPermissions","filter","permission","properties","locales","includes"],"mappings":";;;AAMA,MAAMA,gBAAAA,GAAmC,CAACC,GAAAA,GAAQ,CAACC,OAAS,CAACC,WAAAA,GAAAA;AAC3D,YAAA,MAAMC,KAAAA,GAAQC,SAAAA,CAAU,8CAAA,EAAgDJ,GAAAA,CAAIK,QAAQ,CAAA;AAEpF,YAAA,IAAI,CAACF,KAAAA,EAAO;AACV,gBAAA,OAAOF,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAMI,MAAAA,GAASC,EAAAA,CAAGC,KAAK,CAACR,IAAIM,MAAM,CAAA;YAElC,IAAI,OAAOA,WAAW,QAAA,EAAU;AAC9B,gBAAA,OAAOL,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;YAEA,IAAI,EAAE,SAAA,IAAaI,MAAAA,IAAU,OAAOA,MAAAA,CAAOG,OAAO,KAAK,QAAO,CAAA,EAAI;AAChE,gBAAA,OAAOR,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;YAEA,IAAI,EACF,MAAA,IAAUI,MAAAA,CAAOG,OAAO,IACxB,OAAOH,MAAAA,CAAOG,OAAO,CAACC,IAAI,KAAK,QAAA,IAC/B,CAACC,MAAMC,OAAO,CAACN,OAAOG,OAAO,CAACC,IAAI,CAAA,CAAA,EACjC;AACD,gBAAA,OAAOT,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAM,EAAEW,MAAM,EAAE,GAAGP,MAAAA,CAAOG,OAAO,CAACC,IAAI;YAEtC,IAAI,OAAOG,WAAW,QAAA,EAAU;AAC9B,gBAAA,OAAOZ,IAAAA,CAAKC,WAAAA,CAAAA;AACd,YAAA;AAEA,YAAA,MAAMY,qBAAqBZ,WAAAA,CAAYa,MAAM,CAC3C,CAACC,aACC,CAACA,UAAAA,CAAWC,UAAU,EAAEC,WAAWF,UAAAA,CAAWC,UAAU,CAACC,OAAO,CAACC,QAAQ,CAACN,MAAAA,CAAAA,CAAAA;AAG9E,YAAA,OAAOZ,IAAAA,CAAKa,kBAAAA,CAAAA;AACd,QAAA;;;;"}
@@ -12,9 +12,9 @@ var da = {
12
12
  "Field.localized": "Denne værdi er unik for den valgte sprogvariant",
13
13
  "Field.not-localized": "Denne værdi er ens for alle sprogvarianter",
14
14
  "Settings.list.actions.add": "Tilføj sprogvariant",
15
- "Settings.list.actions.delete": "Slet sprogvariant",
15
+ "Settings.list.actions.delete": "Slet sprogvarianten {name}",
16
16
  "Settings.list.actions.deleteAdditionalInfos": "Dette vil slette de aktive sprogvariant versioner <em>(fra Internationalisering)</em>",
17
- "Settings.list.actions.edit": "Redigér sprogvariant",
17
+ "Settings.list.actions.edit": "Redigér sprogvarianten {name}",
18
18
  "Settings.list.description": "Konfigurér indstillingerne for Internationalisering pluginnet",
19
19
  "Settings.list.empty.description": "Dette er unormalt, hvilket betyder at du muligvis har ændret databasen manuelt. Vær sikker på at der er mindst en sprogvariant gemt i din database for at bruge Strapi korrekt.",
20
20
  "Settings.list.empty.title": "Der er ingen sprogvarianter.",
@@ -10,9 +10,9 @@ var da = {
10
10
  "Field.localized": "Denne værdi er unik for den valgte sprogvariant",
11
11
  "Field.not-localized": "Denne værdi er ens for alle sprogvarianter",
12
12
  "Settings.list.actions.add": "Tilføj sprogvariant",
13
- "Settings.list.actions.delete": "Slet sprogvariant",
13
+ "Settings.list.actions.delete": "Slet sprogvarianten {name}",
14
14
  "Settings.list.actions.deleteAdditionalInfos": "Dette vil slette de aktive sprogvariant versioner <em>(fra Internationalisering)</em>",
15
- "Settings.list.actions.edit": "Redigér sprogvariant",
15
+ "Settings.list.actions.edit": "Redigér sprogvarianten {name}",
16
16
  "Settings.list.description": "Konfigurér indstillingerne for Internationalisering pluginnet",
17
17
  "Settings.list.empty.description": "Dette er unormalt, hvilket betyder at du muligvis har ændret databasen manuelt. Vær sikker på at der er mindst en sprogvariant gemt i din database for at bruge Strapi korrekt.",
18
18
  "Settings.list.empty.title": "Der er ingen sprogvarianter.",
@@ -36,11 +36,11 @@ var de = {
36
36
  "Field.localized": "Dieser Wert ist einzigartig für die ausgewählte Übersetzung",
37
37
  "Field.not-localized": "Dieser Wert ist für alle Übersetzungen gleich",
38
38
  "Settings.list.actions.add": "Neue Sprache hinzufügen",
39
- "Settings.list.actions.delete": "Sprache löschen",
39
+ "Settings.list.actions.delete": "Sprache {name} löschen",
40
40
  "Settings.list.actions.deleteAdditionalInfos": "Dies wird die aktive Sprache löschen.",
41
41
  "Settings.list.actions.publishAdditionalInfos": "Dies wird die aktiven Sprachversionen veröffentlichen <em>(aus Internationalisierung)</em>",
42
42
  "Settings.list.actions.unpublishAdditionalInfos": "Dies wird die Veröffentlichung der aktiven Sprachversionen zurücknehmen <em>(aus Internationalisierung)</em>",
43
- "Settings.list.actions.edit": "Sprache bearbeiten",
43
+ "Settings.list.actions.edit": "Sprache {name} bearbeiten",
44
44
  "Settings.list.description": "Einstellungen für das Plugin anpassen",
45
45
  "Settings.list.empty.description": "Das ist ein unerwartetes Verhalten. Möglicherweise wurde die Datenbank manuell modifiziert. Es sollte mindestens eine Sprache in der Datenbank existieren, um Strapi nutzen zu können",
46
46
  "Settings.list.empty.title": "Keine Übersetzungen vorhanden",
@@ -34,11 +34,11 @@ var de = {
34
34
  "Field.localized": "Dieser Wert ist einzigartig für die ausgewählte Übersetzung",
35
35
  "Field.not-localized": "Dieser Wert ist für alle Übersetzungen gleich",
36
36
  "Settings.list.actions.add": "Neue Sprache hinzufügen",
37
- "Settings.list.actions.delete": "Sprache löschen",
37
+ "Settings.list.actions.delete": "Sprache {name} löschen",
38
38
  "Settings.list.actions.deleteAdditionalInfos": "Dies wird die aktive Sprache löschen.",
39
39
  "Settings.list.actions.publishAdditionalInfos": "Dies wird die aktiven Sprachversionen veröffentlichen <em>(aus Internationalisierung)</em>",
40
40
  "Settings.list.actions.unpublishAdditionalInfos": "Dies wird die Veröffentlichung der aktiven Sprachversionen zurücknehmen <em>(aus Internationalisierung)</em>",
41
- "Settings.list.actions.edit": "Sprache bearbeiten",
41
+ "Settings.list.actions.edit": "Sprache {name} bearbeiten",
42
42
  "Settings.list.description": "Einstellungen für das Plugin anpassen",
43
43
  "Settings.list.empty.description": "Das ist ein unerwartetes Verhalten. Möglicherweise wurde die Datenbank manuell modifiziert. Es sollte mindestens eine Sprache in der Datenbank existieren, um Strapi nutzen zu können",
44
44
  "Settings.list.empty.title": "Keine Übersetzungen vorhanden",
@@ -12,9 +12,9 @@ var es = {
12
12
  "Field.localized": "Este valor es único para la configuración regional seleccionada.",
13
13
  "Field.not-localized": "Este valor es común a todas las configuraciones regionales.",
14
14
  "Settings.list.actions.add": "Agregar nueva configuración regional",
15
- "Settings.list.actions.delete": "Eliminar una configuración regional",
15
+ "Settings.list.actions.delete": "Eliminar la configuración regional {name}",
16
16
  "Settings.list.actions.deleteAdditionalInfos": "Esto eliminará las versiones de configuración regional activas <em>(de Internacionalización)</em>",
17
- "Settings.list.actions.edit": "Editar una configuración regional",
17
+ "Settings.list.actions.edit": "Editar la configuración regional {name}",
18
18
  "Settings.list.description": "Configure los ajustes para el plugin de internacionalización",
19
19
  "Settings.list.empty.description": "Este no es un comportamiento habitual, lo que significa que eventualmente ha modificado la base de datos manualmente. Asegúrese de tener al menos una configuración regional guardada en su base de datos para poder usar Strapi correctamente.",
20
20
  "Settings.list.empty.title": "No hay configuraciones regionales.",
@@ -10,9 +10,9 @@ var es = {
10
10
  "Field.localized": "Este valor es único para la configuración regional seleccionada.",
11
11
  "Field.not-localized": "Este valor es común a todas las configuraciones regionales.",
12
12
  "Settings.list.actions.add": "Agregar nueva configuración regional",
13
- "Settings.list.actions.delete": "Eliminar una configuración regional",
13
+ "Settings.list.actions.delete": "Eliminar la configuración regional {name}",
14
14
  "Settings.list.actions.deleteAdditionalInfos": "Esto eliminará las versiones de configuración regional activas <em>(de Internacionalización)</em>",
15
- "Settings.list.actions.edit": "Editar una configuración regional",
15
+ "Settings.list.actions.edit": "Editar la configuración regional {name}",
16
16
  "Settings.list.description": "Configure los ajustes para el plugin de internacionalización",
17
17
  "Settings.list.empty.description": "Este no es un comportamiento habitual, lo que significa que eventualmente ha modificado la base de datos manualmente. Asegúrese de tener al menos una configuración regional guardada en su base de datos para poder usar Strapi correctamente.",
18
18
  "Settings.list.empty.title": "No hay configuraciones regionales.",
@@ -12,9 +12,9 @@ var fr = {
12
12
  "Field.localized": "Cette valeur est unique pour la locale sélectionnée",
13
13
  "Field.not-localized": "Cette valeur est commune à toutes les locales",
14
14
  "Settings.list.actions.add": "Ajouter une locale",
15
- "Settings.list.actions.delete": "Supprimer une locale",
15
+ "Settings.list.actions.delete": "Supprimer la locale {name}",
16
16
  "Settings.list.actions.deleteAdditionalInfos": "Cela supprimera les versions locales actives <em>(d'Internationalisation)</em>.",
17
- "Settings.list.actions.edit": "Modifier une locale",
17
+ "Settings.list.actions.edit": "Modifier la locale {name}",
18
18
  "Settings.list.description": "Configurer les paramètres du plugin d'internationalisation",
19
19
  "Settings.list.empty.description": "Ce n'est pas un comportement habituel, ce qui signifie que vous avez peut-être modifié la base de données manuellement. Assurez-vous d'avoir au moins une locale enregistrée dans votre base de données afin de pouvoir utiliser Strapi correctement.",
20
20
  "Settings.list.empty.title": "Il n'y a pas de locale",