@strapi/i18n 5.28.0 → 5.29.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 (97) hide show
  1. package/dist/admin/components/CMHeaderActions.js +116 -1
  2. package/dist/admin/components/CMHeaderActions.js.map +1 -1
  3. package/dist/admin/components/CMHeaderActions.mjs +119 -5
  4. package/dist/admin/components/CMHeaderActions.mjs.map +1 -1
  5. package/dist/admin/components/LocaleListCell.js +65 -45
  6. package/dist/admin/components/LocaleListCell.js.map +1 -1
  7. package/dist/admin/components/LocaleListCell.mjs +66 -46
  8. package/dist/admin/components/LocaleListCell.mjs.map +1 -1
  9. package/dist/admin/components/LocalePicker.js +18 -11
  10. package/dist/admin/components/LocalePicker.js.map +1 -1
  11. package/dist/admin/components/LocalePicker.mjs +19 -12
  12. package/dist/admin/components/LocalePicker.mjs.map +1 -1
  13. package/dist/admin/contentManagerHooks/editView.js +6 -3
  14. package/dist/admin/contentManagerHooks/editView.js.map +1 -1
  15. package/dist/admin/contentManagerHooks/editView.mjs +7 -4
  16. package/dist/admin/contentManagerHooks/editView.mjs.map +1 -1
  17. package/dist/admin/contentManagerHooks/listView.js +2 -1
  18. package/dist/admin/contentManagerHooks/listView.js.map +1 -1
  19. package/dist/admin/contentManagerHooks/listView.mjs +2 -1
  20. package/dist/admin/contentManagerHooks/listView.mjs.map +1 -1
  21. package/dist/admin/index.js +1 -0
  22. package/dist/admin/index.js.map +1 -1
  23. package/dist/admin/index.mjs +2 -1
  24. package/dist/admin/index.mjs.map +1 -1
  25. package/dist/admin/pages/SettingsPage.js +121 -46
  26. package/dist/admin/pages/SettingsPage.js.map +1 -1
  27. package/dist/admin/pages/SettingsPage.mjs +124 -30
  28. package/dist/admin/pages/SettingsPage.mjs.map +1 -1
  29. package/dist/admin/services/api.js +2 -1
  30. package/dist/admin/services/api.js.map +1 -1
  31. package/dist/admin/services/api.mjs +2 -1
  32. package/dist/admin/services/api.mjs.map +1 -1
  33. package/dist/admin/services/settings.js +29 -0
  34. package/dist/admin/services/settings.js.map +1 -0
  35. package/dist/admin/services/settings.mjs +26 -0
  36. package/dist/admin/services/settings.mjs.map +1 -0
  37. package/dist/admin/src/components/CMHeaderActions.d.ts +7 -1
  38. package/dist/admin/src/components/LocaleListCell.d.ts +2 -1
  39. package/dist/admin/src/services/api.d.ts +1 -1
  40. package/dist/admin/src/services/locales.d.ts +1 -1
  41. package/dist/admin/src/services/relations.d.ts +1 -1
  42. package/dist/admin/src/services/settings.d.ts +5 -0
  43. package/dist/admin/translations/en.json.js +7 -0
  44. package/dist/admin/translations/en.json.js.map +1 -1
  45. package/dist/admin/translations/en.json.mjs +7 -0
  46. package/dist/admin/translations/en.json.mjs.map +1 -1
  47. package/dist/admin/utils/clean.js +2 -2
  48. package/dist/admin/utils/clean.js.map +1 -1
  49. package/dist/admin/utils/clean.mjs +2 -2
  50. package/dist/admin/utils/clean.mjs.map +1 -1
  51. package/dist/server/constants/iso-locales.json.js +4 -0
  52. package/dist/server/constants/iso-locales.json.js.map +1 -1
  53. package/dist/server/constants/iso-locales.json.mjs +4 -0
  54. package/dist/server/constants/iso-locales.json.mjs.map +1 -1
  55. package/dist/server/controllers/index.js +3 -1
  56. package/dist/server/controllers/index.js.map +1 -1
  57. package/dist/server/controllers/index.mjs +3 -1
  58. package/dist/server/controllers/index.mjs.map +1 -1
  59. package/dist/server/controllers/settings.js +24 -0
  60. package/dist/server/controllers/settings.js.map +1 -0
  61. package/dist/server/controllers/settings.mjs +22 -0
  62. package/dist/server/controllers/settings.mjs.map +1 -0
  63. package/dist/server/routes/admin.js +20 -0
  64. package/dist/server/routes/admin.js.map +1 -1
  65. package/dist/server/routes/admin.mjs +20 -0
  66. package/dist/server/routes/admin.mjs.map +1 -1
  67. package/dist/server/services/index.js +3 -1
  68. package/dist/server/services/index.js.map +1 -1
  69. package/dist/server/services/index.mjs +3 -1
  70. package/dist/server/services/index.mjs.map +1 -1
  71. package/dist/server/services/settings.js +25 -0
  72. package/dist/server/services/settings.js.map +1 -0
  73. package/dist/server/services/settings.mjs +23 -0
  74. package/dist/server/services/settings.mjs.map +1 -0
  75. package/dist/server/src/controllers/index.d.ts +4 -0
  76. package/dist/server/src/controllers/index.d.ts.map +1 -1
  77. package/dist/server/src/controllers/settings.d.ts +7 -0
  78. package/dist/server/src/controllers/settings.d.ts.map +1 -0
  79. package/dist/server/src/index.d.ts +14 -0
  80. package/dist/server/src/index.d.ts.map +1 -1
  81. package/dist/server/src/routes/admin.d.ts.map +1 -1
  82. package/dist/server/src/services/index.d.ts +10 -0
  83. package/dist/server/src/services/index.d.ts.map +1 -1
  84. package/dist/server/src/services/settings.d.ts +13 -0
  85. package/dist/server/src/services/settings.d.ts.map +1 -0
  86. package/dist/server/src/utils/index.d.ts +3 -1
  87. package/dist/server/src/utils/index.d.ts.map +1 -1
  88. package/dist/server/src/validation/settings.d.ts +12 -0
  89. package/dist/server/src/validation/settings.d.ts.map +1 -0
  90. package/dist/server/utils/index.js.map +1 -1
  91. package/dist/server/utils/index.mjs.map +1 -1
  92. package/dist/server/validation/settings.js +11 -0
  93. package/dist/server/validation/settings.js.map +1 -0
  94. package/dist/server/validation/settings.mjs +9 -0
  95. package/dist/server/validation/settings.mjs.map +1 -0
  96. package/dist/shared/contracts/settings.d.ts +40 -0
  97. package/package.json +7 -6
