trptk-sanity/schemaTypes/work-type.ts

88 lines
1.8 KiB
TypeScript

import {defineArrayMember, defineField, defineType} from 'sanity'
import {DocumentTextIcon} from '@sanity/icons'
import {WorkSlugInput} from '../components/WorkSlugInput'
export const workType = defineType({
name: 'work',
title: 'Work',
type: 'document',
icon: DocumentTextIcon,
fields: [
defineField({
name: 'title',
title: 'Title',
type: 'string',
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'composer',
title: 'Composer',
type: 'reference',
to: [{type: 'composer'}],
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'arranger',
title: 'Arranger',
type: 'reference',
to: [{type: 'composer'}],
}),
defineField({
name: 'slug',
title: 'Slug',
type: 'slug',
components: {
input: WorkSlugInput,
},
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'description',
title: 'Description',
type: 'array',
of: [defineArrayMember({type: 'block'})],
}),
],
orderings: [
{
title: 'Title (A → Z)',
name: 'titleAsc',
by: [{field: 'title', direction: 'asc'}],
},
{
title: 'Title (Z → A)',
name: 'titleDesc',
by: [{field: 'title', direction: 'desc'}],
},
],
preview: {
select: {
title: 'title',
composer: 'composer.name',
arranger: 'arranger.name',
},
prepare({title, composer, arranger}) {
let subtitle = ''
if (composer && arranger) {
subtitle = `${composer} (arr. ${arranger})`
} else if (composer) {
subtitle = composer
} else if (arranger) {
subtitle = `arr. ${arranger}`
}
return {
title,
subtitle,
}
},
},
})