@sanity/document-internationalization 2.0.0-studio-v3-plugin-v2.7 → 2.0.0-studio-v3-plugin-v2.8
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 +6 -3
- package/lib/index.esm.js +407 -156
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +405 -154
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/BulkPublish/DocumentCheck.tsx +39 -16
- package/src/components/BulkPublish/index.tsx +86 -55
- package/src/components/LanguageManage.tsx +1 -2
- package/src/components/LanguageOption.tsx +78 -28
- package/src/components/LanguagePatch.tsx +16 -8
- package/src/components/MenuButton.tsx +76 -43
- package/src/components/OptimisticallyStrengthen/ReferencePatcher.tsx +49 -0
- package/src/components/OptimisticallyStrengthen/index.tsx +34 -0
- package/src/plugin.tsx +195 -147
- package/src/schema/translation/metadata.ts +1 -1
- package/src/types.ts +9 -7
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/constants.ts","../src/schema/translation/metadata.ts","../node_modules/suspend-react/dist/index.js","../src/hooks/useOpenInNewPane.tsx","../src/components/LanguageOption.tsx","../src/hooks/useLanguageMetadata.tsx","../src/components/LanguageManage.tsx","../src/components/LanguagePatch.tsx","../src/components/MenuButton.tsx","../src/badges/index.tsx","../src/plugin.tsx"],"sourcesContent":["export const METADATA_SCHEMA_NAME = `translation.metadata`\nexport const API_VERSION = `2022-11-27`\n","import {TranslateIcon} from '@sanity/icons'\nimport {defineField, defineType, DocumentDefinition} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME} from '../../constants'\n\nexport default (schemaTypes: string[]): 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',\n type: 'internationalizedArrayReference',\n }),\n defineField({\n name: 'schemaTypes',\n description:\n 'Used to filter the reference fields above so all translations share the same types.',\n type: 'array',\n // For some reason TS dislikes this line because of the DocumentDefinition return type\n // @ts-expect-error\n of: [{type: 'string'}],\n options: {list: schemaTypes},\n readOnly: ({value}) => Boolean(value),\n }),\n ],\n preview: {\n select: {\n translations: 'translations',\n documentSchemaTypes: 'schemaTypes',\n },\n prepare(selection) {\n const {translations, documentSchemaTypes} = selection\n const title =\n translations.length === 1\n ? `1 Translation`\n : `${translations.length} Translations`\n const languageKeys = translations.length\n ? translations\n .map((t: {_key: string}) => t._key.toUpperCase())\n .join(', ')\n : ``\n const subtitle = [\n languageKeys ? `(${languageKeys})` : null,\n documentSchemaTypes?.length\n ? documentSchemaTypes.map((s: string) => s.toUpperCase()).join(`, `)\n : `No Schemas Defined`,\n ]\n .filter(Boolean)\n .join(` `)\n\n return {\n title,\n subtitle,\n }\n },\n },\n })\n","function shallowEqualArrays(arrA, arrB, equal = (a, b) => a === b) {\n if (arrA === arrB) return true;\n if (!arrA || !arrB) return false;\n const len = arrA.length;\n if (arrB.length !== len) return false;\n\n for (let i = 0; i < len; i++) if (!equal(arrA[i], arrB[i])) return false;\n\n return true;\n}\n\nconst globalCache = [];\n\nfunction query(fn, keys, preload = false, config = {}) {\n for (const entry of globalCache) {\n // Find a match\n if (shallowEqualArrays(keys, entry.keys, entry.equal)) {\n // If we're pre-loading and the element is present, just return\n if (preload) return undefined; // If an error occurred, throw\n\n if (Object.prototype.hasOwnProperty.call(entry, 'error')) throw entry.error; // If a response was successful, return\n\n if (Object.prototype.hasOwnProperty.call(entry, 'response')) return entry.response; // If the promise is still unresolved, throw\n\n if (!preload) throw entry.promise;\n }\n } // The request is new or has changed.\n\n\n const entry = {\n keys,\n equal: config.equal,\n promise: // Execute the promise\n fn(...keys) // When it resolves, store its value\n .then(response => entry.response = response) // Remove the entry if a lifespan was given\n .then(() => {\n if (config.lifespan && config.lifespan > 0) {\n setTimeout(() => {\n const index = globalCache.indexOf(entry);\n if (index !== -1) globalCache.splice(index, 1);\n }, config.lifespan);\n }\n }) // Store caught errors, they will be thrown in the render-phase to bubble into an error-bound\n .catch(error => entry.error = error)\n }; // Register the entry\n\n globalCache.push(entry); // And throw the promise, this yields control back to React\n\n if (!preload) throw entry.promise;\n return undefined;\n}\n\nconst suspend = (fn, keys, config) => query(fn, keys, false, config);\n\nconst preload = (fn, keys, config) => void query(fn, keys, true, config);\n\nconst peek = keys => {\n var _globalCache$find;\n\n return (_globalCache$find = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal))) == null ? void 0 : _globalCache$find.response;\n};\n\nconst clear = keys => {\n if (keys === undefined || keys.length === 0) globalCache.splice(0, globalCache.length);else {\n const entry = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal));\n\n if (entry) {\n const index = globalCache.indexOf(entry);\n if (index !== -1) globalCache.splice(index, 1);\n }\n }\n};\n\nexport { clear, peek, preload, suspend };\n","import React from 'react'\nimport {usePaneRouter} from 'sanity/desk'\nimport {RouterContext} from 'sanity/router'\n\nexport function useOpenInNewPane(id?: string, type?: string) {\n const routerContext = React.useContext(RouterContext)\n const {routerPanesState, groupIndex} = usePaneRouter()\n\n const openInNewPane = React.useCallback(() => {\n if (!routerContext || !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 = routerContext.resolvePathFromState({panes})\n routerContext.navigateUrl({path: href})\n }, [id, type, routerContext, routerPanesState, groupIndex])\n\n return openInNewPane\n}\n","import React, {useCallback} from 'react'\nimport {useClient} from 'sanity'\nimport {Button, Badge, Box, Flex, Text, useToast, Spinner} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {SplitVerticalIcon, AddIcon, CheckmarkIcon} from '@sanity/icons'\n\nimport {Language, Metadata, TranslationReference} from '../types'\nimport {API_VERSION, METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\n\ntype LanguageOptionProps = {\n language: Language\n languageField: string\n index: number\n schemaType: string\n documentId: string\n disabled: boolean\n current: boolean\n sourceId: string\n sourceLanguageId?: string\n metadata?: Metadata | null\n translation?: TranslationReference\n apiVersion?: string\n}\n\nfunction createReference(key: string, ref: string, type: string) {\n return {\n _key: key,\n value: {\n _type: 'reference',\n _ref: ref,\n _weak: true,\n _strengthenOnPublish: {\n type,\n },\n },\n }\n}\n\nexport default function LanguageOption(props: LanguageOptionProps) {\n const {\n apiVersion = API_VERSION,\n index,\n language,\n languageField,\n schemaType,\n documentId,\n disabled,\n current,\n sourceId,\n sourceLanguageId,\n metadata,\n translation,\n } = props\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const open = useOpenInNewPane(translation?.value?._ref, schemaType)\n const handleOpen = useCallback(() => open(), [open])\n\n const handleCreate = useCallback(async () => {\n const metadataExists = Boolean(metadata?._id)\n const transaction = client.transaction()\n\n // 1. Duplicate current document\n // 2. Update language\n // 3. Add to translation metadata\n const documentIds = documentId.startsWith(`drafts.`)\n ? [documentId, documentId.replace(`drafts.`, ``)]\n : [documentId, `drafts.${documentId}`]\n const latestDocument = await client.fetch(`*[_id in $ids]|order(_updatedAt desc)[0]`, {\n ids: documentIds,\n })\n const newTranslationDocument = {\n ...latestDocument,\n _id: `drafts.${uuid()}`,\n [languageField]: language.id,\n }\n\n transaction.create(newTranslationDocument)\n\n const metadataId = metadata?._id ?? uuid()\n const newTranslationReference = createReference(\n language.id,\n newTranslationDocument._id.replace(`drafts.`, ``),\n schemaType\n )\n\n // Create translation metadata document if it doesn't already exist\n if (metadataExists) {\n const path = `translations[${index - 1}]`\n const metadataPatch = client\n .patch(metadataId)\n .setIfMissing({translations: []})\n .insert(`before`, path, [newTranslationReference])\n\n transaction.patch(metadataPatch)\n } else {\n // Source language relies on a field named `language` on the document\n const sourceReference = sourceLanguageId\n ? createReference(sourceLanguageId, sourceId, schemaType)\n : null\n\n transaction.createIfNotExists({\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaTypes: [schemaType],\n translations: [newTranslationReference, sourceReference].filter(Boolean),\n })\n }\n\n transaction\n .commit()\n .then(() => {\n // openDocumentInSidePane(metadataId, `translation.metadata`)\n return toast.push({\n status: 'success',\n title: `Created ${language.title} translation`,\n description: metadataExists\n ? `Updated Translations Metadata`\n : `Created Translations Metadata`,\n })\n })\n .catch((err) => {\n console.error(err)\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 index,\n language,\n languageField,\n metadata?._id,\n schemaType,\n sourceId,\n sourceLanguageId,\n toast,\n ])\n\n return (\n <Button\n onClick={translation ? handleOpen : handleCreate}\n mode={current ? `default` : `bleed`}\n disabled={disabled || current}\n >\n <Flex gap={3} align=\"center\">\n {disabled ? (\n <Spinner />\n ) : (\n <Text size={2}>\n {/* eslint-disable-next-line no-nested-ternary */}\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 )\n}\n","import React from 'react'\nimport {useListeningQuery} from 'sanity-plugin-utils'\nimport {METADATA_SCHEMA_NAME} from '../constants'\n\nimport {Metadata} from '../types'\n\nexport function useTranslationMetadata(\n id: string,\n schemaType: string\n): {\n data: Metadata | null\n loading: boolean\n error: boolean\n} {\n const query = `*[_type == $translationSchema && $id in translations[].value._ref][0]`\n const {data, loading, error} = useListeningQuery<Metadata>(query, {\n params: {id, translationSchema: METADATA_SCHEMA_NAME},\n })\n\n return {data, loading, error}\n}\n","import React from 'react'\nimport {CogIcon} from '@sanity/icons'\nimport {Button} from '@sanity/ui'\n\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\nimport {METADATA_SCHEMA_NAME} from '../constants'\n\ntype LanguageManageProps = {\n id?: string\n}\n\nexport default function LanguageManage(props: LanguageManageProps) {\n const {id} = props\n const open = useOpenInNewPane(id, METADATA_SCHEMA_NAME)\n\n return (\n <Button\n disabled={!id}\n mode=\"ghost\"\n text=\"Manage Translations\"\n icon={CogIcon}\n onClick={() => open()}\n />\n )\n}\n","import React from 'react'\nimport {ChevronRightIcon} from '@sanity/icons'\nimport {Button, useToast} from '@sanity/ui'\nimport {SanityDocument, useClient} from 'sanity'\n\nimport {Language} from '../types'\nimport {API_VERSION} from '../constants'\n\ntype LanguagePatchProps = {\n language: Language\n languageField: string\n documentId: string\n schemaType: string\n source: SanityDocument | null\n disabled: boolean\n apiVersion?: string\n}\n\nexport default function LanguagePatch(props: LanguagePatchProps) {\n const {\n apiVersion = API_VERSION,\n language,\n languageField,\n documentId,\n schemaType,\n source,\n disabled = false,\n } = props\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const handleClick = React.useCallback(() => {\n const currentId = source ? source._id : `draft.${documentId}`\n const transaction = client.transaction()\n\n if (!source) {\n transaction.createIfNotExists({\n _id: currentId,\n _type: schemaType,\n })\n }\n\n const patch = client.patch(currentId).set({[languageField]: language.id})\n transaction.patch(patch)\n\n transaction\n .commit()\n .then(() => {\n toast.push({\n title: `Set document language to ${language.title}`,\n status: `success`,\n })\n })\n .catch((err) => {\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, documentId, client, languageField, language, schemaType, toast])\n\n return (\n <Button\n mode=\"ghost\"\n text={language.title}\n icon={ChevronRightIcon}\n onClick={() => handleClick()}\n disabled={disabled}\n justify=\"flex-start\"\n />\n )\n}\n","import {suspend} from 'suspend-react'\nimport React, {useCallback, useState} from 'react'\nimport {Text, Card, useClickOutside, Stack, Popover, Button, Box} from '@sanity/ui'\nimport {TranslateIcon} from '@sanity/icons'\nimport {useClient, useEditState, useWorkspace} from 'sanity'\n\nimport {SupportedLanguages} from '../types'\nimport LanguageOption from './LanguageOption'\nimport {useTranslationMetadata} from '../hooks/useLanguageMetadata'\nimport LanguageManage from './LanguageManage'\nimport LanguagePatch from './LanguagePatch'\nimport {API_VERSION} from '../constants'\n\ntype MenuButtonProps = {\n supportedLanguages: SupportedLanguages\n schemaType: string\n documentId: string\n languageField: string\n apiVersion?: string\n}\n\nexport default function MenuButton(props: MenuButtonProps) {\n const {apiVersion = API_VERSION, schemaType, documentId, languageField} = props\n\n const client = useClient({apiVersion})\n const supportedLanguages = Array.isArray(props.supportedLanguages)\n ? props.supportedLanguages\n : // eslint-disable-next-line require-await\n suspend(async () => {\n if (typeof props.supportedLanguages === 'function') {\n return props.supportedLanguages(client)\n }\n return props.supportedLanguages\n }, [])\n\n const [open, setOpen] = useState(false)\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n const [button, setButton] = useState<HTMLElement | null>(null)\n const [popover, setPopover] = useState<HTMLElement | null>(null)\n const handleClickOutside = useCallback(() => setOpen(false), [])\n useClickOutside(handleClickOutside, [button, popover])\n const {data: metadata, loading, error} = useTranslationMetadata(documentId, schemaType)\n const {draft, published} = useEditState(documentId, schemaType)\n const source = draft || published\n\n const sourceLanguageId = source?.[languageField] as string | undefined\n const sourceLanguageIsValid = supportedLanguages.some((l) => l.id === sourceLanguageId)\n const allLanguagesAreValid = React.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>\n {error ? (\n <Card tone=\"critical\" padding={2}>\n <Text>Error: {error}</Text>\n </Card>\n ) : (\n <Stack padding={1} space={1}>\n {supportedLanguages.length > 0 ? (\n <>\n {supportedLanguages.map((language, langIndex) =>\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 || language.title || `lang-${langIndex}`}\n index={langIndex}\n language={language}\n languageField={languageField}\n schemaType={schemaType}\n documentId={documentId}\n disabled={loading || !allLanguagesAreValid}\n current={language.id === sourceLanguageId}\n metadata={metadata}\n sourceId={documentId}\n sourceLanguageId={sourceLanguageId}\n translation={metadata?.translations.find((t) => t._key === language.id)}\n />\n ) : (\n // Button to set a language field on *this* document\n <LanguagePatch\n key={language.id || language.title || `lang-${langIndex}`}\n languageField={languageField}\n source={source}\n documentId={documentId}\n schemaType={schemaType}\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 (!allLanguagesAreValid ||\n metadata?.translations\n .filter((t) => t?.value?._ref !== documentId)\n .some((t) => t._key === language.id)) ??\n false\n }\n />\n )\n )}\n {/* Once metadata is loaded, there may be issues */}\n {loading ? null : (\n <>\n {/* Not all languages are valid */}\n {allLanguagesAreValid ? null : (\n <Card tone=\"caution\" padding={3}>\n <Text size={1}>Not all language objects are valid. See the console.</Text>\n </Card>\n )}\n {/* Current document has no language field */}\n {sourceLanguageId ? null : (\n <Card tone=\"caution\" padding={3}>\n <Text size={1}>\n Choose a language to <br />\n apply to <strong>this Document</strong>\n </Text>\n </Card>\n )}\n {/* Current document has an invalid language field */}\n {sourceLanguageId && !sourceLanguageIsValid ? (\n <Card tone=\"caution\" padding={3}>\n <Text size={1}>\n Change the current language value <code>{sourceLanguageId}</code>\n <br />\n to one of the supported languages\n </Text>\n </Card>\n ) : null}\n </>\n )}\n </>\n ) : null}\n <LanguageManage id={metadata?._id} />\n </Stack>\n )}\n </Box>\n )\n\n return (\n <Popover constrainSize content={content} open={open} portal ref={setPopover} overflow=\"auto\">\n <Button\n text=\"Translations\"\n mode=\"bleed\"\n disabled={!source}\n tone={\n !source || (!loading && sourceLanguageId && sourceLanguageIsValid) ? undefined : `caution`\n }\n icon={TranslateIcon}\n onClick={handleClick}\n ref={setButton}\n selected={open}\n />\n </Popover>\n )\n}\n","import {DocumentBadgeDescription, DocumentBadgeProps} from 'sanity'\n\nimport {SupportedLanguages} from '../types'\n\nexport function LanguageBadge(\n props: DocumentBadgeProps,\n supportedLanguages: SupportedLanguages,\n languageField: string\n): DocumentBadgeDescription | null {\n const source = props?.draft || props?.published\n const languageId = source?.[languageField]\n\n if (!languageId) {\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 ?? String(languageId),\n title: language?.title ?? undefined,\n color: `primary`,\n }\n}\n","import React from 'react'\nimport {definePlugin, defineField} from 'sanity'\nimport {internationalizedArray} from 'sanity-plugin-internationalized-array'\nimport {Stack} from '@sanity/ui'\n\nimport metadata from './schema/translation/metadata'\nimport MenuButton from './components/MenuButton'\nimport {PluginConfig} from './types'\nimport {LanguageBadge} from './badges'\nimport {METADATA_SCHEMA_NAME} from './constants'\nimport BulkPublish from './components/BulkPublish'\n\nconst DEFAULT_CONFIG = {\n supportedLanguages: [],\n schemaTypes: [],\n languageField: `language`,\n bulkPublish: false,\n}\n\nexport const documentInternationalization = definePlugin<PluginConfig>((config) => {\n const {supportedLanguages, schemaTypes, languageField, bulkPublish} = {\n ...DEFAULT_CONFIG,\n ...config,\n }\n\n const renderLanguageFilter = (schemaType: string, documentId?: string) => {\n return (\n <MenuButton\n supportedLanguages={supportedLanguages}\n schemaType={schemaType}\n documentId={documentId ?? ``}\n languageField={languageField}\n />\n )\n }\n\n return {\n name: '@sanity/document-internationalization',\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 bulkPublish &&\n props.id === 'root' &&\n props.schemaType.name === METADATA_SCHEMA_NAME\n ) {\n return (\n <Stack space={5}>\n {/* <BulkPublish {...props} /> */}\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 document: {\n unstable_languageFilter: (prev, ctx) => {\n const {schemaType, documentId} = ctx\n\n return schemaTypes.includes(schemaType)\n ? [...prev, () => renderLanguageFilter(schemaType, documentId)]\n : prev\n },\n badges: (prev, {schemaType}) => {\n if (!schemaTypes.includes(schemaType)) {\n return prev\n }\n\n return [(props) => LanguageBadge(props, supportedLanguages, languageField), ...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)],\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 languages: supportedLanguages,\n fieldTypes: [\n // TODO: The plugin should allow this kind of input\n // @ts-ignore\n defineField(\n {\n name: 'reference',\n type: 'reference',\n to: schemaTypes.map((type) => ({type: type})),\n // TODO: Add a validation rule to *ensure* the document's language matches the array key\n // Reference filters don't actually enforce validation!\n // validation: (Rule) => Rule.custom(),\n options: {\n collapsed: false,\n // TODO: Update type once it knows the values of this filter\n // @ts-ignore\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._key)\n\n if (!language?._key) return null\n\n if (document.schemaTypes) {\n return {\n filter: `_type in $schemaTypes && ${languageField} == $language`,\n params: {schemaTypes: document.schemaTypes, language: language._key},\n }\n }\n\n return {\n filter: `${languageField} == $language`,\n params: {language: language._key},\n }\n },\n },\n },\n {strict: false}\n ),\n ],\n }),\n ],\n }\n})\n"],"names":["METADATA_SCHEMA_NAME","API_VERSION","metadata","schemaTypes","defineType","type","name","title","icon","TranslateIcon","liveEdit","fields","defineField","description","of","options","list","readOnly","_ref","value","Boolean","preview","select","translations","documentSchemaTypes","prepare","selection","length","concat","languageKeys","map","t","_key","toUpperCase","join","subtitle","s","filter","shallowEqualArrays","arrA","arrB","equal","arguments","undefined","a","b","len","i","globalCache","query","fn","keys","preload","config","entry","Object","prototype","hasOwnProperty","call","error","response","promise","then","lifespan","setTimeout","index","indexOf","splice","catch","push","suspend","useOpenInNewPane","id","routerContext","React","useContext","RouterContext","routerPanesState","groupIndex","usePaneRouter","openInNewPane","useCallback","panes","params","href","resolvePathFromState","navigateUrl","path","createReference","key","ref","_type","_weak","_strengthenOnPublish","LanguageOption","props","_a","apiVersion","language","languageField","schemaType","documentId","disabled","current","sourceId","sourceLanguageId","translation","client","useClient","toast","useToast","open","handleOpen","handleCreate","metadataExists","_id","transaction","documentIds","startsWith","replace","latestDocument","fetch","ids","newTranslationDocument","uuid","create","metadataId","newTranslationReference","metadataPatch","patch","setIfMissing","insert","sourceReference","createIfNotExists","commit","status","err","console","message","jsx","Button","onClick","mode","children","jsxs","Flex","gap","align","Spinner","Text","size","SplitVerticalIcon","CheckmarkIcon","AddIcon","Box","flex","Badge","tone","useTranslationMetadata","data","loading","useListeningQuery","translationSchema","LanguageManage","text","CogIcon","LanguagePatch","source","handleClick","currentId","set","ChevronRightIcon","justify","MenuButton","supportedLanguages","Array","isArray","setOpen","useState","o","button","setButton","popover","setPopover","handleClickOutside","useClickOutside","draft","published","useEditState","sourceLanguageIsValid","some","l","allLanguagesAreValid","useMemo","valid","every","warn","content","Card","padding","Stack","space","Fragment","langIndex","find","Popover","constrainSize","portal","overflow","selected","LanguageBadge","_b","languageId","label","String","color","DEFAULT_CONFIG","bulkPublish","documentInternationalization","definePlugin","renderLanguageFilter","form","components","input","renderDefault","document","unstable_languageFilter","prev","ctx","includes","badges","_ref2","schema","types","templates","_ref3","parameterizedTemplates","get","parameters","_ref4","staticTemplates","flatMap","plugins","internationalizedArray","languages","fieldTypes","to","collapsed","_ref5","parent","parentArray","p","strict"],"mappings":"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","x_google_ignoreList":[2]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/badges/index.tsx","../src/constants.ts","../src/components/BulkPublish/DocumentCheck.tsx","../src/components/BulkPublish/index.tsx","../node_modules/suspend-react/dist/index.js","../src/hooks/useLanguageMetadata.tsx","../src/hooks/useOpenInNewPane.tsx","../src/components/LanguageManage.tsx","../src/components/LanguageOption.tsx","../src/components/LanguagePatch.tsx","../src/components/MenuButton.tsx","../src/components/OptimisticallyStrengthen/ReferencePatcher.tsx","../src/components/OptimisticallyStrengthen/index.tsx","../src/schema/translation/metadata.ts","../src/plugin.tsx"],"sourcesContent":["import {DocumentBadgeDescription, DocumentBadgeProps} from 'sanity'\n\nimport {SupportedLanguages} from '../types'\n\nexport function LanguageBadge(\n props: DocumentBadgeProps,\n supportedLanguages: SupportedLanguages,\n languageField: string\n): DocumentBadgeDescription | null {\n const source = props?.draft || props?.published\n const languageId = source?.[languageField]\n\n if (!languageId) {\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 ?? String(languageId),\n title: language?.title ?? undefined,\n color: `primary`,\n }\n}\n","export const METADATA_SCHEMA_NAME = `translation.metadata`\nexport const API_VERSION = `2022-11-27`\n","import {Card, Spinner} from '@sanity/ui'\nimport React from 'react'\nimport {Preview, useEditState, useSchema, useValidationStatus} from 'sanity'\n\ntype DocumentCheckProps = {\n id: string\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, addInvalidId, removeInvalidId, addDraftId, removeDraftId} = props\n const editState = useEditState(id, ``)\n const {isValidating, validation} = useValidationStatus(id, ``)\n const schema = useSchema()\n\n const validationHasErrors = React.useMemo(() => {\n return (\n !isValidating &&\n validation.length > 0 &&\n validation.some((item) => item.level === 'error')\n )\n }, [isValidating, validation])\n\n React.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 addDraftId,\n addInvalidId,\n editState.draft,\n id,\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\n border\n padding={2}\n tone={validationHasErrors ? `critical` : `positive`}\n >\n {editState.draft && schemaType ? (\n <Preview\n layout=\"default\"\n value={editState.draft}\n schemaType={schemaType}\n />\n ) : (\n <Spinner />\n )}\n </Card>\n )\n}\n","import {Button, Card, Stack, Text, useToast} from '@sanity/ui'\nimport React, {useCallback} from 'react'\nimport {TextWithTone, useClient, useWorkspace} from 'sanity'\n\nimport {API_VERSION} from '../../constants'\nimport {TranslationReference} from '../../types'\nimport DocumentCheck from './DocumentCheck'\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] = React.useState<string[] | null>(null)\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] = React.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((res) => {\n toast.push({\n status: 'success',\n title: 'Success',\n description: 'Bulk publish complete',\n })\n })\n .catch((err) => {\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 return translations?.length > 0 ? (\n <Card padding={4} border radius={2}>\n <Stack space={3}>\n <Text weight=\"bold\" size={1}>\n Bulk publishing\n </Text>\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=\"caution\" size={1}>\n {invalidIds && invalidIds.length === 1\n ? `1 draft document has`\n : `${\n invalidIds && invalidIds.length\n } draft documents have`}{' '}\n validation issues that must 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 <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 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={\n Boolean(invalidIds && invalidIds?.length > 0) || !draftIds.length\n }\n />\n ) : (\n <Text muted size={1}>\n No draft documents to publish\n </Text>\n )}\n </Stack>\n </Card>\n ) : null\n}\n","function shallowEqualArrays(arrA, arrB, equal = (a, b) => a === b) {\n if (arrA === arrB) return true;\n if (!arrA || !arrB) return false;\n const len = arrA.length;\n if (arrB.length !== len) return false;\n\n for (let i = 0; i < len; i++) if (!equal(arrA[i], arrB[i])) return false;\n\n return true;\n}\n\nconst globalCache = [];\n\nfunction query(fn, keys, preload = false, config = {}) {\n for (const entry of globalCache) {\n // Find a match\n if (shallowEqualArrays(keys, entry.keys, entry.equal)) {\n // If we're pre-loading and the element is present, just return\n if (preload) return undefined; // If an error occurred, throw\n\n if (Object.prototype.hasOwnProperty.call(entry, 'error')) throw entry.error; // If a response was successful, return\n\n if (Object.prototype.hasOwnProperty.call(entry, 'response')) return entry.response; // If the promise is still unresolved, throw\n\n if (!preload) throw entry.promise;\n }\n } // The request is new or has changed.\n\n\n const entry = {\n keys,\n equal: config.equal,\n promise: // Execute the promise\n fn(...keys) // When it resolves, store its value\n .then(response => entry.response = response) // Remove the entry if a lifespan was given\n .then(() => {\n if (config.lifespan && config.lifespan > 0) {\n setTimeout(() => {\n const index = globalCache.indexOf(entry);\n if (index !== -1) globalCache.splice(index, 1);\n }, config.lifespan);\n }\n }) // Store caught errors, they will be thrown in the render-phase to bubble into an error-bound\n .catch(error => entry.error = error)\n }; // Register the entry\n\n globalCache.push(entry); // And throw the promise, this yields control back to React\n\n if (!preload) throw entry.promise;\n return undefined;\n}\n\nconst suspend = (fn, keys, config) => query(fn, keys, false, config);\n\nconst preload = (fn, keys, config) => void query(fn, keys, true, config);\n\nconst peek = keys => {\n var _globalCache$find;\n\n return (_globalCache$find = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal))) == null ? void 0 : _globalCache$find.response;\n};\n\nconst clear = keys => {\n if (keys === undefined || keys.length === 0) globalCache.splice(0, globalCache.length);else {\n const entry = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal));\n\n if (entry) {\n const index = globalCache.indexOf(entry);\n if (index !== -1) globalCache.splice(index, 1);\n }\n }\n};\n\nexport { clear, peek, preload, suspend };\n","import React from 'react'\nimport {useListeningQuery} from 'sanity-plugin-utils'\nimport {METADATA_SCHEMA_NAME} from '../constants'\n\nimport {Metadata} from '../types'\n\nexport function useTranslationMetadata(\n id: string,\n schemaType: string\n): {\n data: Metadata | null\n loading: boolean\n error: boolean\n} {\n const query = `*[_type == $translationSchema && $id in translations[].value._ref][0]`\n const {data, loading, error} = useListeningQuery<Metadata>(query, {\n params: {id, translationSchema: METADATA_SCHEMA_NAME},\n })\n\n return {data, loading, error}\n}\n","import React from 'react'\nimport {usePaneRouter} from 'sanity/desk'\nimport {RouterContext} from 'sanity/router'\n\nexport function useOpenInNewPane(id?: string, type?: string) {\n const routerContext = React.useContext(RouterContext)\n const {routerPanesState, groupIndex} = usePaneRouter()\n\n const openInNewPane = React.useCallback(() => {\n if (!routerContext || !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 = routerContext.resolvePathFromState({panes})\n routerContext.navigateUrl({path: href})\n }, [id, type, routerContext, routerPanesState, groupIndex])\n\n return openInNewPane\n}\n","import {CogIcon} from '@sanity/icons'\nimport {Button} from '@sanity/ui'\n\nimport {METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\n\ntype LanguageManageProps = {\n id?: string\n}\n\nexport default function LanguageManage(props: LanguageManageProps) {\n const {id} = props\n const open = useOpenInNewPane(id, METADATA_SCHEMA_NAME)\n\n return (\n <Button\n disabled={!id}\n mode=\"ghost\"\n text=\"Manage Translations\"\n icon={CogIcon}\n onClick={() => open()}\n />\n )\n}\n","import {AddIcon, CheckmarkIcon, SplitVerticalIcon} from '@sanity/icons'\nimport {\n Badge,\n Box,\n Button,\n Flex,\n Spinner,\n Text,\n Tooltip,\n useToast,\n} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback} from 'react'\nimport {useClient} from 'sanity'\n\nimport {API_VERSION, METADATA_SCHEMA_NAME} from '../constants'\nimport {useOpenInNewPane} from '../hooks/useOpenInNewPane'\nimport {Language, Metadata, TranslationReference} from '../types'\n\ntype LanguageOptionProps = {\n language: Language\n languageField: string\n index: number\n schemaType: string\n documentId: string\n disabled: boolean\n current: boolean\n sourceId: string\n sourceLanguageId?: string\n metadata?: Metadata | null\n translation?: TranslationReference\n apiVersion?: string\n}\n\nfunction createReference(\n key: string,\n ref: string,\n type: string\n): TranslationReference {\n return {\n _key: key,\n _type: 'internationalizedArrayReferenceValue',\n value: {\n _type: 'reference',\n _ref: ref,\n _weak: true,\n _strengthenOnPublish: {\n type,\n },\n },\n }\n}\n\nexport default function LanguageOption(props: LanguageOptionProps) {\n const {\n apiVersion = API_VERSION,\n index,\n language,\n languageField,\n schemaType,\n documentId,\n disabled,\n current,\n sourceId,\n sourceLanguageId,\n metadata,\n translation,\n } = props\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const open = useOpenInNewPane(translation?.value?._ref, schemaType)\n const handleOpen = useCallback(() => open(), [open])\n\n const handleCreate = useCallback(async () => {\n const metadataExists = Boolean(metadata?._id)\n const transaction = client.transaction()\n\n // 1. Duplicate current document\n // 2. Update language\n // 3. Add to translation metadata\n const documentIds = documentId.startsWith(`drafts.`)\n ? [documentId, documentId.replace(`drafts.`, ``)]\n : [documentId, `drafts.${documentId}`]\n const latestDocument = await client.fetch(\n `*[_id in $ids]|order(_updatedAt desc)[0]`,\n {\n ids: documentIds,\n }\n )\n const newTranslationDocument = {\n ...latestDocument,\n _id: `drafts.${uuid()}`,\n [languageField]: language.id,\n }\n\n transaction.create(newTranslationDocument)\n\n const metadataId = metadata?._id ?? uuid()\n const newTranslationReference = createReference(\n language.id,\n newTranslationDocument._id.replace(`drafts.`, ``),\n schemaType\n )\n\n // Create translation metadata document if it doesn't already exist\n if (metadataExists) {\n const path = `translations[${index - 1}]`\n const metadataPatch = client\n .patch(metadataId)\n .setIfMissing({translations: []})\n .insert(`before`, path, [newTranslationReference])\n\n transaction.patch(metadataPatch)\n } else {\n // Source language relies on a field named `language` on the document\n const sourceReference = sourceLanguageId\n ? createReference(sourceLanguageId, sourceId, schemaType)\n : null\n\n transaction.createIfNotExists({\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaTypes: [schemaType],\n translations: [newTranslationReference, sourceReference].filter(\n Boolean\n ),\n })\n }\n\n transaction\n .commit()\n .then(() => {\n // openDocumentInSidePane(metadataId, `translation.metadata`)\n return toast.push({\n status: 'success',\n title: `Created ${language.title} translation`,\n description: metadataExists\n ? `Updated Translations Metadata`\n : `Created Translations Metadata`,\n })\n })\n .catch((err) => {\n console.error(err)\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 index,\n language,\n languageField,\n metadata?._id,\n schemaType,\n sourceId,\n sourceLanguageId,\n toast,\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 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 || current}\n >\n <Flex gap={3} align=\"center\">\n {disabled ? (\n <Spinner />\n ) : (\n <Text size={2}>\n {/* eslint-disable-next-line no-nested-ternary */}\n {translation ? (\n <SplitVerticalIcon />\n ) : current ? (\n <CheckmarkIcon />\n ) : (\n <AddIcon />\n )}\n </Text>\n )}\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge tone={disabled || current ? `default` : `primary`}>\n {language.id}\n </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 React from 'react'\nimport {SanityDocument, useClient} from 'sanity'\n\nimport {API_VERSION} from '../constants'\nimport {Language} from '../types'\n\ntype LanguagePatchProps = {\n language: Language\n languageField: string\n documentId: string\n schemaType: string\n source: SanityDocument | null\n disabled: boolean\n apiVersion?: string\n}\n\nexport default function LanguagePatch(props: LanguagePatchProps) {\n const {\n apiVersion = API_VERSION,\n language,\n languageField,\n documentId,\n schemaType,\n source,\n disabled = false,\n } = props\n const client = useClient({apiVersion})\n const toast = useToast()\n\n const handleClick = React.useCallback(() => {\n const currentId = source ? source._id : `draft.${documentId}`\n const transaction = client.transaction()\n\n if (!source) {\n transaction.createIfNotExists({\n _id: currentId,\n _type: schemaType,\n })\n }\n\n const patch = client.patch(currentId).set({[languageField]: language.id})\n transaction.patch(patch)\n\n transaction\n .commit()\n .then(() => {\n toast.push({\n title: `Set document language to ${language.title}`,\n status: `success`,\n })\n })\n .catch((err) => {\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, documentId, client, languageField, language, schemaType, toast])\n\n return (\n <Button\n mode=\"bleed\"\n onClick={handleClick}\n disabled={disabled}\n justify=\"flex-start\"\n >\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 {TranslateIcon} from '@sanity/icons'\nimport {\n Box,\n Button,\n Card,\n Popover,\n Stack,\n Text,\n useClickOutside,\n} from '@sanity/ui'\nimport React, {useCallback, useState} from 'react'\nimport {useClient, useEditState} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport {API_VERSION} from '../constants'\nimport {useTranslationMetadata} from '../hooks/useLanguageMetadata'\nimport {SupportedLanguages} from '../types'\nimport LanguageManage from './LanguageManage'\nimport LanguageOption from './LanguageOption'\nimport LanguagePatch from './LanguagePatch'\n\ntype MenuButtonProps = {\n supportedLanguages: SupportedLanguages\n schemaType: string\n documentId: string\n languageField: string\n apiVersion?: string\n}\n\nexport default function MenuButton(props: MenuButtonProps) {\n const {\n apiVersion = API_VERSION,\n schemaType,\n documentId,\n languageField,\n } = props\n\n const client = useClient({apiVersion})\n const supportedLanguages = Array.isArray(props.supportedLanguages)\n ? props.supportedLanguages\n : // eslint-disable-next-line require-await\n suspend(async () => {\n if (typeof props.supportedLanguages === 'function') {\n return props.supportedLanguages(client)\n }\n return props.supportedLanguages\n }, [])\n\n const [open, setOpen] = useState(false)\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n const [button, setButton] = useState<HTMLElement | null>(null)\n const [popover, setPopover] = useState<HTMLElement | null>(null)\n const handleClickOutside = useCallback(() => setOpen(false), [])\n useClickOutside(handleClickOutside, [button, popover])\n const {\n data: metadata,\n loading,\n error,\n } = useTranslationMetadata(documentId, schemaType)\n const {draft, published} = useEditState(documentId, schemaType)\n const source = draft || published\n\n const sourceLanguageId = source?.[languageField] as string | undefined\n const sourceLanguageIsValid = supportedLanguages.some(\n (l) => l.id === sourceLanguageId\n )\n const allLanguagesAreValid = React.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>\n {error ? (\n <Card tone=\"critical\" padding={2}>\n <Text>Error: {error}</Text>\n </Card>\n ) : (\n <Stack padding={1} space={1}>\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 {allLanguagesAreValid ? null : (\n <Card tone=\"caution\" padding={3}>\n <Text size={1}>\n Not all language objects are valid. See the console.\n </Text>\n </Card>\n )}\n {/* Current document has no language field */}\n {sourceLanguageId ? null : (\n <Card tone=\"caution\" padding={3}>\n <Text size={1}>\n Choose a language to <br />\n apply to <strong>this Document</strong>\n </Text>\n </Card>\n )}\n {/* Current document has an invalid language field */}\n {sourceLanguageId && !sourceLanguageIsValid ? (\n <Card tone=\"caution\" padding={3}>\n <Text size={1}>\n Select a supported language.\n <br />\n Current language value: <code>{sourceLanguageId}</code>\n </Text>\n </Card>\n ) : null}\n </>\n )}\n {supportedLanguages.map((language, langIndex) =>\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 || language.title || `lang-${langIndex}`}\n index={langIndex}\n language={language}\n languageField={languageField}\n schemaType={schemaType}\n documentId={documentId}\n disabled={loading || !allLanguagesAreValid}\n current={language.id === sourceLanguageId}\n metadata={metadata}\n sourceId={documentId}\n sourceLanguageId={sourceLanguageId}\n translation={metadata?.translations.find(\n (t) => t._key === language.id\n )}\n />\n ) : (\n // Button to set a language field on *this* document\n <LanguagePatch\n key={language.id || language.title || `lang-${langIndex}`}\n languageField={languageField}\n source={source}\n documentId={documentId}\n schemaType={schemaType}\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 (!allLanguagesAreValid ||\n metadata?.translations\n .filter((t) => t?.value?._ref !== documentId)\n .some((t) => t._key === language.id)) ??\n false\n }\n />\n )\n )}\n </>\n ) : null}\n <LanguageManage id={metadata?._id} />\n </Stack>\n )}\n </Box>\n )\n\n const issueWithTranslations =\n !loading && sourceLanguageId && !sourceLanguageIsValid\n\n return (\n <Popover\n constrainSize\n content={content}\n open={open}\n portal\n ref={setPopover}\n overflow=\"auto\"\n >\n <Button\n text=\"Translations\"\n mode=\"bleed\"\n disabled={!source}\n tone={\n !source || loading || !issueWithTranslations ? undefined : `caution`\n }\n icon={TranslateIcon}\n onClick={handleClick}\n ref={setButton}\n selected={open}\n />\n </Popover>\n )\n}\n","import React from 'react'\nimport {PatchEvent, unset, useClient, useEditState} from 'sanity'\nimport {useDocumentPane} from 'sanity/desk'\n\nimport {API_VERSION} from '../../constants'\nimport {TranslationReference} from '../../types'\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 React.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 translation.value._strengthenOnPublish &&\n // The referenced document has just been published\n !editState.draft &&\n editState.published &&\n editState.ready\n ) {\n const referencePathBase = [\n 'translations',\n {_key: translation._key},\n 'value',\n ]\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 {TranslationReference} from '../../types'\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(\n props: OptimisticallyStrengthenProps\n) {\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, DocumentDefinition} from 'sanity'\n\nimport {METADATA_SCHEMA_NAME} from '../../constants'\n\nexport default (schemaTypes: string[]): 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',\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 // For some reason TS dislikes this line because of the DocumentDefinition return type\n // @ts-expect-error\n of: [{type: 'string'}],\n options: {list: schemaTypes},\n readOnly: ({value}) => Boolean(value),\n }),\n ],\n preview: {\n select: {\n translations: 'translations',\n documentSchemaTypes: 'schemaTypes',\n },\n prepare(selection) {\n const {translations, documentSchemaTypes} = selection\n const title =\n translations.length === 1\n ? `1 Translation`\n : `${translations.length} Translations`\n const languageKeys = translations.length\n ? translations\n .map((t: {_key: string}) => t._key.toUpperCase())\n .join(', ')\n : ``\n const subtitle = [\n languageKeys ? `(${languageKeys})` : null,\n documentSchemaTypes?.length\n ? documentSchemaTypes.map((s: string) => s.toUpperCase()).join(`, `)\n : `No Schemas Defined`,\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} from 'sanity-plugin-internationalized-array'\n\nimport {LanguageBadge} from './badges'\nimport BulkPublish from './components/BulkPublish'\nimport MenuButton from './components/MenuButton'\nimport OptimisticallyStrengthen from './components/OptimisticallyStrengthen'\nimport {API_VERSION, METADATA_SCHEMA_NAME} from './constants'\nimport metadata from './schema/translation/metadata'\nimport {PluginConfig, TranslationReference} from './types'\n\nconst DEFAULT_CONFIG = {\n supportedLanguages: [],\n schemaTypes: [],\n languageField: `language`,\n bulkPublish: false,\n}\n\nexport const documentInternationalization = definePlugin<PluginConfig>(\n (config) => {\n const {supportedLanguages, schemaTypes, languageField, bulkPublish} = {\n ...DEFAULT_CONFIG,\n ...config,\n }\n\n const renderLanguageFilter = (schemaType: string, documentId?: string) => {\n return (\n <MenuButton\n supportedLanguages={supportedLanguages}\n schemaType={schemaType}\n documentId={documentId ?? ``}\n languageField={languageField}\n />\n )\n }\n\n return {\n name: '@sanity/document-internationalization',\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 (props?.value?.translations as TranslationReference[]) ?? []\n const weakAndTypedTranslations = translations.filter(\n (t) => t?.value?._weak && t.value?._strengthenOnPublish\n )\n\n return (\n <Stack space={5}>\n {bulkPublish ? (\n <BulkPublish translations={translations} />\n ) : 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 document: {\n unstable_languageFilter: (prev, ctx) => {\n const {schemaType, documentId} = ctx\n\n return schemaTypes.includes(schemaType)\n ? [...prev, () => renderLanguageFilter(schemaType, documentId)]\n : prev\n },\n badges: (prev, {schemaType}) => {\n if (!schemaTypes.includes(schemaType)) {\n return prev\n }\n\n return [\n (props) => LanguageBadge(props, supportedLanguages, languageField),\n ...prev,\n ]\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)],\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: `${\n schema?.get(schemaType)?.title ?? schemaType\n }: with Language`,\n schemaType,\n parameters: [\n {name: `languageId`, title: `Language ID`, type: `string`},\n ],\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} ${\n schema?.get(schemaType)?.title ?? schemaType\n }`,\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 languages: supportedLanguages,\n fieldTypes: [\n defineField(\n {\n name: 'reference',\n type: 'reference',\n to: schemaTypes.map((type) => ({type})),\n // Reference filters don't actually enforce validation!\n validation: (Rule) =>\n Rule.custom(async (item: TranslationReference, context) => {\n if (!item?.value?._ref || !item?._key) {\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._key) {\n return true\n }\n\n return `Referenced document does not have the correct language value`\n }),\n options: {\n collapsed: false,\n // TODO: Update type once it knows the values of this filter\n // @ts-expect-error\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)\n ? parent\n : [parent]\n const language = parentArray.find((p) => p._key)\n\n if (!language?._key) 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._key,\n },\n }\n }\n\n return {\n filter: `${languageField} == $language`,\n params: {language: language._key},\n }\n },\n },\n },\n {strict: false}\n ),\n ],\n }),\n ],\n }\n }\n)\n"],"names":["LanguageBadge","props","supportedLanguages","languageField","_a","_b","source","draft","published","languageId","language","Array","isArray","find","l","id","label","String","title","color","METADATA_SCHEMA_NAME","API_VERSION","DocumentCheck","addInvalidId","removeInvalidId","addDraftId","removeDraftId","editState","useEditState","isValidating","validation","useValidationStatus","schema","useSchema","validationHasErrors","React","useMemo","length","some","item","level","default","useEffect","schemaType","get","_type","jsx","Card","border","padding","tone","children","Preview","layout","value","Spinner","BulkPublish","translations","client","useClient","apiVersion","projectId","dataset","useWorkspace","toast","useToast","invalidIds","setInvalidIds","useState","useCallback","ids","from","Set","filter","i","draftIds","setDraftIds","handleBulkPublish","body","map","translation","documentId","_ref","request","uri","concat","method","then","res","push","status","description","catch","err","console","error","radius","jsxs","Stack","space","Text","weight","size","TextWithTone","_key","Button","mode","text","onClick","disabled","Boolean","muted","shallowEqualArrays","arrA","arrB","equal","arguments","undefined","a","b","len","globalCache","query","fn","keys","preload","config","entry","Object","prototype","hasOwnProperty","call","response","promise","lifespan","setTimeout","index","indexOf","splice","suspend","useTranslationMetadata","data","loading","useListeningQuery","params","translationSchema","useOpenInNewPane","type","routerContext","useContext","RouterContext","routerPanesState","groupIndex","usePaneRouter","openInNewPane","panes","href","resolvePathFromState","navigateUrl","path","LanguageManage","open","icon","CogIcon","createReference","key","ref","_weak","_strengthenOnPublish","LanguageOption","current","sourceId","sourceLanguageId","metadata","handleOpen","handleCreate","metadataExists","_id","transaction","documentIds","startsWith","replace","latestDocument","fetch","newTranslationDocument","uuid","create","metadataId","newTranslationReference","metadataPatch","patch","setIfMissing","insert","sourceReference","createIfNotExists","schemaTypes","commit","message","Tooltip","content","Box","fallbackPlacements","placement","portal","Flex","gap","align","SplitVerticalIcon","CheckmarkIcon","AddIcon","flex","Badge","LanguagePatch","handleClick","currentId","set","justify","EditIcon","MenuButton","setOpen","o","button","setButton","popover","setPopover","handleClickOutside","useClickOutside","sourceLanguageIsValid","allLanguagesAreValid","valid","every","warn","Fragment","langIndex","t","issueWithTranslations","Popover","constrainSize","overflow","TranslateIcon","selected","ReferencePatcher","documentType","onChange","useDocumentPane","ready","referencePathBase","PatchEvent","unset","OptimisticallyStrengthen","defineType","name","liveEdit","fields","defineField","of","options","list","readOnly","preview","select","documentSchemaTypes","prepare","selection","languageKeys","toUpperCase","join","subtitle","s","DEFAULT_CONFIG","bulkPublish","documentInternationalization","definePlugin","renderLanguageFilter","form","components","input","_c","isSanityDocument","weakAndTypedTranslations","renderDefault","document","unstable_languageFilter","prev","ctx","includes","badges","_ref2","types","templates","_ref3","parameterizedTemplates","parameters","_ref4","staticTemplates","flatMap","plugins","internationalizedArray","languages","fieldTypes","to","Rule","custom","context","getClient","valueLanguage","draftRef","collapsed","_ref5","parent","parentArray","p","strict"],"mappings":"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","x_google_ignoreList":[4]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/document-internationalization",
|
|
3
|
-
"version": "2.0.0-studio-v3-plugin-v2.
|
|
3
|
+
"version": "2.0.0-studio-v3-plugin-v2.8",
|
|
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",
|
|
@@ -1,49 +1,72 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
1
|
import {Card, Spinner} from '@sanity/ui'
|
|
3
|
-
import
|
|
2
|
+
import React from 'react'
|
|
3
|
+
import {Preview, useEditState, useSchema, useValidationStatus} from 'sanity'
|
|
4
4
|
|
|
5
5
|
type DocumentCheckProps = {
|
|
6
6
|
id: string
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
addInvalidId: (id: string) => void
|
|
8
|
+
removeInvalidId: (id: string) => void
|
|
9
|
+
addDraftId: (id: string) => void
|
|
10
|
+
removeDraftId: (id: string) => void
|
|
9
11
|
}
|
|
10
12
|
|
|
11
13
|
// Check if the document has a draft
|
|
12
14
|
// Check if that draft is valid
|
|
13
15
|
// Report back to parent that it can be added to bulk publish
|
|
14
16
|
export default function DocumentCheck(props: DocumentCheckProps) {
|
|
15
|
-
const {id,
|
|
17
|
+
const {id, addInvalidId, removeInvalidId, addDraftId, removeDraftId} = props
|
|
16
18
|
const editState = useEditState(id, ``)
|
|
17
|
-
const
|
|
19
|
+
const {isValidating, validation} = useValidationStatus(id, ``)
|
|
18
20
|
const schema = useSchema()
|
|
19
21
|
|
|
20
22
|
const validationHasErrors = React.useMemo(() => {
|
|
21
23
|
return (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
!isValidating &&
|
|
25
|
+
validation.length > 0 &&
|
|
26
|
+
validation.some((item) => item.level === 'error')
|
|
24
27
|
)
|
|
25
|
-
}, [
|
|
28
|
+
}, [isValidating, validation])
|
|
26
29
|
|
|
27
30
|
React.useEffect(() => {
|
|
28
31
|
if (validationHasErrors) {
|
|
29
|
-
|
|
32
|
+
addInvalidId(id)
|
|
33
|
+
} else {
|
|
34
|
+
removeInvalidId(id)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (editState.draft) {
|
|
38
|
+
addDraftId(id)
|
|
30
39
|
} else {
|
|
31
|
-
|
|
40
|
+
removeDraftId(id)
|
|
32
41
|
}
|
|
33
|
-
}, [
|
|
42
|
+
}, [
|
|
43
|
+
addDraftId,
|
|
44
|
+
addInvalidId,
|
|
45
|
+
editState.draft,
|
|
46
|
+
id,
|
|
47
|
+
removeDraftId,
|
|
48
|
+
removeInvalidId,
|
|
49
|
+
validationHasErrors,
|
|
50
|
+
])
|
|
34
51
|
|
|
35
52
|
// We only care about drafts
|
|
36
53
|
if (!editState.draft) {
|
|
37
54
|
return null
|
|
38
55
|
}
|
|
39
56
|
|
|
57
|
+
const schemaType = schema.get(editState.draft._type)
|
|
58
|
+
|
|
40
59
|
return (
|
|
41
|
-
<Card
|
|
42
|
-
|
|
60
|
+
<Card
|
|
61
|
+
border
|
|
62
|
+
padding={2}
|
|
63
|
+
tone={validationHasErrors ? `critical` : `positive`}
|
|
64
|
+
>
|
|
65
|
+
{editState.draft && schemaType ? (
|
|
43
66
|
<Preview
|
|
44
67
|
layout="default"
|
|
45
|
-
value={editState.
|
|
46
|
-
schemaType={
|
|
68
|
+
value={editState.draft}
|
|
69
|
+
schemaType={schemaType}
|
|
47
70
|
/>
|
|
48
71
|
) : (
|
|
49
72
|
<Spinner />
|
|
@@ -1,42 +1,45 @@
|
|
|
1
|
+
import {Button, Card, Stack, Text, useToast} from '@sanity/ui'
|
|
1
2
|
import React, {useCallback} from 'react'
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
InputProps,
|
|
5
|
-
Reference,
|
|
6
|
-
SanityDocument,
|
|
7
|
-
KeyedObject,
|
|
8
|
-
TypedObject,
|
|
9
|
-
useClient,
|
|
10
|
-
useWorkspace,
|
|
11
|
-
} from 'sanity'
|
|
12
|
-
import DocumentCheck from './DocumentCheck'
|
|
13
|
-
import {API_VERSION} from '../../constants'
|
|
3
|
+
import {TextWithTone, useClient, useWorkspace} from 'sanity'
|
|
14
4
|
|
|
15
|
-
|
|
5
|
+
import {API_VERSION} from '../../constants'
|
|
6
|
+
import {TranslationReference} from '../../types'
|
|
7
|
+
import DocumentCheck from './DocumentCheck'
|
|
16
8
|
|
|
17
|
-
export type
|
|
9
|
+
export type BulkPublishProps = {
|
|
18
10
|
translations: TranslationReference[]
|
|
19
|
-
schemaTypes: string[]
|
|
20
|
-
apiVersion?: string
|
|
21
11
|
}
|
|
22
12
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
13
|
+
// A root-level component with UI for hitting the Publishing API
|
|
14
|
+
export default function BulkPublish(props: BulkPublishProps) {
|
|
15
|
+
const {translations} = props
|
|
16
|
+
const client = useClient({apiVersion: API_VERSION})
|
|
26
17
|
const {projectId, dataset} = useWorkspace()
|
|
27
18
|
const toast = useToast()
|
|
28
|
-
const [invalidIds, setInvalidIds] = React.useState<string[]>(
|
|
19
|
+
const [invalidIds, setInvalidIds] = React.useState<string[] | null>(null)
|
|
29
20
|
|
|
30
|
-
const
|
|
31
|
-
setInvalidIds((ids) => [...ids, id])
|
|
21
|
+
const addInvalidId = useCallback((id: string) => {
|
|
22
|
+
setInvalidIds((ids) => (ids ? Array.from(new Set([...ids, id])) : [id]))
|
|
32
23
|
}, [])
|
|
33
24
|
|
|
34
|
-
const
|
|
35
|
-
setInvalidIds((ids) => ids.filter((i) => i !== id))
|
|
25
|
+
const removeInvalidId = useCallback((id: string) => {
|
|
26
|
+
setInvalidIds((ids) => (ids ? ids.filter((i) => i !== id) : []))
|
|
27
|
+
}, [])
|
|
28
|
+
|
|
29
|
+
const [draftIds, setDraftIds] = React.useState<string[]>([])
|
|
30
|
+
|
|
31
|
+
const addDraftId = useCallback((id: string) => {
|
|
32
|
+
setDraftIds((ids) => Array.from(new Set([...ids, id])))
|
|
33
|
+
}, [])
|
|
34
|
+
|
|
35
|
+
const removeDraftId = useCallback((id: string) => {
|
|
36
|
+
setDraftIds((ids) => ids.filter((i) => i !== id))
|
|
36
37
|
}, [])
|
|
37
38
|
|
|
38
39
|
const handleBulkPublish = useCallback(() => {
|
|
39
|
-
const body = translations.map((translation) => ({
|
|
40
|
+
const body = translations.map((translation) => ({
|
|
41
|
+
documentId: translation.value._ref,
|
|
42
|
+
}))
|
|
40
43
|
client
|
|
41
44
|
.request({
|
|
42
45
|
uri: `/publish/${projectId}/${dataset}`,
|
|
@@ -60,43 +63,71 @@ export default function BulkPublish(props: InputProps) {
|
|
|
60
63
|
})
|
|
61
64
|
}, [translations, client, projectId, dataset, toast])
|
|
62
65
|
|
|
63
|
-
// TODO: Hide all this if none of the documents have drafts
|
|
64
66
|
return translations?.length > 0 ? (
|
|
65
|
-
<
|
|
67
|
+
<Card padding={4} border radius={2}>
|
|
66
68
|
<Stack space={3}>
|
|
67
69
|
<Text weight="bold" size={1}>
|
|
68
70
|
Bulk publishing
|
|
69
71
|
</Text>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
72
|
+
{draftIds.length > 0 ? (
|
|
73
|
+
<Stack space={2}>
|
|
74
|
+
<Text size={1}>
|
|
75
|
+
There{' '}
|
|
76
|
+
{draftIds.length === 1
|
|
77
|
+
? `is 1 draft document`
|
|
78
|
+
: `are ${draftIds.length} draft documents`}
|
|
79
|
+
.
|
|
80
|
+
</Text>
|
|
81
|
+
{invalidIds && invalidIds.length > 0 ? (
|
|
82
|
+
<TextWithTone tone="caution" size={1}>
|
|
83
|
+
{invalidIds && invalidIds.length === 1
|
|
84
|
+
? `1 draft document has`
|
|
85
|
+
: `${
|
|
86
|
+
invalidIds && invalidIds.length
|
|
87
|
+
} draft documents have`}{' '}
|
|
88
|
+
validation issues that must addressed first
|
|
89
|
+
</TextWithTone>
|
|
90
|
+
) : (
|
|
91
|
+
<TextWithTone tone="positive" size={1}>
|
|
92
|
+
All drafts are valid and can be bulk published
|
|
93
|
+
</TextWithTone>
|
|
94
|
+
)}
|
|
95
|
+
</Stack>
|
|
96
|
+
) : null}
|
|
97
|
+
<Stack space={1}>
|
|
98
|
+
{translations
|
|
99
|
+
.filter((translation) => translation?.value?._ref)
|
|
100
|
+
.map((translation) => (
|
|
101
|
+
<DocumentCheck
|
|
102
|
+
key={translation._key}
|
|
103
|
+
id={translation.value._ref}
|
|
104
|
+
addInvalidId={addInvalidId}
|
|
105
|
+
removeInvalidId={removeInvalidId}
|
|
106
|
+
addDraftId={addDraftId}
|
|
107
|
+
removeDraftId={removeDraftId}
|
|
108
|
+
/>
|
|
109
|
+
))}
|
|
110
|
+
</Stack>
|
|
111
|
+
{draftIds.length > 0 ? (
|
|
112
|
+
<Button
|
|
113
|
+
mode="ghost"
|
|
114
|
+
tone={invalidIds && invalidIds?.length > 0 ? 'caution' : 'positive'}
|
|
115
|
+
text={
|
|
116
|
+
draftIds.length === 1
|
|
117
|
+
? `Publish draft document`
|
|
118
|
+
: `Bulk publish ${draftIds.length} draft documents`
|
|
119
|
+
}
|
|
120
|
+
onClick={handleBulkPublish}
|
|
121
|
+
disabled={
|
|
122
|
+
Boolean(invalidIds && invalidIds?.length > 0) || !draftIds.length
|
|
123
|
+
}
|
|
124
|
+
/>
|
|
79
125
|
) : (
|
|
80
|
-
<Text
|
|
126
|
+
<Text muted size={1}>
|
|
127
|
+
No draft documents to publish
|
|
128
|
+
</Text>
|
|
81
129
|
)}
|
|
82
130
|
</Stack>
|
|
83
|
-
|
|
84
|
-
{translations.map((translation) => (
|
|
85
|
-
<DocumentCheck
|
|
86
|
-
key={translation._key}
|
|
87
|
-
id={translation.value._ref}
|
|
88
|
-
addId={addId}
|
|
89
|
-
removeId={removeId}
|
|
90
|
-
/>
|
|
91
|
-
))}
|
|
92
|
-
</Stack>
|
|
93
|
-
<Button
|
|
94
|
-
text={`Simultaneously Publish ${
|
|
95
|
-
translations.length === 1 ? `1 Document` : `${translations.length} Documents`
|
|
96
|
-
}`}
|
|
97
|
-
onClick={handleBulkPublish}
|
|
98
|
-
disabled={Boolean(invalidIds.length)}
|
|
99
|
-
/>
|
|
100
|
-
</Stack>
|
|
131
|
+
</Card>
|
|
101
132
|
) : null
|
|
102
133
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
1
|
import {CogIcon} from '@sanity/icons'
|
|
3
2
|
import {Button} from '@sanity/ui'
|
|
4
3
|
|
|
5
|
-
import {useOpenInNewPane} from '../hooks/useOpenInNewPane'
|
|
6
4
|
import {METADATA_SCHEMA_NAME} from '../constants'
|
|
5
|
+
import {useOpenInNewPane} from '../hooks/useOpenInNewPane'
|
|
7
6
|
|
|
8
7
|
type LanguageManageProps = {
|
|
9
8
|
id?: string
|