import {MdLibraryMusic as icon} from 'react-icons/md'
import {MdYoutubeSearchedFor as seoIcon} from 'react-icons/md'
import {defineField, defineType} from 'sanity'
import DurationInputComponent from '../components/DurationInputComponent'
import TranslateStringInputComponent from '../components/TranslateStringInputComponent'
export default defineType({
name: 'track',
title: 'Track',
type: 'document',
icon,
groups: [
{
name: 'seo',
title: 'SEO',
icon: seoIcon,
},
{
name: 'codes',
title: 'Codes',
},
{
name: 'metadata',
title: 'Metadata',
},
{
name: 'statistics',
title: 'Stats',
},
],
fields: [
defineField({
name: 'name',
title: 'Name',
type: 'localeString',
group: 'metadata',
options: {
languageFilter: true,
},
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'description',
title: 'description',
type: 'localeString',
group: 'metadata',
options: {
languageFilter: true,
},
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'isFeatured',
title: 'Is Featured',
type: 'boolean',
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'tags',
title: 'Tags',
type: 'array',
// validation: (Rule) => Rule.required(),
of: [{type: 'reference', to: [{type: 'searchTag'}]}],
}),
defineField({
name: 'image',
title: 'Poster Image',
type: 'image',
group: 'metadata',
validation: (Rule) => Rule.required(),
options: {
hotspot: true,
},
}),
defineField({
name: 'file',
title: 'File',
type: 'file',
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'slug',
title: 'Slug',
type: 'slug',
options: {
source: 'name',
maxLength: 100,
},
}),
defineField({
name: 'tempo',
title: 'Tempo',
type: 'number',
group: 'metadata',
initialValue: 100,
validation: (Rule) =>
Rule.precision(0).positive() && Rule.max(200) && Rule.min(50) && Rule.required(),
}),
defineField({
name: 'duration',
title: 'Duration (seconds)',
type: 'number',
group: 'metadata',
readOnly: true,
components: {
input: DurationInputComponent,
},
}),
defineField({
name: 'visitCount',
title: 'Visit',
type: 'number',
group: 'statistics',
}),
defineField({
name: 'playCount',
title: 'Play',
type: 'number',
group: 'statistics',
}),
defineField({
name: 'downloadCount',
title: 'Download',
type: 'number',
group: 'statistics',
}),
defineField({
name: 'buyCount',
title: 'Buy',
type: 'number',
group: 'statistics',
}),
defineField({
name: 'upc',
title: 'UPC',
type: 'string',
validation: (Rule) => Rule.required(),
group: 'codes',
}),
defineField({
name: 'isrc',
title: 'ISRC',
type: 'string',
validation: (Rule) => Rule.required(),
group: 'codes',
}),
defineField({
name: 'iswc',
title: 'ISWC',
type: 'string',
validation: (Rule) => Rule.required(),
group: 'codes',
}),
defineField({
name: 'recordLabel',
title: 'Record Label',
type: 'string',
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'artists',
title: 'Artists',
type: 'array',
validation: (Rule) => Rule.required(),
of: [{type: 'reference', to: [{type: 'artist'}]}],
}),
defineField({
name: 'composers',
title: 'Composers',
type: 'array',
validation: (Rule) => Rule.required(),
of: [{type: 'reference', to: [{type: 'composer'}]}],
}),
defineField({
name: 'sources',
title: 'Sources',
type: 'array',
of: [{type: 'streamingService'}],
}),
defineField({
name: 'moods',
title: 'Moods',
type: 'array',
validation: (Rule) => Rule.required(),
of: [{type: 'reference', to: [{type: 'mood'}]}],
}),
defineField({
name: 'ganres',
title: 'Ganres',
type: 'array',
validation: (Rule) => Rule.required(),
of: [{type: 'reference', to: [{type: 'ganre'}]}],
}),
defineField({
name: 'seo',
title: 'SEO',
type: 'pageSeo',
group: 'seo',
// validation: (Rule) => Rule.required(),
}),
],
preview: {
select: {
name: 'name',
media: 'image',
isFeatured: 'isFeatured',
},
prepare(selection) {
const {name, media, isFeatured} = selection
return {
title: name['en'],
media,
subtitle: isFeatured ? '⭐️ Featured' : '',
}
},
},
initialValue: {
isFeatured: false,
recordLabel: 'lesfreemusic',
sources: [
{name: 'Patreon', icon: 'mdi:patreon'},
{name: 'Spotify', icon: 'mdi:spotify'},
{name: 'Apple Music', icon: 'cib:apple-music'},
{name: 'iTunes', icon: 'simple-icons:itunes'},
{name: 'Youtube', icon: 'uil:youtube'},
{name: 'Youtube Music', icon: 'arcticons:youtube-music'},
{name: 'Amazon Music', icon: 'arcticons:amazon-music'},
{name: 'Amazon', icon: 'simple-icons:amazon'},
{name: 'TikTok', icon: 'ic:baseline-tiktok'},
{name: 'Instagram', icon: 'mdi:instagram'},
{name: 'SoundCloud', icon: 'mdi:soundcloud'},
{name: 'Deezer', icon: 'tabler:brand-deezer'},
],
composers: [{_ref: '45688ba9-a315-400b-98b3-b8c1442b9aa4'}],
},
})