sanity-plugin-structure-schema v0.0.1
sanity-plugin-structure-schema
Create Sanity Desk Structure with a similar syntax to Schema.
Look, I'll level with you
This plugin is a proof of concept and should not be treated like a reliable, production-ready or supported or officially endorsed project. Sure, I work at Sanity, but that's not to say this plugin is a good idea. I personally find it useful.
YMMV. Tread lightly. Feedback welcome.
Installation
sanity install structure-schemaFirst you'll need to have Desk Tool Structure setup in your project, so that you have a file (like deskStructure.js) to create your structure in.
Now build out schema items as an array of objects.
// deskStructure.js
import {structureSchema} from 'sanity-plugin-structure-schema'
const structureSchemaItems = [{schemaType: `article`}]
export default () => {
return S.list().title('Content').items(structureSchema(structureSchemaItems))
}Each object has one of two required values:
{ schemaType: "typeName" }for creating document list items{ divider: true }for creating dividers
The full set of options for a document list object are:
schemaType: string
singleton?: boolean
id?: string
title?: string
icon?: any
filter?: string
params?: any
apiVersion?: string
children?: StructureSchema[]You can even S.things() in your array as well and they'll just get passed through.
Example
The below example will create a document list with:
- All
pagetype Documents - A single
pagetype Document with the_idhome - A Divider
- All
projecttype Documents using the built-in structure builder - A top level menu item for
posttype Documents with children --posttype documents with a futurepublishedAtdate --posttype documents with a pastpublishedAtdate
const structureSchemaItems = [
{schemaType: `page`},
{schemaType: `page`, id: `home`, singleton: true},
{divider: true},
S.documentTypeListItem(`project`).title(`Legacy Projects`),
{schemaType: `post`, title: `Posts`, children: [
{schemaType: `post`, title: `Future Posts`, filter: `dateTime(now()) < dateTime(publishedAt)`}
{schemaType: `post`, title: `Past Posts`, filter: `dateTime(now()) > dateTime(publishedAt)`}
]},
]What this won't do (currently)
- Initial value templates
- Menu items
- Orderings
- Views (use
getDefaultDocumentNode()instead)
License
MIT © Simeon Griggs See LICENSE
4 years ago