UNPKG

sanity

Version:

Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches

78 lines (70 loc) 2.79 kB
import {type SchemaType} from '@sanity/types' import {DocumentListBuilder, type DocumentListInput, type PartialDocumentList} from './DocumentList' import {type GenericListInput} from './GenericList' import {DEFAULT_INTENT_HANDLER} from './Intent' import {type Child} from './StructureNodes' import {type StructureContext} from './types' /** * Interface for document type list input * * @public */ export interface DocumentTypeListInput extends Partial<GenericListInput> { /** Document type list input schema type. See {@link SchemaType} */ schemaType: SchemaType | string } /** * Class for building a document type list * * @public */ export class DocumentTypeListBuilder extends DocumentListBuilder { /** Document list options. See {@link PartialDocumentList} */ protected spec: PartialDocumentList constructor( /** * Structure context. See {@link StructureContext} */ protected _context: StructureContext, spec?: DocumentListInput, ) { super(_context) this.spec = spec ? spec : {} } /** * Set Document type list child * @param child - Child component. See {@link Child} * @returns document type list builder based on child component provided without default intent handler. See {@link DocumentTypeListBuilder} */ child(child: Child): DocumentTypeListBuilder { return this.cloneWithoutDefaultIntentHandler({child}) } /** Clone Document type list builder (allows for options overriding) * @param withSpec - Document type list builder options. See {@link PartialDocumentList} * @returns document type list builder. See {@link DocumentTypeListBuilder} */ clone(withSpec?: PartialDocumentList): DocumentTypeListBuilder { const parent = super.clone(withSpec) const builder = new DocumentTypeListBuilder(this._context) builder.spec = {...this.spec, ...parent.getSpec(), ...(withSpec || {})} return builder } /** Clone Document type list builder (allows for options overriding) and remove default intent handler * @param withSpec - Document type list builder options. See {@link PartialDocumentList} * @returns document type list builder without default intent handler. See {@link DocumentTypeListBuilder} */ cloneWithoutDefaultIntentHandler(withSpec?: PartialDocumentList): DocumentTypeListBuilder { const parent = super.clone(withSpec) const builder = new DocumentTypeListBuilder(this._context) const canHandleIntent = this.spec.canHandleIntent const shouldOverride = canHandleIntent && canHandleIntent.identity === DEFAULT_INTENT_HANDLER const override = shouldOverride ? {canHandleIntent: undefined} : {} builder.spec = { ...parent.getSpec(), ...this.spec, ...(withSpec || {}), ...override, } return builder } }