diff --git a/.changeset/document-internationalization-omnisearch.md b/.changeset/document-internationalization-omnisearch.md new file mode 100644 index 000000000..d1185df12 --- /dev/null +++ b/.changeset/document-internationalization-omnisearch.md @@ -0,0 +1,5 @@ +--- +"@sanity/document-internationalization": minor +--- + +Add a `metadataOmnisearchVisibility` option to control whether translation metadata documents appear in Omnisearch. diff --git a/plugins/@sanity/document-internationalization/README.md b/plugins/@sanity/document-internationalization/README.md index 4f9e88b40..c4e4e3b9c 100644 --- a/plugins/@sanity/document-internationalization/README.md +++ b/plugins/@sanity/document-internationalization/README.md @@ -250,6 +250,10 @@ export const defineConfig({ // - An array of schema type names: `hideLanguageFilter: ['lesson']` // - A function for dynamic control: `hideLanguageFilter: (ctx) => ctx.schemaType === 'lesson'` hideLanguageFilter: true, // defaults to false + + // Optional + // Controls whether translation.metadata documents are visible in Omnisearch + metadataOmnisearchVisibility: true, // defaults to true }) ] }) diff --git a/plugins/@sanity/document-internationalization/src/constants.ts b/plugins/@sanity/document-internationalization/src/constants.ts index b1aeb6a94..190e74287 100644 --- a/plugins/@sanity/document-internationalization/src/constants.ts +++ b/plugins/@sanity/document-internationalization/src/constants.ts @@ -14,5 +14,6 @@ export const DEFAULT_CONFIG: PluginConfigContext = { allowCreateMetaDoc: false, callback: null, hideLanguageFilter: false, + metadataOmnisearchVisibility: true, addTemplates: true, } diff --git a/plugins/@sanity/document-internationalization/src/plugin.tsx b/plugins/@sanity/document-internationalization/src/plugin.tsx index 5ca2cd281..267bd421a 100644 --- a/plugins/@sanity/document-internationalization/src/plugin.tsx +++ b/plugins/@sanity/document-internationalization/src/plugin.tsx @@ -22,6 +22,7 @@ export const documentInternationalization = definePlugin((config) bulkPublish, metadataFields, hideLanguageFilter, + metadataOmnisearchVisibility, metadataInternationalization, addTemplates, } = pluginConfig @@ -125,7 +126,7 @@ export const documentInternationalization = definePlugin((config) // - The `Translations metadata` document type to the schema schema: { // Create the metadata document type - types: [metadata(schemaTypes, metadataFields)], + types: [metadata(schemaTypes, metadataFields, metadataOmnisearchVisibility)], // For every schema type this plugin is enabled on // Create an initial value template to set the language diff --git a/plugins/@sanity/document-internationalization/src/schema/translation/metadata.test.ts b/plugins/@sanity/document-internationalization/src/schema/translation/metadata.test.ts index 111995652..350608aa6 100644 --- a/plugins/@sanity/document-internationalization/src/schema/translation/metadata.test.ts +++ b/plugins/@sanity/document-internationalization/src/schema/translation/metadata.test.ts @@ -6,6 +6,10 @@ import {describe, expect, test} from 'vitest' import {METADATA_SCHEMA_NAME, TRANSLATIONS_ARRAY_NAME} from '../../constants' import createMetadataSchema from './metadata' +type MetadataSchema = ReturnType & { + __experimental_omnisearch_visibility?: boolean +} + describe('metadata schema', () => { const schemaTypes = ['article', 'page'] @@ -95,6 +99,24 @@ describe('metadata schema', () => { expect(schema.liveEdit).toBe(true) }) + test('sets Omnisearch visibility to true by default', () => { + const schema = createMetadataSchema(schemaTypes, []) as MetadataSchema + + expect(schema.__experimental_omnisearch_visibility).toBe(true) + }) + + test('configures Omnisearch visibility when provided', () => { + const schema = createMetadataSchema(schemaTypes, [], true) as MetadataSchema + + expect(schema.__experimental_omnisearch_visibility).toBe(true) + }) + + test('configures Omnisearch visibility when provided false', () => { + const schema = createMetadataSchema(schemaTypes, [], false) as MetadataSchema + + expect(schema.__experimental_omnisearch_visibility).toBe(false) + }) + test('uses TranslateIcon', () => { const schema = createMetadataSchema(schemaTypes, []) diff --git a/plugins/@sanity/document-internationalization/src/schema/translation/metadata.ts b/plugins/@sanity/document-internationalization/src/schema/translation/metadata.ts index 533a767df..9d0a2b538 100644 --- a/plugins/@sanity/document-internationalization/src/schema/translation/metadata.ts +++ b/plugins/@sanity/document-internationalization/src/schema/translation/metadata.ts @@ -12,13 +12,14 @@ import type {TranslationReference} from '../../types' * metadata fields provided by the plugin consumer. The document uses `liveEdit` * so changes are published immediately without drafts. */ -export default (schemaTypes: string[], metadataFields: FieldDefinition[]): DocumentDefinition => +export default (schemaTypes: string[], metadataFields: FieldDefinition[], omnisearchVisibility = true): DocumentDefinition => defineType({ type: 'document', name: METADATA_SCHEMA_NAME, title: 'Translation metadata', icon: TranslateIcon, liveEdit: true, + __experimental_omnisearch_visibility: omnisearchVisibility, fields: [ defineField({ name: TRANSLATIONS_ARRAY_NAME, diff --git a/plugins/@sanity/document-internationalization/src/types.ts b/plugins/@sanity/document-internationalization/src/types.ts index 57969fad5..13e69d506 100644 --- a/plugins/@sanity/document-internationalization/src/types.ts +++ b/plugins/@sanity/document-internationalization/src/types.ts @@ -39,6 +39,12 @@ export type PluginConfig = { allowCreateMetaDoc?: boolean callback?: ((args: PluginCallbackArgs) => Promise) | null hideLanguageFilter?: boolean | string[] | ((ctx: DocumentLanguageFilterContext) => boolean) + /** + * Controls whether the translation metadata document type appears in Omnisearch. + * + * Set to false to hide `translation.metadata` documents from Omnisearch. + */ + metadataOmnisearchVisibility?: boolean /** * Allows configuring the behavior of the internationalized array for the metadata document. */