@@ -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 FormErrors,\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} from '@strapi/design-system';\nimport { WarningCircle, ListPlus, Trash, Earth, Cross, Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetManyDraftRelationCountQuery } from '../services/relations';\nimport { cleanData } from '../utils/clean';\nimport { getTranslation } from '../utils/getTranslation';\nimport { capitalize } from '../utils/strings';\n\nimport { BulkLocaleActionModal } 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}\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 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\n const handleSelect = React.useCallback(\n (value: string) => {\n setQuery({\n plugins: {\n ...query.plugins,\n i18n: {\n locale: value,\n },\n },\n });\n },\n [query.plugins, setQuery]\n );\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 */\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const defaultLocale = locales.find((locale) => locale.isDefault);\n if (!doesLocaleExist && defaultLocale?.code) {\n handleSelect(defaultLocale.code);\n }\n }, [handleSelect, hasI18n, locales, currentDesiredLocale]);\n\n const currentLocale = Array.isArray(locales)\n ? locales.find((locale) => locale.code === currentDesiredLocale)\n : undefined;\n\n const allCurrentLocales = [\n { status: getDocumentStatus(document, meta), locale: currentLocale?.code },\n ...(document?.localizations ?? []),\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 return {\n label: formatMessage({\n id: getTranslation('Settings.locales.modal.locales.label'),\n defaultMessage: 'Locales',\n }),\n options: displayedLocales.map((locale) => {\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 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 />\n ),\n startIcon: !entryWithLocaleExists ? <Plus /> : null,\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 * FillFromAnotherLocaleAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst FillFromAnotherLocaleAction = ({\n documentId,\n meta,\n model,\n collectionType,\n}: HeaderActionProps) => {\n const { formatMessage } = useIntl();\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 { getDocument } = useDocumentActions();\n const { schema, components } = useDocument({\n model,\n documentId,\n collectionType,\n params: { locale: currentDesiredLocale },\n });\n const { data: locales = [] } = useGetLocalesQuery();\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 const response = await getDocument({\n collectionType,\n model,\n documentId,\n params: { locale: localeSelected },\n });\n if (!response || !schema) {\n return;\n }\n\n const { data } = response;\n\n const cleanedData = cleanData(data, schema, components);\n\n setValues(cleanedData);\n\n onClose();\n };\n\n if (!hasI18n) {\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 flex=\"auto\" variant=\"tertiary\" onClick={onClose}>\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.cancel-text'),\n defaultMessage: 'No, cancel',\n })}\n </Button>\n <Button flex=\"auto\" variant=\"success\" onClick={fillFromLocale(onClose)}>\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}: 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<any[]>([]);\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(() => {\n if (!document) {\n return [[], {}];\n }\n\n const localizations = document.localizations ?? [];\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[] = localizations.map((doc: any) => {\n const { locale, status } = doc;\n return { locale, status };\n });\n\n // Add the current document locale\n locales.unshift({\n locale: document.locale,\n status: document.status,\n });\n\n // Build the validation errors for each locale.\n const allDocuments = [document, ...localizations];\n const errors = allDocuments.reduce<FormErrors>((errs, document) => {\n if (!document) {\n return errs;\n }\n\n // Validate each locale entry via the useDocument validate function and store any errors in a dictionary\n const validation = validate(document as Modules.Documents.AnyDocument);\n if (validation !== null) {\n errs[document.locale] = validation;\n }\n return errs;\n }, {});\n\n return [locales, errors];\n }, [document, 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};\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","LocalePickerAction","document","meta","model","collectionType","documentId","query","setQuery","useQueryParams","hasI18n","canCreate","canRead","useI18n","data","locales","useGetLocalesQuery","currentDesiredLocale","plugins","i18n","schema","useDocument","params","handleSelect","React","useCallback","value","useEffect","Array","isArray","doesLocaleExist","find","loc","code","defaultLocale","isDefault","currentLocale","undefined","allCurrentLocales","getDocumentStatus","localizations","length","displayedLocales","filter","includes","label","options","map","entryWithLocaleExists","some","doc","currentLocaleDoc","permissionsToCheck","disabled","draftAndPublish","startIcon","Plus","customizeContent","onSelect","docStatus","statuses","availableStatus","publishedAt","FillFromAnotherLocaleAction","localeSelected","setLocaleSelected","useState","setValues","useForm","state","getDocument","useDocumentActions","components","availableLocales","l","fillFromLocale","onClose","response","cleanedData","cleanData","type","icon","Earth","dialog","title","content","_Fragment","Dialog","Body","direction","WarningCircle","height","fill","textAlign","Field","Root","Label","SingleSelect","placeholder","onChange","SingleSelectOption","Footer","Button","flex","onClick","DeleteLocaleAction","navigate","useNavigate","toggleNotification","useNotification","delete","deleteAction","isLoading","canDelete","position","StyledTrash","loading","onConfirm","unableToDelete","console","error","message","res","pathname","replace","BulkLocaleAction","action","useMemo","buildValidParams","isOnPublishedTab","canPublish","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","selectedRows","setSelectedRows","isDraftRelationConfirmationOpen","setIsDraftRelationConfirmationOpen","publishMany","publishManyAction","unpublishMany","unpublishManyAction","validate","skip","localesMetadata","skipToken","headers","rows","validationErrors","unshift","allDocuments","errors","reduce","errs","validation","isBulkPublish","localesForAction","acc","selectedRow","isValidLocale","Object","keys","shouldAddLocale","push","enableDraftRelationsCount","draftRelationsCount","isDraftRelationsLoading","isDraftRelationsError","useGetManyDraftRelationCountQuery","documentIds","publish","unpublish","handleAction","onCancel","alignItems","hasPermission","every","ListPlus","Cross","Table","row","onSelectedRowsChange","tableSelectedRows","BulkLocaleActionModal","footer","Modal","BulkLocalePublishAction","props","BulkLocaleUnpublishAction","styled","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 FormErrors,\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 } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useI18n } from '../hooks/useI18n';\nimport { useGetLocalesQuery } from '../services/locales';\nimport { useGetManyDraftRelationCountQuery } from '../services/relations';\nimport { useGetSettingsQuery } from '../services/settings';\nimport { cleanData } from '../utils/clean';\nimport { getTranslation } from '../utils/getTranslation';\nimport { capitalize } from '../utils/strings';\n\nimport { BulkLocaleActionModal } 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}\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 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\n const handleSelect = React.useCallback(\n (value: string) => {\n setQuery({\n plugins: {\n ...query.plugins,\n i18n: {\n locale: value,\n },\n },\n });\n },\n [query.plugins, setQuery]\n );\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 */\n const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);\n const defaultLocale = locales.find((locale) => locale.isDefault);\n if (!doesLocaleExist && defaultLocale?.code) {\n handleSelect(defaultLocale.code);\n }\n }, [handleSelect, hasI18n, locales, currentDesiredLocale]);\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 return {\n label: formatMessage({\n id: getTranslation('Settings.locales.modal.locales.label'),\n defaultMessage: 'Locales',\n }),\n options: displayedLocales.map((locale) => {\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 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 />\n ),\n startIcon: !entryWithLocaleExists ? <Plus /> : null,\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: 100%;\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 AITranslationStatusAction = () => {\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 // 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 const hasAIFutureFlag = window.strapi.future.isEnabled('unstableAILocalizations');\n if (!isAIAvailable || !hasAIFutureFlag) {\n return null;\n }\n\n return {\n status: {\n message: (\n <Box\n height=\"100%\"\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={isAISettingEnabled ? 'alternative' : 'neutral'}\n size=\"S\"\n >\n <Sparkle />\n </AITranslationStatusIcon>\n </Box>\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.',\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 [{ 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 { getDocument } = useDocumentActions();\n const { schema, components } = useDocument({\n model,\n documentId,\n collectionType,\n params: { locale: currentDesiredLocale },\n });\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 const response = await getDocument({\n collectionType,\n model,\n documentId,\n params: { locale: localeSelected },\n });\n if (!response || !schema) {\n return;\n }\n\n const { data } = response;\n\n const cleanedData = cleanData(data, schema, components);\n\n setValues(cleanedData);\n\n onClose();\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 const hasAIFutureFlag = window.strapi.future.isEnabled('unstableAILocalizations');\n if (hasAIFutureFlag && 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 flex=\"auto\" variant=\"tertiary\" onClick={onClose}>\n {formatMessage({\n id: getTranslation('CMEditViewCopyLocale.cancel-text'),\n defaultMessage: 'No, cancel',\n })}\n </Button>\n <Button flex=\"auto\" variant=\"success\" onClick={fillFromLocale(onClose)}>\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}: 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<any[]>([]);\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(() => {\n if (!document) {\n return [[], {}];\n }\n\n const localizations = document.localizations ?? [];\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[] = localizations.map((doc: any) => {\n const { locale, status } = doc;\n return { locale, status };\n });\n\n // Add the current document locale\n locales.unshift({\n locale: document.locale,\n status: document.status,\n });\n\n // Build the validation errors for each locale.\n const allDocuments = [document, ...localizations];\n const errors = allDocuments.reduce<FormErrors>((errs, document) => {\n if (!document) {\n return errs;\n }\n\n // Validate each locale entry via the useDocument validate function and store any errors in a dictionary\n const validation = validate(document as Modules.Documents.AnyDocument);\n if (validation !== null) {\n errs[document.locale] = validation;\n }\n return errs;\n }, {});\n\n return [locales, errors];\n }, [document, 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","LocalePickerAction","document","meta","model","collectionType","documentId","query","setQuery","useQueryParams","hasI18n","canCreate","canRead","useI18n","data","locales","useGetLocalesQuery","currentDesiredLocale","plugins","i18n","schema","useDocument","params","handleSelect","React","useCallback","value","useEffect","Array","isArray","doesLocaleExist","find","loc","code","defaultLocale","isDefault","currentLocale","undefined","availableLocales","documentLocalizations","localizations","allLocalizations","length","allCurrentLocales","getDocumentStatus","displayedLocales","filter","includes","label","options","map","entryWithLocaleExists","some","doc","currentLocaleDoc","permissionsToCheck","disabled","draftAndPublish","startIcon","Plus","customizeContent","onSelect","docStatus","statuses","availableStatus","publishedAt","AITranslationStatusIcon","styled","theme","spaces","$isAISettingEnabled","colors","neutral150","neutral300","AITranslationStatusAction","isAIAvailable","useAIAvailability","settings","useGetSettingsQuery","isAISettingEnabled","aiLocalizations","hasAIFutureFlag","window","strapi","future","isEnabled","message","Box","height","aria-label","Boolean","Sparkle","tooltip","direction","padding","alignItems","enabled","Link","fontSize","NavLink","to","style","alignSelf","textAlign","FillFromAnotherLocaleAction","localeSelected","setLocaleSelected","useState","setValues","useForm","state","getDocument","useDocumentActions","components","l","fillFromLocale","onClose","response","cleanedData","cleanData","type","icon","Earth","dialog","title","content","_Fragment","Dialog","Body","WarningCircle","fill","Field","Root","Label","SingleSelect","placeholder","onChange","SingleSelectOption","Footer","Button","flex","onClick","DeleteLocaleAction","navigate","useNavigate","toggleNotification","useNotification","delete","deleteAction","isLoading","canDelete","position","StyledTrash","loading","onConfirm","unableToDelete","console","error","res","pathname","replace","BulkLocaleAction","action","useMemo","buildValidParams","isOnPublishedTab","canPublish","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","selectedRows","setSelectedRows","isDraftRelationConfirmationOpen","setIsDraftRelationConfirmationOpen","publishMany","publishManyAction","unpublishMany","unpublishManyAction","validate","skip","localesMetadata","skipToken","headers","rows","validationErrors","unshift","allDocuments","errors","reduce","errs","validation","isBulkPublish","localesForAction","acc","selectedRow","isValidLocale","Object","keys","shouldAddLocale","push","enableDraftRelationsCount","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,14 +1,19 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
4
5
  var designSystem = require('@strapi/design-system');
5
- var icons = require('@strapi/icons');
6
+ var qs = require('qs');
6
7
  var reactIntl = require('react-intl');
8
+ var reactRouterDom = require('react-router-dom');
7
9
  var locales = require('../services/locales.js');
10
+ var getTranslation = require('../utils/getTranslation.js');
8
11
 
9
- const LocaleListCell = ({ locale: currentLocale, localizations })=>{
10
- const { locale: language } = reactIntl.useIntl();
12
+ const LocaleListCell = ({ locale: currentLocale, localizations, documentId })=>{
13
+ const { locale: language, formatMessage } = reactIntl.useIntl();
11
14
  const { data: locales$1 = [] } = locales.useGetLocalesQuery();
15
+ const navigate = reactRouterDom.useNavigate();
16
+ const [{ query }] = strapiAdmin.useQueryParams();
12
17
  const formatter = designSystem.useCollator(language, {
13
18
  sensitivity: 'base'
14
19
  });
@@ -24,55 +29,70 @@ const LocaleListCell = ({ locale: currentLocale, localizations })=>{
24
29
  return loc === locale.code;
25
30
  });
26
31
  if (createdLocale) {
27
- acc.push(locale);
32
+ const name = locale.isDefault ? `${locale.name} (default)` : locale.name;
33
+ acc.push({
34
+ code: locale.code,
35
+ name
36
+ });
28
37
  }
29
38
  return acc;
30
- }, []).map((locale)=>{
31
- if (locale.isDefault) {
32
- return `${locale.name} (default)`;
39
+ }, []).toSorted((a, b)=>formatter.compare(a.name, b.name));
40
+ const getDisplayText = ()=>{
41
+ const displayedLocales = localesForDocument.slice(0, 2);
42
+ const remainingCount = localesForDocument.length - 2;
43
+ const baseText = displayedLocales.map(({ name })=>name).join(', ');
44
+ if (remainingCount <= 0) {
45
+ return baseText;
33
46
  }
34
- return locale.name;
35
- }).toSorted((a, b)=>formatter.compare(a, b));
36
- return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Popover.Root, {
47
+ return formatMessage({
48
+ id: getTranslation.getTranslation('CMListView.popover.display-locales.more'),
49
+ defaultMessage: '{locales} + {count} more'
50
+ }, {
51
+ locales: baseText,
52
+ count: remainingCount
53
+ });
54
+ };
55
+ const handleLocaleClick = (localeCode)=>{
56
+ navigate({
57
+ pathname: documentId,
58
+ search: qs.stringify({
59
+ plugins: {
60
+ ...query.plugins,
61
+ i18n: {
62
+ locale: localeCode
63
+ }
64
+ }
65
+ })
66
+ });
67
+ };
68
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Menu.Root, {
37
69
  children: [
38
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Trigger, {
39
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
40
- variant: "ghost",
41
- type: "button",
42
- onClick: (e)=>e.stopPropagation(),
43
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
44
- minWidth: "100%",
45
- alignItems: "center",
46
- justifyContent: "center",
47
- fontWeight: "regular",
48
- children: [
49
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
50
- textColor: "neutral800",
51
- ellipsis: true,
52
- marginRight: 2,
53
- children: localesForDocument.join(', ')
54
- }),
55
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
56
- children: /*#__PURE__*/ jsxRuntime.jsx(icons.CaretDown, {
57
- width: "1.2rem",
58
- height: "1.2rem"
59
- })
60
- })
61
- ]
70
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Trigger, {
71
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
72
+ minWidth: "100%",
73
+ alignItems: "center",
74
+ justifyContent: "center",
75
+ fontWeight: "regular",
76
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
77
+ textColor: "neutral800",
78
+ ellipsis: true,
79
+ marginRight: 2,
80
+ children: getDisplayText()
62
81
  })
63
82
  })
