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
261 lines (252 loc) • 10.5 kB
text/typescript
import {type SanityDocument, type SchemaType, type SortOrdering} from '@sanity/types'
import {type ConfigContext, type InitialValueTemplateItem, type Source} from 'sanity'
import {type ComponentBuilder, type ComponentInput} from './Component'
import {type DocumentBuilder, type PartialDocumentNode} from './Document'
import {type DocumentListBuilder, type DocumentListInput} from './DocumentList'
import {type DocumentListItemBuilder, type DocumentListItemInput} from './DocumentListItem'
import {type DocumentTypeListInput} from './DocumentTypeList'
import {type InitialValueTemplateItemBuilder} from './InitialValueTemplateItem'
import {type ListBuilder, type ListInput} from './List'
import {type ListItemBuilder, type ListItemInput} from './ListItem'
import {type MenuItem, type MenuItemBuilder} from './MenuItem'
import {type MenuItemGroup, type MenuItemGroupBuilder} from './MenuItemGroup'
import {type Divider, type EditorNode} from './StructureNodes'
import {type ComponentView, type ComponentViewBuilder} from './views/ComponentView'
import {type FormView, type FormViewBuilder} from './views/FormView'
/**
* View. See {@link FormView} and {@link ComponentView}
*
* @public
*/
export type View = FormView | ComponentView
/**
* User view component
*
* @public */
export type UserViewComponent<TOptions = Record<string, any>> = React.ComponentType<{
document: {
draft: SanityDocument | null
displayed: Partial<SanityDocument>
historical: Partial<SanityDocument> | null
published: SanityDocument | null
}
documentId: string
options: TOptions
schemaType: SchemaType
}>
/**
* User defined component
*
* @public
*/
export type UserComponent = React.ComponentType<{
/** Component child. See {@link ComponentBuilder} */
child?: ComponentBuilder
/** Component child item ID */
childItemId?: string
/** Component ID */
id: string
/** Is component active */
isActive?: boolean
/** Is component selected */
isSelected?: boolean
/** item ID */
itemId: string
/** Component options */
options?: Record<string, unknown>
/** Pane key */
paneKey: string
/** URL parameters */
urlParams: Record<string, string | undefined> | undefined
}>
/**
* Interface for the structure builder context.
*
* @public
*/
export interface StructureContext extends Source {
/** Resolve document method
* @returns a document node builder, or null/undefined if no document node should be returned.
* See {@link DocumentBuilder}
*/
resolveDocumentNode: (
/** an object holding the documentId and schemaType for the document node being resolved. */
options: {documentId?: string; schemaType: string},
) => DocumentBuilder
/** Get structure builder
* @returns a structure builder. See {@link StructureBuilder}
*/
getStructureBuilder: () => StructureBuilder
}
/**
* An object holding the documentId and schemaType for the document node being resolved.
*
* @public
*/
export interface DefaultDocumentNodeContext extends ConfigContext {
/**
* The id of the sanity document
*/
documentId?: string
/**
* the schema of the sanity document
*/
schemaType: string
}
/**
* A resolver function used to return the default document node used when editing documents.
*
* @public
*
* @returns a document node builder, or null/undefined if no document node should be returned.
*
*/
export type DefaultDocumentNodeResolver = (
/**
* S - an instance of the structure builder, that can be used to build the lists/items/panes for the structure tool
* context - an object holding various context that may be used to customize the structure, for instance the current user.
* Defaults to
* ```ts
* (S) => S.defaults()
* ```
* See {@link StructureBuilder}
*/
S: StructureBuilder,
/**
* An object holding the documentId and schemaType for the document node being resolved.
* See {@link DefaultDocumentNodeContext}
*/
options: DefaultDocumentNodeContext,
) => DocumentBuilder | null | undefined
/**
* Interface for the structure builder.
*
* @public
*/
export interface StructureBuilder {
/**
* @internal
*/
component: (spec?: ComponentInput | UserComponent) => ComponentBuilder
/** By giving an object of options with documentID and its schema type receive the the respective Document builder
* @param options - an object holding the documentId and schemaType for the document node being resolved.
* @returns a Document builder. See {@link DocumentBuilder}
*/
defaultDocument: (options: {documentId?: string; schemaType: string}) => DocumentBuilder
/** Get an array of Item builders that take Initial Value template into consideration
* @returns an array of initial value template item builders. See {@link ListItemBuilder}
*/
defaultInitialValueTemplateItems: () => InitialValueTemplateItemBuilder[]
/** Get the default List builder
* @returns a List builder. See {@link ListBuilder}
*/
defaults: () => ListBuilder
/** Get a structure Divider
* @returns a Divider. See {@link Divider}
*/
divider: () => Divider
/** By giving a partial Document Node receive the respective Document Builder
* @param spec - a partial document node. See {@link PartialDocumentNode}
* @returns a Document builder. See {@link DocumentBuilder}
*/
document: (spec?: PartialDocumentNode) => DocumentBuilder
/** By giving a Document List Input receive the respective Document List Builder
* @param spec - a document list input. See {@link DocumentListInput}
* @returns a Document List builder. See {@link DocumentListBuilder}
*/
documentList: (spec?: DocumentListInput) => DocumentListBuilder
/** By giving a Document List Item Input receive the respective Document List Item builder
* @param spec - a document list item input. See {@link DocumentListItemInput}
* @returns a Document List Item builder. See {@link DocumentListItemBuilder}
*/
documentListItem: (spec?: DocumentListItemInput) => DocumentListItemBuilder
/** By giving a type name or Document Type List Input receive the respective Document List Builder
* @param typeNameOrSpec - a type name or a document type list input. See {@link DocumentTypeListInput}
* @returns a Document List builder. See {@link DocumentListBuilder}
*/
documentTypeList: (typeNameOrSpec: string | DocumentTypeListInput) => DocumentListBuilder
/** By providing a type name receive a List Item builder
* @param typeName - a type name
* @returns a List Item builder. See {@link ListItemBuilder}
*/
documentTypeListItem: (typeName: string) => ListItemBuilder
/** Get an array of List Item builders
* @returns an array of list item builders. See {@link ListItemBuilder}
*/
documentTypeListItems: () => ListItemBuilder[]
/** By giving a templateID and a set of parameters receive a Document builder that takes InitialValueTemplate into account
* @param templateId - a template ID
* @param parameters - an object of parameters
* @returns a Document builder. See {@link DocumentBuilder}
*/
documentWithInitialValueTemplate: (
templateId: string,
parameters?: Record<string, unknown>,
) => DocumentBuilder
/** By giving a Editor Node receive the respective Document Builder
* @param spec - an editor node. See {@link EditorNode}
* @returns a Document builder. See {@link DocumentBuilder}
*/
editor: (spec?: EditorNode) => DocumentBuilder
/** By giving a templateID and a set of parameters receive an Item Builder that takes InitialValueTemplate into account
* @param templateId - a template ID
* @param parameters - an object of parameters
* @returns an Item builder. See {@link ListItemBuilder}
*/
initialValueTemplateItem: (
templateId: string,
parameters?: Record<string, any>,
) => InitialValueTemplateItemBuilder
/** By giving a List Input receive the respective Builder, otherwise return default ListBuilder builder
* @param spec - a list input. See {@link ListInput}
* @returns a List builder. See {@link ListBuilder}
*/
list: (spec?: ListInput) => ListBuilder
/** By giving a List Item Input receive the respective Builder, otherwise return default ListItem builder
* @param spec - a list item input. See {@link ListItemInput}
* @returns a List Item builder. See {@link ListItemBuilder}
*/
listItem: (spec?: ListItemInput) => ListItemBuilder
/** By giving a Menu Item receive the respective Builder, otherwise return default MenuItem builder
* @param spec - a menu item. See {@link MenuItem}
* @returns a Menu Item builder. See {@link MenuItemBuilder}
*/
menuItem: (spec?: MenuItem) => MenuItemBuilder
/** By giving a Menu Item Group receive the respective Builder
* @param spec - a menu item group. See {@link MenuItemGroup}
* @returns a Menu Item Group builder. See {@link MenuItemGroupBuilder}
*/
menuItemGroup: (spec?: MenuItemGroup) => MenuItemGroupBuilder
/** By giving an array of initial value template receive an array of Menu Items, otherwise return default MenuItem builder
* @param templateItems - an array of initial value template items. See {@link InitialValueTemplateItem}
* @returns an array of Menu Items. See {@link MenuItem}
*/
menuItemsFromInitialValueTemplateItems: (templateItems: InitialValueTemplateItem[]) => MenuItem[]
/** By giving a sort ordering object receive a Menu Item Builder
* @param ordering - a sort ordering object. See {@link SortOrdering}
* @returns a Menu Item builder. See {@link MenuItemBuilder}
*/
orderingMenuItem: (ordering: SortOrdering) => MenuItemBuilder
/** By giving a type receive a list of Menu Items ordered by it
* @param type - a type
* @returns an array of Menu Items. See {@link MenuItem}
*/
orderingMenuItemsForType: (type: string) => MenuItemBuilder[]
/** View for structure */
view: {
/** form for view
* @param spec - a partial form view. See {@link FormView}
* @returns a Form View builder. See {@link FormViewBuilder}
*/
form: (spec?: Partial<FormView>) => FormViewBuilder
/** component for view
* @param componentOrSpec - a partial component view or a React component. See {@link ComponentView}
* @returns a Component View builder. See {@link ComponentViewBuilder}
*/
component: (
componentOrSpec?: Partial<ComponentView> | React.ComponentType<any>,
) => ComponentViewBuilder
}
/** Context for the structure builder. See {@link StructureContext} */
context: StructureContext
}