94 lines
2.1 KiB
TypeScript
94 lines
2.1 KiB
TypeScript
import {defineArrayMember, defineField, defineType} from 'sanity'
|
||
import {ComposeIcon} from '@sanity/icons'
|
||
|
||
export const composerType = defineType({
|
||
name: 'composer',
|
||
title: 'Composer',
|
||
type: 'document',
|
||
icon: ComposeIcon,
|
||
|
||
fieldsets: [{name: 'main', title: 'Main Info', options: {columns: 2}}],
|
||
|
||
fields: [
|
||
defineField({
|
||
name: 'name',
|
||
title: 'Name',
|
||
type: 'string',
|
||
fieldset: 'main',
|
||
validation: (Rule) => Rule.required(),
|
||
}),
|
||
defineField({
|
||
name: 'sortKey',
|
||
title: 'Sorting Key',
|
||
type: 'string',
|
||
fieldset: 'main',
|
||
validation: (Rule) => Rule.required(),
|
||
}),
|
||
defineField({
|
||
name: 'birthYear',
|
||
title: 'Year of Birth',
|
||
type: 'number',
|
||
fieldset: 'main',
|
||
}),
|
||
defineField({
|
||
name: 'deathYear',
|
||
title: 'Year of Death',
|
||
type: 'number',
|
||
fieldset: 'main',
|
||
}),
|
||
defineField({
|
||
name: 'slug',
|
||
title: 'Slug',
|
||
type: 'slug',
|
||
fieldset: 'main',
|
||
options: {source: 'name', maxLength: 96},
|
||
validation: (Rule) => Rule.required(),
|
||
}),
|
||
defineField({
|
||
name: 'image',
|
||
title: 'Image',
|
||
type: 'image',
|
||
options: {hotspot: true},
|
||
}),
|
||
defineField({
|
||
name: 'bio',
|
||
title: 'Biography',
|
||
type: 'array',
|
||
of: [defineArrayMember({type: 'block'})],
|
||
}),
|
||
],
|
||
orderings: [
|
||
{
|
||
title: 'First Name (A → Z)',
|
||
name: 'nameAsc',
|
||
by: [{field: 'name', direction: 'asc'}],
|
||
},
|
||
{
|
||
title: 'Last Name (A → Z)',
|
||
name: 'sortKeyAsc',
|
||
by: [{field: 'sortKey', direction: 'asc'}],
|
||
},
|
||
{
|
||
title: 'Year of Birth',
|
||
name: 'yobAsc',
|
||
by: [{field: 'birthYear', direction: 'asc'}],
|
||
},
|
||
],
|
||
preview: {
|
||
select: {
|
||
title: 'name',
|
||
birthYear: 'birthYear',
|
||
deathYear: 'deathYear',
|
||
media: 'image',
|
||
},
|
||
prepare({title, birthYear, deathYear, media}) {
|
||
const subtitle = birthYear
|
||
? deathYear
|
||
? `${birthYear}–${deathYear}`
|
||
: birthYear.toString()
|
||
: ''
|
||
|
||
return {title, subtitle, media}
|
||
},
|
||
},
|
||
})
|