64
83
  }),
65
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Popover.Content, {
66
- sideOffset: 16,
67
- children: /*#__PURE__*/ jsxRuntime.jsx("ul", {
68
- children: localesForDocument.map((name)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
69
- padding: 3,
70
- tag: "li",
71
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
72
- children: name
73
- })
74
- }, name))
75
- })
84
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Content, {
85
+ children: localesForDocument.map(({ code, name })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
86
+ onClick: (e)=>{
87
+ e.stopPropagation();
88
+ handleLocaleClick(code);
89
+ },
90
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
91
+ textColor: "neutral800",
92
+ fontWeight: "regular",
93
+ children: name
94
+ })
95
+ }, code))
76
96
  })
77
97
  ]
78
98
  });
@@ -1 +1 @@
1
- {"version":3,"file":"LocaleListCell.js","sources":["../../../admin/src/components/LocaleListCell.tsx"],"sourcesContent":["import { Box, Flex, Popover, Typography, useCollator, Button } from '@strapi/design-system';\nimport { CaretDown } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Locale } from '../../../shared/contracts/locales';\nimport { useGetLocalesQuery } from '../services/locales';\n\ninterface LocaleListCellProps {\n localizations: { locale: string }[];\n locale: string;\n}\n\nconst LocaleListCell = ({ locale: currentLocale, localizations }: LocaleListCellProps) => {\n const { locale: language } = useIntl();\n const { data: locales = [] } = useGetLocalesQuery();\n const formatter = useCollator(language, {\n sensitivity: 'base',\n });\n\n if (!Array.isArray(locales) || !localizations) {\n return null;\n }\n\n const availableLocales = localizations.map((loc) => loc.locale);\n\n const localesForDocument = locales\n .reduce<Locale[]>((acc, locale) => {\n const createdLocale = [currentLocale, ...availableLocales].find((loc) => {\n return loc === locale.code;\n });\n\n if (createdLocale) {\n acc.push(locale);\n }\n\n return acc;\n }, [])\n .map((locale) => {\n if (locale.isDefault) {\n return `${locale.name} (default)`;\n }\n\n return locale.name;\n })\n .toSorted((a, b) => formatter.compare(a, b));\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <Button variant=\"ghost\" type=\"button\" onClick={(e) => e.stopPropagation()}>\n <Flex minWidth=\"100%\" alignItems=\"center\" justifyContent=\"center\" fontWeight=\"regular\">\n <Typography textColor=\"neutral800\" ellipsis marginRight={2}>\n {localesForDocument.join(', ')}\n </Typography>\n <Flex>\n <CaretDown width=\"1.2rem\" height=\"1.2rem\" />\n </Flex>\n </Flex>\n </Button>\n </Popover.Trigger>\n <Popover.Content sideOffset={16}>\n <ul>\n {localesForDocument.map((name) => (\n <Box key={name} padding={3} tag=\"li\">\n <Typography>{name}</Typography>\n </Box>\n ))}\n </ul>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\nexport { LocaleListCell };\nexport type { LocaleListCellProps };\n"],"names":["LocaleListCell","locale","currentLocale","localizations","language","useIntl","data","locales","useGetLocalesQuery","formatter","useCollator","sensitivity","Array","isArray","availableLocales","map","loc","localesForDocument","reduce","acc","createdLocale","find","code","push","isDefault","name","toSorted","a","b","compare","_jsxs","Popover","Root","_jsx","Trigger","Button","variant","type","onClick","e","stopPropagation","Flex","minWidth","alignItems","justifyContent","fontWeight","Typography","textColor","ellipsis","marginRight","join","CaretDown","width","height","Content","sideOffset","ul","Box","padding","tag"],"mappings":"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"}
1
+ {"version":3,"file":"LocaleListCell.js","sources":["../../../admin/src/components/LocaleListCell.tsx"],"sourcesContent":["import { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Flex, Menu, Typography, useCollator } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nimport { useGetLocalesQuery } from '../services/locales';\nimport { getTranslation } from '../utils/getTranslation';\n\nimport type { I18nBaseQuery } from '../types';\n\ninterface LocaleListCellProps {\n localizations: { locale: string }[];\n locale: string;\n documentId: string;\n}\n\nconst LocaleListCell = ({\n locale: currentLocale,\n localizations,\n documentId,\n}: LocaleListCellProps) => {\n const { locale: language, formatMessage } = useIntl();\n const { data: locales = [] } = useGetLocalesQuery();\n const navigate = useNavigate();\n const [{ query }] = useQueryParams<I18nBaseQuery>();\n const formatter = useCollator(language, {\n sensitivity: 'base',\n });\n\n if (!Array.isArray(locales) || !localizations) {\n return null;\n }\n\n const availableLocales = localizations.map((loc) => loc.locale);\n\n const localesForDocument = locales\n .reduce<Array<{ code: string; name: string }>>((acc, locale) => {\n const createdLocale = [currentLocale, ...availableLocales].find((loc) => {\n return loc === locale.code;\n });\n\n if (createdLocale) {\n const name = locale.isDefault ? `${locale.name} (default)` : locale.name;\n acc.push({ code: locale.code, name });\n }\n\n return acc;\n }, [])\n .toSorted((a, b) => formatter.compare(a.name, b.name));\n\n const getDisplayText = () => {\n const displayedLocales = localesForDocument.slice(0, 2);\n const remainingCount = localesForDocument.length - 2;\n\n const baseText = displayedLocales.map(({ name }) => name).join(', ');\n\n if (remainingCount <= 0) {\n return baseText;\n }\n\n return formatMessage(\n {\n id: getTranslation('CMListView.popover.display-locales.more'),\n defaultMessage: '{locales} + {count} more',\n },\n { locales: baseText, count: remainingCount }\n );\n };\n\n const handleLocaleClick = (localeCode: string) => {\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: {\n ...query.plugins,\n i18n: { locale: localeCode },\n },\n }),\n });\n };\n\n return (\n <Menu.Root>\n <Menu.Trigger>\n <Flex minWidth=\"100%\" alignItems=\"center\" justifyContent=\"center\" fontWeight=\"regular\">\n <Typography textColor=\"neutral800\" ellipsis marginRight={2}>\n {getDisplayText()}\n </Typography>\n </Flex>\n </Menu.Trigger>\n <Menu.Content>\n {localesForDocument.map(({ code, name }) => (\n <Menu.Item\n key={code}\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n handleLocaleClick(code);\n }}\n >\n <Typography textColor=\"neutral800\" fontWeight=\"regular\">\n {name}\n </Typography>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nexport { LocaleListCell };\nexport type { LocaleListCellProps };\n"],"names":["LocaleListCell","locale","currentLocale","localizations","documentId","language","formatMessage","useIntl","data","locales","useGetLocalesQuery","navigate","useNavigate","query","useQueryParams","formatter","useCollator","sensitivity","Array","isArray","availableLocales","map","loc","localesForDocument","reduce","acc","createdLocale","find","code","name","isDefault","push","toSorted","a","b","compare","getDisplayText","displayedLocales","slice","remainingCount","length","baseText","join","id","getTranslation","defaultMessage","count","handleLocaleClick","localeCode","pathname","search","stringify","plugins","i18n","_jsxs","Menu","Root","_jsx","Trigger","Flex","minWidth","alignItems","justifyContent","fontWeight","Typography","textColor","ellipsis","marginRight","Content","Item","onClick","e","stopPropagation"],"mappings":";;;;;;;;;;;AAiBMA,MAAAA,cAAAA,GAAiB,CAAC,EACtBC,MAAAA,EAAQC,aAAa,EACrBC,aAAa,EACbC,UAAU,EACU,GAAA;AACpB,IAAA,MAAM,EAAEH,MAAQI,EAAAA,QAAQ,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC5C,IAAA,MAAM,EAAEC,IAAAA,EAAMC,SAAU,GAAA,EAAE,EAAE,GAAGC,0BAAAA,EAAAA;AAC/B,IAAA,MAAMC,QAAWC,GAAAA,0BAAAA,EAAAA;AACjB,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;IACpB,MAAMC,SAAAA,GAAYC,yBAAYX,QAAU,EAAA;QACtCY,WAAa,EAAA;AACf,KAAA,CAAA;AAEA,IAAA,IAAI,CAACC,KAAMC,CAAAA,OAAO,CAACV,SAAAA,CAAAA,IAAY,CAACN,aAAe,EAAA;QAC7C,OAAO,IAAA;AACT;AAEA,IAAA,MAAMiB,mBAAmBjB,aAAckB,CAAAA,GAAG,CAAC,CAACC,GAAAA,GAAQA,IAAIrB,MAAM,CAAA;AAE9D,IAAA,MAAMsB,kBAAqBd,GAAAA,SAAAA,CACxBe,MAAM,CAAwC,CAACC,GAAKxB,EAAAA,MAAAA,GAAAA;AACnD,QAAA,MAAMyB,aAAgB,GAAA;AAACxB,YAAAA,aAAAA;AAAkBkB,YAAAA,GAAAA;SAAiB,CAACO,IAAI,CAAC,CAACL,GAAAA,GAAAA;YAC/D,OAAOA,GAAAA,KAAQrB,OAAO2B,IAAI;AAC5B,SAAA,CAAA;AAEA,QAAA,IAAIF,aAAe,EAAA;AACjB,YAAA,MAAMG,IAAO5B,GAAAA,MAAAA,CAAO6B,SAAS,GAAG,CAAC,EAAE7B,MAAO4B,CAAAA,IAAI,CAAC,UAAU,CAAC,GAAG5B,OAAO4B,IAAI;AACxEJ,YAAAA,GAAAA,CAAIM,IAAI,CAAC;AAAEH,gBAAAA,IAAAA,EAAM3B,OAAO2B,IAAI;AAAEC,gBAAAA;AAAK,aAAA,CAAA;AACrC;QAEA,OAAOJ,GAAAA;AACT,KAAA,EAAG,EAAE,CAAA,CACJO,QAAQ,CAAC,CAACC,CAAGC,EAAAA,CAAAA,GAAMnB,SAAUoB,CAAAA,OAAO,CAACF,CAAAA,CAAEJ,IAAI,EAAEK,EAAEL,IAAI,CAAA,CAAA;AAEtD,IAAA,MAAMO,cAAiB,GAAA,IAAA;AACrB,QAAA,MAAMC,gBAAmBd,GAAAA,kBAAAA,CAAmBe,KAAK,CAAC,CAAG,EAAA,CAAA,CAAA;QACrD,MAAMC,cAAAA,GAAiBhB,kBAAmBiB,CAAAA,MAAM,GAAG,CAAA;QAEnD,MAAMC,QAAAA,GAAWJ,gBAAiBhB,CAAAA,GAAG,CAAC,CAAC,EAAEQ,IAAI,EAAE,GAAKA,IAAMa,CAAAA,CAAAA,IAAI,CAAC,IAAA,CAAA;AAE/D,QAAA,IAAIH,kBAAkB,CAAG,EAAA;YACvB,OAAOE,QAAAA;AACT;AAEA,QAAA,OAAOnC,aACL,CAAA;AACEqC,YAAAA,EAAAA,EAAIC,6BAAe,CAAA,yCAAA,CAAA;YACnBC,cAAgB,EAAA;SAElB,EAAA;YAAEpC,OAASgC,EAAAA,QAAAA;YAAUK,KAAOP,EAAAA;AAAe,SAAA,CAAA;AAE/C,KAAA;AAEA,IAAA,MAAMQ,oBAAoB,CAACC,UAAAA,GAAAA;QACzBrC,QAAS,CAAA;YACPsC,QAAU7C,EAAAA,UAAAA;AACV8C,YAAAA,MAAAA,EAAQC,YAAU,CAAA;gBAChBC,OAAS,EAAA;AACP,oBAAA,GAAGvC,MAAMuC,OAAO;oBAChBC,IAAM,EAAA;wBAAEpD,MAAQ+C,EAAAA;AAAW;AAC7B;AACF,aAAA;AACF,SAAA,CAAA;AACF,KAAA;IAEA,qBACEM,eAAA,CAACC,kBAAKC,IAAI,EAAA;;AACR,0BAAAC,cAAA,CAACF,kBAAKG,OAAO,EAAA;AACX,gBAAA,QAAA,gBAAAD,cAACE,CAAAA,iBAAAA,EAAAA;oBAAKC,QAAS,EAAA,MAAA;oBAAOC,UAAW,EAAA,QAAA;oBAASC,cAAe,EAAA,QAAA;oBAASC,UAAW,EAAA,SAAA;AAC3E,oBAAA,QAAA,gBAAAN,cAACO,CAAAA,uBAAAA,EAAAA;wBAAWC,SAAU,EAAA,YAAA;wBAAaC,QAAQ,EAAA,IAAA;wBAACC,WAAa,EAAA,CAAA;AACtD/B,wBAAAA,QAAAA,EAAAA,cAAAA;;;;AAIP,0BAAAqB,cAAA,CAACF,kBAAKa,OAAO,EAAA;0BACV7C,kBAAmBF,CAAAA,GAAG,CAAC,CAAC,EAAEO,IAAI,EAAEC,IAAI,EAAE,iBACrC4B,cAACF,CAAAA,iBAAAA,CAAKc,IAAI,EAAA;AAERC,wBAAAA,OAAAA,EAAS,CAACC,CAAAA,GAAAA;AACRA,4BAAAA,CAAAA,CAAEC,eAAe,EAAA;4BACjBzB,iBAAkBnB,CAAAA,IAAAA,CAAAA;AACpB,yBAAA;AAEA,wBAAA,QAAA,gBAAA6B,cAACO,CAAAA,uBAAAA,EAAAA;4BAAWC,SAAU,EAAA,YAAA;4BAAaF,UAAW,EAAA,SAAA;AAC3ClC,4BAAAA,QAAAA,EAAAA;;AAPED,qBAAAA,EAAAA,IAAAA,CAAAA;;;;AAcjB;;;;"}
@@ -1,12 +1,17 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { useCollator, Popover, Button, Flex, Typography, Box } from '@strapi/design-system';
3
- import { CaretDown } from '@strapi/icons';
2
+ import { useQueryParams } from '@strapi/admin/strapi-admin';
3
+ import { useCollator, Menu, Flex, Typography } from '@strapi/design-system';
4
+ import { stringify } from 'qs';
4
5
  import { useIntl } from 'react-intl';
