trptk-sanity/schemaTypes/releaseType.ts

162 lines
3.9 KiB
TypeScript

import {defineField, defineType} from 'sanity'
export const releaseType = defineType({
name: 'release',
title: 'Release',
type: 'document',
groups: [
{name: 'main', title: 'Main', default: true},
{name: 'media', title: 'Media'},
{name: 'text', title: 'Text'},
{name: 'links', title: 'Links'},
],
fieldsets: [
{name: 'albuminfo', title: 'Album'},
{name: 'main', title: 'Release Information', options: {columns: 2}},
{name: 'media', title: 'Media', options: {columns: 2}},
{name: 'text', title: 'Descriptions'},
{name: 'links', title: 'Links', options: {columns: 2}},
],
fields: [
defineField({
name: 'name',
title: 'Title',
type: 'string',
group: 'main',
fieldset: 'albuminfo',
}),
defineField({name: 'albumArtist', type: 'string', group: 'main', fieldset: 'albuminfo'}),
defineField({
name: 'label',
title: 'Label',
type: 'string',
group: 'main',
fieldset: 'main',
options: {
list: [
{title: 'TRPTK', value: 'trptk'},
{title: 'Other', value: 'other'},
],
},
}),
defineField({
name: 'catalogNo',
title: 'Catalog #',
type: 'string',
group: 'main',
fieldset: 'main',
}),
defineField({name: 'upc', title: 'UPC/EAN', type: 'string', group: 'main', fieldset: 'main'}),
defineField({
name: 'releaseDate',
title: 'Release Date',
type: 'date',
group: 'main',
fieldset: 'main',
}),
defineField({name: 'albumCover', type: 'image', group: 'media', fieldset: 'media'}),
defineField({
name: 'bookletPdf',
title: 'Booklet PDF',
type: 'file',
options: {accept: 'application/pdf'},
group: 'media',
fieldset: 'media',
}),
defineField({
name: 'shortDescription',
title: 'Short Description',
type: 'text',
rows: 2,
group: 'text',
fieldset: 'text',
}),
defineField({
name: 'description',
title: 'Description',
type: 'array',
of: [{type: 'block'}],
group: 'text',
fieldset: 'text',
}),
defineField({
name: 'spotifyUrl',
title: 'Spotify',
type: 'url',
group: 'links',
fieldset: 'links',
}),
defineField({
name: 'appleMusicUrl',
title: 'Apple Music',
type: 'url',
group: 'links',
fieldset: 'links',
}),
defineField({
name: 'deezerUrl',
title: 'Deezer',
type: 'url',
group: 'links',
fieldset: 'links',
}),
defineField({
name: 'amazonMusicUrl',
title: 'Amazon Music',
type: 'url',
group: 'links',
fieldset: 'links',
}),
defineField({name: 'tidalUrl', title: 'Tidal', type: 'url', group: 'links', fieldset: 'links'}),
defineField({name: 'qobuzUrl', title: 'Qobuz', type: 'url', group: 'links', fieldset: 'links'}),
defineField({
name: 'nativeDsdUrl',
title: 'NativeDSD',
type: 'url',
group: 'links',
fieldset: 'links',
}),
],
orderings: [
{
title: 'Release Date (latest first)',
name: 'releaseDateDesc',
by: [{field: 'releaseDate', direction: 'desc'}],
},
{
title: 'Release Date (oldest first)',
name: 'releaseDateAsc',
by: [{field: 'releaseDate', direction: 'asc'}],
},
{
title: 'Catalog # (Asc.)',
name: 'catalogNoAsc',
by: [{field: 'catalogNo', direction: 'asc'}],
},
{
title: 'Catalog # (Desc.)',
name: 'catalogNoDesc',
by: [{field: 'catalogNo', direction: 'desc'}],
},
],
preview: {
select: {
title: 'name',
artist: 'albumArtist',
catNo: 'catalogNo',
media: 'albumCover',
},
prepare({title, artist, catNo, media}) {
return {
title: `${title}${catNo}` || '(Untitled release)',
subtitle: artist ? artist : '',
media,
}
},
},
})