UNPKG

sanity-plugin-computed-field

Version:

Sanity plugin that computes a field's value based on other fields or relationships with its document or external data. In other words, this field memoizes a value in a document using GROQ to lookup and custom javascript to compute the value from those GRO

66 lines (60 loc) 2.03 kB
import { BooleanDefinition, BooleanOptions, BooleanSchemaType, NumberDefinition, NumberOptions, NumberSchemaType, TextDefinition, TextOptions, TextSchemaType, } from 'sanity' export type ComputedQueryResult = { // eslint-disable-next-line @typescript-eslint/no-explicit-any draft?: any // eslint-disable-next-line @typescript-eslint/no-explicit-any published: any } export type ComputedFieldOptions<FieldType> = { buttonText?: string documentQuerySelection: string reduceQueryResult: (queryResult: ComputedQueryResult) => FieldType | Promise<FieldType> } /** * @public */ // Computed Number export type ComputedNumberOptions = ComputedFieldOptions<number> & NumberOptions export interface ComputedNumberSchemaType extends Omit<NumberSchemaType, 'options'> { options: ComputedNumberOptions } export interface ComputedNumberDefinition extends Omit<NumberDefinition, 'type' | 'options'> { type: 'computedNumber' options: ComputedNumberOptions } // Computed Text export type ComputedTextOptions = ComputedFieldOptions<string> & TextOptions export interface ComputedTextSchemaType extends Omit<TextSchemaType, 'options'> { options: ComputedTextOptions } export interface ComputedTextDefinition extends Omit<TextDefinition, 'type' | 'options'> { type: 'computedText' options: ComputedTextOptions } // Computed Boolean export type ComputedBooleanOptions = ComputedFieldOptions<boolean> & BooleanOptions export interface ComputedBooleanSchemaType extends Omit<BooleanSchemaType, 'options'> { options: ComputedBooleanOptions } export interface ComputedBooleanDefinition extends Omit<BooleanDefinition, 'type' | 'options'> { type: 'computedBoolean' options: ComputedBooleanOptions } declare module '@sanity/types' { // makes types narrow correctly when using defineType/defineField/defineArrayMember export interface IntrinsicDefinitions { computedBoolean: ComputedBooleanDefinition computedText: ComputedTextDefinition computedNumber: ComputedNumberDefinition } }