import { defineType, defineField } from 'sanity';
export default defineType({
name: 'event',
title: 'Event',
type: 'document',
fields: [
defineField({
name: 'title',
title: 'Tittel',
type: 'string',
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'slug',
title: 'Slug',
type: 'slug',
options: {
source: 'title',
maxLength: 96,
},
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'description',
title: 'Beskrivelse',
type: 'text',
rows: 4,
}),
defineField({
name: 'startDate',
title: 'Startdato',
type: 'datetime',
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'endDate',
title: 'Sluttdato',
type: 'datetime',
}),
defineField({
name: 'isAllDay',
title: 'Heldagsevent',
type: 'boolean',
initialValue: false,
}),
defineField({
name: 'location',
title: 'Lokasjon',
type: 'reference',
to: [{ type: 'location' }],
validation: (Rule) => Rule.required(),
}),
defineField({
name: 'venue',
title: 'Venue',
type: 'reference',
to: [{ type: 'venue' }],
}),
defineField({
name: 'categories',
title: 'Kategorier',
type: 'array',
of: [{ type: 'reference', to: [{ type: 'category' }] }],
}),
defineField({
name: 'pricing',
title: 'Prising',
type: 'object',
fields: [
{ name: 'isFree', title: 'Gratis', type: 'boolean', initialValue: false },
{ name: 'minPrice', title: 'Minpris', type: 'number' },
{ name: 'maxPrice', title: 'Makspris', type: 'number' },
{ name: 'currency', title: 'Valuta', type: 'string', initialValue: 'NOK' },
],
}),
defineField({
name: 'organizer',
title: 'Arrangør',
type: 'object',
fields: [
{ name: 'name', title: 'Navn', type: 'string' },
{ name: 'email', title: 'E-post', type: 'string' },
{ name: 'website', title: 'Nettside', type: 'url' },
],
}),
defineField({
name: 'externalLinks',
title: 'Eksterne lenker',
type: 'array',
of: [
{
type: 'object',
fields: [
{ name: 'label', title: 'Tekst', type: 'string' },
{ name: 'url', title: 'URL', type: 'url' },
{
name: 'type',
title: 'Type',
type: 'string',
options: {
list: ['tickets', 'website', 'facebook', 'instagram', 'other'],
},
},
],
},
],
}),
defineField({
name: 'images',
title: 'Bilder',
type: 'array',
of: [
{
type: 'image',
options: { hotspot: true },
fields: [
{ name: 'alt', title: 'Alt-tekst', type: 'string' },
],
},
],
}),
defineField({
name: 'tags',
title: 'Tags',
type: 'array',
of: [{ type: 'string' }],
options: {
layout: 'tags',
},
}),
defineField({
name: 'status',
title: 'Status',
type: 'string',
options: {
list: [
{ title: 'Utkast', value: 'draft' },
{ title: 'Publisert', value: 'published' },
{ title: 'Avlyst', value: 'cancelled' },
],
},
initialValue: 'draft',
}),
defineField({
name: 'source',
title: 'Kilde',
type: 'object',
fields: [
{
name: 'type',
title: 'Type',
type: 'string',
options: {
list: ['manual', 'scraper', 'api', 'import'],
},
},
{ name: 'url', title: 'Kilde-URL', type: 'url' },
{ name: 'externalId', title: 'Ekstern ID', type: 'string' },
],
}),
],
preview: {
select: {
title: 'title',
date: 'startDate',
location: 'location.city',
media: 'images.0',
},
prepare({ title, date, location, media }) {
const formattedDate = date ? new Date(date).toLocaleDateString('no-NO') : '';
return {
title,
subtitle: `${formattedDate} · ${location || ''}`,
media,
};
},
},
});