sanity-plugin-taxonomy-manager
Version:
Create and manage SKOS compliant taxonomies, thesauri, and classification schemes in Sanity Studio.
41 lines (37 loc) • 1.55 kB
text/typescript
import {EditIcon, DocumentsIcon} from '@sanity/icons'
import type {StructureBuilder, ListBuilder, DefaultDocumentNodeResolver} from 'sanity/structure'
import {TreeView} from './components/TreeView'
import NodeTree from './static/NodeTree'
import {ConceptUseView} from './views/ConceptUseView'
/**
* #### Default Desk Structure for Concept and Concept Scheme
* Sets defaultDocumentNode. Consider exporting in the future,
* if there is a use case for mixing taxonomy views in the main
* desk structure.
*/
export const structure = (S: StructureBuilder): ListBuilder =>
S.list()
.title('Taxonomy Manager')
.items([
S.documentTypeListItem('skosConceptScheme').title('Concept Schemes'),
S.documentTypeListItem('skosConcept').title('Concepts'),
])
// set default document node here — so that if users want concepts
// and schemes elsewhere in desk, they'll get the right views.
export const defaultDocumentNode: DefaultDocumentNodeResolver = (S, {schemaType}) => {
// Conditionally return a different configuration based on the schema type
switch (schemaType) {
case 'skosConceptScheme':
return S.document().views([
S.view.component(TreeView).title('Tree View').icon(NodeTree),
S.view.form().icon(EditIcon),
])
case 'skosConcept':
return S.document().views([
S.view.form().icon(EditIcon),
S.view.component(ConceptUseView).title('Tagged Resources').icon(DocumentsIcon),
])
default:
return S.document().views([S.view.form().icon(EditIcon)])
}
}