sanity-plugin-taxonomy-manager
Version:
Create and manage SKOS compliant taxonomies, thesauri, and classification schemes in Sanity Studio.
46 lines (39 loc) • 1.85 kB
text/typescript
import {createContext} from 'react'
import type {ConceptSchemeDocument, Options} from './types'
type TreeContextType = {
globalVisibility?: {treeId: string; treeVisibility: 'open' | 'closed'}
editControls?: boolean
setEditControls?: (value: boolean) => void
}
export const SchemeContext = createContext<ConceptSchemeDocument | null>(null)
export const TreeContext = createContext<TreeContextType>({editControls: false})
/**
* The active perspective name from `usePerspective().selectedPerspectiveName`
* (provided by TreeView): `undefined` for the default drafts view, otherwise a
* release name or `'published'`. Drives perspective-aware queries and the gating
* of edit controls.
*/
export const ReleaseContext = createContext<string | undefined>(undefined)
/**
* Plugin config the render tree needs at runtime. Provided around the structure
* Tree View (see `createDefaultDocumentNode`); replaces the old `config.ts`
* `getPluginConfig` singleton. Defaults to empty so input-component trees (which
* never create concepts) render correctly without a provider.
*/
export type TaxonomyConfig = {ident?: Options['ident']}
export const TaxonomyConfigContext = createContext<TaxonomyConfig>({})
/**
* Connects the deep remove actions to Hierarchy's optimistic-removal layer:
* removing a concept marks its id so the tree prunes it instantly, ahead of the
* live listener catching up (see Hierarchy + core/tree/pruneConcepts). Defaults
* to no-ops, so trees rendered without the provider — the input components,
* which never remove — behave normally.
*/
export type OptimisticTreeContextType = {
markRemoved: (id: string) => void
unmarkRemoved: (id: string) => void
}
export const OptimisticTreeContext = createContext<OptimisticTreeContextType>({
markRemoved: () => undefined,
unmarkRemoved: () => undefined,
})