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: 'Streaming Links'}, {name: 'references', title: 'Artists / Composers'}, ], fieldsets: [ {name: 'albuminfo', title: 'Album'}, {name: 'main', title: 'Release Information', options: {columns: 2}}, {name: 'media', title: 'Media'}, {name: 'text', title: 'Descriptions'}, {name: 'links', title: 'Streaming Links', options: {columns: 2}}, {name: 'references', title: 'Artists / Composers'}, ], fields: [ defineField({ name: 'name', title: 'Title', type: 'string', group: 'main', fieldset: 'albuminfo', }), defineField({name: 'albumArtist', type: 'string', group: 'main', fieldset: 'albuminfo'}), defineField({ name: 'catalogNo', title: 'Catalog #', type: 'string', group: 'main', fieldset: 'main', }), defineField({ name: 'slug', title: 'Slug', type: 'slug', options: {source: 'catalogNo', maxLength: 10}, validation: (Rule) => Rule.required(), group: 'main', fieldset: 'main', }), defineField({ name: 'label', title: 'Label', type: 'string', group: 'main', fieldset: 'main', options: { list: [ {title: 'TRPTK', value: 'trptk'}, {title: 'Other', value: 'other'}, ], }, }), defineField({name: 'upc', title: 'UPC/EAN', type: 'string', group: 'main', fieldset: 'main'}), defineField({ name: 'releaseDate', title: 'Release Date', type: 'date', group: 'main', fieldset: 'main', options: {hotspot: true}, }), 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: 'tracks', title: 'Track previews', group: 'media', fieldset: 'media', type: 'array', of: [ defineField({ name: 'track', title: 'Track', type: 'object', fields: [ defineField({ name: 'title', title: 'Title', type: 'string', validation: (Rule) => Rule.required(), }), defineField({ name: 'artistText', title: 'Artist / Composer', type: 'string', }), defineField({ name: 'duration', title: 'Duration', type: 'string', }), defineField({ name: 'previewMp3', title: '30s preview (MP3)', type: 'file', options: {accept: 'audio/mpeg'}, }), ], preview: { select: { title: 'title', trackNo: 'trackNo', artistText: 'artistText', duration: 'duration', }, prepare({title, trackNo, artistText, duration}) { const subtitleParts = [artistText, duration && `⏱ ${duration}`].filter(Boolean) return { title: `${trackNo ? `${trackNo}. ` : ''}${title || '(Untitled track)'}`, subtitle: subtitleParts.join(' · '), } }, }, }), ], }), 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: 'officialUrl', title: 'Official Link', type: 'url', group: 'links', fieldset: 'links', }), 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', }), defineField({ name: 'artists', title: 'Artists', group: 'references', fieldset: 'references', type: 'array', of: [ { type: 'reference', to: [{type: 'artist'}], }, ], }), ], 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, } }, }, })