trptk-sanity/schemaTypes/artist-type.ts
2026-02-24 12:22:46 +01:00

68 lines
1.5 KiB
TypeScript

import {defineArrayMember, defineField, defineType} from 'sanity'
import {UsersIcon} from '@sanity/icons'
export const artistType = defineType({
name: 'artist',
title: 'Artist',
type: 'document',
icon: UsersIcon,
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: 'slug',
title: 'Slug',
type: 'slug',
fieldset: 'main',
options: {source: 'name', maxLength: 96},
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'role',
title: 'Role',
type: 'string',
fieldset: 'main',
}),
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'}],
},
],
preview: {
select: {title: 'name', subtitle: 'role', media: 'image'},
},
})