@strapi/i18n 0.0.0-next.883f4fcabd28de02b78b7b00a70e33cd2d151d05 → 0.0.0-next.88599e70ce0e4e804e2bad578aba4718c5a5304d
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.
- package/dist/admin/components/CMHeaderActions.js +116 -1
- package/dist/admin/components/CMHeaderActions.js.map +1 -1
- package/dist/admin/components/CMHeaderActions.mjs +119 -5
- package/dist/admin/components/CMHeaderActions.mjs.map +1 -1
- package/dist/admin/components/CreateLocale.js +1 -1
- package/dist/admin/components/CreateLocale.js.map +1 -1
- package/dist/admin/components/CreateLocale.mjs +1 -1
- package/dist/admin/components/CreateLocale.mjs.map +1 -1
- package/dist/admin/components/EditLocale.js +1 -1
- package/dist/admin/components/EditLocale.js.map +1 -1
- package/dist/admin/components/EditLocale.mjs +1 -1
- package/dist/admin/components/EditLocale.mjs.map +1 -1
- package/dist/admin/components/LocaleListCell.js +65 -45
- package/dist/admin/components/LocaleListCell.js.map +1 -1
- package/dist/admin/components/LocaleListCell.mjs +66 -46
- package/dist/admin/components/LocaleListCell.mjs.map +1 -1
- package/dist/admin/components/LocalePicker.js +18 -11
- package/dist/admin/components/LocalePicker.js.map +1 -1
- package/dist/admin/components/LocalePicker.mjs +19 -12
- package/dist/admin/components/LocalePicker.mjs.map +1 -1
- package/dist/admin/contentManagerHooks/editView.js +6 -3
- package/dist/admin/contentManagerHooks/editView.js.map +1 -1
- package/dist/admin/contentManagerHooks/editView.mjs +7 -4
- package/dist/admin/contentManagerHooks/editView.mjs.map +1 -1
- package/dist/admin/contentManagerHooks/listView.js +2 -1
- package/dist/admin/contentManagerHooks/listView.js.map +1 -1
- package/dist/admin/contentManagerHooks/listView.mjs +2 -1
- package/dist/admin/contentManagerHooks/listView.mjs.map +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +2 -2
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/middlewares/extendCTBAttributeInitialData.js +34 -24
- package/dist/admin/middlewares/extendCTBAttributeInitialData.js.map +1 -1
- package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs +34 -24
- package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage.js +121 -46
- package/dist/admin/pages/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage.mjs +124 -30
- package/dist/admin/pages/SettingsPage.mjs.map +1 -1
- package/dist/admin/services/api.js +3 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +3 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/locales.js +4 -2
- package/dist/admin/services/locales.js.map +1 -1
- package/dist/admin/services/locales.mjs +4 -2
- package/dist/admin/services/locales.mjs.map +1 -1
- package/dist/admin/services/settings.js +29 -0
- package/dist/admin/services/settings.js.map +1 -0
- package/dist/admin/services/settings.mjs +26 -0
- package/dist/admin/services/settings.mjs.map +1 -0
- package/dist/admin/src/components/CMHeaderActions.d.ts +7 -1
- package/dist/admin/src/components/LocaleListCell.d.ts +2 -1
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/locales.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +1 -1
- package/dist/admin/src/services/settings.d.ts +5 -0
- package/dist/admin/src/utils/schemas.d.ts +642 -16
- package/dist/admin/translations/en.json.js +7 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +7 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/clean.js +2 -2
- package/dist/admin/utils/clean.js.map +1 -1
- package/dist/admin/utils/clean.mjs +2 -2
- package/dist/admin/utils/clean.mjs.map +1 -1
- package/dist/admin/utils/fields.js +6 -1
- package/dist/admin/utils/fields.js.map +1 -1
- package/dist/admin/utils/fields.mjs +6 -1
- package/dist/admin/utils/fields.mjs.map +1 -1
- package/dist/admin/utils/schemas.js +19 -13
- package/dist/admin/utils/schemas.js.map +1 -1
- package/dist/admin/utils/schemas.mjs +19 -13
- package/dist/admin/utils/schemas.mjs.map +1 -1
- package/dist/server/constants/iso-locales.json.js +4 -0
- package/dist/server/constants/iso-locales.json.js.map +1 -1
- package/dist/server/constants/iso-locales.json.mjs +4 -0
- package/dist/server/constants/iso-locales.json.mjs.map +1 -1
- package/dist/server/controllers/index.js +3 -1
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs +3 -1
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/controllers/settings.js +24 -0
- package/dist/server/controllers/settings.js.map +1 -0
- package/dist/server/controllers/settings.mjs +22 -0
- package/dist/server/controllers/settings.mjs.map +1 -0
- package/dist/server/routes/admin.js +20 -0
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs +20 -0
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/routes/content-api.js +11 -7
- package/dist/server/routes/content-api.js.map +1 -1
- package/dist/server/routes/content-api.mjs +11 -7
- package/dist/server/routes/content-api.mjs.map +1 -1
- package/dist/server/routes/index.mjs +2 -2
- package/dist/server/routes/validation/locale.js +57 -0
- package/dist/server/routes/validation/locale.js.map +1 -0
- package/dist/server/routes/validation/locale.mjs +36 -0
- package/dist/server/routes/validation/locale.mjs.map +1 -0
- package/dist/server/services/ai-localizations.js +28 -0
- package/dist/server/services/ai-localizations.js.map +1 -0
- package/dist/server/services/ai-localizations.mjs +26 -0
- package/dist/server/services/ai-localizations.mjs.map +1 -0
- package/dist/server/services/index.js +5 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +5 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/settings.js +25 -0
- package/dist/server/services/settings.js.map +1 -0
- package/dist/server/services/settings.mjs +23 -0
- package/dist/server/services/settings.mjs.map +1 -0
- package/dist/server/src/controllers/index.d.ts +4 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/settings.d.ts +7 -0
- package/dist/server/src/controllers/settings.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +22 -7
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/routes/content-api.d.ts +5 -8
- package/dist/server/src/routes/content-api.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts +3 -7
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/routes/validation/index.d.ts +2 -0
- package/dist/server/src/routes/validation/index.d.ts.map +1 -0
- package/dist/server/src/routes/validation/locale.d.ts +41 -0
- package/dist/server/src/routes/validation/locale.d.ts.map +1 -0
- package/dist/server/src/services/ai-localizations.d.ts +8 -0
- package/dist/server/src/services/ai-localizations.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +15 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/settings.d.ts +13 -0
- package/dist/server/src/services/settings.d.ts.map +1 -0
- package/dist/server/src/utils/index.d.ts +3 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/validation/settings.d.ts +12 -0
- package/dist/server/src/validation/settings.d.ts.map +1 -0
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/server/validation/settings.js +11 -0
- package/dist/server/validation/settings.js.map +1 -0
- package/dist/server/validation/settings.mjs +9 -0
- package/dist/server/validation/settings.mjs.map +1 -0
- package/dist/shared/contracts/settings.d.ts +40 -0
- package/package.json +11 -9
|
@@ -4,6 +4,7 @@ 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');
|
|
7
8
|
var strapiAdmin$1 = require('@strapi/content-manager/strapi-admin');
|
|
8
9
|
var designSystem = require('@strapi/design-system');
|
|
9
10
|
var icons = require('@strapi/icons');
|
|
@@ -13,6 +14,7 @@ var styledComponents = require('styled-components');
|
|
|
13
14
|
var useI18n = require('../hooks/useI18n.js');
|
|
14
15
|
var locales = require('../services/locales.js');
|
|
15
16
|
var relations = require('../services/relations.js');
|
|
17
|
+
var settings = require('../services/settings.js');
|
|
16
18
|
var clean = require('../utils/clean.js');
|
|
17
19
|
var getTranslation = require('../utils/getTranslation.js');
|
|
18
20
|
var strings = require('../utils/strings.js');
|
|
@@ -127,12 +129,18 @@ const LocalePickerAction = ({ document, meta, model, collectionType, documentId
|
|
|
127
129
|
currentDesiredLocale
|
|
128
130
|
]);
|
|
129
131
|
const currentLocale = Array.isArray(locales$1) ? locales$1.find((locale)=>locale.code === currentDesiredLocale) : undefined;
|
|
132
|
+
// Use meta.availableLocales instead of document.localizations
|
|
133
|
+
// meta.availableLocales contains all locales for the document, even when creating new locales
|
|
134
|
+
const availableLocales = meta?.availableLocales ?? [];
|
|
135
|
+
const documentLocalizations = document?.localizations ?? [];
|
|
136
|
+
// Prefer meta.availableLocales as it's more reliable, fallback to document.localizations
|
|
137
|
+
const allLocalizations = availableLocales.length > 0 ? availableLocales : documentLocalizations;
|
|
130
138
|
const allCurrentLocales = [
|
|
131
139
|
{
|
|
132
140
|
status: getDocumentStatus(document, meta),
|
|
133
141
|
locale: currentLocale?.code
|
|
134
142
|
},
|
|
135
|
-
...
|
|
143
|
+
...allLocalizations
|
|
136
144
|
];
|
|
137
145
|
if (!hasI18n || !Array.isArray(locales$1) || locales$1.length === 0) {
|
|
138
146
|
return null;
|
|
@@ -184,6 +192,104 @@ const getDocumentStatus = (document, meta)=>{
|
|
|
184
192
|
}
|
|
185
193
|
return docStatus;
|
|
186
194
|
};
|
|
195
|
+
/* -------------------------------------------------------------------------------------------------
|
|
196
|
+
* AISettingsStatusAction
|
|
197
|
+
* -----------------------------------------------------------------------------------------------*/ const AITranslationStatusIcon = styledComponents.styled(designSystem.Status)`
|
|
198
|
+
display: flex;
|
|
199
|
+
gap: ${({ theme })=>theme.spaces[1]};
|
|
200
|
+
justify-content: center;
|
|
201
|
+
align-items: center;
|
|
202
|
+
height: 100%;
|
|
203
|
+
|
|
204
|
+
// Disabled state
|
|
205
|
+
${({ $isAISettingEnabled, theme })=>!$isAISettingEnabled && `
|
|
206
|
+
background-color: ${theme.colors.neutral150};
|
|
207
|
+
`}
|
|
208
|
+
|
|
209
|
+
svg {
|
|
210
|
+
${({ $isAISettingEnabled, theme })=>!$isAISettingEnabled && `
|
|
211
|
+
fill: ${theme.colors.neutral300};
|
|
212
|
+
`}
|
|
213
|
+
}
|
|
214
|
+
`;
|
|
215
|
+
const AITranslationStatusAction = ()=>{
|
|
216
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
217
|
+
const isAIAvailable = ee.useAIAvailability();
|
|
218
|
+
const { data: settings$1 } = settings.useGetSettingsQuery();
|
|
219
|
+
const isAISettingEnabled = settings$1?.data?.aiLocalizations;
|
|
220
|
+
const { hasI18n } = useI18n.useI18n();
|
|
221
|
+
// Do not display this action when i18n is not available
|
|
222
|
+
if (!hasI18n) {
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
// Do not display this action when AI is not available
|
|
226
|
+
const hasAIFutureFlag = window.strapi.future.isEnabled('unstableAILocalizations');
|
|
227
|
+
if (!isAIAvailable || !hasAIFutureFlag) {
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
status: {
|
|
232
|
+
message: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
233
|
+
height: "100%",
|
|
234
|
+
"aria-label": formatMessage({
|
|
235
|
+
id: getTranslation.getTranslation('CMEditViewAITranslation.status-aria-label'),
|
|
236
|
+
defaultMessage: 'AI Translation Status'
|
|
237
|
+
}),
|
|
238
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(AITranslationStatusIcon, {
|
|
239
|
+
$isAISettingEnabled: Boolean(isAISettingEnabled),
|
|
240
|
+
variant: isAISettingEnabled ? 'alternative' : 'neutral',
|
|
241
|
+
size: "S",
|
|
242
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Sparkle, {})
|
|
243
|
+
})
|
|
244
|
+
}),
|
|
245
|
+
tooltip: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
246
|
+
direction: "column",
|
|
247
|
+
padding: 4,
|
|
248
|
+
alignItems: "flex-start",
|
|
249
|
+
width: "25rem",
|
|
250
|
+
children: [
|
|
251
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
252
|
+
variant: "pi",
|
|
253
|
+
fontWeight: "600",
|
|
254
|
+
children: formatMessage({
|
|
255
|
+
id: getTranslation.getTranslation('CMEditViewAITranslation.status-title'),
|
|
256
|
+
defaultMessage: '{enabled, select, true {AI translation enabled} false {AI translation disabled} other {AI translation disabled}}'
|
|
257
|
+
}, {
|
|
258
|
+
enabled: isAISettingEnabled
|
|
259
|
+
})
|
|
260
|
+
}),
|
|
261
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
262
|
+
variant: "pi",
|
|
263
|
+
paddingTop: 1,
|
|
264
|
+
paddingBottom: 3,
|
|
265
|
+
children: formatMessage({
|
|
266
|
+
id: getTranslation.getTranslation('CMEditViewAITranslation.status-description'),
|
|
267
|
+
defaultMessage: 'Our AI translates content in all locales each time you save a modification.'
|
|
268
|
+
})
|
|
269
|
+
}),
|
|
270
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Link, {
|
|
271
|
+
fontSize: "inherit",
|
|
272
|
+
tag: reactRouterDom.NavLink,
|
|
273
|
+
to: "/settings/internationalization",
|
|
274
|
+
style: {
|
|
275
|
+
alignSelf: 'flex-end'
|
|
276
|
+
},
|
|
277
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
278
|
+
variant: "pi",
|
|
279
|
+
textAlign: "right",
|
|
280
|
+
children: formatMessage({
|
|
281
|
+
id: getTranslation.getTranslation('CMEditViewAITranslation.settings-link'),
|
|
282
|
+
defaultMessage: '{enabled, select, true {Disable it in settings} false {Enable it in settings} other {Enable it in settings}}'
|
|
283
|
+
}, {
|
|
284
|
+
enabled: isAISettingEnabled
|
|
285
|
+
})
|
|
286
|
+
})
|
|
287
|
+
})
|
|
288
|
+
]
|
|
289
|
+
})
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
};
|
|
187
293
|
/* -------------------------------------------------------------------------------------------------
|
|
188
294
|
* FillFromAnotherLocaleAction
|
|
189
295
|
* -----------------------------------------------------------------------------------------------*/ const FillFromAnotherLocaleAction = ({ documentId, meta, model, collectionType })=>{
|
|
@@ -203,6 +309,9 @@ const getDocumentStatus = (document, meta)=>{
|
|
|
203
309
|
}
|
|
204
310
|
});
|
|
205
311
|
const { data: locales$1 = [] } = locales.useGetLocalesQuery();
|
|
312
|
+
const isAIAvailable = ee.useAIAvailability();
|
|
313
|
+
const { data: settings$1 } = settings.useGetSettingsQuery();
|
|
314
|
+
const isAISettingEnabled = settings$1?.data?.aiLocalizations;
|
|
206
315
|
const availableLocales = Array.isArray(locales$1) ? locales$1.filter((locale)=>meta?.availableLocales.some((l)=>l.locale === locale.code)) : [];
|
|
207
316
|
const fillFromLocale = (onClose)=>async ()=>{
|
|
208
317
|
const response = await getDocument({
|
|
@@ -224,6 +333,11 @@ const getDocumentStatus = (document, meta)=>{
|
|
|
224
333
|
if (!hasI18n) {
|
|
225
334
|
return null;
|
|
226
335
|
}
|
|
336
|
+
// Do not display this action when AI is available and AI translations are enabled
|
|
337
|
+
const hasAIFutureFlag = window.strapi.future.isEnabled('unstableAILocalizations');
|
|
338
|
+
if (hasAIFutureFlag && isAIAvailable && isAISettingEnabled) {
|
|
339
|
+
return null;
|
|
340
|
+
}
|
|
227
341
|
return {
|
|
228
342
|
type: 'icon',
|
|
229
343
|
icon: /*#__PURE__*/ jsxRuntime.jsx(icons.Earth, {}),
|
|
@@ -713,6 +827,7 @@ const getDocumentStatus = (document, meta)=>{
|
|
|
713
827
|
}
|
|
714
828
|
`;
|
|
715
829
|
|
|
830
|
+
exports.AITranslationStatusAction = AITranslationStatusAction;
|
|
716
831
|
exports.BulkLocalePublishAction = BulkLocalePublishAction;
|
|
717
832
|
exports.BulkLocaleUnpublishAction = BulkLocaleUnpublishAction;
|
|
718
833
|
exports.DeleteLocaleAction = DeleteLocaleAction;
|
|
@@ -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 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.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 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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"}
|
|
@@ -2,15 +2,17 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { skipToken } from '@reduxjs/toolkit/query';
|
|
4
4
|
import { useQueryParams, useForm, useNotification, useAPIErrorHandler, Table } from '@strapi/admin/strapi-admin';
|
|
5
|
+
import { useAIAvailability } from '@strapi/admin/strapi-admin/ee';
|
|
5
6
|
import { unstable_useDocument, unstable_useDocumentActions, buildValidParams } from '@strapi/content-manager/strapi-admin';
|
|
6
|
-
import {
|
|
7
|
-
import { Trash, Plus, Earth, WarningCircle, ListPlus, Cross } from '@strapi/icons';
|
|
7
|
+
import { Status, Box, Flex, Typography, Link, Dialog, Field, SingleSelect, SingleSelectOption, Button, Modal } from '@strapi/design-system';
|
|
8
|
+
import { Trash, Plus, Sparkle, Earth, WarningCircle, ListPlus, Cross } from '@strapi/icons';
|
|
8
9
|
import { useIntl } from 'react-intl';
|
|
9
|
-
import { useNavigate } from 'react-router-dom';
|
|
10
|
+
import { NavLink, useNavigate } from 'react-router-dom';
|
|
10
11
|
import { styled } from 'styled-components';
|
|
11
12
|
import { useI18n } from '../hooks/useI18n.mjs';
|
|
12
13
|
import { useGetLocalesQuery } from '../services/locales.mjs';
|
|
13
14
|
import { useGetManyDraftRelationCountQuery } from '../services/relations.mjs';
|
|
15
|
+
import { useGetSettingsQuery } from '../services/settings.mjs';
|
|
14
16
|
import { cleanData } from '../utils/clean.mjs';
|
|
15
17
|
import { getTranslation } from '../utils/getTranslation.mjs';
|
|
16
18
|
import { capitalize } from '../utils/strings.mjs';
|
|
@@ -106,12 +108,18 @@ const LocalePickerAction = ({ document, meta, model, collectionType, documentId
|
|
|
106
108
|
currentDesiredLocale
|
|
107
109
|
]);
|
|
108
110
|
const currentLocale = Array.isArray(locales) ? locales.find((locale)=>locale.code === currentDesiredLocale) : undefined;
|
|
111
|
+
// Use meta.availableLocales instead of document.localizations
|
|
112
|
+
// meta.availableLocales contains all locales for the document, even when creating new locales
|
|
113
|
+
const availableLocales = meta?.availableLocales ?? [];
|
|
114
|
+
const documentLocalizations = document?.localizations ?? [];
|
|
115
|
+
// Prefer meta.availableLocales as it's more reliable, fallback to document.localizations
|
|
116
|
+
const allLocalizations = availableLocales.length > 0 ? availableLocales : documentLocalizations;
|
|
109
117
|
const allCurrentLocales = [
|
|
110
118
|
{
|
|
111
119
|
status: getDocumentStatus(document, meta),
|
|
112
120
|
locale: currentLocale?.code
|
|
113
121
|
},
|
|
114
|
-
...
|
|
122
|
+
...allLocalizations
|
|
115
123
|
];
|
|
116
124
|
if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {
|
|
117
125
|
return null;
|
|
@@ -163,6 +171,104 @@ const getDocumentStatus = (document, meta)=>{
|
|
|
163
171
|
}
|
|
164
172
|
return docStatus;
|
|
165
173
|
};
|
|
174
|
+
/* -------------------------------------------------------------------------------------------------
|
|
175
|
+
* AISettingsStatusAction
|
|
176
|
+
* -----------------------------------------------------------------------------------------------*/ const AITranslationStatusIcon = styled(Status)`
|
|
177
|
+
display: flex;
|
|
178
|
+
gap: ${({ theme })=>theme.spaces[1]};
|
|
179
|
+
justify-content: center;
|
|
180
|
+
align-items: center;
|
|
181
|
+
height: 100%;
|
|
182
|
+
|
|
183
|
+
// Disabled state
|
|
184
|
+
${({ $isAISettingEnabled, theme })=>!$isAISettingEnabled && `
|
|
185
|
+
background-color: ${theme.colors.neutral150};
|
|
186
|
+
`}
|
|
187
|
+
|
|
188
|
+
svg {
|
|
189
|
+
${({ $isAISettingEnabled, theme })=>!$isAISettingEnabled && `
|
|
190
|
+
fill: ${theme.colors.neutral300};
|
|
191
|
+
`}
|
|
192
|
+
}
|
|
193
|
+
`;
|
|
194
|
+
const AITranslationStatusAction = ()=>{
|
|
195
|
+
const { formatMessage } = useIntl();
|
|
196
|
+
const isAIAvailable = useAIAvailability();
|
|
197
|
+
const { data: settings } = useGetSettingsQuery();
|
|
198
|
+
const isAISettingEnabled = settings?.data?.aiLocalizations;
|
|
199
|
+
const { hasI18n } = useI18n();
|
|
200
|
+
// Do not display this action when i18n is not available
|
|
201
|
+
if (!hasI18n) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
// Do not display this action when AI is not available
|
|
205
|
+
const hasAIFutureFlag = window.strapi.future.isEnabled('unstableAILocalizations');
|
|
206
|
+
if (!isAIAvailable || !hasAIFutureFlag) {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
status: {
|
|
211
|
+
message: /*#__PURE__*/ jsx(Box, {
|
|
212
|
+
height: "100%",
|
|
213
|
+
"aria-label": formatMessage({
|
|
214
|
+
id: getTranslation('CMEditViewAITranslation.status-aria-label'),
|
|
215
|
+
defaultMessage: 'AI Translation Status'
|
|
216
|
+
}),
|
|
217
|
+
children: /*#__PURE__*/ jsx(AITranslationStatusIcon, {
|
|
218
|
+
$isAISettingEnabled: Boolean(isAISettingEnabled),
|
|
219
|
+
variant: isAISettingEnabled ? 'alternative' : 'neutral',
|
|
220
|
+
size: "S",
|
|
221
|
+
children: /*#__PURE__*/ jsx(Sparkle, {})
|
|
222
|
+
})
|
|
223
|
+
}),
|
|
224
|
+
tooltip: /*#__PURE__*/ jsxs(Flex, {
|
|
225
|
+
direction: "column",
|
|
226
|
+
padding: 4,
|
|
227
|
+
alignItems: "flex-start",
|
|
228
|
+
width: "25rem",
|
|
229
|
+
children: [
|
|
230
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
231
|
+
variant: "pi",
|
|
232
|
+
fontWeight: "600",
|
|
233
|
+
children: formatMessage({
|
|
234
|
+
id: getTranslation('CMEditViewAITranslation.status-title'),
|
|
235
|
+
defaultMessage: '{enabled, select, true {AI translation enabled} false {AI translation disabled} other {AI translation disabled}}'
|
|
236
|
+
}, {
|
|
237
|
+
enabled: isAISettingEnabled
|
|
238
|
+
})
|
|
239
|
+
}),
|
|
240
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
241
|
+
variant: "pi",
|
|
242
|
+
paddingTop: 1,
|
|
243
|
+
paddingBottom: 3,
|
|
244
|
+
children: formatMessage({
|
|
245
|
+
id: getTranslation('CMEditViewAITranslation.status-description'),
|
|
246
|
+
defaultMessage: 'Our AI translates content in all locales each time you save a modification.'
|
|
247
|
+
})
|
|
248
|
+
}),
|
|
249
|
+
/*#__PURE__*/ jsx(Link, {
|
|
250
|
+
fontSize: "inherit",
|
|
251
|
+
tag: NavLink,
|
|
252
|
+
to: "/settings/internationalization",
|
|
253
|
+
style: {
|
|
254
|
+
alignSelf: 'flex-end'
|
|
255
|
+
},
|
|
256
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
257
|
+
variant: "pi",
|
|
258
|
+
textAlign: "right",
|
|
259
|
+
children: formatMessage({
|
|
260
|
+
id: getTranslation('CMEditViewAITranslation.settings-link'),
|
|
261
|
+
defaultMessage: '{enabled, select, true {Disable it in settings} false {Enable it in settings} other {Enable it in settings}}'
|
|
262
|
+
}, {
|
|
263
|
+
enabled: isAISettingEnabled
|
|
264
|
+
})
|
|
265
|
+
})
|
|
266
|
+
})
|
|
267
|
+
]
|
|
268
|
+
})
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
};
|
|
166
272
|
/* -------------------------------------------------------------------------------------------------
|
|
167
273
|
* FillFromAnotherLocaleAction
|
|
168
274
|
* -----------------------------------------------------------------------------------------------*/ const FillFromAnotherLocaleAction = ({ documentId, meta, model, collectionType })=>{
|
|
@@ -182,6 +288,9 @@ const getDocumentStatus = (document, meta)=>{
|
|
|
182
288
|
}
|
|
183
289
|
});
|
|
184
290
|
const { data: locales = [] } = useGetLocalesQuery();
|
|
291
|
+
const isAIAvailable = useAIAvailability();
|
|
292
|
+
const { data: settings } = useGetSettingsQuery();
|
|
293
|
+
const isAISettingEnabled = settings?.data?.aiLocalizations;
|
|
185
294
|
const availableLocales = Array.isArray(locales) ? locales.filter((locale)=>meta?.availableLocales.some((l)=>l.locale === locale.code)) : [];
|
|
186
295
|
const fillFromLocale = (onClose)=>async ()=>{
|
|
187
296
|
const response = await getDocument({
|
|
@@ -203,6 +312,11 @@ const getDocumentStatus = (document, meta)=>{
|
|
|
203
312
|
if (!hasI18n) {
|
|
204
313
|
return null;
|
|
205
314
|
}
|
|
315
|
+
// Do not display this action when AI is available and AI translations are enabled
|
|
316
|
+
const hasAIFutureFlag = window.strapi.future.isEnabled('unstableAILocalizations');
|
|
317
|
+
if (hasAIFutureFlag && isAIAvailable && isAISettingEnabled) {
|
|
318
|
+
return null;
|
|
319
|
+
}
|
|
206
320
|
return {
|
|
207
321
|
type: 'icon',
|
|
208
322
|
icon: /*#__PURE__*/ jsx(Earth, {}),
|
|
@@ -692,5 +806,5 @@ const getDocumentStatus = (document, meta)=>{
|
|
|
692
806
|
}
|
|
693
807
|
`;
|
|
694
808
|
|
|
695
|
-
export { BulkLocalePublishAction, BulkLocaleUnpublishAction, DeleteLocaleAction, FillFromAnotherLocaleAction, LocalePickerAction };
|
|
809
|
+
export { AITranslationStatusAction, BulkLocalePublishAction, BulkLocaleUnpublishAction, DeleteLocaleAction, FillFromAnotherLocaleAction, LocalePickerAction };
|
|
696
810
|
//# sourceMappingURL=CMHeaderActions.mjs.map
|