6
+ import { useNavigate } from 'react-router-dom';
5
7
  import { useGetLocalesQuery } from '../services/locales.mjs';
8
+ import { getTranslation } from '../utils/getTranslation.mjs';
6
9
 
7
- const LocaleListCell = ({ locale: currentLocale, localizations })=>{
8
- const { locale: language } = useIntl();
10
+ const LocaleListCell = ({ locale: currentLocale, localizations, documentId })=>{
11
+ const { locale: language, formatMessage } = useIntl();
9
12
  const { data: locales = [] } = useGetLocalesQuery();
13
+ const navigate = useNavigate();
14
+ const [{ query }] = useQueryParams();
10
15
  const formatter = useCollator(language, {
11
16
  sensitivity: 'base'
12
17
  });
@@ -22,55 +27,70 @@ const LocaleListCell = ({ locale: currentLocale, localizations })=>{
22
27
  return loc === locale.code;
23
28
  });
24
29
  if (createdLocale) {
25
- acc.push(locale);
30
+ const name = locale.isDefault ? `${locale.name} (default)` : locale.name;
31
+ acc.push({
32
+ code: locale.code,
33
+ name
34
+ });
26
35
  }
27
36
  return acc;
28
- }, []).map((locale)=>{
29
- if (locale.isDefault) {
30
- return `${locale.name} (default)`;
37
+ }, []).toSorted((a, b)=>formatter.compare(a.name, b.name));
38
+ const getDisplayText = ()=>{
39
+ const displayedLocales = localesForDocument.slice(0, 2);
40
+ const remainingCount = localesForDocument.length - 2;
41
+ const baseText = displayedLocales.map(({ name })=>name).join(', ');
42
+ if (remainingCount <= 0) {
43
+ return baseText;
31
44
  }
32
- return locale.name;
33
- }).toSorted((a, b)=>formatter.compare(a, b));
34
- return /*#__PURE__*/ jsxs(Popover.Root, {
45
+ return formatMessage({
46
+ id: getTranslation('CMListView.popover.display-locales.more'),
47
+ defaultMessage: '{locales} + {count} more'
48
+ }, {
49
+ locales: baseText,
50
+ count: remainingCount
51
+ });
52
+ };
53
+ const handleLocaleClick = (localeCode)=>{
54
+ navigate({
55
+ pathname: documentId,
56
+ search: stringify({
57
+ plugins: {
58
+ ...query.plugins,
59
+ i18n: {
60
+ locale: localeCode
61
+ }
62
+ }
63
+ })
64
+ });
65
+ };
66
+ return /*#__PURE__*/ jsxs(Menu.Root, {
35
67
  children: [
36
- /*#__PURE__*/ jsx(Popover.Trigger, {
37
- children: /*#__PURE__*/ jsx(Button, {
38
- variant: "ghost",
39
- type: "button",
40
- onClick: (e)=>e.stopPropagation(),
41
- children: /*#__PURE__*/ jsxs(Flex, {
42
- minWidth: "100%",
43
- alignItems: "center",
44
- justifyContent: "center",
45
- fontWeight: "regular",
46
- children: [
47
- /*#__PURE__*/ jsx(Typography, {
48
- textColor: "neutral800",
49
- ellipsis: true,
50
- marginRight: 2,
51
- children: localesForDocument.join(', ')
52
- }),
53
- /*#__PURE__*/ jsx(Flex, {
54
- children: /*#__PURE__*/ jsx(CaretDown, {
55
- width: "1.2rem",
56
- height: "1.2rem"
57
- })
58
- })
59
- ]
68
+ /*#__PURE__*/ jsx(Menu.Trigger, {
69
+ children: /*#__PURE__*/ jsx(Flex, {
70
+ minWidth: "100%",
71
+ alignItems: "center",
72
+ justifyContent: "center",
73
+ fontWeight: "regular",
74
+ children: /*#__PURE__*/ jsx(Typography, {
75
+ textColor: "neutral800",
76
+ ellipsis: true,
77
+ marginRight: 2,
78
+ children: getDisplayText()
60
79
  })
61
80
  })
62
81
  }),
63
- /*#__PURE__*/ jsx(Popover.Content, {
64
- sideOffset: 16,
65
- children: /*#__PURE__*/ jsx("ul", {
66
- children: localesForDocument.map((name)=>/*#__PURE__*/ jsx(Box, {
67
- padding: 3,
68
- tag: "li",
69
- children: /*#__PURE__*/ jsx(Typography, {
70
- children: name
71
- })
72
- }, name))
73
- })
82
+ /*#__PURE__*/ jsx(Menu.Content, {
83
+ children: localesForDocument.map(({ code, name })=>/*#__PURE__*/ jsx(Menu.Item, {
84
+ onClick: (e)=>{
85
+ e.stopPropagation();
86
+ handleLocaleClick(code);
87
+ },
88
+ children: /*#__PURE__*/ jsx(Typography, {
89
+ textColor: "neutral800",
90
+ fontWeight: "regular",
91
+ children: name
92
+ })
93
+ }, code))
74
94
  })
75
95
  ]
76
96
  });