@sanity/document-internationalization 5.0.2 → 6.0.0-canary.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.
- package/README.md +80 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -49,9 +49,88 @@ A good use of **field-level** translation could be a `person` schema. It could h
|
|
|
49
49
|
|
|
50
50
|
If upgrading from a previous version (v1), please see the [upgrade documentation](https://github.com/sanity-io/document-internationalization/blob/main/docs/00-upgrade-from-v1.md) in the original repository.
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
### Migrating to v6
|
|
53
|
+
|
|
54
|
+
This plugin uses [sanity-plugin-internationalized-array](https://github.com/sanity-io/plugins/tree/main/plugins/sanity-plugin-internationalized-array) for the `translations` array on `translation.metadata` documents. In v5, the internationalized-array plugin moved the language identifier from `_key` to a dedicated `language` field.
|
|
55
|
+
|
|
56
|
+
**If you have existing translation metadata documents**, you must run the migration to update the data format. See the [internationalized-array migration guide](https://github.com/sanity-io/plugins/tree/main/plugins/sanity-plugin-internationalized-array#migrate-from-v4-to-v5).
|
|
57
|
+
|
|
58
|
+
**Important:** When configuring the migration, include `'translation.metadata'` in the document types so that your translation metadata documents are migrated:
|
|
59
|
+
|
|
60
|
+
### 1. Backup your data.
|
|
61
|
+
|
|
62
|
+
You can manually backup your data using the sanity CLI.
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
sanity dataset export production
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
This creates a production.tar.gz file in your current directory containing all your documents and assets.
|
|
69
|
+
|
|
70
|
+
You can also specify a custom filename and location:
|
|
53
71
|
|
|
54
72
|
```
|
|
73
|
+
sanity dataset export production ./backups/backup-2026-02-16.tar.gz
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
If you ever need to restore, use the import command:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
sanity dataset import backup-2026-02-16.tar.gz production
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Or you can use the backup service, read more at https://www.sanity.io/docs/content-lake/backups
|
|
83
|
+
|
|
84
|
+
### 2. Update your GROQ queries.
|
|
85
|
+
|
|
86
|
+
Use a backwards compatible query until your migration is ready and has been executed.
|
|
87
|
+
|
|
88
|
+
```diff
|
|
89
|
+
*[_type == "person"] {
|
|
90
|
+
- "greeting": greeting[_key == "en"][0].value
|
|
91
|
+
+ "greeting": greeting[language == "en" || _key == "en"][0].value
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 3. Data migration
|
|
96
|
+
|
|
97
|
+
The sanity-plugin-internationalized-array package exports a migration helper that you can run with the [migration CLI](https://www.sanity.io/docs/cli-reference/cli-migration).
|
|
98
|
+
|
|
99
|
+
Create a migration file in your project and export it:
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
import {migrateToLanguageField} from 'sanity-plugin-internationalized-array/migrations'
|
|
103
|
+
|
|
104
|
+
const DOCUMENT_TYPES: string[] = ['translation.metadata']
|
|
105
|
+
export default migrateToLanguageField(DOCUMENT_TYPES)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Then verify your migration with a dry run:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
pnpm sanity migration run migrateToLanguageField
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Once ready, run the migration:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
pnpm sanity migration run migrateToLanguageField --no-dry-run
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### 4. Update your GROQ queries
|
|
121
|
+
|
|
122
|
+
Previously we updated the GROQ queries to support both locations for the language field. Once migration is complete, update the GROQ queries again to only use `language` and remove the dependency on `_key`.
|
|
123
|
+
|
|
124
|
+
```diff
|
|
125
|
+
*[_type == "person"] {
|
|
126
|
+
- "greeting": greeting[language == "en" || _key == "en"][0].value
|
|
127
|
+
+ "greeting": greeting[language == "en"][0].value
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Install
|
|
132
|
+
|
|
133
|
+
```bash
|
|
55
134
|
npm install --save @sanity/document-internationalization
|
|
56
135
|
```
|
|
57
136
|
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ import { uuid } from "@sanity/uuid";
|
|
|
10
10
|
import { firstValueFrom, filter } from "rxjs";
|
|
11
11
|
import { useRouter } from "sanity/router";
|
|
12
12
|
import { structureLocaleNamespace, usePaneRouter, useDocumentPane } from "sanity/structure";
|
|
13
|
+
import { randomKey } from "@sanity/util/content";
|
|
13
14
|
import { Mutation, extractWithPath } from "@sanity/mutator";
|
|
14
15
|
function DocumentPreview(props) {
|
|
15
16
|
const $ = c(7), schema = useSchema();
|
|
@@ -478,9 +479,8 @@ function useOpenInNewPane(id, type) {
|
|
|
478
479
|
}
|
|
479
480
|
function createReference(language, ref, type, strengthenOnPublish = !0) {
|
|
480
481
|
return {
|
|
481
|
-
// TODO: Update in next major version when we migrate to the new format
|
|
482
|
-
// ...(LANGUAGE_FIELD_NAME === "_key"? {} : {_key: createRandomKey()} )
|
|
483
482
|
[LANGUAGE_FIELD_NAME]: language,
|
|
483
|
+
_key: randomKey(),
|
|
484
484
|
_type: "internationalizedArrayReferenceValue",
|
|
485
485
|
value: {
|
|
486
486
|
_type: "reference",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/DeleteTranslationDialog/DocumentPreview.tsx","../src/constants.ts","../src/components/DeleteTranslationDialog/separateReferences.ts","../src/components/DeleteTranslationDialog/index.tsx","../src/components/DeleteTranslationFooter.tsx","../src/components/DocumentInternationalizationContext.tsx","../src/actions/DeleteTranslationAction.tsx","../src/hooks/useLanguageMetadata.tsx","../src/i18n/index.ts","../src/actions/DuplicateWithTranslationsAction.tsx","../src/hooks/useOpenInNewPane.tsx","../src/utils/createReference.ts","../src/components/LanguageManage.tsx","../src/utils/excludePaths.ts","../src/components/LanguageOption.tsx","../src/components/LanguagePatch.tsx","../src/components/ConstrainedBox.tsx","../src/components/Warning.tsx","../src/components/DocumentInternationalizationMenu.tsx","../src/actions/DeleteMetadataAction.tsx","../src/badges/index.tsx","../src/components/BulkPublish/DocumentCheck.tsx","../src/components/BulkPublish/InfoIcon.tsx","../src/components/BulkPublish/Info.tsx","../src/components/BulkPublish/index.tsx","../src/components/OptimisticallyStrengthen/ReferencePatcher.tsx","../src/components/OptimisticallyStrengthen/index.tsx","../src/schema/translation/metadata.ts","../src/plugin.tsx"],"sourcesContent":["import {Preview, useSchema} from 'sanity'\nimport {Feedback} from 'sanity-plugin-utils'\n\ntype DocumentPreviewProps = {\n value: unknown\n type: string\n}\n\n// Wrapper of Preview just so that the schema type is satisfied by schema.get()\nexport default function DocumentPreview(props: DocumentPreviewProps) {\n const schema = useSchema()\n\n const schemaType = schema.get(props.type)\n if (!schemaType) {\n return <Feedback tone=\"critical\" title=\"Schema type not found\" />\n }\n\n return <Preview value={props.value} schemaType={schemaType} />\n}\n","import type {PluginConfigContext} from './types'\n\nexport const METADATA_SCHEMA_NAME = `translation.metadata`\nexport const TRANSLATIONS_ARRAY_NAME = `translations`\nexport const API_VERSION = `2025-02-19`\nexport const DEFAULT_CONFIG: PluginConfigContext = {\n supportedLanguages: [],\n schemaTypes: [],\n languageField: `language`,\n weakReferences: false,\n bulkPublish: false,\n metadataFields: [],\n apiVersion: API_VERSION,\n allowCreateMetaDoc: false,\n callback: null,\n}\n","import type {SanityDocument} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME} from '../../constants'\n\n/**\n * Splits an array of referring documents into two groups: translation metadata\n * documents (whose `_type` matches the metadata schema name) and all other\n * references. Used by the delete-translation dialog to show which metadata\n * entries will be patched versus which external references may block deletion.\n */\nexport function separateReferences(data: SanityDocument[] | null = []): {\n translations: SanityDocument[]\n otherReferences: SanityDocument[]\n} {\n const translations: SanityDocument[] = []\n const otherReferences: SanityDocument[] = []\n\n if (data && data.length > 0) {\n data.forEach((doc) => {\n if (doc._type === METADATA_SCHEMA_NAME) {\n translations.push(doc)\n } else {\n otherReferences.push(doc)\n }\n })\n }\n\n return {translations, otherReferences}\n}\n","import type {SanityDocument} from 'sanity'\n\nimport {Card, Flex, Spinner, Stack, Text} from '@sanity/ui'\nimport {useEffect, useMemo} from 'react'\nimport {useListeningQuery} from 'sanity-plugin-utils'\n\nimport type {MetadataDocument} from '../../types'\n\nimport DocumentPreview from './DocumentPreview'\nimport {separateReferences} from './separateReferences'\n\ntype DeleteTranslationDialogProps = {\n doc: SanityDocument\n documentId: string\n setTranslations: (translations: MetadataDocument[]) => void\n}\n\nexport default function DeleteTranslationDialog(props: DeleteTranslationDialogProps) {\n const {doc, documentId, setTranslations} = props\n\n // Get all references and check if any of them are translations metadata\n const {data, loading} = useListeningQuery<SanityDocument[]>(\n `*[references($id)]{_id, _type, translations}`,\n {\n params: {id: documentId},\n initialValue: [],\n },\n )\n const {translations, otherReferences} = useMemo(\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n () => separateReferences(data as SanityDocument[] | null),\n [data],\n )\n\n useEffect(() => {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n setTranslations(translations as MetadataDocument[])\n }, [setTranslations, translations])\n\n if (loading) {\n return (\n <Flex padding={4} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )\n }\n\n return (\n <Stack space={4}>\n {translations && translations.length > 0 ? (\n <Text>\n This document is a language-specific version which other translations depend on.\n </Text>\n ) : (\n <Text>This document does not have connected translations.</Text>\n )}\n <Card border padding={3}>\n <Stack space={4}>\n <Text size={1} weight=\"semibold\">\n {translations && translations.length > 0 ? (\n <>Before this document can be deleted</>\n ) : (\n <>This document can now be deleted</>\n )}\n </Text>\n <DocumentPreview value={doc} type={doc._type} />\n {translations && translations.length > 0 ? (\n <>\n <Card borderTop />\n <Text size={1} weight=\"semibold\">\n The reference in{' '}\n {translations.length === 1\n ? `this translations document`\n : `these translations documents`}{' '}\n must be removed\n </Text>\n {translations.map((translation) => (\n <DocumentPreview\n key={translation._id}\n value={translation}\n type={translation._type}\n />\n ))}\n </>\n ) : null}\n {otherReferences && otherReferences.length > 0 ? (\n <>\n <Card borderTop />\n <Text size={1} weight=\"semibold\">\n {otherReferences.length === 1\n ? `There is an additional reference`\n : `There are additional references`}{' '}\n to this document\n </Text>\n {otherReferences.map((reference) => (\n <DocumentPreview key={reference._id} value={reference} type={reference._type} />\n ))}\n </>\n ) : null}\n </Stack>\n </Card>\n {otherReferences.length === 0 ? (\n <Text>This document has no other references.</Text>\n ) : (\n <Text>\n You may not be able to delete this document because other documents refer to it.\n </Text>\n )}\n </Stack>\n )\n}\n","import {Button, Grid} from '@sanity/ui'\n\ntype DeleteTranslationFooterProps = {\n translations: unknown[]\n onClose: () => void\n onProceed: () => void\n}\n\nexport default function DeleteTranslationFooter(props: DeleteTranslationFooterProps) {\n const {translations, onClose, onProceed} = props\n\n return (\n <Grid columns={2} gap={2}>\n <Button text=\"Cancel\" onClick={onClose} mode=\"ghost\" />\n <Button\n text={\n translations && translations.length > 0\n ? `Unset translation reference`\n : `Delete document`\n }\n onClick={onProceed}\n tone=\"critical\"\n />\n </Grid>\n )\n}\n","import type {LayoutProps} from 'sanity'\n\nimport {createContext, use, useContext, useMemo} from 'react'\nimport {useClient, useWorkspace} from 'sanity'\n\nimport type {PluginConfig, PluginConfigContext} from '../types'\n\nimport {DEFAULT_CONFIG} from '../constants'\n\nconst DocumentInternationalizationContext = createContext<PluginConfigContext>(DEFAULT_CONFIG)\n\nexport function useDocumentInternationalizationContext(): PluginConfigContext {\n return useContext(DocumentInternationalizationContext)\n}\n\ntype DocumentInternationalizationProviderProps = LayoutProps & {\n pluginConfig: Required<PluginConfig>\n}\n\n// Simple promise cache for React.use\nconst promiseCache = new Map<string, Promise<PluginConfigContext['supportedLanguages']>>()\n\nfunction createCacheKey(workspaceId: string): string {\n return `languages-${workspaceId}`\n}\n\nfunction createOrGetPromise(\n fn: () => Promise<PluginConfigContext['supportedLanguages']>,\n cacheKey: string,\n): Promise<PluginConfigContext['supportedLanguages']> {\n const cached = promiseCache.get(cacheKey)\n if (cached) {\n return cached\n }\n const promise = fn()\n promiseCache.set(cacheKey, promise)\n return promise\n}\n\n/**\n * This Provider wraps the Studio and provides the DocumentInternationalization context to document actions and components.\n */\nexport function DocumentInternationalizationProvider(\n props: DocumentInternationalizationProviderProps,\n): React.JSX.Element {\n const {pluginConfig} = props\n\n const client = useClient({apiVersion: pluginConfig.apiVersion})\n const workspace = useWorkspace()\n\n // Use a stable workspace identifier\n const workspaceId = useMemo(() => workspace.name ?? '', [workspace])\n\n // Create cache key for promise caching\n const cacheKey = useMemo(() => createCacheKey(workspaceId), [workspaceId])\n\n // Fetch or return languages\n const languagesPromise = useMemo(() => {\n if (Array.isArray(pluginConfig.supportedLanguages)) {\n return null // Return null for synchronous arrays\n }\n\n // Create or get cached promise for React.use\n return createOrGetPromise(async () => {\n if (typeof pluginConfig.supportedLanguages === 'function') {\n return pluginConfig.supportedLanguages(client)\n }\n return pluginConfig.supportedLanguages\n }, cacheKey)\n }, [pluginConfig, client, cacheKey])\n\n // Use React.use to handle the promise with Suspense, or return array directly\n const supportedLanguages = languagesPromise\n ? use(languagesPromise)\n : // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (pluginConfig.supportedLanguages as PluginConfigContext['supportedLanguages'])\n\n return (\n <DocumentInternationalizationContext.Provider value={{...pluginConfig, supportedLanguages}}>\n {props.renderDefault(props)}\n </DocumentInternationalizationContext.Provider>\n )\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {type ButtonTone, useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {useClient, type DocumentActionDescription, type DocumentActionProps} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport DeleteTranslationDialog from '../components/DeleteTranslationDialog'\nimport DeleteTranslationFooter from '../components/DeleteTranslationFooter'\nimport {useDocumentInternationalizationContext} from '../components/DocumentInternationalizationContext'\nimport {API_VERSION, TRANSLATIONS_ARRAY_NAME} from '../constants'\nimport {type MetadataDocument} from '../types'\n\ntype DeleteOperation = 'DELETE' | 'UNSET'\n\n/**\n * Optional Document action that removes a single translation from the metadata document\n * and optionally deletes the translation document. Opens a confirmation dialog\n * showing which metadata entries reference the document and any other references\n * that may exist. When the document has translation references, those references\n * are unset; otherwise the document is deleted directly.\n *\n * To use it, you need to add it to the document actions config\n * ```\n * const translatedSchemaTypes = ['lesson', 'article'];\n * document: {\n * actions: (prev, {schemaType}) => {\n * if (translatedSchemaTypes.includes(schemaType)) {\n * return [...prev, useDeleteTranslationAction]\n * }\n * return prev\n * },\n * },\n * ```\n */\nexport const useDeleteTranslationAction = (\n props: DocumentActionProps,\n): DocumentActionDescription => {\n const {id: documentId, published, draft} = props\n const doc = draft || published\n const {languageField} = useDocumentInternationalizationContext()\n\n const [isDialogOpen, setDialogOpen] = useState(false)\n const [translations, setTranslations] = useState<MetadataDocument[]>([])\n const onClose = useCallback(() => setDialogOpen(false), [])\n const rawDocumentLanguage = doc ? doc[languageField] : null\n const documentLanguage = typeof rawDocumentLanguage === 'string' ? rawDocumentLanguage : null\n\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n // Remove translation reference and delete document in one transaction\n const onProceed = useCallback(() => {\n const tx = client.transaction()\n let operation: DeleteOperation = 'DELETE'\n\n if (documentLanguage && translations.length > 0) {\n operation = 'UNSET'\n translations.forEach((translation) => {\n tx.patch(translation._id, (patch) =>\n patch.unset([\n `${TRANSLATIONS_ARRAY_NAME}[${LANGUAGE_FIELD_NAME} == \"${documentLanguage}\"]`,\n ]),\n )\n })\n } else {\n tx.delete(documentId)\n tx.delete(`drafts.${documentId}`)\n }\n\n tx.commit()\n .then(() => {\n if (operation === 'DELETE') {\n onClose()\n }\n toast.push({\n status: 'success',\n title: operation === 'UNSET' ? 'Translation reference unset' : 'Document deleted',\n description: operation === 'UNSET' ? 'The document can now be deleted' : null,\n })\n return undefined\n })\n .catch((err: Error) => {\n toast.push({\n status: 'error',\n title:\n operation === 'UNSET'\n ? 'Failed to unset translation reference'\n : 'Failed to delete document',\n description: err.message,\n })\n })\n }, [client, documentLanguage, translations, documentId, onClose, toast])\n\n return {\n label: `Delete translation...`,\n disabled: !doc || !documentLanguage,\n icon: TrashIcon,\n tone: 'critical' as ButtonTone,\n onHandle: () => {\n setDialogOpen(true)\n },\n dialog: isDialogOpen && {\n type: 'dialog',\n onClose,\n header: 'Delete translation',\n content: doc ? (\n <DeleteTranslationDialog\n doc={doc}\n documentId={documentId}\n setTranslations={setTranslations}\n />\n ) : null,\n footer: (\n <DeleteTranslationFooter\n onClose={onClose}\n onProceed={onProceed}\n translations={translations}\n />\n ),\n },\n }\n}\n\nuseDeleteTranslationAction.action = 'deleteTranslation'\nuseDeleteTranslationAction.displayName = 'DeleteTranslationAction'\n\n/**\n * @deprecated use useDeleteTranslationAction instead\n * Will be removed in the next major version\n */\nexport const DeleteTranslationAction = (props: DocumentActionProps): DocumentActionDescription => {\n return useDeleteTranslationAction(props)\n}\n","import {useListeningQuery} from 'sanity-plugin-utils'\n\nimport type {Metadata} from '../types'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\n\n// Using references() seemed less reliable for updating the listener\n// results than querying raw values in the array\n// AFAIK: references is _faster_ when querying with GROQ\n// const query = `*[_type == $translationSchema && references($id)]`\nconst query = `*[_type == $translationSchema && $id in translations[].value._ref]{\n _id,\n _createdAt,\n translations\n}`\n\nexport function useTranslationMetadata(id: string): {\n data: Metadata[] | null\n loading: boolean\n error: unknown\n} {\n const {data, loading, error} = useListeningQuery<Metadata[]>(query, {\n params: {id, translationSchema: METADATA_SCHEMA_NAME},\n })\n\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n return {data: data as Metadata[] | null, loading, error}\n}\n","import {defineLocaleResourceBundle} from 'sanity'\n\n/**\n * The locale namespace for the document internationalization plugin.\n *\n * @public\n */\nexport const documenti18nLocaleNamespace = 'document-internationalization' as const\n\n/**\n * The default locale bundle for the document internationalization plugin, which is US English.\n *\n * @internal\n */\nexport const documentInternationalizationUsEnglishLocaleBundle = defineLocaleResourceBundle({\n locale: 'en-US',\n namespace: documenti18nLocaleNamespace,\n resources: () => import('./resources'),\n})\n","import {CopyIcon} from '@sanity/icons'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useMemo, useState} from 'react'\nimport {filter, firstValueFrom} from 'rxjs'\nimport {\n DEFAULT_STUDIO_CLIENT_OPTIONS,\n type Id,\n InsufficientPermissionsMessage,\n type PatchOperations,\n useClient,\n useCurrentUser,\n useDocumentOperation,\n useDocumentPairPermissions,\n useDocumentStore,\n useTranslation,\n type DocumentActionProps,\n type DocumentActionDescription,\n} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\nimport {useRouter} from 'sanity/router'\nimport {structureLocaleNamespace} from 'sanity/structure'\n\nimport {METADATA_SCHEMA_NAME, TRANSLATIONS_ARRAY_NAME} from '../constants'\nimport {useTranslationMetadata} from '../hooks/useLanguageMetadata'\nimport {documenti18nLocaleNamespace} from '../i18n'\n\n// Types for document store operations\ninterface EditOperations {\n duplicate: {disabled: string | false; execute: (id: string) => void}\n}\n\ninterface OperationSuccessEvent {\n op: string\n type: 'success' | 'error'\n}\n\nconst DISABLED_REASON_KEY = {\n METADATA_NOT_FOUND: 'action.duplicate.disabled.missing-metadata',\n MULTIPLE_METADATA: 'action.duplicate.disabled.multiple-metadata',\n NOTHING_TO_DUPLICATE: 'action.duplicate.disabled.nothing-to-duplicate',\n NOT_READY: 'action.duplicate.disabled.not-ready',\n}\n\n/**\n * Optional Document action that duplicates a document along with all its translations\n * and the associated metadata document. The workflow duplicates each translated\n * document, duplicates the metadata document, patches the new metadata to\n * reference the new translation copies, and navigates to the duplicated document.\n * Disabled when the user lacks permissions, metadata is missing or ambiguous,\n * or the underlying duplicate operation is unavailable.\n */\nexport const useDuplicateWithTranslationsAction = ({\n id,\n type,\n /* oxlint-disable-next-line typescript-eslint/no-deprecated -- kept for backwards compatibility */\n onComplete,\n}: DocumentActionProps): DocumentActionDescription => {\n const documentStore = useDocumentStore()\n const {duplicate} = useDocumentOperation(id, type)\n const {navigateIntent} = useRouter()\n const [isDuplicating, setDuplicating] = useState(false)\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'duplicate',\n })\n const {data, loading: isMetadataDocumentLoading} = useTranslationMetadata(id)\n const hasOneMetadataDocument = useMemo(() => {\n return Array.isArray(data) && data.length <= 1\n }, [data])\n const metadataDocument = Array.isArray(data) && data.length ? data[0] : null\n const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const toast = useToast()\n const {t: s} = useTranslation(structureLocaleNamespace)\n const {t: d} = useTranslation(documenti18nLocaleNamespace)\n const currentUser = useCurrentUser()\n\n const handle = useCallback(() => {\n setDuplicating(true)\n\n // Async function that does the actual work\n async function performDuplication(): Promise<void> {\n if (!metadataDocument) {\n return Promise.reject(new Error('Metadata document not found'))\n }\n\n const translationsArray = metadataDocument[TRANSLATIONS_ARRAY_NAME]\n if (!translationsArray || translationsArray.length === 0) {\n return Promise.reject(new Error('No translations found in metadata document'))\n }\n\n // 1. Duplicate the document and its localized versions\n const translations = new Map<string, Id>()\n await Promise.all(\n translationsArray.map(async (translation) => {\n const dupeId = uuid()\n const locale = translation[LANGUAGE_FIELD_NAME]\n const docId = translation.value?._ref\n\n if (typeof locale !== 'string' || locale.trim().length === 0) {\n return Promise.reject(new Error('Invalid locale for translation'))\n }\n if (!docId) {\n return Promise.reject(new Error('Translation document not found'))\n }\n\n const {duplicate: duplicateTranslation} = await firstValueFrom(\n documentStore.pair\n .editOperations(docId, type)\n .pipe(filter((op: EditOperations) => op.duplicate.disabled !== 'NOT_READY')),\n )\n\n if (duplicateTranslation.disabled) {\n return Promise.reject(new Error('Cannot duplicate document'))\n }\n\n const duplicateTranslationSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(docId, type)\n .pipe(\n filter((e: OperationSuccessEvent) => e.op === 'duplicate' && e.type === 'success'),\n ),\n )\n duplicateTranslation.execute(dupeId)\n await duplicateTranslationSuccess\n\n translations.set(locale, dupeId)\n }),\n )\n\n // 2. Duplicate the metadata document\n const {duplicate: duplicateMetadata} = await firstValueFrom(\n documentStore.pair\n .editOperations(metadataDocument._id, METADATA_SCHEMA_NAME)\n .pipe(filter((op: EditOperations) => op.duplicate.disabled !== 'NOT_READY')),\n )\n\n if (duplicateMetadata.disabled) {\n return Promise.reject(new Error('Cannot duplicate document'))\n }\n\n const duplicateMetadataSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(metadataDocument._id, METADATA_SCHEMA_NAME)\n .pipe(filter((e: OperationSuccessEvent) => e.op === 'duplicate' && e.type === 'success')),\n )\n const dupeId = uuid()\n duplicateMetadata.execute(dupeId)\n await duplicateMetadataSuccess\n\n // 3. Patch the duplicated metadata document to update the references\n const patch: PatchOperations = {\n set: Object.fromEntries(\n Array.from(translations.entries()).map(([locale, documentId]) => {\n return [\n `${TRANSLATIONS_ARRAY_NAME}[${LANGUAGE_FIELD_NAME} == \"${locale}\"].value._ref`,\n documentId,\n ]\n }),\n ),\n }\n\n await client.transaction().patch(dupeId, patch).commit()\n\n // 4. Navigate to the duplicated document\n navigateIntent('edit', {\n id: Array.from(translations.values()).at(0),\n type,\n })\n\n onComplete()\n }\n\n // Execute and handle success/error\n performDuplication()\n .catch((error: unknown) => {\n console.error(error)\n toast.push({\n status: 'error',\n title: 'Error duplicating document',\n description: error instanceof Error ? error.message : 'Failed to duplicate document',\n })\n })\n .finally(() => {\n setDuplicating(false)\n })\n }, [client, documentStore.pair, metadataDocument, navigateIntent, onComplete, toast, type])\n\n return useMemo(() => {\n if (!isPermissionsLoading && !permissions?.granted) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: (\n <InsufficientPermissionsMessage context=\"duplicate-document\" currentUser={currentUser} />\n ),\n }\n }\n\n if (!isMetadataDocumentLoading && !metadataDocument) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: d(DISABLED_REASON_KEY.METADATA_NOT_FOUND),\n }\n }\n\n if (!hasOneMetadataDocument) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: d(DISABLED_REASON_KEY.MULTIPLE_METADATA),\n }\n }\n\n return {\n icon: CopyIcon,\n disabled:\n isDuplicating ||\n Boolean(duplicate.disabled) ||\n isPermissionsLoading ||\n isMetadataDocumentLoading,\n label: isDuplicating ? s('action.duplicate.running.label') : d('action.duplicate.label'),\n title: duplicate.disabled ? s(DISABLED_REASON_KEY[duplicate.disabled]) : '',\n onHandle: handle,\n }\n }, [\n currentUser,\n duplicate.disabled,\n handle,\n hasOneMetadataDocument,\n isDuplicating,\n isMetadataDocumentLoading,\n isPermissionsLoading,\n metadataDocument,\n permissions?.granted,\n s,\n d,\n ])\n}\n\nuseDuplicateWithTranslationsAction.action = 'duplicate'\nuseDuplicateWithTranslationsAction.displayName = 'DuplicateWithTranslationsAction'\n\n/**\n * @deprecated use useDuplicateWithTranslationsAction instead\n * Will be removed in the next major version\n */\nexport const DuplicateWithTranslationsAction = (\n props: DocumentActionProps,\n): DocumentActionDescription => {\n return useDuplicateWithTranslationsAction(props)\n}\n\n/* oxlint-disable-next-line typescript-eslint/no-deprecated -- re-exported for backwards compatibility */\nDuplicateWithTranslationsAction.action = 'duplicate'\n/* oxlint-disable-next-line typescript-eslint/no-deprecated -- re-exported for backwards compatibility */\nDuplicateWithTranslationsAction.displayName = 'DuplicateWithTranslationsAction'\n","import {useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\nimport {usePaneRouter} from 'sanity/structure'\n\nexport function useOpenInNewPane(id?: string | null, type?: string): () => void {\n const router = useRouter()\n const {routerPanesState, groupIndex} = usePaneRouter()\n\n const openInNewPane = useCallback(() => {\n if (!id || !type) {\n return\n }\n\n // No panes open, function might be called outside Structure\n if (!routerPanesState.length) {\n router.navigateIntent('edit', {id, type})\n return\n }\n\n const panes = [...routerPanesState]\n panes.splice(groupIndex + 1, 0, [\n {\n id: id,\n params: {type},\n },\n ])\n\n const href = router.resolvePathFromState({panes})\n router.navigateUrl({path: href})\n }, [id, type, router, routerPanesState, groupIndex])\n\n return openInNewPane\n}\n","import {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {TranslationReference} from '../types'\n// TODO: Update in next major version when we migrate to the new format\n// import { createRandomKey } from '@sanity/util/content';\n\n/**\n * Creates a translation reference object used in metadata documents to link\n * a language key to a document. References are created as weak by default,\n * with optional strengthen-on-publish metadata so the reference becomes\n * strong once the referenced document is published.\n */\nexport function createReference(\n language: string,\n ref: string,\n type: string,\n strengthenOnPublish: boolean = true,\n): TranslationReference {\n return {\n // TODO: Update in next major version when we migrate to the new format\n // ...(LANGUAGE_FIELD_NAME === \"_key\"? {} : {_key: createRandomKey()} )\n [LANGUAGE_FIELD_NAME]: language,\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref: ref,\n _weak: true,\n // If the user has configured weakReferences, we won't want to strengthen them\n ...(strengthenOnPublish ? {_strengthenOnPublish: {type}} : {}),\n },\n }\n}\n","import {CogIcon} from '@sanity/icons'\nimport {Box, Button, Stack, Text, Tooltip} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {type ObjectSchemaType, useClient} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\nimport {createReference} from '../utils/createReference'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguageManageProps = {\n id?: string\n metadataId?: string | null\n schemaType: ObjectSchemaType\n documentId: string\n sourceLanguageId?: string\n}\n\n/**\n * Button component for opening or creating the translation metadata document.\n * When metadata already exists, clicking opens it in a new pane. When no\n * metadata exists and creation is allowed, clicking creates a new metadata\n * document with the source language reference and then opens it.\n */\nexport default function LanguageManage(props: LanguageManageProps) {\n const {id, metadataId, schemaType, documentId, sourceLanguageId} = props\n const open = useOpenInNewPane(id, METADATA_SCHEMA_NAME)\n const openCreated = useOpenInNewPane(metadataId, METADATA_SCHEMA_NAME)\n const {allowCreateMetaDoc, apiVersion, weakReferences} = useDocumentInternationalizationContext()\n const client = useClient({apiVersion})\n const [userHasClicked, setUserHasClicked] = useState(false)\n\n const canCreate = !id && Boolean(metadataId) && allowCreateMetaDoc\n\n const handleClick = useCallback(() => {\n if (!id && metadataId && sourceLanguageId) {\n /* Disable button while this request is pending */\n setUserHasClicked(true)\n\n // handle creation of meta document\n const transaction = client.transaction()\n\n const sourceReference = createReference(\n sourceLanguageId,\n documentId,\n schemaType.name,\n !weakReferences,\n )\n const newMetadataDocument = {\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaTypes: [schemaType.name],\n translations: [sourceReference],\n }\n\n transaction.createIfNotExists(newMetadataDocument)\n\n transaction\n .commit()\n .then(() => {\n setUserHasClicked(false)\n openCreated()\n return undefined\n })\n .catch((err: unknown) => {\n console.error(err)\n setUserHasClicked(false)\n })\n } else {\n open()\n }\n }, [\n id,\n metadataId,\n sourceLanguageId,\n client,\n documentId,\n schemaType.name,\n weakReferences,\n openCreated,\n open,\n ])\n\n const disabled = (!id && !canCreate) || (canCreate && !sourceLanguageId) || userHasClicked\n\n return (\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Document has no other translations\n </Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n disabled={Boolean(id) || canCreate}\n >\n <Stack>\n <Button\n disabled={disabled}\n mode=\"ghost\"\n text=\"Manage Translations\"\n icon={CogIcon}\n loading={userHasClicked}\n onClick={handleClick}\n />\n </Stack>\n </Tooltip>\n )\n}\n","import {extractWithPath, Mutation} from '@sanity/mutator'\nimport {\n isDocumentSchemaType,\n type ObjectSchemaType,\n type Path,\n pathToString,\n type SanityDocument,\n type SchemaType,\n} from 'sanity'\n\nexport interface DocumentMember {\n schemaType: SchemaType\n path: Path\n name: string\n value: unknown\n}\n\n/**\n * Removes fields from a document that are marked with the\n * `documentInternationalization.exclude` schema option. This is used when\n * duplicating a source document to create a translation, so that\n * language-specific or non-translatable fields are stripped from the copy.\n * Returns the document with excluded paths unset, or `null` if the input is null.\n */\nexport function removeExcludedPaths(\n doc: SanityDocument | null,\n schemaType: ObjectSchemaType,\n): SanityDocument | null {\n // If the supplied doc is null or the schemaType\n // isn't a document, return as is.\n if (!isDocumentSchemaType(schemaType) || !doc) {\n return doc\n }\n\n // The extractPaths function gets all the fields in the doc with\n // a value, along with their schemaTypes and paths. We'll end up\n // with an array of paths in string form which we want to exclude\n const pathsToExclude: string[] = extractPaths(doc, schemaType, [])\n // We filter for any fields which should be excluded from the document\n // duplicate action, based on the schemaType option being set.\n .filter((field) => field.schemaType?.options?.documentInternationalization?.exclude === true)\n // then we return the stringified version of the path\n .map((field) => {\n return pathToString(field.path)\n })\n\n // Now we can use the Mutation class from @sanity/mutator to patch the document\n // to remove all the paths that are for one of the excluded fields. This is just\n // done locally, and the documents themselves are not patched in the Content Lake.\n const mut = new Mutation({\n mutations: [\n {\n patch: {\n id: doc._id,\n unset: pathsToExclude,\n },\n },\n ],\n })\n\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n return mut.apply(doc) as SanityDocument\n}\n\nfunction extractPaths(\n doc: SanityDocument,\n schemaType: ObjectSchemaType,\n path: Path,\n): DocumentMember[] {\n const result: DocumentMember[] = []\n\n for (const field of schemaType.fields) {\n const fieldPath = [...path, field.name]\n const fieldSchema = field.type\n const {value} = extractWithPath(pathToString(fieldPath), doc)[0] ?? {}\n if (value === undefined || value === null) {\n continue\n }\n\n const thisFieldWithPath: DocumentMember = {\n path: fieldPath,\n name: field.name,\n schemaType: fieldSchema,\n value,\n }\n\n if (fieldSchema.jsonType === 'object') {\n const innerFields = extractPaths(doc, fieldSchema, fieldPath)\n result.push(thisFieldWithPath, ...innerFields)\n } else if (\n fieldSchema.jsonType === 'array' &&\n fieldSchema.of.length &&\n fieldSchema.of.some((item) => 'fields' in item)\n ) {\n const {value: arrayValue} = extractWithPath(pathToString(fieldPath), doc)[0] ?? {}\n\n result.push(thisFieldWithPath)\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n if ((arrayValue as unknown[])?.length) {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n for (const item of arrayValue as Array<{_key?: string; _type?: string}>) {\n if (!item._key) continue\n const itemPath = [...fieldPath, {_key: item._key}] as Path\n let itemSchema = fieldSchema.of.find((t) => t.name === item._type)\n if (!item._type) {\n itemSchema = fieldSchema.of[0]\n }\n if (itemSchema) {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n const innerFields = extractPaths(doc, itemSchema as ObjectSchemaType, itemPath)\n const arrayMember: DocumentMember = {\n path: itemPath,\n name: item._key,\n schemaType: itemSchema,\n value: item,\n }\n result.push(arrayMember, ...innerFields)\n }\n }\n }\n } else {\n result.push(thisFieldWithPath)\n }\n }\n\n return result\n}\n","import {AddIcon, CheckmarkIcon, SplitVerticalIcon} from '@sanity/icons'\nimport {Badge, Box, Button, Flex, Spinner, Text, Tooltip, useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useState} from 'react'\nimport {type ObjectSchemaType, type SanityDocument, useClient} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {Language, Metadata, MetadataDocument, TranslationReference} from '../types'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\nimport {createReference} from '../utils/createReference'\nimport {removeExcludedPaths} from '../utils/excludePaths'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguageOptionProps = {\n language: Language\n schemaType: ObjectSchemaType\n documentId: string\n disabled: boolean\n current: boolean\n source: SanityDocument | null\n metadataId: string | null\n metadata?: Metadata | null\n sourceLanguageId?: string\n}\n\n/**\n * Button component representing a single language in the translations menu.\n * Displays the language name, an ID badge, and a contextual icon: checkmark\n * for the current language, split-vertical for existing translations, or add\n * for new translations. Clicking opens an existing translation in a new pane,\n * or creates a new translation document via a Sanity transaction.\n */\nexport default function LanguageOption(props: LanguageOptionProps) {\n const {\n language,\n schemaType,\n documentId,\n current,\n source,\n sourceLanguageId,\n metadata,\n metadataId,\n } = props\n /* When the user has clicked the Create button, the button should be disabled\n * to prevent double-clicks from firing onCreate twice. This creates duplicate\n * translation metadata entries, which editors will not be able to delete */\n const [userHasClicked, setUserHasClicked] = useState(false)\n const disabled =\n props.disabled || userHasClicked || current || !source || !sourceLanguageId || !metadataId\n const translation: TranslationReference | undefined = metadata?.translations.length\n ? metadata.translations.find((t) => t[LANGUAGE_FIELD_NAME] === language.id)\n : undefined\n const {apiVersion, languageField, weakReferences, callback} =\n useDocumentInternationalizationContext()\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const open = useOpenInNewPane(translation?.value?._ref, schemaType.name)\n const handleOpen = useCallback(() => open(), [open])\n\n const handleCreate = useCallback(async () => {\n if (!source) {\n throw new Error(`Cannot create translation without source document`)\n }\n\n if (!sourceLanguageId) {\n throw new Error(`Cannot create translation without source language ID`)\n }\n\n if (!metadataId) {\n throw new Error(`Cannot create translation without a metadata ID`)\n }\n /* Disable the create button while this request is pending */\n setUserHasClicked(true)\n\n const transaction = client.transaction()\n\n // 1. Duplicate source document\n const newTranslationDocumentId = uuid()\n let newTranslationDocument = {\n ...source,\n _id: `drafts.${newTranslationDocumentId}`,\n // 2. Update language of the translation\n [languageField]: language.id,\n }\n\n // Remove fields / paths we don't want to duplicate\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n newTranslationDocument = removeExcludedPaths(\n newTranslationDocument,\n schemaType,\n ) as SanityDocument\n\n transaction.create(newTranslationDocument)\n\n // 3. Maybe create the metadata document\n const sourceReference = createReference(\n sourceLanguageId,\n documentId,\n schemaType.name,\n !weakReferences,\n )\n const newTranslationReference = createReference(\n language.id,\n newTranslationDocumentId,\n schemaType.name,\n !weakReferences,\n )\n const newMetadataDocument: MetadataDocument = {\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaTypes: [schemaType.name],\n translations: [sourceReference],\n }\n\n transaction.createIfNotExists(newMetadataDocument)\n\n // 4. Patch translation to metadata document\n // Note: If the document was only just created in the operation above\n // This patch operation will have no effect\n const metadataPatch = client\n .patch(metadataId)\n .setIfMissing({translations: [sourceReference]})\n .insert(`after`, `translations[-1]`, [newTranslationReference])\n\n transaction.patch(metadataPatch)\n\n // 5. Commit!\n transaction\n .commit()\n .then(() => {\n const metadataExisted = Boolean(metadata?._createdAt)\n\n toast.push({\n status: 'success',\n title: `Created \"${language.title}\" translation`,\n description: metadataExisted\n ? `Updated Translations Metadata`\n : `Created Translations Metadata`,\n })\n\n /* Once a translation has been created, reset the userHasClicked state to false\n * so they can click on it to navigate to the translation */\n setUserHasClicked(false)\n\n // Execute callback if provided\n if (callback) {\n // oxlint-disable-next-line eslint-plugin-promise/no-callback-in-promise -- This is an async callback, not a Node.js callback\n return callback({\n client,\n sourceLanguageId,\n sourceDocument: source,\n newDocument: newTranslationDocument,\n destinationLanguageId: language.id,\n metaDocumentId: metadataId,\n })\n }\n\n return undefined\n })\n .catch((err: Error) => {\n console.error(err)\n\n /* Re-enable the create button if there was an error */\n setUserHasClicked(false)\n\n return toast.push({\n status: 'error',\n title: `Error creating translation`,\n description: err.message,\n })\n })\n }, [\n client,\n documentId,\n language.id,\n language.title,\n languageField,\n metadata?._createdAt,\n metadataId,\n schemaType,\n source,\n sourceLanguageId,\n toast,\n weakReferences,\n callback,\n ])\n\n let message\n\n if (current) {\n message = `Current document`\n } else if (translation) {\n message = `Open ${language.title} translation`\n } else if (!translation) {\n message = `Create new ${language.title} translation`\n }\n\n return (\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n {message}\n </Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n >\n <Button\n onClick={translation ? handleOpen : handleCreate}\n mode={current && disabled ? `default` : `bleed`}\n disabled={disabled}\n >\n <Flex gap={3} align=\"center\">\n {disabled && !current ? (\n <Spinner />\n ) : (\n <Text size={2}>\n {translation ? <SplitVerticalIcon /> : current ? <CheckmarkIcon /> : <AddIcon />}\n </Text>\n )}\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge tone={disabled || current ? `default` : `primary`}>{language.id}</Badge>\n </Flex>\n </Button>\n </Tooltip>\n )\n}\n","import {EditIcon} from '@sanity/icons'\nimport {Badge, Box, Button, Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {type SanityDocument, useClient} from 'sanity'\n\nimport type {Language} from '../types'\n\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguagePatchProps = {\n language: Language\n source: SanityDocument | null\n disabled: boolean\n}\n\n/**\n * Button component that patches the current document's language field to\n * the selected language. Displays the language name and ID badge, and shows\n * a success or error toast after the patch operation completes.\n */\nexport default function LanguagePatch(props: LanguagePatchProps) {\n const {language, source} = props\n const {apiVersion, languageField} = useDocumentInternationalizationContext()\n const disabled = props.disabled || !source\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const handleClick = useCallback(() => {\n if (!source) {\n throw new Error(`Cannot patch missing document`)\n }\n\n const currentId = source._id\n\n client\n .patch(currentId)\n .set({[languageField]: language.id})\n .commit()\n .then(() => {\n toast.push({\n title: `Set document language to ${language.title}`,\n status: `success`,\n })\n return undefined\n })\n .catch((err: unknown) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to set document language to ${language.title}`,\n status: `error`,\n })\n })\n }, [source, client, languageField, language, toast])\n\n return (\n <Button mode=\"bleed\" onClick={handleClick} disabled={disabled} justify=\"flex-start\">\n <Flex gap={3} align=\"center\">\n <Text size={2}>\n <EditIcon />\n </Text>\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge>{language.id}</Badge>\n </Flex>\n </Button>\n )\n}\n","import {Box} from '@sanity/ui'\n\nexport default function ConstrainedBox({children}: {children: React.ReactNode}): React.JSX.Element {\n return <Box style={{maxWidth: 280}}>{children}</Box>\n}\n","import type {PropsWithChildren} from 'react'\n\nimport {Card, Flex, Text} from '@sanity/ui'\n\nimport ConstrainedBox from './ConstrainedBox'\n\n/**\n * Presentational component that renders a caution-toned card with centered\n * text inside a constrained-width box. Used to display warning messages\n * in the internationalization UI.\n */\nexport default function Warning({children}: PropsWithChildren) {\n return (\n <Card tone=\"caution\" padding={3}>\n <Flex justify=\"center\">\n <ConstrainedBox>\n <Text size={1} align=\"center\">\n {children}\n </Text>\n </ConstrainedBox>\n </Flex>\n </Card>\n )\n}\n","import type {ChangeEvent} from 'react'\n\nimport {TranslateIcon} from '@sanity/icons'\nimport {Box, Button, Card, Popover, Stack, Text, TextInput, useClickOutsideEvent} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {useEditState} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {DocumentInternationalizationMenuProps} from '../types'\n\nimport {useTranslationMetadata} from '../hooks/useLanguageMetadata'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\nimport LanguageManage from './LanguageManage'\nimport LanguageOption from './LanguageOption'\nimport LanguagePatch from './LanguagePatch'\nimport Warning from './Warning'\n\nexport function DocumentInternationalizationMenu(\n props: DocumentInternationalizationMenuProps,\n): React.JSX.Element | null {\n const {documentId} = props\n const schemaType = props.schemaType\n const {languageField, supportedLanguages} = useDocumentInternationalizationContext()\n\n // Search filter query\n const [query, setQuery] = useState(``)\n const handleQuery = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n if (event.currentTarget.value) {\n setQuery(event.currentTarget.value)\n } else {\n setQuery(``)\n }\n }, [])\n\n // UI Handlers\n const [open, setOpen] = useState(false)\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n const buttonRef = useRef<HTMLButtonElement>(null)\n const popoverRef = useRef<HTMLDivElement>(null)\n const handleClickOutside = useCallback(() => setOpen(false), [])\n useClickOutsideEvent(handleClickOutside, () => [buttonRef.current, popoverRef.current])\n\n // Get metadata from content lake\n const {data, loading, error} = useTranslationMetadata(documentId)\n const metadata = Array.isArray(data) && data.length ? data[0] : null\n\n // Optimistically set a metadata ID for a newly created metadata document\n // Cannot rely on generated metadata._id from useTranslationMetadata\n // As the document store might not have returned it before creating another translation\n const metadataId = useMemo(() => {\n if (loading) {\n return null\n }\n\n // Once created, these two values should be the same anyway\n return metadata?._id ?? uuid()\n }, [loading, metadata?._id])\n\n // Duplicate a new language version from the most recent version of this document\n const {draft, published} = useEditState(documentId, schemaType.name)\n const source = draft || published\n\n // Check for data issues\n const documentIsInOneMetadataDocument = useMemo(() => {\n return Array.isArray(data) && data.length <= 1\n }, [data])\n const rawLanguageValue = source?.[languageField]\n const sourceLanguageId = typeof rawLanguageValue === 'string' ? rawLanguageValue : undefined\n const sourceLanguageIsValid = supportedLanguages.some((l) => l.id === sourceLanguageId)\n const allLanguagesAreValid = useMemo(() => {\n const valid = supportedLanguages.every((l) => l.id && l.title)\n if (!valid) {\n console.warn(\n `Not all languages are valid. It should be an array of objects with an \"id\" and \"title\" property. Or a function that returns an array of objects with an \"id\" and \"title\" property.`,\n supportedLanguages,\n )\n }\n\n return valid\n }, [supportedLanguages])\n\n const content = (\n <Box padding={1}>\n {error ? (\n <Card tone=\"critical\" padding={1}>\n <Text>There was an error returning translations metadata</Text>\n </Card>\n ) : (\n <Stack space={1}>\n <LanguageManage\n id={metadata?._id}\n documentId={documentId}\n metadataId={metadataId}\n schemaType={schemaType}\n sourceLanguageId={sourceLanguageId}\n />\n {supportedLanguages.length > 4 ? (\n <TextInput onChange={handleQuery} value={query} placeholder=\"Filter languages\" />\n ) : null}\n {supportedLanguages.length > 0 ? (\n <>\n {/* Once metadata is loaded, there may be issues */}\n {loading ? null : (\n <>\n {/* Not all languages are valid */}\n {data && documentIsInOneMetadataDocument ? null : (\n <Warning>\n {/* TODO: Surface these documents to the user */}\n This document has been found in more than one Translations Metadata document\n </Warning>\n )}\n {/* Not all languages are valid */}\n {allLanguagesAreValid ? null : (\n <Warning>Not all language objects are valid. See the console.</Warning>\n )}\n {/* Current document has no language field */}\n {sourceLanguageId ? null : (\n <Warning>\n Choose a language to apply to <strong>this Document</strong>\n </Warning>\n )}\n {/* Current document has an invalid language field */}\n {sourceLanguageId && !sourceLanguageIsValid ? (\n <Warning>\n Select a supported language. Current language value:{' '}\n <code>{sourceLanguageId}</code>\n </Warning>\n ) : null}\n </>\n )}\n {supportedLanguages\n .filter((language) => {\n if (query) {\n return language.title.toLowerCase().includes(query.toLowerCase())\n }\n return true\n })\n .map((language) =>\n !loading && sourceLanguageId && sourceLanguageIsValid ? (\n // Button to duplicate this document to a new translation\n // And either create or update the metadata document\n <LanguageOption\n key={language.id}\n language={language}\n schemaType={schemaType}\n documentId={documentId}\n disabled={!allLanguagesAreValid}\n current={language.id === sourceLanguageId}\n metadata={metadata}\n metadataId={metadataId}\n source={source}\n sourceLanguageId={sourceLanguageId}\n />\n ) : (\n // Button to set a language field on *this* document\n <LanguagePatch\n key={language.id}\n source={source}\n language={language}\n // Only allow language patch change to:\n // - Keys not in metadata\n // - The key of this document in the metadata\n disabled={\n (loading ||\n !allLanguagesAreValid ||\n metadata?.translations\n .filter((t) => t?.value?._ref !== documentId)\n .some((t) => t[LANGUAGE_FIELD_NAME] === language.id)) ??\n false\n }\n />\n ),\n )}\n </>\n ) : null}\n </Stack>\n )}\n </Box>\n )\n\n const issueWithTranslations = !loading && sourceLanguageId && !sourceLanguageIsValid\n\n if (!documentId) {\n return null\n }\n\n if (!schemaType || !schemaType.name) {\n return null\n }\n\n return (\n <Popover\n animate\n constrainSize\n content={content}\n open={open}\n portal\n ref={popoverRef}\n overflow=\"auto\"\n tone=\"default\"\n >\n <Button\n text=\"Translations\"\n mode=\"bleed\"\n disabled={!source}\n tone={!source || loading || !issueWithTranslations ? undefined : `caution`}\n icon={TranslateIcon}\n onClick={handleClick}\n ref={buttonRef}\n selected={open}\n />\n </Popover>\n )\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {type ButtonTone, useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {\n type DocumentActionDescription,\n type DocumentActionProps,\n type KeyedObject,\n type Reference,\n type TypedObject,\n useClient,\n} from 'sanity'\n\nimport {API_VERSION, TRANSLATIONS_ARRAY_NAME} from '../constants'\n\ntype TranslationReference = TypedObject &\n KeyedObject & {\n value: Reference\n }\n\n/**\n * Document action that deletes a translation metadata document along with all\n * its referenced translation documents. Opens a confirmation dialog showing\n * how many translations will be deleted. Executes a single transaction that\n * unsets the translations array, deletes each referenced document (both\n * published and draft), and finally deletes the metadata document itself.\n */\nexport const useDeleteMetadataAction = (props: DocumentActionProps): DocumentActionDescription => {\n const {id: documentId, published, draft} = props\n const doc = draft || published\n\n const [isDialogOpen, setDialogOpen] = useState(false)\n const onClose = useCallback(() => setDialogOpen(false), [])\n const translations: TranslationReference[] = useMemo(\n () =>\n doc && Array.isArray(doc[TRANSLATIONS_ARRAY_NAME])\n ? // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (doc[TRANSLATIONS_ARRAY_NAME] as TranslationReference[])\n : [],\n [doc],\n )\n\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n\n // Remove translation reference and delete document in one transaction\n const onProceed = useCallback(() => {\n const tx = client.transaction()\n\n tx.patch(documentId, (patch) => patch.unset([TRANSLATIONS_ARRAY_NAME]))\n\n if (translations.length > 0) {\n translations.forEach((translation) => {\n tx.delete(translation.value._ref)\n tx.delete(`drafts.${translation.value._ref}`)\n })\n }\n\n tx.delete(documentId)\n // Shouldn't exist as this document type is in liveEdit\n tx.delete(`drafts.${documentId}`)\n\n tx.commit()\n .then(() => {\n onClose()\n\n toast.push({\n status: 'success',\n title: 'Deleted document and translations',\n })\n return undefined\n })\n .catch((err: Error) => {\n toast.push({\n status: 'error',\n title: 'Failed to delete document and translations',\n description: err.message,\n })\n })\n }, [client, translations, documentId, onClose, toast])\n\n return {\n label: `Delete all translations`,\n disabled: !doc || !translations.length,\n icon: TrashIcon,\n tone: 'critical' as ButtonTone,\n onHandle: () => {\n setDialogOpen(true)\n },\n dialog: isDialogOpen && {\n type: 'confirm',\n onCancel: onClose,\n onConfirm: () => {\n onProceed()\n onClose()\n },\n tone: 'critical' as ButtonTone,\n message:\n translations.length === 1\n ? `Delete 1 translation and this document`\n : `Delete all ${translations.length} translations and this document`,\n },\n }\n}\n","import type {DocumentBadgeDescription, DocumentBadgeProps} from 'sanity'\n\nimport {useDocumentInternationalizationContext} from '../components/DocumentInternationalizationContext'\n\n/**\n * Document badge that displays the language identifier of a document.\n * Reads the configured `languageField` from the draft or published document,\n * looks up the matching language in `supportedLanguages` to resolve the title,\n * and returns a badge descriptor with `primary` color. Returns `null` when\n * no document exists or the language field is empty/non-string.\n */\nexport function LanguageBadge(props: DocumentBadgeProps): DocumentBadgeDescription | null {\n const source = props?.draft || props?.published\n const {languageField, supportedLanguages} = useDocumentInternationalizationContext()\n const languageId = source?.[languageField]\n\n if (!languageId || typeof languageId !== 'string') {\n return null\n }\n\n const language = Array.isArray(supportedLanguages)\n ? supportedLanguages.find((l) => l.id === languageId)\n : null\n\n // Currently we only show the language id if the supportedLanguages are async\n return {\n label: language?.id ?? languageId,\n title: language?.title ?? undefined,\n color: `primary`,\n }\n}\n","import {Card, Spinner} from '@sanity/ui'\nimport {useEffect, useMemo} from 'react'\nimport {Preview, useEditState, useSchema, useValidationStatus} from 'sanity'\n\ntype DocumentCheckProps = {\n id: string\n onCheckComplete: (id: string) => void\n addInvalidId: (id: string) => void\n removeInvalidId: (id: string) => void\n addDraftId: (id: string) => void\n removeDraftId: (id: string) => void\n}\n\n// Check if the document has a draft\n// Check if that draft is valid\n// Report back to parent that it can be added to bulk publish\nexport default function DocumentCheck(props: DocumentCheckProps) {\n const {id, onCheckComplete, addInvalidId, removeInvalidId, addDraftId, removeDraftId} = props\n // Use empty string for type initially - we get the actual type from the loaded document\n const editState = useEditState(id, '')\n const documentType = editState.draft?._type ?? editState.published?._type ?? ''\n const {isValidating, validation = []} = useValidationStatus(id, documentType, false)\n const schema = useSchema()\n\n const validationHasErrors = useMemo(() => {\n return !isValidating && validation.some((item) => item.level === 'error')\n }, [isValidating, validation])\n\n useEffect(() => {\n if (validationHasErrors) {\n addInvalidId(id)\n } else {\n removeInvalidId(id)\n }\n\n if (editState.draft) {\n addDraftId(id)\n } else {\n removeDraftId(id)\n }\n\n if (!isValidating) {\n onCheckComplete(id)\n }\n }, [\n addDraftId,\n addInvalidId,\n editState.draft,\n id,\n isValidating,\n onCheckComplete,\n removeDraftId,\n removeInvalidId,\n validationHasErrors,\n ])\n\n // We only care about drafts\n if (!editState.draft) {\n return null\n }\n\n const schemaType = schema.get(editState.draft._type)\n\n return (\n <Card border padding={2} tone={validationHasErrors ? `critical` : `positive`}>\n {editState.draft && schemaType ? (\n <Preview layout=\"default\" value={editState.draft} schemaType={schemaType} />\n ) : (\n <Spinner />\n )}\n </Card>\n )\n}\n","import type {ComponentType, PropsWithChildren} from 'react'\n\nimport {Box, type ButtonTone, Text, Tooltip} from '@sanity/ui'\nimport {TextWithTone} from 'sanity'\n\ntype InfoIconProps = PropsWithChildren & {\n icon: ComponentType\n tone: ButtonTone\n text?: string\n}\n\nexport default function InfoIcon(props: InfoIconProps) {\n const {text, icon, tone, children} = props\n const Icon = icon\n\n return (\n <Tooltip\n animate\n portal\n content={\n children ? (\n <>{children}</>\n ) : (\n <Box padding={2}>\n <Text size={1}>{text}</Text>\n </Box>\n )\n }\n >\n <TextWithTone tone={tone} size={1}>\n <Icon />\n </TextWithTone>\n </Tooltip>\n )\n}\n","import {InfoOutlineIcon} from '@sanity/icons'\nimport {Box, Stack, Text} from '@sanity/ui'\n\nimport InfoIcon from './InfoIcon'\n\nexport default function Info() {\n return (\n <InfoIcon icon={InfoOutlineIcon} tone=\"primary\">\n <Stack padding={3} space={4} style={{maxWidth: 250}}>\n <Box>\n <Text size={1}>Bulk publishing uses the Scheduling API.</Text>\n </Box>\n <Box>\n <Text size={1}>\n Customized Document Actions in the Studio will not execute. Webhooks will execute.\n </Text>\n </Box>\n <Box>\n <Text size={1}>\n Validation is checked before rendering the button below, but the Scheduling API will not\n check for – or enforce – validation.\n </Text>\n </Box>\n </Stack>\n </InfoIcon>\n )\n}\n","import {Button, Card, Dialog, Inline, Stack, Text, useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {TextWithTone, useClient, useWorkspace} from 'sanity'\n\nimport type {TranslationReference} from '../../types'\n\nimport {API_VERSION} from '../../constants'\nimport DocumentCheck from './DocumentCheck'\nimport Info from './Info'\n\nexport type BulkPublishProps = {\n translations: TranslationReference[]\n}\n\n// A root-level component with UI for hitting the Publishing API\nexport default function BulkPublish(props: BulkPublishProps) {\n const {translations} = props\n const client = useClient({apiVersion: API_VERSION})\n const {projectId, dataset} = useWorkspace()\n const toast = useToast()\n const [invalidIds, setInvalidIds] = useState<string[] | null>(null)\n const [checkedIds, setCheckedIds] = useState<string[]>([])\n\n const onCheckComplete = useCallback((id: string) => {\n setCheckedIds((ids) => Array.from(new Set([...ids, id])))\n }, [])\n\n // Handle dialog\n const [open, setOpen] = useState(false)\n const onOpen = useCallback(() => setOpen(true), [])\n const onClose = useCallback(() => setOpen(false), [])\n\n const addInvalidId = useCallback((id: string) => {\n setInvalidIds((ids) => (ids ? Array.from(new Set([...ids, id])) : [id]))\n }, [])\n\n const removeInvalidId = useCallback((id: string) => {\n setInvalidIds((ids) => (ids ? ids.filter((i) => i !== id) : []))\n }, [])\n\n const [draftIds, setDraftIds] = useState<string[]>([])\n\n const addDraftId = useCallback((id: string) => {\n setDraftIds((ids) => Array.from(new Set([...ids, id])))\n }, [])\n\n const removeDraftId = useCallback((id: string) => {\n setDraftIds((ids) => ids.filter((i) => i !== id))\n }, [])\n\n const handleBulkPublish = useCallback(() => {\n const body = translations.map((translation) => ({\n documentId: translation.value._ref,\n }))\n client\n .request({\n uri: `/publish/${projectId}/${dataset}`,\n method: 'POST',\n body,\n })\n .then(() => {\n toast.push({\n status: 'success',\n title: 'Success',\n description: 'Bulk publish complete',\n })\n return undefined\n })\n .catch((err: Error) => {\n console.error(err)\n toast.push({\n status: 'error',\n title: 'Error',\n description: 'Bulk publish failed',\n })\n })\n }, [translations, client, projectId, dataset, toast])\n\n const disabled =\n // Not all documents have been checked\n checkedIds.length !== translations.length ||\n // Some document(s) are invalid\n Boolean(invalidIds && invalidIds?.length > 0) ||\n // No documents are drafts\n !draftIds.length\n\n return translations?.length > 0 ? (\n <Card padding={4} border radius={2}>\n <Stack space={3}>\n <Inline space={3}>\n <Text weight=\"bold\" size={1}>\n Bulk publishing\n </Text>\n <Info />\n </Inline>\n\n <Stack>\n <Button onClick={onOpen} text=\"Prepare bulk publishing\" mode=\"ghost\" />\n </Stack>\n\n {open && (\n <Dialog\n animate\n header=\"Bulk publishing\"\n id=\"bulk-publish-dialog\"\n onClose={onClose}\n zOffset={1000}\n width={3}\n >\n <Stack space={4} padding={4}>\n {draftIds.length > 0 ? (\n <Stack space={2}>\n <Text size={1}>\n There{' '}\n {draftIds.length === 1\n ? `is 1 draft document`\n : `are ${draftIds.length} draft documents`}\n .\n </Text>\n {invalidIds && invalidIds.length > 0 ? (\n <TextWithTone tone=\"critical\" size={1}>\n {invalidIds.length === 1\n ? `1 draft document has`\n : `${invalidIds.length} draft documents have`}{' '}\n validation issues that must be addressed first\n </TextWithTone>\n ) : (\n <TextWithTone tone=\"positive\" size={1}>\n All drafts are valid and can be bulk published\n </TextWithTone>\n )}\n </Stack>\n ) : null}\n\n <Stack space={1}>\n {translations\n .filter((translation) => translation?.value?._ref)\n .map((translation) => (\n <DocumentCheck\n key={translation._key}\n id={translation.value._ref}\n onCheckComplete={onCheckComplete}\n addInvalidId={addInvalidId}\n removeInvalidId={removeInvalidId}\n addDraftId={addDraftId}\n removeDraftId={removeDraftId}\n />\n ))}\n </Stack>\n {draftIds.length > 0 ? (\n <Button\n mode=\"ghost\"\n tone={invalidIds && invalidIds?.length > 0 ? 'caution' : 'positive'}\n text={\n draftIds.length === 1\n ? `Publish draft document`\n : `Bulk publish ${draftIds.length} draft documents`\n }\n onClick={handleBulkPublish}\n disabled={disabled}\n />\n ) : (\n <Text muted size={1}>\n No draft documents to publish\n </Text>\n )}\n </Stack>\n </Dialog>\n )}\n </Stack>\n </Card>\n ) : null\n}\n","import {useEffect} from 'react'\nimport {PatchEvent, unset, useClient, useEditState} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport type {TranslationReference} from '../../types'\n\nimport {API_VERSION} from '../../constants'\n\ntype ReferencePatcherProps = {\n translation: TranslationReference\n documentType: string\n metadataId: string\n}\n\n// For every reference, check if it is published, and if so, strengthen the reference\nexport default function ReferencePatcher(props: ReferencePatcherProps) {\n const {translation, documentType, metadataId} = props\n const editState = useEditState(translation.value._ref, documentType)\n const client = useClient({apiVersion: API_VERSION})\n const {onChange} = useDocumentPane()\n\n useEffect(() => {\n if (\n // We have a reference\n translation.value._ref &&\n // It's still weak and not-yet-strengthened\n translation.value._weak &&\n // We also want to keep this check because maybe the user *configured* weak refs\n translation.value._strengthenOnPublish &&\n // The referenced document has just been published\n !editState.draft &&\n editState.published &&\n editState.ready\n ) {\n const referencePathBase = ['translations', {_key: translation._key}, 'value']\n\n onChange(\n new PatchEvent([\n unset([...referencePathBase, '_weak']),\n unset([...referencePathBase, '_strengthenOnPublish']),\n ]),\n )\n }\n }, [translation, editState, metadataId, client, onChange])\n\n return null\n}\n","import type {TranslationReference} from '../../types'\n\nimport ReferencePatcher from './ReferencePatcher'\n\ntype OptimisticallyStrengthenProps = {\n translations: TranslationReference[]\n metadataId: string\n}\n\n// There's no good reason to leave published references as weak\n// So this component will run on every render and strengthen them\nexport default function OptimisticallyStrengthen(props: OptimisticallyStrengthenProps) {\n const {translations = [], metadataId} = props\n\n if (!translations.length) {\n return null\n }\n\n return (\n <>\n {translations.map((translation) =>\n translation.value._strengthenOnPublish?.type ? (\n <ReferencePatcher\n key={translation._key}\n translation={translation}\n documentType={translation.value._strengthenOnPublish.type}\n metadataId={metadataId}\n />\n ) : null,\n )}\n </>\n )\n}\n","import {TranslateIcon} from '@sanity/icons'\nimport {defineField, defineType, type DocumentDefinition, type FieldDefinition} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {TranslationReference} from '../../types'\n\nimport {METADATA_SCHEMA_NAME, TRANSLATIONS_ARRAY_NAME} from '../../constants'\n\n/**\n * Creates the `translation.metadata` document schema definition. This schema\n * type stores the array of translation references linking all language versions\n * of a document together, along with the allowed schema types and any custom\n * metadata fields provided by the plugin consumer. The document uses `liveEdit`\n * so changes are published immediately without drafts.\n */\nexport default (schemaTypes: string[], metadataFields: FieldDefinition[]): DocumentDefinition =>\n defineType({\n type: 'document',\n name: METADATA_SCHEMA_NAME,\n title: 'Translation metadata',\n icon: TranslateIcon,\n liveEdit: true,\n fields: [\n defineField({\n name: TRANSLATIONS_ARRAY_NAME,\n type: 'internationalizedArrayReference',\n }),\n defineField({\n name: 'schemaTypes',\n description:\n 'Optional: Used to filter the reference fields above so all translations share the same types.',\n type: 'array',\n of: [{type: 'string'}],\n options: {list: schemaTypes},\n readOnly: ({value}) => Boolean(value),\n }),\n ...metadataFields,\n ],\n preview: {\n select: {\n translations: TRANSLATIONS_ARRAY_NAME,\n documentSchemaTypes: 'schemaTypes',\n },\n prepare(selection) {\n const {translations = [], documentSchemaTypes = []} = selection\n const title =\n translations.length === 1 ? `1 Translation` : `${translations.length} Translations`\n const languageKeys = translations.length\n ? translations\n .map((t: TranslationReference) => t[LANGUAGE_FIELD_NAME].toUpperCase())\n .join(', ')\n : ``\n const subtitle = [\n languageKeys ? `(${languageKeys})` : null,\n documentSchemaTypes?.length ? documentSchemaTypes.map((s: string) => s).join(`, `) : ``,\n ]\n .filter(Boolean)\n .join(` `)\n\n return {\n title,\n subtitle,\n }\n },\n },\n })\n","import {Stack} from '@sanity/ui'\nimport {defineField, definePlugin, isSanityDocument} from 'sanity'\nimport {internationalizedArray, LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {PluginConfig, TranslationReference} from './types'\n\nimport {useDeleteMetadataAction} from './actions/DeleteMetadataAction'\nimport {LanguageBadge} from './badges'\nimport BulkPublish from './components/BulkPublish'\nimport {DocumentInternationalizationProvider} from './components/DocumentInternationalizationContext'\nimport {DocumentInternationalizationMenu} from './components/DocumentInternationalizationMenu'\nimport OptimisticallyStrengthen from './components/OptimisticallyStrengthen'\nimport {API_VERSION, DEFAULT_CONFIG, METADATA_SCHEMA_NAME} from './constants'\nimport {documentInternationalizationUsEnglishLocaleBundle} from './i18n'\nimport metadata from './schema/translation/metadata'\n\nexport const documentInternationalization = definePlugin<PluginConfig>((config) => {\n const pluginConfig = {...DEFAULT_CONFIG, ...config}\n const {supportedLanguages, schemaTypes, languageField, bulkPublish, metadataFields} = pluginConfig\n\n if (schemaTypes.length === 0) {\n throw new Error(\n 'You must specify at least one schema type on which to enable document internationalization. Update the `schemaTypes` option in the documentInternationalization() configuration.',\n )\n }\n\n return {\n name: '@sanity/document-internationalization',\n\n studio: {\n components: {\n layout: (props) => (\n <DocumentInternationalizationProvider {...props} pluginConfig={pluginConfig} />\n ),\n },\n },\n\n i18n: {\n bundles: [documentInternationalizationUsEnglishLocaleBundle],\n },\n\n // Adds:\n // - A bulk-publishing UI component to the form\n // - Will only work for projects on a compatible plan\n form: {\n components: {\n input: (props) => {\n if (\n props.id === 'root' &&\n props.schemaType.name === METADATA_SCHEMA_NAME &&\n isSanityDocument(props?.value)\n ) {\n const metadataId = props?.value?._id\n const translations =\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (props?.value?.['translations'] as TranslationReference[]) ?? []\n const weakAndTypedTranslations = translations.filter(\n ({value}) => value?._weak && value._strengthenOnPublish,\n )\n\n return (\n <Stack space={5}>\n {bulkPublish ? <BulkPublish translations={translations} /> : null}\n {weakAndTypedTranslations.length > 0 ? (\n <OptimisticallyStrengthen\n metadataId={metadataId}\n translations={weakAndTypedTranslations}\n />\n ) : null}\n {props.renderDefault(props)}\n </Stack>\n )\n }\n\n return props.renderDefault(props)\n },\n },\n },\n\n // Adds:\n // - The `Translations` dropdown to the editing form\n // - `Badges` to documents with a language value\n // - The `DeleteMetadataAction` action to the metadata document type\n document: {\n unstable_languageFilter: (prev, ctx) => {\n const {schemaType, documentId} = ctx\n\n return schemaTypes.includes(schemaType) && documentId\n ? [...prev, (props) => DocumentInternationalizationMenu({...props, documentId})]\n : prev\n },\n badges: (prev, {schemaType}) => {\n if (!schemaTypes.includes(schemaType)) {\n return prev\n }\n\n return [(props) => LanguageBadge(props), ...prev]\n },\n actions: (prev, {schemaType}) => {\n if (schemaType === METADATA_SCHEMA_NAME) {\n return [...prev, useDeleteMetadataAction]\n }\n\n return prev\n },\n },\n\n // Adds:\n // - The `Translations metadata` document type to the schema\n schema: {\n // Create the metadata document type\n types: [metadata(schemaTypes, metadataFields)],\n\n // For every schema type this plugin is enabled on\n // Create an initial value template to set the language\n templates: (prev, {schema}) => {\n // Templates are not setup for async languages\n if (!Array.isArray(supportedLanguages)) {\n return prev\n }\n\n const parameterizedTemplates = schemaTypes.map((schemaType) => ({\n id: `${schemaType}-parameterized`,\n title: `${schema?.get(schemaType)?.title ?? schemaType}: with Language`,\n schemaType,\n parameters: [{name: `languageId`, title: `Language ID`, type: `string`}],\n value: ({languageId}: {languageId: string}) => ({\n [languageField]: languageId,\n }),\n }))\n\n const staticTemplates = schemaTypes.flatMap((schemaType) => {\n return supportedLanguages.map((language) => ({\n id: `${schemaType}-${language.id}`,\n title: `${language.title} ${schema?.get(schemaType)?.title ?? schemaType}`,\n schemaType,\n value: {\n [languageField]: language.id,\n },\n }))\n })\n\n return [...prev, ...parameterizedTemplates, ...staticTemplates]\n },\n },\n\n // Uses:\n // - `sanity-plugin-internationalized-array` to maintain the translations array\n plugins: [\n // Translation metadata stores its references using this plugin\n // It cuts down on attribute usage and gives UI conveniences to add new translations\n internationalizedArray({\n apiVersion: pluginConfig.apiVersion,\n languages: supportedLanguages,\n fieldTypes: [\n defineField(\n {\n name: 'reference',\n type: 'reference',\n to: schemaTypes.map((type) => ({type})),\n weak: pluginConfig.weakReferences,\n // Reference filters don't actually enforce validation!\n validation: (Rule) =>\n // @ts-expect-error - fix typings\n Rule.custom(async (item: TranslationReference, context) => {\n if (!item?.value?._ref || !item?.[LANGUAGE_FIELD_NAME]) {\n return true\n }\n\n const client = context.getClient({apiVersion: API_VERSION})\n const valueLanguage = await client.fetch(\n `*[_id in [$ref, $draftRef]][0].${languageField}`,\n {\n ref: item.value._ref,\n draftRef: `drafts.${item.value._ref}`,\n },\n )\n\n if (valueLanguage && valueLanguage === item[LANGUAGE_FIELD_NAME]) {\n return true\n }\n\n return `Referenced document does not have the correct language value`\n }),\n options: {\n // @ts-expect-error - Update type once it knows the values of this filter\n filter: ({parent, document}) => {\n if (!parent) return null\n\n // I'm not sure in what instance there's an array of parents\n // But the Type suggests it's possible\n const parentArray = Array.isArray(parent) ? parent : [parent]\n const language = parentArray.find((p) => p[LANGUAGE_FIELD_NAME])\n\n if (!language?.[LANGUAGE_FIELD_NAME]) return null\n\n if (document['schemaTypes']) {\n return {\n filter: `_type in $schemaTypes && ${languageField} == $language`,\n params: {\n schemaTypes: document['schemaTypes'],\n language: language[LANGUAGE_FIELD_NAME],\n },\n }\n }\n\n return {\n filter: `${languageField} == $language`,\n params: {language: language[LANGUAGE_FIELD_NAME]},\n }\n },\n },\n },\n {strict: false},\n ),\n ],\n }),\n ],\n }\n})\n"],"names":["DocumentPreview","props","$","_c","schema","useSchema","t0","type","get","schemaType","t1","Symbol","for","value","METADATA_SCHEMA_NAME","TRANSLATIONS_ARRAY_NAME","API_VERSION","DEFAULT_CONFIG","supportedLanguages","schemaTypes","languageField","weakReferences","bulkPublish","metadataFields","apiVersion","allowCreateMetaDoc","callback","separateReferences","data","translations","otherReferences","length","forEach","doc","_type","push","DeleteTranslationDialog","documentId","setTranslations","id","t2","params","initialValue","loading","useListeningQuery","t3","t4","t5","t6","useEffect","t7","t8","t9","t10","map","_temp","t11","_temp2","t12","t13","t14","reference","_id","translation","DeleteTranslationFooter","onClose","onProceed","DocumentInternationalizationContext","createContext","useDocumentInternationalizationContext","useContext","promiseCache","Map","createCacheKey","workspaceId","createOrGetPromise","fn","cacheKey","cached","promise","set","DocumentInternationalizationProvider","pluginConfig","client","useClient","useWorkspace","name","bb0","Array","isArray","languagesPromise","use","renderDefault","useDeleteTranslationAction","published","draft","isDialogOpen","setDialogOpen","useState","rawDocumentLanguage","documentLanguage","toast","useToast","tx","transaction","operation","patch","unset","LANGUAGE_FIELD_NAME","delete","commit","then","status","title","description","catch","err","message","header","content","footer","label","disabled","icon","TrashIcon","tone","onHandle","dialog","action","displayName","DeleteTranslationAction","query","useTranslationMetadata","translationSchema","error","documenti18nLocaleNamespace","documentInternationalizationUsEnglishLocaleBundle","defineLocaleResourceBundle","locale","namespace","resources","DISABLED_REASON_KEY","METADATA_NOT_FOUND","MULTIPLE_METADATA","NOTHING_TO_DUPLICATE","NOT_READY","useDuplicateWithTranslationsAction","onComplete","documentStore","useDocumentStore","duplicate","useDocumentOperation","navigateIntent","useRouter","isDuplicating","setDuplicating","permission","permissions","isPermissionsLoading","useDocumentPairPermissions","isMetadataDocumentLoading","hasOneMetadataDocument","metadataDocument","DEFAULT_STUDIO_CLIENT_OPTIONS","t","s","useTranslation","structureLocaleNamespace","d","currentUser","useCurrentUser","pair","Promise","reject","Error","translationsArray","all","dupeId","uuid","docId","_ref","trim","duplicateTranslation","firstValueFrom","editOperations","pipe","filter","duplicateTranslationSuccess","operationEvents","execute","duplicateMetadata","_temp3","duplicateMetadataSuccess","_temp4","dupeId_0","Object","fromEntries","from","entries","_temp5","values","at","console","finally","handle","granted","CopyIcon","Boolean","DuplicateWithTranslationsAction","op","e","op_0","e_0","locale_0","useOpenInNewPane","router","routerPanesState","groupIndex","usePaneRouter","panes","splice","href","resolvePathFromState","navigateUrl","path","createReference","language","ref","strengthenOnPublish","_weak","_strengthenOnPublish","LanguageManage","metadataId","sourceLanguageId","open","openCreated","userHasClicked","setUserHasClicked","canCreate","sourceReference","newMetadataDocument","createIfNotExists","handleClick","CogIcon","removeExcludedPaths","isDocumentSchemaType","pathsToExclude","extractPaths","field","options","documentInternationalization","exclude","pathToString","Mutation","mutations","apply","result","fields","fieldPath","fieldSchema","extractWithPath","thisFieldWithPath","jsonType","innerFields","of","some","item","arrayValue","_key","itemPath","itemSchema","find","arrayMember","LanguageOption","current","source","metadata","undefined","handleOpen","_createdAt","newTranslationDocumentId","newTranslationDocument","create","newTranslationReference","metadataPatch","setIfMissing","insert","metadataExisted","sourceDocument","newDocument","destinationLanguageId","metaDocumentId","handleCreate","LanguagePatch","currentId","ConstrainedBox","children","maxWidth","Warning","DocumentInternationalizationMenu","setQuery","event","currentTarget","handleQuery","setOpen","buttonRef","useRef","popoverRef","handleClickOutside","useClickOutsideEvent","useEditState","documentIsInOneMetadataDocument","rawLanguageValue","l","sourceLanguageIsValid","every","valid","warn","allLanguagesAreValid","toLowerCase","includes","language_0","t_0","issueWithTranslations","TranslateIcon","l_0","o","useDeleteMetadataAction","onCancel","onConfirm","LanguageBadge","languageId","color","DocumentCheck","onCheckComplete","addInvalidId","removeInvalidId","addDraftId","removeDraftId","editState","documentType","isValidating","validation","useValidationStatus","validationHasErrors","level","InfoIcon","text","Icon","Info","InfoOutlineIcon","BulkPublish","projectId","dataset","invalidIds","setInvalidIds","checkedIds","setCheckedIds","ids","Set","onOpen","id_0","ids_0","id_1","ids_1","i","draftIds","setDraftIds","id_2","ids_2","id_3","ids_3","i_0","body","request","uri","method","handleBulkPublish","translation_1","translation_0","ReferencePatcher","onChange","useDocumentPane","ready","referencePathBase","PatchEvent","OptimisticallyStrengthen","defineType","liveEdit","defineField","list","readOnly","preview","select","documentSchemaTypes","prepare","selection","languageKeys","toUpperCase","join","subtitle","definePlugin","config","studio","components","layout","i18n","bundles","form","input","isSanityDocument","weakAndTypedTranslations","document","unstable_languageFilter","prev","ctx","badges","actions","types","templates","parameterizedTemplates","parameters","staticTemplates","flatMap","plugins","internationalizedArray","languages","fieldTypes","to","weak","Rule","custom","context","valueLanguage","getClient","fetch","draftRef","parent","p","strict"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/DeleteTranslationDialog/DocumentPreview.tsx","../src/constants.ts","../src/components/DeleteTranslationDialog/separateReferences.ts","../src/components/DeleteTranslationDialog/index.tsx","../src/components/DeleteTranslationFooter.tsx","../src/components/DocumentInternationalizationContext.tsx","../src/actions/DeleteTranslationAction.tsx","../src/hooks/useLanguageMetadata.tsx","../src/i18n/index.ts","../src/actions/DuplicateWithTranslationsAction.tsx","../src/hooks/useOpenInNewPane.tsx","../src/utils/createReference.ts","../src/components/LanguageManage.tsx","../src/utils/excludePaths.ts","../src/components/LanguageOption.tsx","../src/components/LanguagePatch.tsx","../src/components/ConstrainedBox.tsx","../src/components/Warning.tsx","../src/components/DocumentInternationalizationMenu.tsx","../src/actions/DeleteMetadataAction.tsx","../src/badges/index.tsx","../src/components/BulkPublish/DocumentCheck.tsx","../src/components/BulkPublish/InfoIcon.tsx","../src/components/BulkPublish/Info.tsx","../src/components/BulkPublish/index.tsx","../src/components/OptimisticallyStrengthen/ReferencePatcher.tsx","../src/components/OptimisticallyStrengthen/index.tsx","../src/schema/translation/metadata.ts","../src/plugin.tsx"],"sourcesContent":["import {Preview, useSchema} from 'sanity'\nimport {Feedback} from 'sanity-plugin-utils'\n\ntype DocumentPreviewProps = {\n value: unknown\n type: string\n}\n\n// Wrapper of Preview just so that the schema type is satisfied by schema.get()\nexport default function DocumentPreview(props: DocumentPreviewProps) {\n const schema = useSchema()\n\n const schemaType = schema.get(props.type)\n if (!schemaType) {\n return <Feedback tone=\"critical\" title=\"Schema type not found\" />\n }\n\n return <Preview value={props.value} schemaType={schemaType} />\n}\n","import type {PluginConfigContext} from './types'\n\nexport const METADATA_SCHEMA_NAME = `translation.metadata`\nexport const TRANSLATIONS_ARRAY_NAME = `translations`\nexport const API_VERSION = `2025-02-19`\nexport const DEFAULT_CONFIG: PluginConfigContext = {\n supportedLanguages: [],\n schemaTypes: [],\n languageField: `language`,\n weakReferences: false,\n bulkPublish: false,\n metadataFields: [],\n apiVersion: API_VERSION,\n allowCreateMetaDoc: false,\n callback: null,\n}\n","import type {SanityDocument} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME} from '../../constants'\n\n/**\n * Splits an array of referring documents into two groups: translation metadata\n * documents (whose `_type` matches the metadata schema name) and all other\n * references. Used by the delete-translation dialog to show which metadata\n * entries will be patched versus which external references may block deletion.\n */\nexport function separateReferences(data: SanityDocument[] | null = []): {\n translations: SanityDocument[]\n otherReferences: SanityDocument[]\n} {\n const translations: SanityDocument[] = []\n const otherReferences: SanityDocument[] = []\n\n if (data && data.length > 0) {\n data.forEach((doc) => {\n if (doc._type === METADATA_SCHEMA_NAME) {\n translations.push(doc)\n } else {\n otherReferences.push(doc)\n }\n })\n }\n\n return {translations, otherReferences}\n}\n","import type {SanityDocument} from 'sanity'\n\nimport {Card, Flex, Spinner, Stack, Text} from '@sanity/ui'\nimport {useEffect, useMemo} from 'react'\nimport {useListeningQuery} from 'sanity-plugin-utils'\n\nimport type {MetadataDocument} from '../../types'\n\nimport DocumentPreview from './DocumentPreview'\nimport {separateReferences} from './separateReferences'\n\ntype DeleteTranslationDialogProps = {\n doc: SanityDocument\n documentId: string\n setTranslations: (translations: MetadataDocument[]) => void\n}\n\nexport default function DeleteTranslationDialog(props: DeleteTranslationDialogProps) {\n const {doc, documentId, setTranslations} = props\n\n // Get all references and check if any of them are translations metadata\n const {data, loading} = useListeningQuery<SanityDocument[]>(\n `*[references($id)]{_id, _type, translations}`,\n {\n params: {id: documentId},\n initialValue: [],\n },\n )\n const {translations, otherReferences} = useMemo(\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n () => separateReferences(data as SanityDocument[] | null),\n [data],\n )\n\n useEffect(() => {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n setTranslations(translations as MetadataDocument[])\n }, [setTranslations, translations])\n\n if (loading) {\n return (\n <Flex padding={4} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )\n }\n\n return (\n <Stack space={4}>\n {translations && translations.length > 0 ? (\n <Text>\n This document is a language-specific version which other translations depend on.\n </Text>\n ) : (\n <Text>This document does not have connected translations.</Text>\n )}\n <Card border padding={3}>\n <Stack space={4}>\n <Text size={1} weight=\"semibold\">\n {translations && translations.length > 0 ? (\n <>Before this document can be deleted</>\n ) : (\n <>This document can now be deleted</>\n )}\n </Text>\n <DocumentPreview value={doc} type={doc._type} />\n {translations && translations.length > 0 ? (\n <>\n <Card borderTop />\n <Text size={1} weight=\"semibold\">\n The reference in{' '}\n {translations.length === 1\n ? `this translations document`\n : `these translations documents`}{' '}\n must be removed\n </Text>\n {translations.map((translation) => (\n <DocumentPreview\n key={translation._id}\n value={translation}\n type={translation._type}\n />\n ))}\n </>\n ) : null}\n {otherReferences && otherReferences.length > 0 ? (\n <>\n <Card borderTop />\n <Text size={1} weight=\"semibold\">\n {otherReferences.length === 1\n ? `There is an additional reference`\n : `There are additional references`}{' '}\n to this document\n </Text>\n {otherReferences.map((reference) => (\n <DocumentPreview key={reference._id} value={reference} type={reference._type} />\n ))}\n </>\n ) : null}\n </Stack>\n </Card>\n {otherReferences.length === 0 ? (\n <Text>This document has no other references.</Text>\n ) : (\n <Text>\n You may not be able to delete this document because other documents refer to it.\n </Text>\n )}\n </Stack>\n )\n}\n","import {Button, Grid} from '@sanity/ui'\n\ntype DeleteTranslationFooterProps = {\n translations: unknown[]\n onClose: () => void\n onProceed: () => void\n}\n\nexport default function DeleteTranslationFooter(props: DeleteTranslationFooterProps) {\n const {translations, onClose, onProceed} = props\n\n return (\n <Grid columns={2} gap={2}>\n <Button text=\"Cancel\" onClick={onClose} mode=\"ghost\" />\n <Button\n text={\n translations && translations.length > 0\n ? `Unset translation reference`\n : `Delete document`\n }\n onClick={onProceed}\n tone=\"critical\"\n />\n </Grid>\n )\n}\n","import type {LayoutProps} from 'sanity'\n\nimport {createContext, use, useContext, useMemo} from 'react'\nimport {useClient, useWorkspace} from 'sanity'\n\nimport type {PluginConfig, PluginConfigContext} from '../types'\n\nimport {DEFAULT_CONFIG} from '../constants'\n\nconst DocumentInternationalizationContext = createContext<PluginConfigContext>(DEFAULT_CONFIG)\n\nexport function useDocumentInternationalizationContext(): PluginConfigContext {\n return useContext(DocumentInternationalizationContext)\n}\n\ntype DocumentInternationalizationProviderProps = LayoutProps & {\n pluginConfig: Required<PluginConfig>\n}\n\n// Simple promise cache for React.use\nconst promiseCache = new Map<string, Promise<PluginConfigContext['supportedLanguages']>>()\n\nfunction createCacheKey(workspaceId: string): string {\n return `languages-${workspaceId}`\n}\n\nfunction createOrGetPromise(\n fn: () => Promise<PluginConfigContext['supportedLanguages']>,\n cacheKey: string,\n): Promise<PluginConfigContext['supportedLanguages']> {\n const cached = promiseCache.get(cacheKey)\n if (cached) {\n return cached\n }\n const promise = fn()\n promiseCache.set(cacheKey, promise)\n return promise\n}\n\n/**\n * This Provider wraps the Studio and provides the DocumentInternationalization context to document actions and components.\n */\nexport function DocumentInternationalizationProvider(\n props: DocumentInternationalizationProviderProps,\n): React.JSX.Element {\n const {pluginConfig} = props\n\n const client = useClient({apiVersion: pluginConfig.apiVersion})\n const workspace = useWorkspace()\n\n // Use a stable workspace identifier\n const workspaceId = useMemo(() => workspace.name ?? '', [workspace])\n\n // Create cache key for promise caching\n const cacheKey = useMemo(() => createCacheKey(workspaceId), [workspaceId])\n\n // Fetch or return languages\n const languagesPromise = useMemo(() => {\n if (Array.isArray(pluginConfig.supportedLanguages)) {\n return null // Return null for synchronous arrays\n }\n\n // Create or get cached promise for React.use\n return createOrGetPromise(async () => {\n if (typeof pluginConfig.supportedLanguages === 'function') {\n return pluginConfig.supportedLanguages(client)\n }\n return pluginConfig.supportedLanguages\n }, cacheKey)\n }, [pluginConfig, client, cacheKey])\n\n // Use React.use to handle the promise with Suspense, or return array directly\n const supportedLanguages = languagesPromise\n ? use(languagesPromise)\n : // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (pluginConfig.supportedLanguages as PluginConfigContext['supportedLanguages'])\n\n return (\n <DocumentInternationalizationContext.Provider value={{...pluginConfig, supportedLanguages}}>\n {props.renderDefault(props)}\n </DocumentInternationalizationContext.Provider>\n )\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {type ButtonTone, useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {useClient, type DocumentActionDescription, type DocumentActionProps} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport DeleteTranslationDialog from '../components/DeleteTranslationDialog'\nimport DeleteTranslationFooter from '../components/DeleteTranslationFooter'\nimport {useDocumentInternationalizationContext} from '../components/DocumentInternationalizationContext'\nimport {API_VERSION, TRANSLATIONS_ARRAY_NAME} from '../constants'\nimport {type MetadataDocument} from '../types'\n\ntype DeleteOperation = 'DELETE' | 'UNSET'\n\n/**\n * Optional Document action that removes a single translation from the metadata document\n * and optionally deletes the translation document. Opens a confirmation dialog\n * showing which metadata entries reference the document and any other references\n * that may exist. When the document has translation references, those references\n * are unset; otherwise the document is deleted directly.\n *\n * To use it, you need to add it to the document actions config\n * ```\n * const translatedSchemaTypes = ['lesson', 'article'];\n * document: {\n * actions: (prev, {schemaType}) => {\n * if (translatedSchemaTypes.includes(schemaType)) {\n * return [...prev, useDeleteTranslationAction]\n * }\n * return prev\n * },\n * },\n * ```\n */\nexport const useDeleteTranslationAction = (\n props: DocumentActionProps,\n): DocumentActionDescription => {\n const {id: documentId, published, draft} = props\n const doc = draft || published\n const {languageField} = useDocumentInternationalizationContext()\n\n const [isDialogOpen, setDialogOpen] = useState(false)\n const [translations, setTranslations] = useState<MetadataDocument[]>([])\n const onClose = useCallback(() => setDialogOpen(false), [])\n const rawDocumentLanguage = doc ? doc[languageField] : null\n const documentLanguage = typeof rawDocumentLanguage === 'string' ? rawDocumentLanguage : null\n\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n // Remove translation reference and delete document in one transaction\n const onProceed = useCallback(() => {\n const tx = client.transaction()\n let operation: DeleteOperation = 'DELETE'\n\n if (documentLanguage && translations.length > 0) {\n operation = 'UNSET'\n translations.forEach((translation) => {\n tx.patch(translation._id, (patch) =>\n patch.unset([\n `${TRANSLATIONS_ARRAY_NAME}[${LANGUAGE_FIELD_NAME} == \"${documentLanguage}\"]`,\n ]),\n )\n })\n } else {\n tx.delete(documentId)\n tx.delete(`drafts.${documentId}`)\n }\n\n tx.commit()\n .then(() => {\n if (operation === 'DELETE') {\n onClose()\n }\n toast.push({\n status: 'success',\n title: operation === 'UNSET' ? 'Translation reference unset' : 'Document deleted',\n description: operation === 'UNSET' ? 'The document can now be deleted' : null,\n })\n return undefined\n })\n .catch((err: Error) => {\n toast.push({\n status: 'error',\n title:\n operation === 'UNSET'\n ? 'Failed to unset translation reference'\n : 'Failed to delete document',\n description: err.message,\n })\n })\n }, [client, documentLanguage, translations, documentId, onClose, toast])\n\n return {\n label: `Delete translation...`,\n disabled: !doc || !documentLanguage,\n icon: TrashIcon,\n tone: 'critical' as ButtonTone,\n onHandle: () => {\n setDialogOpen(true)\n },\n dialog: isDialogOpen && {\n type: 'dialog',\n onClose,\n header: 'Delete translation',\n content: doc ? (\n <DeleteTranslationDialog\n doc={doc}\n documentId={documentId}\n setTranslations={setTranslations}\n />\n ) : null,\n footer: (\n <DeleteTranslationFooter\n onClose={onClose}\n onProceed={onProceed}\n translations={translations}\n />\n ),\n },\n }\n}\n\nuseDeleteTranslationAction.action = 'deleteTranslation'\nuseDeleteTranslationAction.displayName = 'DeleteTranslationAction'\n\n/**\n * @deprecated use useDeleteTranslationAction instead\n * Will be removed in the next major version\n */\nexport const DeleteTranslationAction = (props: DocumentActionProps): DocumentActionDescription => {\n return useDeleteTranslationAction(props)\n}\n","import {useListeningQuery} from 'sanity-plugin-utils'\n\nimport type {Metadata} from '../types'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\n\n// Using references() seemed less reliable for updating the listener\n// results than querying raw values in the array\n// AFAIK: references is _faster_ when querying with GROQ\n// const query = `*[_type == $translationSchema && references($id)]`\nconst query = `*[_type == $translationSchema && $id in translations[].value._ref]{\n _id,\n _createdAt,\n translations\n}`\n\nexport function useTranslationMetadata(id: string): {\n data: Metadata[] | null\n loading: boolean\n error: unknown\n} {\n const {data, loading, error} = useListeningQuery<Metadata[]>(query, {\n params: {id, translationSchema: METADATA_SCHEMA_NAME},\n })\n\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n return {data: data as Metadata[] | null, loading, error}\n}\n","import {defineLocaleResourceBundle} from 'sanity'\n\n/**\n * The locale namespace for the document internationalization plugin.\n *\n * @public\n */\nexport const documenti18nLocaleNamespace = 'document-internationalization' as const\n\n/**\n * The default locale bundle for the document internationalization plugin, which is US English.\n *\n * @internal\n */\nexport const documentInternationalizationUsEnglishLocaleBundle = defineLocaleResourceBundle({\n locale: 'en-US',\n namespace: documenti18nLocaleNamespace,\n resources: () => import('./resources'),\n})\n","import {CopyIcon} from '@sanity/icons'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useMemo, useState} from 'react'\nimport {filter, firstValueFrom} from 'rxjs'\nimport {\n DEFAULT_STUDIO_CLIENT_OPTIONS,\n type Id,\n InsufficientPermissionsMessage,\n type PatchOperations,\n useClient,\n useCurrentUser,\n useDocumentOperation,\n useDocumentPairPermissions,\n useDocumentStore,\n useTranslation,\n type DocumentActionProps,\n type DocumentActionDescription,\n} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\nimport {useRouter} from 'sanity/router'\nimport {structureLocaleNamespace} from 'sanity/structure'\n\nimport {METADATA_SCHEMA_NAME, TRANSLATIONS_ARRAY_NAME} from '../constants'\nimport {useTranslationMetadata} from '../hooks/useLanguageMetadata'\nimport {documenti18nLocaleNamespace} from '../i18n'\n\n// Types for document store operations\ninterface EditOperations {\n duplicate: {disabled: string | false; execute: (id: string) => void}\n}\n\ninterface OperationSuccessEvent {\n op: string\n type: 'success' | 'error'\n}\n\nconst DISABLED_REASON_KEY = {\n METADATA_NOT_FOUND: 'action.duplicate.disabled.missing-metadata',\n MULTIPLE_METADATA: 'action.duplicate.disabled.multiple-metadata',\n NOTHING_TO_DUPLICATE: 'action.duplicate.disabled.nothing-to-duplicate',\n NOT_READY: 'action.duplicate.disabled.not-ready',\n}\n\n/**\n * Optional Document action that duplicates a document along with all its translations\n * and the associated metadata document. The workflow duplicates each translated\n * document, duplicates the metadata document, patches the new metadata to\n * reference the new translation copies, and navigates to the duplicated document.\n * Disabled when the user lacks permissions, metadata is missing or ambiguous,\n * or the underlying duplicate operation is unavailable.\n */\nexport const useDuplicateWithTranslationsAction = ({\n id,\n type,\n /* oxlint-disable-next-line typescript-eslint/no-deprecated -- kept for backwards compatibility */\n onComplete,\n}: DocumentActionProps): DocumentActionDescription => {\n const documentStore = useDocumentStore()\n const {duplicate} = useDocumentOperation(id, type)\n const {navigateIntent} = useRouter()\n const [isDuplicating, setDuplicating] = useState(false)\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'duplicate',\n })\n const {data, loading: isMetadataDocumentLoading} = useTranslationMetadata(id)\n const hasOneMetadataDocument = useMemo(() => {\n return Array.isArray(data) && data.length <= 1\n }, [data])\n const metadataDocument = Array.isArray(data) && data.length ? data[0] : null\n const client = useClient(DEFAULT_STUDIO_CLIENT_OPTIONS)\n const toast = useToast()\n const {t: s} = useTranslation(structureLocaleNamespace)\n const {t: d} = useTranslation(documenti18nLocaleNamespace)\n const currentUser = useCurrentUser()\n\n const handle = useCallback(() => {\n setDuplicating(true)\n\n // Async function that does the actual work\n async function performDuplication(): Promise<void> {\n if (!metadataDocument) {\n return Promise.reject(new Error('Metadata document not found'))\n }\n\n const translationsArray = metadataDocument[TRANSLATIONS_ARRAY_NAME]\n if (!translationsArray || translationsArray.length === 0) {\n return Promise.reject(new Error('No translations found in metadata document'))\n }\n\n // 1. Duplicate the document and its localized versions\n const translations = new Map<string, Id>()\n await Promise.all(\n translationsArray.map(async (translation) => {\n const dupeId = uuid()\n const locale = translation[LANGUAGE_FIELD_NAME]\n const docId = translation.value?._ref\n\n if (typeof locale !== 'string' || locale.trim().length === 0) {\n return Promise.reject(new Error('Invalid locale for translation'))\n }\n if (!docId) {\n return Promise.reject(new Error('Translation document not found'))\n }\n\n const {duplicate: duplicateTranslation} = await firstValueFrom(\n documentStore.pair\n .editOperations(docId, type)\n .pipe(filter((op: EditOperations) => op.duplicate.disabled !== 'NOT_READY')),\n )\n\n if (duplicateTranslation.disabled) {\n return Promise.reject(new Error('Cannot duplicate document'))\n }\n\n const duplicateTranslationSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(docId, type)\n .pipe(\n filter((e: OperationSuccessEvent) => e.op === 'duplicate' && e.type === 'success'),\n ),\n )\n duplicateTranslation.execute(dupeId)\n await duplicateTranslationSuccess\n\n translations.set(locale, dupeId)\n }),\n )\n\n // 2. Duplicate the metadata document\n const {duplicate: duplicateMetadata} = await firstValueFrom(\n documentStore.pair\n .editOperations(metadataDocument._id, METADATA_SCHEMA_NAME)\n .pipe(filter((op: EditOperations) => op.duplicate.disabled !== 'NOT_READY')),\n )\n\n if (duplicateMetadata.disabled) {\n return Promise.reject(new Error('Cannot duplicate document'))\n }\n\n const duplicateMetadataSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(metadataDocument._id, METADATA_SCHEMA_NAME)\n .pipe(filter((e: OperationSuccessEvent) => e.op === 'duplicate' && e.type === 'success')),\n )\n const dupeId = uuid()\n duplicateMetadata.execute(dupeId)\n await duplicateMetadataSuccess\n\n // 3. Patch the duplicated metadata document to update the references\n const patch: PatchOperations = {\n set: Object.fromEntries(\n Array.from(translations.entries()).map(([locale, documentId]) => {\n return [\n `${TRANSLATIONS_ARRAY_NAME}[${LANGUAGE_FIELD_NAME} == \"${locale}\"].value._ref`,\n documentId,\n ]\n }),\n ),\n }\n\n await client.transaction().patch(dupeId, patch).commit()\n\n // 4. Navigate to the duplicated document\n navigateIntent('edit', {\n id: Array.from(translations.values()).at(0),\n type,\n })\n\n onComplete()\n }\n\n // Execute and handle success/error\n performDuplication()\n .catch((error: unknown) => {\n console.error(error)\n toast.push({\n status: 'error',\n title: 'Error duplicating document',\n description: error instanceof Error ? error.message : 'Failed to duplicate document',\n })\n })\n .finally(() => {\n setDuplicating(false)\n })\n }, [client, documentStore.pair, metadataDocument, navigateIntent, onComplete, toast, type])\n\n return useMemo(() => {\n if (!isPermissionsLoading && !permissions?.granted) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: (\n <InsufficientPermissionsMessage context=\"duplicate-document\" currentUser={currentUser} />\n ),\n }\n }\n\n if (!isMetadataDocumentLoading && !metadataDocument) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: d(DISABLED_REASON_KEY.METADATA_NOT_FOUND),\n }\n }\n\n if (!hasOneMetadataDocument) {\n return {\n icon: CopyIcon,\n disabled: true,\n label: d('action.duplicate.label'),\n title: d(DISABLED_REASON_KEY.MULTIPLE_METADATA),\n }\n }\n\n return {\n icon: CopyIcon,\n disabled:\n isDuplicating ||\n Boolean(duplicate.disabled) ||\n isPermissionsLoading ||\n isMetadataDocumentLoading,\n label: isDuplicating ? s('action.duplicate.running.label') : d('action.duplicate.label'),\n title: duplicate.disabled ? s(DISABLED_REASON_KEY[duplicate.disabled]) : '',\n onHandle: handle,\n }\n }, [\n currentUser,\n duplicate.disabled,\n handle,\n hasOneMetadataDocument,\n isDuplicating,\n isMetadataDocumentLoading,\n isPermissionsLoading,\n metadataDocument,\n permissions?.granted,\n s,\n d,\n ])\n}\n\nuseDuplicateWithTranslationsAction.action = 'duplicate'\nuseDuplicateWithTranslationsAction.displayName = 'DuplicateWithTranslationsAction'\n\n/**\n * @deprecated use useDuplicateWithTranslationsAction instead\n * Will be removed in the next major version\n */\nexport const DuplicateWithTranslationsAction = (\n props: DocumentActionProps,\n): DocumentActionDescription => {\n return useDuplicateWithTranslationsAction(props)\n}\n\n/* oxlint-disable-next-line typescript-eslint/no-deprecated -- re-exported for backwards compatibility */\nDuplicateWithTranslationsAction.action = 'duplicate'\n/* oxlint-disable-next-line typescript-eslint/no-deprecated -- re-exported for backwards compatibility */\nDuplicateWithTranslationsAction.displayName = 'DuplicateWithTranslationsAction'\n","import {useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\nimport {usePaneRouter} from 'sanity/structure'\n\nexport function useOpenInNewPane(id?: string | null, type?: string): () => void {\n const router = useRouter()\n const {routerPanesState, groupIndex} = usePaneRouter()\n\n const openInNewPane = useCallback(() => {\n if (!id || !type) {\n return\n }\n\n // No panes open, function might be called outside Structure\n if (!routerPanesState.length) {\n router.navigateIntent('edit', {id, type})\n return\n }\n\n const panes = [...routerPanesState]\n panes.splice(groupIndex + 1, 0, [\n {\n id: id,\n params: {type},\n },\n ])\n\n const href = router.resolvePathFromState({panes})\n router.navigateUrl({path: href})\n }, [id, type, router, routerPanesState, groupIndex])\n\n return openInNewPane\n}\n","import {randomKey} from '@sanity/util/content'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {TranslationReference} from '../types'\n\n/**\n * Creates a translation reference object used in metadata documents to link\n * a language key to a document. References are created as weak by default,\n * with optional strengthen-on-publish metadata so the reference becomes\n * strong once the referenced document is published.\n */\nexport function createReference(\n language: string,\n ref: string,\n type: string,\n strengthenOnPublish: boolean = true,\n): TranslationReference {\n return {\n [LANGUAGE_FIELD_NAME]: language,\n _key: randomKey(),\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref: ref,\n _weak: true,\n // If the user has configured weakReferences, we won't want to strengthen them\n ...(strengthenOnPublish ? {_strengthenOnPublish: {type}} : {}),\n },\n }\n}\n","import {CogIcon} from '@sanity/icons'\nimport {Box, Button, Stack, Text, Tooltip} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {type ObjectSchemaType, useClient} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\nimport {createReference} from '../utils/createReference'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguageManageProps = {\n id?: string\n metadataId?: string | null\n schemaType: ObjectSchemaType\n documentId: string\n sourceLanguageId?: string\n}\n\n/**\n * Button component for opening or creating the translation metadata document.\n * When metadata already exists, clicking opens it in a new pane. When no\n * metadata exists and creation is allowed, clicking creates a new metadata\n * document with the source language reference and then opens it.\n */\nexport default function LanguageManage(props: LanguageManageProps) {\n const {id, metadataId, schemaType, documentId, sourceLanguageId} = props\n const open = useOpenInNewPane(id, METADATA_SCHEMA_NAME)\n const openCreated = useOpenInNewPane(metadataId, METADATA_SCHEMA_NAME)\n const {allowCreateMetaDoc, apiVersion, weakReferences} = useDocumentInternationalizationContext()\n const client = useClient({apiVersion})\n const [userHasClicked, setUserHasClicked] = useState(false)\n\n const canCreate = !id && Boolean(metadataId) && allowCreateMetaDoc\n\n const handleClick = useCallback(() => {\n if (!id && metadataId && sourceLanguageId) {\n /* Disable button while this request is pending */\n setUserHasClicked(true)\n\n // handle creation of meta document\n const transaction = client.transaction()\n\n const sourceReference = createReference(\n sourceLanguageId,\n documentId,\n schemaType.name,\n !weakReferences,\n )\n const newMetadataDocument = {\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaTypes: [schemaType.name],\n translations: [sourceReference],\n }\n\n transaction.createIfNotExists(newMetadataDocument)\n\n transaction\n .commit()\n .then(() => {\n setUserHasClicked(false)\n openCreated()\n return undefined\n })\n .catch((err: unknown) => {\n console.error(err)\n setUserHasClicked(false)\n })\n } else {\n open()\n }\n }, [\n id,\n metadataId,\n sourceLanguageId,\n client,\n documentId,\n schemaType.name,\n weakReferences,\n openCreated,\n open,\n ])\n\n const disabled = (!id && !canCreate) || (canCreate && !sourceLanguageId) || userHasClicked\n\n return (\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Document has no other translations\n </Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n disabled={Boolean(id) || canCreate}\n >\n <Stack>\n <Button\n disabled={disabled}\n mode=\"ghost\"\n text=\"Manage Translations\"\n icon={CogIcon}\n loading={userHasClicked}\n onClick={handleClick}\n />\n </Stack>\n </Tooltip>\n )\n}\n","import {extractWithPath, Mutation} from '@sanity/mutator'\nimport {\n isDocumentSchemaType,\n type ObjectSchemaType,\n type Path,\n pathToString,\n type SanityDocument,\n type SchemaType,\n} from 'sanity'\n\nexport interface DocumentMember {\n schemaType: SchemaType\n path: Path\n name: string\n value: unknown\n}\n\n/**\n * Removes fields from a document that are marked with the\n * `documentInternationalization.exclude` schema option. This is used when\n * duplicating a source document to create a translation, so that\n * language-specific or non-translatable fields are stripped from the copy.\n * Returns the document with excluded paths unset, or `null` if the input is null.\n */\nexport function removeExcludedPaths(\n doc: SanityDocument | null,\n schemaType: ObjectSchemaType,\n): SanityDocument | null {\n // If the supplied doc is null or the schemaType\n // isn't a document, return as is.\n if (!isDocumentSchemaType(schemaType) || !doc) {\n return doc\n }\n\n // The extractPaths function gets all the fields in the doc with\n // a value, along with their schemaTypes and paths. We'll end up\n // with an array of paths in string form which we want to exclude\n const pathsToExclude: string[] = extractPaths(doc, schemaType, [])\n // We filter for any fields which should be excluded from the document\n // duplicate action, based on the schemaType option being set.\n .filter((field) => field.schemaType?.options?.documentInternationalization?.exclude === true)\n // then we return the stringified version of the path\n .map((field) => {\n return pathToString(field.path)\n })\n\n // Now we can use the Mutation class from @sanity/mutator to patch the document\n // to remove all the paths that are for one of the excluded fields. This is just\n // done locally, and the documents themselves are not patched in the Content Lake.\n const mut = new Mutation({\n mutations: [\n {\n patch: {\n id: doc._id,\n unset: pathsToExclude,\n },\n },\n ],\n })\n\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n return mut.apply(doc) as SanityDocument\n}\n\nfunction extractPaths(\n doc: SanityDocument,\n schemaType: ObjectSchemaType,\n path: Path,\n): DocumentMember[] {\n const result: DocumentMember[] = []\n\n for (const field of schemaType.fields) {\n const fieldPath = [...path, field.name]\n const fieldSchema = field.type\n const {value} = extractWithPath(pathToString(fieldPath), doc)[0] ?? {}\n if (value === undefined || value === null) {\n continue\n }\n\n const thisFieldWithPath: DocumentMember = {\n path: fieldPath,\n name: field.name,\n schemaType: fieldSchema,\n value,\n }\n\n if (fieldSchema.jsonType === 'object') {\n const innerFields = extractPaths(doc, fieldSchema, fieldPath)\n result.push(thisFieldWithPath, ...innerFields)\n } else if (\n fieldSchema.jsonType === 'array' &&\n fieldSchema.of.length &&\n fieldSchema.of.some((item) => 'fields' in item)\n ) {\n const {value: arrayValue} = extractWithPath(pathToString(fieldPath), doc)[0] ?? {}\n\n result.push(thisFieldWithPath)\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n if ((arrayValue as unknown[])?.length) {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n for (const item of arrayValue as Array<{_key?: string; _type?: string}>) {\n if (!item._key) continue\n const itemPath = [...fieldPath, {_key: item._key}] as Path\n let itemSchema = fieldSchema.of.find((t) => t.name === item._type)\n if (!item._type) {\n itemSchema = fieldSchema.of[0]\n }\n if (itemSchema) {\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n const innerFields = extractPaths(doc, itemSchema as ObjectSchemaType, itemPath)\n const arrayMember: DocumentMember = {\n path: itemPath,\n name: item._key,\n schemaType: itemSchema,\n value: item,\n }\n result.push(arrayMember, ...innerFields)\n }\n }\n }\n } else {\n result.push(thisFieldWithPath)\n }\n }\n\n return result\n}\n","import {AddIcon, CheckmarkIcon, SplitVerticalIcon} from '@sanity/icons'\nimport {Badge, Box, Button, Flex, Spinner, Text, Tooltip, useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useState} from 'react'\nimport {type ObjectSchemaType, type SanityDocument, useClient} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {Language, Metadata, MetadataDocument, TranslationReference} from '../types'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\nimport {createReference} from '../utils/createReference'\nimport {removeExcludedPaths} from '../utils/excludePaths'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguageOptionProps = {\n language: Language\n schemaType: ObjectSchemaType\n documentId: string\n disabled: boolean\n current: boolean\n source: SanityDocument | null\n metadataId: string | null\n metadata?: Metadata | null\n sourceLanguageId?: string\n}\n\n/**\n * Button component representing a single language in the translations menu.\n * Displays the language name, an ID badge, and a contextual icon: checkmark\n * for the current language, split-vertical for existing translations, or add\n * for new translations. Clicking opens an existing translation in a new pane,\n * or creates a new translation document via a Sanity transaction.\n */\nexport default function LanguageOption(props: LanguageOptionProps) {\n const {\n language,\n schemaType,\n documentId,\n current,\n source,\n sourceLanguageId,\n metadata,\n metadataId,\n } = props\n /* When the user has clicked the Create button, the button should be disabled\n * to prevent double-clicks from firing onCreate twice. This creates duplicate\n * translation metadata entries, which editors will not be able to delete */\n const [userHasClicked, setUserHasClicked] = useState(false)\n const disabled =\n props.disabled || userHasClicked || current || !source || !sourceLanguageId || !metadataId\n const translation: TranslationReference | undefined = metadata?.translations.length\n ? metadata.translations.find((t) => t[LANGUAGE_FIELD_NAME] === language.id)\n : undefined\n const {apiVersion, languageField, weakReferences, callback} =\n useDocumentInternationalizationContext()\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const open = useOpenInNewPane(translation?.value?._ref, schemaType.name)\n const handleOpen = useCallback(() => open(), [open])\n\n const handleCreate = useCallback(async () => {\n if (!source) {\n throw new Error(`Cannot create translation without source document`)\n }\n\n if (!sourceLanguageId) {\n throw new Error(`Cannot create translation without source language ID`)\n }\n\n if (!metadataId) {\n throw new Error(`Cannot create translation without a metadata ID`)\n }\n /* Disable the create button while this request is pending */\n setUserHasClicked(true)\n\n const transaction = client.transaction()\n\n // 1. Duplicate source document\n const newTranslationDocumentId = uuid()\n let newTranslationDocument = {\n ...source,\n _id: `drafts.${newTranslationDocumentId}`,\n // 2. Update language of the translation\n [languageField]: language.id,\n }\n\n // Remove fields / paths we don't want to duplicate\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n newTranslationDocument = removeExcludedPaths(\n newTranslationDocument,\n schemaType,\n ) as SanityDocument\n\n transaction.create(newTranslationDocument)\n\n // 3. Maybe create the metadata document\n const sourceReference = createReference(\n sourceLanguageId,\n documentId,\n schemaType.name,\n !weakReferences,\n )\n const newTranslationReference = createReference(\n language.id,\n newTranslationDocumentId,\n schemaType.name,\n !weakReferences,\n )\n const newMetadataDocument: MetadataDocument = {\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaTypes: [schemaType.name],\n translations: [sourceReference],\n }\n\n transaction.createIfNotExists(newMetadataDocument)\n\n // 4. Patch translation to metadata document\n // Note: If the document was only just created in the operation above\n // This patch operation will have no effect\n const metadataPatch = client\n .patch(metadataId)\n .setIfMissing({translations: [sourceReference]})\n .insert(`after`, `translations[-1]`, [newTranslationReference])\n\n transaction.patch(metadataPatch)\n\n // 5. Commit!\n transaction\n .commit()\n .then(() => {\n const metadataExisted = Boolean(metadata?._createdAt)\n\n toast.push({\n status: 'success',\n title: `Created \"${language.title}\" translation`,\n description: metadataExisted\n ? `Updated Translations Metadata`\n : `Created Translations Metadata`,\n })\n\n /* Once a translation has been created, reset the userHasClicked state to false\n * so they can click on it to navigate to the translation */\n setUserHasClicked(false)\n\n // Execute callback if provided\n if (callback) {\n // oxlint-disable-next-line eslint-plugin-promise/no-callback-in-promise -- This is an async callback, not a Node.js callback\n return callback({\n client,\n sourceLanguageId,\n sourceDocument: source,\n newDocument: newTranslationDocument,\n destinationLanguageId: language.id,\n metaDocumentId: metadataId,\n })\n }\n\n return undefined\n })\n .catch((err: Error) => {\n console.error(err)\n\n /* Re-enable the create button if there was an error */\n setUserHasClicked(false)\n\n return toast.push({\n status: 'error',\n title: `Error creating translation`,\n description: err.message,\n })\n })\n }, [\n client,\n documentId,\n language.id,\n language.title,\n languageField,\n metadata?._createdAt,\n metadataId,\n schemaType,\n source,\n sourceLanguageId,\n toast,\n weakReferences,\n callback,\n ])\n\n let message\n\n if (current) {\n message = `Current document`\n } else if (translation) {\n message = `Open ${language.title} translation`\n } else if (!translation) {\n message = `Create new ${language.title} translation`\n }\n\n return (\n <Tooltip\n animate\n content={\n <Box padding={2}>\n <Text muted size={1}>\n {message}\n </Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n >\n <Button\n onClick={translation ? handleOpen : handleCreate}\n mode={current && disabled ? `default` : `bleed`}\n disabled={disabled}\n >\n <Flex gap={3} align=\"center\">\n {disabled && !current ? (\n <Spinner />\n ) : (\n <Text size={2}>\n {translation ? <SplitVerticalIcon /> : current ? <CheckmarkIcon /> : <AddIcon />}\n </Text>\n )}\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge tone={disabled || current ? `default` : `primary`}>{language.id}</Badge>\n </Flex>\n </Button>\n </Tooltip>\n )\n}\n","import {EditIcon} from '@sanity/icons'\nimport {Badge, Box, Button, Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {type SanityDocument, useClient} from 'sanity'\n\nimport type {Language} from '../types'\n\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\n\ntype LanguagePatchProps = {\n language: Language\n source: SanityDocument | null\n disabled: boolean\n}\n\n/**\n * Button component that patches the current document's language field to\n * the selected language. Displays the language name and ID badge, and shows\n * a success or error toast after the patch operation completes.\n */\nexport default function LanguagePatch(props: LanguagePatchProps) {\n const {language, source} = props\n const {apiVersion, languageField} = useDocumentInternationalizationContext()\n const disabled = props.disabled || !source\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const handleClick = useCallback(() => {\n if (!source) {\n throw new Error(`Cannot patch missing document`)\n }\n\n const currentId = source._id\n\n client\n .patch(currentId)\n .set({[languageField]: language.id})\n .commit()\n .then(() => {\n toast.push({\n title: `Set document language to ${language.title}`,\n status: `success`,\n })\n return undefined\n })\n .catch((err: unknown) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to set document language to ${language.title}`,\n status: `error`,\n })\n })\n }, [source, client, languageField, language, toast])\n\n return (\n <Button mode=\"bleed\" onClick={handleClick} disabled={disabled} justify=\"flex-start\">\n <Flex gap={3} align=\"center\">\n <Text size={2}>\n <EditIcon />\n </Text>\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge>{language.id}</Badge>\n </Flex>\n </Button>\n )\n}\n","import {Box} from '@sanity/ui'\n\nexport default function ConstrainedBox({children}: {children: React.ReactNode}): React.JSX.Element {\n return <Box style={{maxWidth: 280}}>{children}</Box>\n}\n","import type {PropsWithChildren} from 'react'\n\nimport {Card, Flex, Text} from '@sanity/ui'\n\nimport ConstrainedBox from './ConstrainedBox'\n\n/**\n * Presentational component that renders a caution-toned card with centered\n * text inside a constrained-width box. Used to display warning messages\n * in the internationalization UI.\n */\nexport default function Warning({children}: PropsWithChildren) {\n return (\n <Card tone=\"caution\" padding={3}>\n <Flex justify=\"center\">\n <ConstrainedBox>\n <Text size={1} align=\"center\">\n {children}\n </Text>\n </ConstrainedBox>\n </Flex>\n </Card>\n )\n}\n","import type {ChangeEvent} from 'react'\n\nimport {TranslateIcon} from '@sanity/icons'\nimport {Box, Button, Card, Popover, Stack, Text, TextInput, useClickOutsideEvent} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {useEditState} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {DocumentInternationalizationMenuProps} from '../types'\n\nimport {useTranslationMetadata} from '../hooks/useLanguageMetadata'\nimport {useDocumentInternationalizationContext} from './DocumentInternationalizationContext'\nimport LanguageManage from './LanguageManage'\nimport LanguageOption from './LanguageOption'\nimport LanguagePatch from './LanguagePatch'\nimport Warning from './Warning'\n\nexport function DocumentInternationalizationMenu(\n props: DocumentInternationalizationMenuProps,\n): React.JSX.Element | null {\n const {documentId} = props\n const schemaType = props.schemaType\n const {languageField, supportedLanguages} = useDocumentInternationalizationContext()\n\n // Search filter query\n const [query, setQuery] = useState(``)\n const handleQuery = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n if (event.currentTarget.value) {\n setQuery(event.currentTarget.value)\n } else {\n setQuery(``)\n }\n }, [])\n\n // UI Handlers\n const [open, setOpen] = useState(false)\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n const buttonRef = useRef<HTMLButtonElement>(null)\n const popoverRef = useRef<HTMLDivElement>(null)\n const handleClickOutside = useCallback(() => setOpen(false), [])\n useClickOutsideEvent(handleClickOutside, () => [buttonRef.current, popoverRef.current])\n\n // Get metadata from content lake\n const {data, loading, error} = useTranslationMetadata(documentId)\n const metadata = Array.isArray(data) && data.length ? data[0] : null\n\n // Optimistically set a metadata ID for a newly created metadata document\n // Cannot rely on generated metadata._id from useTranslationMetadata\n // As the document store might not have returned it before creating another translation\n const metadataId = useMemo(() => {\n if (loading) {\n return null\n }\n\n // Once created, these two values should be the same anyway\n return metadata?._id ?? uuid()\n }, [loading, metadata?._id])\n\n // Duplicate a new language version from the most recent version of this document\n const {draft, published} = useEditState(documentId, schemaType.name)\n const source = draft || published\n\n // Check for data issues\n const documentIsInOneMetadataDocument = useMemo(() => {\n return Array.isArray(data) && data.length <= 1\n }, [data])\n const rawLanguageValue = source?.[languageField]\n const sourceLanguageId = typeof rawLanguageValue === 'string' ? rawLanguageValue : undefined\n const sourceLanguageIsValid = supportedLanguages.some((l) => l.id === sourceLanguageId)\n const allLanguagesAreValid = useMemo(() => {\n const valid = supportedLanguages.every((l) => l.id && l.title)\n if (!valid) {\n console.warn(\n `Not all languages are valid. It should be an array of objects with an \"id\" and \"title\" property. Or a function that returns an array of objects with an \"id\" and \"title\" property.`,\n supportedLanguages,\n )\n }\n\n return valid\n }, [supportedLanguages])\n\n const content = (\n <Box padding={1}>\n {error ? (\n <Card tone=\"critical\" padding={1}>\n <Text>There was an error returning translations metadata</Text>\n </Card>\n ) : (\n <Stack space={1}>\n <LanguageManage\n id={metadata?._id}\n documentId={documentId}\n metadataId={metadataId}\n schemaType={schemaType}\n sourceLanguageId={sourceLanguageId}\n />\n {supportedLanguages.length > 4 ? (\n <TextInput onChange={handleQuery} value={query} placeholder=\"Filter languages\" />\n ) : null}\n {supportedLanguages.length > 0 ? (\n <>\n {/* Once metadata is loaded, there may be issues */}\n {loading ? null : (\n <>\n {/* Not all languages are valid */}\n {data && documentIsInOneMetadataDocument ? null : (\n <Warning>\n {/* TODO: Surface these documents to the user */}\n This document has been found in more than one Translations Metadata document\n </Warning>\n )}\n {/* Not all languages are valid */}\n {allLanguagesAreValid ? null : (\n <Warning>Not all language objects are valid. See the console.</Warning>\n )}\n {/* Current document has no language field */}\n {sourceLanguageId ? null : (\n <Warning>\n Choose a language to apply to <strong>this Document</strong>\n </Warning>\n )}\n {/* Current document has an invalid language field */}\n {sourceLanguageId && !sourceLanguageIsValid ? (\n <Warning>\n Select a supported language. Current language value:{' '}\n <code>{sourceLanguageId}</code>\n </Warning>\n ) : null}\n </>\n )}\n {supportedLanguages\n .filter((language) => {\n if (query) {\n return language.title.toLowerCase().includes(query.toLowerCase())\n }\n return true\n })\n .map((language) =>\n !loading && sourceLanguageId && sourceLanguageIsValid ? (\n // Button to duplicate this document to a new translation\n // And either create or update the metadata document\n <LanguageOption\n key={language.id}\n language={language}\n schemaType={schemaType}\n documentId={documentId}\n disabled={!allLanguagesAreValid}\n current={language.id === sourceLanguageId}\n metadata={metadata}\n metadataId={metadataId}\n source={source}\n sourceLanguageId={sourceLanguageId}\n />\n ) : (\n // Button to set a language field on *this* document\n <LanguagePatch\n key={language.id}\n source={source}\n language={language}\n // Only allow language patch change to:\n // - Keys not in metadata\n // - The key of this document in the metadata\n disabled={\n (loading ||\n !allLanguagesAreValid ||\n metadata?.translations\n .filter((t) => t?.value?._ref !== documentId)\n .some((t) => t[LANGUAGE_FIELD_NAME] === language.id)) ??\n false\n }\n />\n ),\n )}\n </>\n ) : null}\n </Stack>\n )}\n </Box>\n )\n\n const issueWithTranslations = !loading && sourceLanguageId && !sourceLanguageIsValid\n\n if (!documentId) {\n return null\n }\n\n if (!schemaType || !schemaType.name) {\n return null\n }\n\n return (\n <Popover\n animate\n constrainSize\n content={content}\n open={open}\n portal\n ref={popoverRef}\n overflow=\"auto\"\n tone=\"default\"\n >\n <Button\n text=\"Translations\"\n mode=\"bleed\"\n disabled={!source}\n tone={!source || loading || !issueWithTranslations ? undefined : `caution`}\n icon={TranslateIcon}\n onClick={handleClick}\n ref={buttonRef}\n selected={open}\n />\n </Popover>\n )\n}\n","import {TrashIcon} from '@sanity/icons'\nimport {type ButtonTone, useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\nimport {\n type DocumentActionDescription,\n type DocumentActionProps,\n type KeyedObject,\n type Reference,\n type TypedObject,\n useClient,\n} from 'sanity'\n\nimport {API_VERSION, TRANSLATIONS_ARRAY_NAME} from '../constants'\n\ntype TranslationReference = TypedObject &\n KeyedObject & {\n value: Reference\n }\n\n/**\n * Document action that deletes a translation metadata document along with all\n * its referenced translation documents. Opens a confirmation dialog showing\n * how many translations will be deleted. Executes a single transaction that\n * unsets the translations array, deletes each referenced document (both\n * published and draft), and finally deletes the metadata document itself.\n */\nexport const useDeleteMetadataAction = (props: DocumentActionProps): DocumentActionDescription => {\n const {id: documentId, published, draft} = props\n const doc = draft || published\n\n const [isDialogOpen, setDialogOpen] = useState(false)\n const onClose = useCallback(() => setDialogOpen(false), [])\n const translations: TranslationReference[] = useMemo(\n () =>\n doc && Array.isArray(doc[TRANSLATIONS_ARRAY_NAME])\n ? // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (doc[TRANSLATIONS_ARRAY_NAME] as TranslationReference[])\n : [],\n [doc],\n )\n\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n\n // Remove translation reference and delete document in one transaction\n const onProceed = useCallback(() => {\n const tx = client.transaction()\n\n tx.patch(documentId, (patch) => patch.unset([TRANSLATIONS_ARRAY_NAME]))\n\n if (translations.length > 0) {\n translations.forEach((translation) => {\n tx.delete(translation.value._ref)\n tx.delete(`drafts.${translation.value._ref}`)\n })\n }\n\n tx.delete(documentId)\n // Shouldn't exist as this document type is in liveEdit\n tx.delete(`drafts.${documentId}`)\n\n tx.commit()\n .then(() => {\n onClose()\n\n toast.push({\n status: 'success',\n title: 'Deleted document and translations',\n })\n return undefined\n })\n .catch((err: Error) => {\n toast.push({\n status: 'error',\n title: 'Failed to delete document and translations',\n description: err.message,\n })\n })\n }, [client, translations, documentId, onClose, toast])\n\n return {\n label: `Delete all translations`,\n disabled: !doc || !translations.length,\n icon: TrashIcon,\n tone: 'critical' as ButtonTone,\n onHandle: () => {\n setDialogOpen(true)\n },\n dialog: isDialogOpen && {\n type: 'confirm',\n onCancel: onClose,\n onConfirm: () => {\n onProceed()\n onClose()\n },\n tone: 'critical' as ButtonTone,\n message:\n translations.length === 1\n ? `Delete 1 translation and this document`\n : `Delete all ${translations.length} translations and this document`,\n },\n }\n}\n","import type {DocumentBadgeDescription, DocumentBadgeProps} from 'sanity'\n\nimport {useDocumentInternationalizationContext} from '../components/DocumentInternationalizationContext'\n\n/**\n * Document badge that displays the language identifier of a document.\n * Reads the configured `languageField` from the draft or published document,\n * looks up the matching language in `supportedLanguages` to resolve the title,\n * and returns a badge descriptor with `primary` color. Returns `null` when\n * no document exists or the language field is empty/non-string.\n */\nexport function LanguageBadge(props: DocumentBadgeProps): DocumentBadgeDescription | null {\n const source = props?.draft || props?.published\n const {languageField, supportedLanguages} = useDocumentInternationalizationContext()\n const languageId = source?.[languageField]\n\n if (!languageId || typeof languageId !== 'string') {\n return null\n }\n\n const language = Array.isArray(supportedLanguages)\n ? supportedLanguages.find((l) => l.id === languageId)\n : null\n\n // Currently we only show the language id if the supportedLanguages are async\n return {\n label: language?.id ?? languageId,\n title: language?.title ?? undefined,\n color: `primary`,\n }\n}\n","import {Card, Spinner} from '@sanity/ui'\nimport {useEffect, useMemo} from 'react'\nimport {Preview, useEditState, useSchema, useValidationStatus} from 'sanity'\n\ntype DocumentCheckProps = {\n id: string\n onCheckComplete: (id: string) => void\n addInvalidId: (id: string) => void\n removeInvalidId: (id: string) => void\n addDraftId: (id: string) => void\n removeDraftId: (id: string) => void\n}\n\n// Check if the document has a draft\n// Check if that draft is valid\n// Report back to parent that it can be added to bulk publish\nexport default function DocumentCheck(props: DocumentCheckProps) {\n const {id, onCheckComplete, addInvalidId, removeInvalidId, addDraftId, removeDraftId} = props\n // Use empty string for type initially - we get the actual type from the loaded document\n const editState = useEditState(id, '')\n const documentType = editState.draft?._type ?? editState.published?._type ?? ''\n const {isValidating, validation = []} = useValidationStatus(id, documentType, false)\n const schema = useSchema()\n\n const validationHasErrors = useMemo(() => {\n return !isValidating && validation.some((item) => item.level === 'error')\n }, [isValidating, validation])\n\n useEffect(() => {\n if (validationHasErrors) {\n addInvalidId(id)\n } else {\n removeInvalidId(id)\n }\n\n if (editState.draft) {\n addDraftId(id)\n } else {\n removeDraftId(id)\n }\n\n if (!isValidating) {\n onCheckComplete(id)\n }\n }, [\n addDraftId,\n addInvalidId,\n editState.draft,\n id,\n isValidating,\n onCheckComplete,\n removeDraftId,\n removeInvalidId,\n validationHasErrors,\n ])\n\n // We only care about drafts\n if (!editState.draft) {\n return null\n }\n\n const schemaType = schema.get(editState.draft._type)\n\n return (\n <Card border padding={2} tone={validationHasErrors ? `critical` : `positive`}>\n {editState.draft && schemaType ? (\n <Preview layout=\"default\" value={editState.draft} schemaType={schemaType} />\n ) : (\n <Spinner />\n )}\n </Card>\n )\n}\n","import type {ComponentType, PropsWithChildren} from 'react'\n\nimport {Box, type ButtonTone, Text, Tooltip} from '@sanity/ui'\nimport {TextWithTone} from 'sanity'\n\ntype InfoIconProps = PropsWithChildren & {\n icon: ComponentType\n tone: ButtonTone\n text?: string\n}\n\nexport default function InfoIcon(props: InfoIconProps) {\n const {text, icon, tone, children} = props\n const Icon = icon\n\n return (\n <Tooltip\n animate\n portal\n content={\n children ? (\n <>{children}</>\n ) : (\n <Box padding={2}>\n <Text size={1}>{text}</Text>\n </Box>\n )\n }\n >\n <TextWithTone tone={tone} size={1}>\n <Icon />\n </TextWithTone>\n </Tooltip>\n )\n}\n","import {InfoOutlineIcon} from '@sanity/icons'\nimport {Box, Stack, Text} from '@sanity/ui'\n\nimport InfoIcon from './InfoIcon'\n\nexport default function Info() {\n return (\n <InfoIcon icon={InfoOutlineIcon} tone=\"primary\">\n <Stack padding={3} space={4} style={{maxWidth: 250}}>\n <Box>\n <Text size={1}>Bulk publishing uses the Scheduling API.</Text>\n </Box>\n <Box>\n <Text size={1}>\n Customized Document Actions in the Studio will not execute. Webhooks will execute.\n </Text>\n </Box>\n <Box>\n <Text size={1}>\n Validation is checked before rendering the button below, but the Scheduling API will not\n check for – or enforce – validation.\n </Text>\n </Box>\n </Stack>\n </InfoIcon>\n )\n}\n","import {Button, Card, Dialog, Inline, Stack, Text, useToast} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {TextWithTone, useClient, useWorkspace} from 'sanity'\n\nimport type {TranslationReference} from '../../types'\n\nimport {API_VERSION} from '../../constants'\nimport DocumentCheck from './DocumentCheck'\nimport Info from './Info'\n\nexport type BulkPublishProps = {\n translations: TranslationReference[]\n}\n\n// A root-level component with UI for hitting the Publishing API\nexport default function BulkPublish(props: BulkPublishProps) {\n const {translations} = props\n const client = useClient({apiVersion: API_VERSION})\n const {projectId, dataset} = useWorkspace()\n const toast = useToast()\n const [invalidIds, setInvalidIds] = useState<string[] | null>(null)\n const [checkedIds, setCheckedIds] = useState<string[]>([])\n\n const onCheckComplete = useCallback((id: string) => {\n setCheckedIds((ids) => Array.from(new Set([...ids, id])))\n }, [])\n\n // Handle dialog\n const [open, setOpen] = useState(false)\n const onOpen = useCallback(() => setOpen(true), [])\n const onClose = useCallback(() => setOpen(false), [])\n\n const addInvalidId = useCallback((id: string) => {\n setInvalidIds((ids) => (ids ? Array.from(new Set([...ids, id])) : [id]))\n }, [])\n\n const removeInvalidId = useCallback((id: string) => {\n setInvalidIds((ids) => (ids ? ids.filter((i) => i !== id) : []))\n }, [])\n\n const [draftIds, setDraftIds] = useState<string[]>([])\n\n const addDraftId = useCallback((id: string) => {\n setDraftIds((ids) => Array.from(new Set([...ids, id])))\n }, [])\n\n const removeDraftId = useCallback((id: string) => {\n setDraftIds((ids) => ids.filter((i) => i !== id))\n }, [])\n\n const handleBulkPublish = useCallback(() => {\n const body = translations.map((translation) => ({\n documentId: translation.value._ref,\n }))\n client\n .request({\n uri: `/publish/${projectId}/${dataset}`,\n method: 'POST',\n body,\n })\n .then(() => {\n toast.push({\n status: 'success',\n title: 'Success',\n description: 'Bulk publish complete',\n })\n return undefined\n })\n .catch((err: Error) => {\n console.error(err)\n toast.push({\n status: 'error',\n title: 'Error',\n description: 'Bulk publish failed',\n })\n })\n }, [translations, client, projectId, dataset, toast])\n\n const disabled =\n // Not all documents have been checked\n checkedIds.length !== translations.length ||\n // Some document(s) are invalid\n Boolean(invalidIds && invalidIds?.length > 0) ||\n // No documents are drafts\n !draftIds.length\n\n return translations?.length > 0 ? (\n <Card padding={4} border radius={2}>\n <Stack space={3}>\n <Inline space={3}>\n <Text weight=\"bold\" size={1}>\n Bulk publishing\n </Text>\n <Info />\n </Inline>\n\n <Stack>\n <Button onClick={onOpen} text=\"Prepare bulk publishing\" mode=\"ghost\" />\n </Stack>\n\n {open && (\n <Dialog\n animate\n header=\"Bulk publishing\"\n id=\"bulk-publish-dialog\"\n onClose={onClose}\n zOffset={1000}\n width={3}\n >\n <Stack space={4} padding={4}>\n {draftIds.length > 0 ? (\n <Stack space={2}>\n <Text size={1}>\n There{' '}\n {draftIds.length === 1\n ? `is 1 draft document`\n : `are ${draftIds.length} draft documents`}\n .\n </Text>\n {invalidIds && invalidIds.length > 0 ? (\n <TextWithTone tone=\"critical\" size={1}>\n {invalidIds.length === 1\n ? `1 draft document has`\n : `${invalidIds.length} draft documents have`}{' '}\n validation issues that must be addressed first\n </TextWithTone>\n ) : (\n <TextWithTone tone=\"positive\" size={1}>\n All drafts are valid and can be bulk published\n </TextWithTone>\n )}\n </Stack>\n ) : null}\n\n <Stack space={1}>\n {translations\n .filter((translation) => translation?.value?._ref)\n .map((translation) => (\n <DocumentCheck\n key={translation._key}\n id={translation.value._ref}\n onCheckComplete={onCheckComplete}\n addInvalidId={addInvalidId}\n removeInvalidId={removeInvalidId}\n addDraftId={addDraftId}\n removeDraftId={removeDraftId}\n />\n ))}\n </Stack>\n {draftIds.length > 0 ? (\n <Button\n mode=\"ghost\"\n tone={invalidIds && invalidIds?.length > 0 ? 'caution' : 'positive'}\n text={\n draftIds.length === 1\n ? `Publish draft document`\n : `Bulk publish ${draftIds.length} draft documents`\n }\n onClick={handleBulkPublish}\n disabled={disabled}\n />\n ) : (\n <Text muted size={1}>\n No draft documents to publish\n </Text>\n )}\n </Stack>\n </Dialog>\n )}\n </Stack>\n </Card>\n ) : null\n}\n","import {useEffect} from 'react'\nimport {PatchEvent, unset, useClient, useEditState} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport type {TranslationReference} from '../../types'\n\nimport {API_VERSION} from '../../constants'\n\ntype ReferencePatcherProps = {\n translation: TranslationReference\n documentType: string\n metadataId: string\n}\n\n// For every reference, check if it is published, and if so, strengthen the reference\nexport default function ReferencePatcher(props: ReferencePatcherProps) {\n const {translation, documentType, metadataId} = props\n const editState = useEditState(translation.value._ref, documentType)\n const client = useClient({apiVersion: API_VERSION})\n const {onChange} = useDocumentPane()\n\n useEffect(() => {\n if (\n // We have a reference\n translation.value._ref &&\n // It's still weak and not-yet-strengthened\n translation.value._weak &&\n // We also want to keep this check because maybe the user *configured* weak refs\n translation.value._strengthenOnPublish &&\n // The referenced document has just been published\n !editState.draft &&\n editState.published &&\n editState.ready\n ) {\n const referencePathBase = ['translations', {_key: translation._key}, 'value']\n\n onChange(\n new PatchEvent([\n unset([...referencePathBase, '_weak']),\n unset([...referencePathBase, '_strengthenOnPublish']),\n ]),\n )\n }\n }, [translation, editState, metadataId, client, onChange])\n\n return null\n}\n","import type {TranslationReference} from '../../types'\n\nimport ReferencePatcher from './ReferencePatcher'\n\ntype OptimisticallyStrengthenProps = {\n translations: TranslationReference[]\n metadataId: string\n}\n\n// There's no good reason to leave published references as weak\n// So this component will run on every render and strengthen them\nexport default function OptimisticallyStrengthen(props: OptimisticallyStrengthenProps) {\n const {translations = [], metadataId} = props\n\n if (!translations.length) {\n return null\n }\n\n return (\n <>\n {translations.map((translation) =>\n translation.value._strengthenOnPublish?.type ? (\n <ReferencePatcher\n key={translation._key}\n translation={translation}\n documentType={translation.value._strengthenOnPublish.type}\n metadataId={metadataId}\n />\n ) : null,\n )}\n </>\n )\n}\n","import {TranslateIcon} from '@sanity/icons'\nimport {defineField, defineType, type DocumentDefinition, type FieldDefinition} from 'sanity'\nimport {LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {TranslationReference} from '../../types'\n\nimport {METADATA_SCHEMA_NAME, TRANSLATIONS_ARRAY_NAME} from '../../constants'\n\n/**\n * Creates the `translation.metadata` document schema definition. This schema\n * type stores the array of translation references linking all language versions\n * of a document together, along with the allowed schema types and any custom\n * metadata fields provided by the plugin consumer. The document uses `liveEdit`\n * so changes are published immediately without drafts.\n */\nexport default (schemaTypes: string[], metadataFields: FieldDefinition[]): DocumentDefinition =>\n defineType({\n type: 'document',\n name: METADATA_SCHEMA_NAME,\n title: 'Translation metadata',\n icon: TranslateIcon,\n liveEdit: true,\n fields: [\n defineField({\n name: TRANSLATIONS_ARRAY_NAME,\n type: 'internationalizedArrayReference',\n }),\n defineField({\n name: 'schemaTypes',\n description:\n 'Optional: Used to filter the reference fields above so all translations share the same types.',\n type: 'array',\n of: [{type: 'string'}],\n options: {list: schemaTypes},\n readOnly: ({value}) => Boolean(value),\n }),\n ...metadataFields,\n ],\n preview: {\n select: {\n translations: TRANSLATIONS_ARRAY_NAME,\n documentSchemaTypes: 'schemaTypes',\n },\n prepare(selection) {\n const {translations = [], documentSchemaTypes = []} = selection\n const title =\n translations.length === 1 ? `1 Translation` : `${translations.length} Translations`\n const languageKeys = translations.length\n ? translations\n .map((t: TranslationReference) => t[LANGUAGE_FIELD_NAME].toUpperCase())\n .join(', ')\n : ``\n const subtitle = [\n languageKeys ? `(${languageKeys})` : null,\n documentSchemaTypes?.length ? documentSchemaTypes.map((s: string) => s).join(`, `) : ``,\n ]\n .filter(Boolean)\n .join(` `)\n\n return {\n title,\n subtitle,\n }\n },\n },\n })\n","import {Stack} from '@sanity/ui'\nimport {defineField, definePlugin, isSanityDocument} from 'sanity'\nimport {internationalizedArray, LANGUAGE_FIELD_NAME} from 'sanity-plugin-internationalized-array'\n\nimport type {PluginConfig, TranslationReference} from './types'\n\nimport {useDeleteMetadataAction} from './actions/DeleteMetadataAction'\nimport {LanguageBadge} from './badges'\nimport BulkPublish from './components/BulkPublish'\nimport {DocumentInternationalizationProvider} from './components/DocumentInternationalizationContext'\nimport {DocumentInternationalizationMenu} from './components/DocumentInternationalizationMenu'\nimport OptimisticallyStrengthen from './components/OptimisticallyStrengthen'\nimport {API_VERSION, DEFAULT_CONFIG, METADATA_SCHEMA_NAME} from './constants'\nimport {documentInternationalizationUsEnglishLocaleBundle} from './i18n'\nimport metadata from './schema/translation/metadata'\n\nexport const documentInternationalization = definePlugin<PluginConfig>((config) => {\n const pluginConfig = {...DEFAULT_CONFIG, ...config}\n const {supportedLanguages, schemaTypes, languageField, bulkPublish, metadataFields} = pluginConfig\n\n if (schemaTypes.length === 0) {\n throw new Error(\n 'You must specify at least one schema type on which to enable document internationalization. Update the `schemaTypes` option in the documentInternationalization() configuration.',\n )\n }\n\n return {\n name: '@sanity/document-internationalization',\n\n studio: {\n components: {\n layout: (props) => (\n <DocumentInternationalizationProvider {...props} pluginConfig={pluginConfig} />\n ),\n },\n },\n\n i18n: {\n bundles: [documentInternationalizationUsEnglishLocaleBundle],\n },\n\n // Adds:\n // - A bulk-publishing UI component to the form\n // - Will only work for projects on a compatible plan\n form: {\n components: {\n input: (props) => {\n if (\n props.id === 'root' &&\n props.schemaType.name === METADATA_SCHEMA_NAME &&\n isSanityDocument(props?.value)\n ) {\n const metadataId = props?.value?._id\n const translations =\n // oxlint-disable-next-line typescript-eslint/no-unsafe-type-assertion\n (props?.value?.['translations'] as TranslationReference[]) ?? []\n const weakAndTypedTranslations = translations.filter(\n ({value}) => value?._weak && value._strengthenOnPublish,\n )\n\n return (\n <Stack space={5}>\n {bulkPublish ? <BulkPublish translations={translations} /> : null}\n {weakAndTypedTranslations.length > 0 ? (\n <OptimisticallyStrengthen\n metadataId={metadataId}\n translations={weakAndTypedTranslations}\n />\n ) : null}\n {props.renderDefault(props)}\n </Stack>\n )\n }\n\n return props.renderDefault(props)\n },\n },\n },\n\n // Adds:\n // - The `Translations` dropdown to the editing form\n // - `Badges` to documents with a language value\n // - The `DeleteMetadataAction` action to the metadata document type\n document: {\n unstable_languageFilter: (prev, ctx) => {\n const {schemaType, documentId} = ctx\n\n return schemaTypes.includes(schemaType) && documentId\n ? [...prev, (props) => DocumentInternationalizationMenu({...props, documentId})]\n : prev\n },\n badges: (prev, {schemaType}) => {\n if (!schemaTypes.includes(schemaType)) {\n return prev\n }\n\n return [(props) => LanguageBadge(props), ...prev]\n },\n actions: (prev, {schemaType}) => {\n if (schemaType === METADATA_SCHEMA_NAME) {\n return [...prev, useDeleteMetadataAction]\n }\n\n return prev\n },\n },\n\n // Adds:\n // - The `Translations metadata` document type to the schema\n schema: {\n // Create the metadata document type\n types: [metadata(schemaTypes, metadataFields)],\n\n // For every schema type this plugin is enabled on\n // Create an initial value template to set the language\n templates: (prev, {schema}) => {\n // Templates are not setup for async languages\n if (!Array.isArray(supportedLanguages)) {\n return prev\n }\n\n const parameterizedTemplates = schemaTypes.map((schemaType) => ({\n id: `${schemaType}-parameterized`,\n title: `${schema?.get(schemaType)?.title ?? schemaType}: with Language`,\n schemaType,\n parameters: [{name: `languageId`, title: `Language ID`, type: `string`}],\n value: ({languageId}: {languageId: string}) => ({\n [languageField]: languageId,\n }),\n }))\n\n const staticTemplates = schemaTypes.flatMap((schemaType) => {\n return supportedLanguages.map((language) => ({\n id: `${schemaType}-${language.id}`,\n title: `${language.title} ${schema?.get(schemaType)?.title ?? schemaType}`,\n schemaType,\n value: {\n [languageField]: language.id,\n },\n }))\n })\n\n return [...prev, ...parameterizedTemplates, ...staticTemplates]\n },\n },\n\n // Uses:\n // - `sanity-plugin-internationalized-array` to maintain the translations array\n plugins: [\n // Translation metadata stores its references using this plugin\n // It cuts down on attribute usage and gives UI conveniences to add new translations\n internationalizedArray({\n apiVersion: pluginConfig.apiVersion,\n languages: supportedLanguages,\n fieldTypes: [\n defineField(\n {\n name: 'reference',\n type: 'reference',\n to: schemaTypes.map((type) => ({type})),\n weak: pluginConfig.weakReferences,\n // Reference filters don't actually enforce validation!\n validation: (Rule) =>\n // @ts-expect-error - fix typings\n Rule.custom(async (item: TranslationReference, context) => {\n if (!item?.value?._ref || !item?.[LANGUAGE_FIELD_NAME]) {\n return true\n }\n\n const client = context.getClient({apiVersion: API_VERSION})\n const valueLanguage = await client.fetch(\n `*[_id in [$ref, $draftRef]][0].${languageField}`,\n {\n ref: item.value._ref,\n draftRef: `drafts.${item.value._ref}`,\n },\n )\n\n if (valueLanguage && valueLanguage === item[LANGUAGE_FIELD_NAME]) {\n return true\n }\n\n return `Referenced document does not have the correct language value`\n }),\n options: {\n // @ts-expect-error - Update type once it knows the values of this filter\n filter: ({parent, document}) => {\n if (!parent) return null\n\n // I'm not sure in what instance there's an array of parents\n // But the Type suggests it's possible\n const parentArray = Array.isArray(parent) ? parent : [parent]\n const language = parentArray.find((p) => p[LANGUAGE_FIELD_NAME])\n\n if (!language?.[LANGUAGE_FIELD_NAME]) return null\n\n if (document['schemaTypes']) {\n return {\n filter: `_type in $schemaTypes && ${languageField} == $language`,\n params: {\n schemaTypes: document['schemaTypes'],\n language: language[LANGUAGE_FIELD_NAME],\n },\n }\n }\n\n return {\n filter: `${languageField} == $language`,\n params: {language: language[LANGUAGE_FIELD_NAME]},\n }\n },\n },\n },\n {strict: false},\n ),\n ],\n }),\n ],\n }\n})\n"],"names":["DocumentPreview","props","$","_c","schema","useSchema","t0","type","get","schemaType","t1","Symbol","for","value","METADATA_SCHEMA_NAME","TRANSLATIONS_ARRAY_NAME","API_VERSION","DEFAULT_CONFIG","supportedLanguages","schemaTypes","languageField","weakReferences","bulkPublish","metadataFields","apiVersion","allowCreateMetaDoc","callback","separateReferences","data","translations","otherReferences","length","forEach","doc","_type","push","DeleteTranslationDialog","documentId","setTranslations","id","t2","params","initialValue","loading","useListeningQuery","t3","t4","t5","t6","useEffect","t7","t8","t9","t10","map","_temp","t11","_temp2","t12","t13","t14","reference","_id","translation","DeleteTranslationFooter","onClose","onProceed","DocumentInternationalizationContext","createContext","useDocumentInternationalizationContext","useContext","promiseCache","Map","createCacheKey","workspaceId","createOrGetPromise","fn","cacheKey","cached","promise","set","DocumentInternationalizationProvider","pluginConfig","client","useClient","useWorkspace","name","bb0","Array","isArray","languagesPromise","use","renderDefault","useDeleteTranslationAction","published","draft","isDialogOpen","setDialogOpen","useState","rawDocumentLanguage","documentLanguage","toast","useToast","tx","transaction","operation","patch","unset","LANGUAGE_FIELD_NAME","delete","commit","then","status","title","description","catch","err","message","header","content","footer","label","disabled","icon","TrashIcon","tone","onHandle","dialog","action","displayName","DeleteTranslationAction","query","useTranslationMetadata","translationSchema","error","documenti18nLocaleNamespace","documentInternationalizationUsEnglishLocaleBundle","defineLocaleResourceBundle","locale","namespace","resources","DISABLED_REASON_KEY","METADATA_NOT_FOUND","MULTIPLE_METADATA","NOTHING_TO_DUPLICATE","NOT_READY","useDuplicateWithTranslationsAction","onComplete","documentStore","useDocumentStore","duplicate","useDocumentOperation","navigateIntent","useRouter","isDuplicating","setDuplicating","permission","permissions","isPermissionsLoading","useDocumentPairPermissions","isMetadataDocumentLoading","hasOneMetadataDocument","metadataDocument","DEFAULT_STUDIO_CLIENT_OPTIONS","t","s","useTranslation","structureLocaleNamespace","d","currentUser","useCurrentUser","pair","Promise","reject","Error","translationsArray","all","dupeId","uuid","docId","_ref","trim","duplicateTranslation","firstValueFrom","editOperations","pipe","filter","duplicateTranslationSuccess","operationEvents","execute","duplicateMetadata","_temp3","duplicateMetadataSuccess","_temp4","dupeId_0","Object","fromEntries","from","entries","_temp5","values","at","console","finally","handle","granted","CopyIcon","Boolean","DuplicateWithTranslationsAction","op","e","op_0","e_0","locale_0","useOpenInNewPane","router","routerPanesState","groupIndex","usePaneRouter","panes","splice","href","resolvePathFromState","navigateUrl","path","createReference","language","ref","strengthenOnPublish","_key","randomKey","_weak","_strengthenOnPublish","LanguageManage","metadataId","sourceLanguageId","open","openCreated","userHasClicked","setUserHasClicked","canCreate","sourceReference","newMetadataDocument","createIfNotExists","handleClick","CogIcon","removeExcludedPaths","isDocumentSchemaType","pathsToExclude","extractPaths","field","options","documentInternationalization","exclude","pathToString","Mutation","mutations","apply","result","fields","fieldPath","fieldSchema","extractWithPath","thisFieldWithPath","jsonType","innerFields","of","some","item","arrayValue","itemPath","itemSchema","find","arrayMember","LanguageOption","current","source","metadata","undefined","handleOpen","_createdAt","newTranslationDocumentId","newTranslationDocument","create","newTranslationReference","metadataPatch","setIfMissing","insert","metadataExisted","sourceDocument","newDocument","destinationLanguageId","metaDocumentId","handleCreate","LanguagePatch","currentId","ConstrainedBox","children","maxWidth","Warning","DocumentInternationalizationMenu","setQuery","event","currentTarget","handleQuery","setOpen","buttonRef","useRef","popoverRef","handleClickOutside","useClickOutsideEvent","useEditState","documentIsInOneMetadataDocument","rawLanguageValue","l","sourceLanguageIsValid","every","valid","warn","allLanguagesAreValid","toLowerCase","includes","language_0","t_0","issueWithTranslations","TranslateIcon","l_0","o","useDeleteMetadataAction","onCancel","onConfirm","LanguageBadge","languageId","color","DocumentCheck","onCheckComplete","addInvalidId","removeInvalidId","addDraftId","removeDraftId","editState","documentType","isValidating","validation","useValidationStatus","validationHasErrors","level","InfoIcon","text","Icon","Info","InfoOutlineIcon","BulkPublish","projectId","dataset","invalidIds","setInvalidIds","checkedIds","setCheckedIds","ids","Set","onOpen","id_0","ids_0","id_1","ids_1","i","draftIds","setDraftIds","id_2","ids_2","id_3","ids_3","i_0","body","request","uri","method","handleBulkPublish","translation_1","translation_0","ReferencePatcher","onChange","useDocumentPane","ready","referencePathBase","PatchEvent","OptimisticallyStrengthen","defineType","liveEdit","defineField","list","readOnly","preview","select","documentSchemaTypes","prepare","selection","languageKeys","toUpperCase","join","subtitle","definePlugin","config","studio","components","layout","i18n","bundles","form","input","isSanityDocument","weakAndTypedTranslations","document","unstable_languageFilter","prev","ctx","badges","actions","types","templates","parameterizedTemplates","parameters","staticTemplates","flatMap","plugins","internationalizedArray","languages","fieldTypes","to","weak","Rule","custom","context","valueLanguage","getClient","fetch","draftRef","parent","p","strict"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/document-internationalization",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0-canary.0",
|
|
4
4
|
"description": "Create unique translations of a document based on its language, joined by a shared reference document.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"@sanity/icons": "^3.7.4",
|
|
31
31
|
"@sanity/mutator": "^5.0.1",
|
|
32
32
|
"@sanity/ui": "^3.1.11",
|
|
33
|
+
"@sanity/util": "^5.10.0",
|
|
33
34
|
"@sanity/uuid": "^3.0.2",
|
|
34
35
|
"rxjs": "^7.8.1",
|
|
35
36
|
"sanity-plugin-utils": "^1.7.0"
|
|
@@ -44,16 +45,16 @@
|
|
|
44
45
|
"jsdom": "^28.0.0",
|
|
45
46
|
"react": "^19.2.4",
|
|
46
47
|
"react-dom": "^19.2.4",
|
|
47
|
-
"sanity": "^5.
|
|
48
|
+
"sanity": "^5.10.0",
|
|
48
49
|
"@repo/package.config": "0.0.0",
|
|
49
50
|
"@repo/tsconfig": "0.0.0",
|
|
50
|
-
"sanity-plugin-internationalized-array": "^
|
|
51
|
+
"sanity-plugin-internationalized-array": "^5.0.0-canary.0"
|
|
51
52
|
},
|
|
52
53
|
"peerDependencies": {
|
|
53
54
|
"react": "^19.2",
|
|
54
55
|
"react-dom": "^19.2",
|
|
55
56
|
"sanity": "^5",
|
|
56
|
-
"sanity-plugin-internationalized-array": "^
|
|
57
|
+
"sanity-plugin-internationalized-array": "^5.0.0"
|
|
57
58
|
},
|
|
58
59
|
"engines": {
|
|
59
60
|
"node": ">=20.19 <22 || >=22.12"
|