@strapi/i18n 5.54.0 → 5.55.1

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 (57) hide show
  1. package/dist/admin/components/CMHeaderActions.js +5 -5
  2. package/dist/admin/components/CMHeaderActions.js.map +1 -1
  3. package/dist/admin/components/CMHeaderActions.mjs +5 -5
  4. package/dist/admin/components/CMHeaderActions.mjs.map +1 -1
  5. package/dist/admin/hooks/useAITranslations.js +11 -0
  6. package/dist/admin/hooks/useAITranslations.js.map +1 -0
  7. package/dist/admin/hooks/useAITranslations.mjs +9 -0
  8. package/dist/admin/hooks/useAITranslations.mjs.map +1 -0
  9. package/dist/admin/pages/SettingsPage.js +2 -2
  10. package/dist/admin/pages/SettingsPage.js.map +1 -1
  11. package/dist/admin/pages/SettingsPage.mjs +2 -2
  12. package/dist/admin/pages/SettingsPage.mjs.map +1 -1
  13. package/dist/admin/src/hooks/useAITranslations.d.ts +1 -0
  14. package/dist/admin/src/services/settings.d.ts +1 -1
  15. package/dist/server/bootstrap.js +5 -1
  16. package/dist/server/bootstrap.js.map +1 -1
  17. package/dist/server/bootstrap.mjs +5 -1
  18. package/dist/server/bootstrap.mjs.map +1 -1
  19. package/dist/server/controllers/settings.js +5 -2
  20. package/dist/server/controllers/settings.js.map +1 -1
  21. package/dist/server/controllers/settings.mjs +5 -2
  22. package/dist/server/controllers/settings.mjs.map +1 -1
  23. package/dist/server/index.js.map +1 -1
  24. package/dist/server/index.mjs.map +1 -1
  25. package/dist/server/services/ai-localizations.js +8 -34
  26. package/dist/server/services/ai-localizations.js.map +1 -1
  27. package/dist/server/services/ai-localizations.mjs +8 -34
  28. package/dist/server/services/ai-localizations.mjs.map +1 -1
  29. package/dist/server/services/ai-translations-strapi-managed.js +44 -0
  30. package/dist/server/services/ai-translations-strapi-managed.js.map +1 -0
  31. package/dist/server/services/ai-translations-strapi-managed.mjs +42 -0
  32. package/dist/server/services/ai-translations-strapi-managed.mjs.map +1 -0
  33. package/dist/server/services/ai-translations.js +50 -0
  34. package/dist/server/services/ai-translations.js.map +1 -0
  35. package/dist/server/services/ai-translations.mjs +48 -0
  36. package/dist/server/services/ai-translations.mjs.map +1 -0
  37. package/dist/server/services/index.js +2 -0
  38. package/dist/server/services/index.js.map +1 -1
  39. package/dist/server/services/index.mjs +2 -0
  40. package/dist/server/services/index.mjs.map +1 -1
  41. package/dist/server/src/bootstrap.d.ts.map +1 -1
  42. package/dist/server/src/controllers/settings.d.ts.map +1 -1
  43. package/dist/server/src/index.d.ts +4 -0
  44. package/dist/server/src/index.d.ts.map +1 -1
  45. package/dist/server/src/services/ai-localizations.d.ts.map +1 -1
  46. package/dist/server/src/services/ai-translations-strapi-managed.d.ts +7 -0
  47. package/dist/server/src/services/ai-translations-strapi-managed.d.ts.map +1 -0
  48. package/dist/server/src/services/ai-translations.d.ts +29 -0
  49. package/dist/server/src/services/ai-translations.d.ts.map +1 -0
  50. package/dist/server/src/services/index.d.ts +3 -0
  51. package/dist/server/src/services/index.d.ts.map +1 -1
  52. package/dist/server/src/utils/index.d.ts +2 -0
  53. package/dist/server/src/utils/index.d.ts.map +1 -1
  54. package/dist/server/utils/index.js.map +1 -1
  55. package/dist/server/utils/index.mjs.map +1 -1
  56. package/dist/shared/contracts/settings.d.ts +6 -1
  57. package/package.json +7 -7
