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

135 lines (119 loc) 3.62 kB
import {type I18nTextRecord} from 'sanity' import {HELP_URL, SerializeError} from './SerializeError' import {type Serializable, type SerializeOptions, type SerializePath} from './StructureNodes' import {type StructureContext} from './types' /** @internal */ export function maybeSerializeMenuItemGroup( item: MenuItemGroup | MenuItemGroupBuilder, index: number, path: SerializePath, ): MenuItemGroup { return item instanceof MenuItemGroupBuilder ? item.serialize({path, index}) : item } /** * Interface for menu item groups * @public */ export interface MenuItemGroup { /** Menu group Id */ id: string /** Menu group title */ title: string i18n?: I18nTextRecord<'title'> } /** * Class for building menu item groups. * * @public */ export class MenuItemGroupBuilder implements Serializable<MenuItemGroup> { /** Menu item group ID */ protected _id: string /** Menu item group title */ protected _title: string protected _i18n?: I18nTextRecord<'title'> constructor( /** * Structure context. See {@link StructureContext} */ protected _context: StructureContext, spec?: MenuItemGroup, ) { this._id = spec ? spec.id : '' this._title = spec ? spec.title : '' this._i18n = spec ? spec.i18n : undefined } /** * Set menu item group ID * @param id - menu item group ID * @returns menu item group builder based on ID provided. See {@link MenuItemGroupBuilder} */ id(id: string): MenuItemGroupBuilder { return new MenuItemGroupBuilder(this._context, {id, title: this._title, i18n: this._i18n}) } /** * Get menu item group ID * @returns menu item group ID */ getId(): string { return this._id } /** * Set menu item group title * @param title - menu item group title * @returns menu item group builder based on title provided. See {@link MenuItemGroupBuilder} */ title(title: string): MenuItemGroupBuilder { return new MenuItemGroupBuilder(this._context, {title, id: this._id, i18n: this._i18n}) } /** * Get menu item group title * @returns menu item group title */ getTitle(): string { return this._title } /** * Set the i18n key and namespace used to populate the localized title. * @param i18n - object with i18n key and related namespace * @returns menu item group builder based on i18n info provided. See {@link MenuItemGroupBuilder} */ i18n(i18n: I18nTextRecord<'title'>): MenuItemGroupBuilder { return new MenuItemGroupBuilder(this._context, {i18n, id: this._id, title: this._title}) } /** * Get the i18n key and namespace used to populate the localized title. * @returns the i18n key and namespace used to populate the localized title. */ getI18n(): I18nTextRecord<'title'> | undefined { return this._i18n } /** * Serialize menu item group builder * @param options - serialization options (path). See {@link SerializeOptions} * @returns menu item group based on path provided in options. See {@link MenuItemGroup} */ serialize(options: SerializeOptions = {path: []}): MenuItemGroup { const {_id, _title, _i18n} = this if (!_id) { throw new SerializeError( '`id` is required for a menu item group', options.path, options.index, _title, ).withHelpUrl(HELP_URL.ID_REQUIRED) } if (!_title) { throw new SerializeError( '`title` is required for a menu item group', options.path, _id, ).withHelpUrl(HELP_URL.TITLE_REQUIRED) } return { id: _id, title: _title, i18n: _i18n, } } }