From 58b885deae363355d5df050a0615ef2db1f9b729 Mon Sep 17 00:00:00 2001 From: Brendon Heinst Date: Fri, 9 Jan 2026 11:34:54 +0100 Subject: [PATCH] Add more content types --- schemaTypes/artistType.ts | 31 ++++++++ schemaTypes/index.ts | 5 +- schemaTypes/releaseType.ts | 140 +++++++++++++++++++++++++++++++++---- 3 files changed, 160 insertions(+), 16 deletions(-) create mode 100644 schemaTypes/artistType.ts diff --git a/schemaTypes/artistType.ts b/schemaTypes/artistType.ts new file mode 100644 index 0000000..4064d97 --- /dev/null +++ b/schemaTypes/artistType.ts @@ -0,0 +1,31 @@ +import {defineField, defineType} from 'sanity' + +export const artistType = defineType({ + name: 'artist', + title: 'Artist', + type: 'document', + fields: [ + defineField({ + name: 'name', + title: 'Name', + type: 'string', + validation: (Rule) => Rule.required(), + }), + defineField({ + name: 'slug', + title: 'Slug', + type: 'slug', + options: {source: 'name', maxLength: 96}, + validation: (Rule) => Rule.required(), + }), + defineField({ + name: 'image', + title: 'Image', + type: 'image', + options: {hotspot: true}, + }), + ], + preview: { + select: {title: 'name', media: 'image'}, + }, +}) diff --git a/schemaTypes/index.ts b/schemaTypes/index.ts index b32f4c8..4c3b37d 100644 --- a/schemaTypes/index.ts +++ b/schemaTypes/index.ts @@ -1,2 +1,3 @@ -import { releaseType } from "./releaseType" -export const schemaTypes = [releaseType] +import {releaseType} from './releaseType' +import {artistType} from './artistType' +export const schemaTypes = [releaseType, artistType] diff --git a/schemaTypes/releaseType.ts b/schemaTypes/releaseType.ts index f657951..450c13d 100644 --- a/schemaTypes/releaseType.ts +++ b/schemaTypes/releaseType.ts @@ -4,29 +4,141 @@ 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: 'catalogNo', type: 'string' }), - defineField({ name: 'name', type: 'string' }), - defineField({ name: 'albumArtist', type: 'string' }), - defineField({ name: 'albumCover', type: 'image' }), - defineField({ name: 'label', title: 'Label', type: 'string', - options: { - list: [ - {title: 'TRPTK', value: 'trptk'}, - {title: 'Other', value: 'other'}, - ], - }, -}), + 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: 'Cat. No. (Asc.)', + 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: 'Cat. No. (Desc.)', + title: 'Catalog # (Desc.)', name: 'catalogNoDesc', by: [{field: 'catalogNo', direction: 'desc'}], },