@@ -4,7 +4,6 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var query = require('@reduxjs/toolkit/query');
6
6
  var strapiAdmin = require('@strapi/admin/strapi-admin');
7
- var ee = require('@strapi/admin/strapi-admin/ee');
8
7
  var strapiAdmin$1 = require('@strapi/content-manager/strapi-admin');
9
8
  var designSystem = require('@strapi/design-system');
10
9
  var icons = require('@strapi/icons');
@@ -12,6 +11,7 @@ var reactIntl = require('react-intl');
12
11
  var reactRouterDom = require('react-router-dom');
13
12
  var styledComponents = require('styled-components');
14
13
  var useAILocalizationJobsPolling = require('../hooks/useAILocalizationJobsPolling.js');
14
+ var useAITranslations = require('../hooks/useAITranslations.js');
15
15
  var useI18n = require('../hooks/useI18n.js');
16
16
  var aiLocalizationJobs = require('../services/aiLocalizationJobs.js');
17
17
  var fillFromLocale = require('../services/fillFromLocale.js');
@@ -87,7 +87,7 @@ const LocaleOption = ({ isDraftAndPublishEnabled, locale, status, entryExists })
87
87
  });
88
88
  };
89
89
  const LocaleOptionStartIcon = ({ entryWithLocaleExists, translationStatus, index })=>{
90
- const isAiAvailable = ee.useAIAvailability();
90
+ const isAiAvailable = useAITranslations.useAITranslationsAvailability();
91
91
  if (!entryWithLocaleExists) {
92
92
  return /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {});
93
93
  }
@@ -118,7 +118,7 @@ const LocalePickerAction = ({ document, meta, model, collectionType, documentId
118
118
  collectionType: collectionType
119
119
  });
120
120
  const { data: settings$1 } = settings.useGetSettingsQuery();
121
- const isAiAvailable = ee.useAIAvailability();
121
+ const isAiAvailable = useAITranslations.useAITranslationsAvailability();
122
122
  const handleSelect = React__namespace.useCallback((value)=>{
123
123
  setQuery({
124
124
  plugins: {
@@ -295,7 +295,7 @@ const SpinningLoader = styledComponents.styled(icons.Loader)`
295
295
  `;
296
296
  const AITranslationStatusAction = ({ documentId, model, collectionType })=>{
297
297
  const { formatMessage } = reactIntl.useIntl();
298
- const isAIAvailable = ee.useAIAvailability();
298
+ const isAIAvailable = useAITranslations.useAITranslationsAvailability();
299
299
  const { data: settings$1 } = settings.useGetSettingsQuery();
300
300
  const isAISettingEnabled = settings$1?.data?.aiLocalizations;
301
301
  const { hasI18n } = useI18n.useI18n();
@@ -399,7 +399,7 @@ const AITranslationStatusAction = ({ documentId, model, collectionType })=>{
399
399
  const setValues = strapiAdmin.useForm('FillFromAnotherLocale', (state)=>state.setValues);
400
400
  const [getFillFromLocaleData, { isLoading: isFillFromLocaleLoading }] = fillFromLocale.useLazyGetFillFromLocaleDataQuery();
401
401
  const { data: locales$1 = [] } = locales.useGetLocalesQuery();
402
- const isAIAvailable = ee.useAIAvailability();
402
+ const isAIAvailable = useAITranslations.useAITranslationsAvailability();
403
403
  const { data: settings$1 } = settings.useGetSettingsQuery();
404
404
  const isAISettingEnabled = settings$1?.data?.aiLocalizations;
405
405
  const availableLocales = Array.isArray(locales$1) ? locales$1.filter((locale)=>meta?.availableLocales.some((l)=>l.locale === locale.code)) : [];
@@ -1 +1 @@
1
- {"version":3,"file":"CMHeaderActions.js","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 { useAIAvailability } from '@strapi/admin/strapi-admin/ee';\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 { 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 = useAIAvailability();\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 = useAIAvailability();\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 = useAIAvailability();\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 = useAIAvailability();\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","useAIAvailability","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.js","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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"}
@@ -2,7 +2,6 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { skipToken } from '@reduxjs/toolkit/query';
4
4
  import { useQueryParams, useNotification, useAPIErrorHandler, useForm, Table } from '@strapi/admin/strapi-admin';
5
- import { useAIAvailability } from '@strapi/admin/strapi-admin/ee';
6
5
  import { unstable_useDocument, unstable_useDocumentActions, buildValidParams } from '@strapi/content-manager/strapi-admin';
7
6
  import { Status, Flex, Typography, Link, SingleSelectOption, Box, Dialog, Field, SingleSelect, Button, Modal } from '@strapi/design-system';
8
7
  import { Loader, Trash, Sparkle, WarningCircle, Earth, Plus, ListPlus, Cross } from '@strapi/icons';
@@ -10,6 +9,7 @@ import { useIntl } from 'react-intl';
10
9
  import { NavLink, useNavigate } from 'react-router-dom';
11
10
  import { styled } from 'styled-components';
12
11
  import { useAILocalizationJobsPolling } from '../hooks/useAILocalizationJobsPolling.mjs';
12
+ import { useAITranslationsAvailability } from '../hooks/useAITranslations.mjs';
13
13
  import { useI18n } from '../hooks/useI18n.mjs';
14
14
  import { useGetAILocalizationJobsByDocumentQuery } from '../services/aiLocalizationJobs.mjs';
15
15
  import { useLazyGetFillFromLocaleDataQuery } from '../services/fillFromLocale.mjs';
@@ -65,7 +65,7 @@ const LocaleOption = ({ isDraftAndPublishEnabled, locale, status, entryExists })
65
65
  });
66
66
  };
67
67
  const LocaleOptionStartIcon = ({ entryWithLocaleExists, translationStatus, index })=>{
68
- const isAiAvailable = useAIAvailability();
68
+ const isAiAvailable = useAITranslationsAvailability();
69
69
  if (!entryWithLocaleExists) {
70
70
  return /*#__PURE__*/ jsx(Plus, {});
71
71
  }
@@ -96,7 +96,7 @@ const LocalePickerAction = ({ document, meta, model, collectionType, documentId
96
96
  collectionType: collectionType
97
97
  });
98
98
  const { data: settings } = useGetSettingsQuery();
99
- const isAiAvailable = useAIAvailability();
99
+ const isAiAvailable = useAITranslationsAvailability();
100
100
  const handleSelect = React.useCallback((value)=>{
101
101
  setQuery({
102
102
  plugins: {
@@ -273,7 +273,7 @@ const SpinningLoader = styled(Loader)`
273
273
  `;
274
274
  const AITranslationStatusAction = ({ documentId, model, collectionType })=>{
275
275
  const { formatMessage } = useIntl();
276
- const isAIAvailable = useAIAvailability();
276
+ const isAIAvailable = useAITranslationsAvailability();
277
277
  const { data: settings } = useGetSettingsQuery();
278
278
  const isAISettingEnabled = settings?.data?.aiLocalizations;
279
279
  const { hasI18n } = useI18n();
@@ -377,7 +377,7 @@ const AITranslationStatusAction = ({ documentId, model, collectionType })=>{
377
377
  const setValues = useForm('FillFromAnotherLocale', (state)=>state.setValues);
378
378
  const [getFillFromLocaleData, { isLoading: isFillFromLocaleLoading }] = useLazyGetFillFromLocaleDataQuery();
379
379
  const { data: locales = [] } = useGetLocalesQuery();
380
- const isAIAvailable = useAIAvailability();
380
+ const isAIAvailable = useAITranslationsAvailability();
381
381
  const { data: settings } = useGetSettingsQuery();
382
382
  const isAISettingEnabled = settings?.data?.aiLocalizations;
383
383
  const availableLocales = Array.isArray(locales) ? locales.filter((locale)=>meta?.availableLocales.some((l)=>l.locale === locale.code)) : [];