ordinarthur 9d172a4422 init
2026-04-05 12:11:46 +02:00

139 lines
3.1 KiB
TypeScript

import { defineType, defineField } from 'sanity';
export default defineType({
name: 'project',
title: 'Projet',
type: 'document',
fields: [
defineField({
name: 'title',
title: 'Titre du projet',
type: 'string',
validation: (rule) => rule.required(),
}),
defineField({
name: 'slug',
title: 'Slug (URL)',
type: 'slug',
options: { source: 'title', maxLength: 96 },
validation: (rule) => rule.required(),
}),
defineField({
name: 'category',
title: 'Catégorie',
type: 'string',
options: {
list: [
{ title: 'Réalisation Pérenne', value: 'perenne' },
{ title: 'Création Événement', value: 'event' },
],
layout: 'radio',
},
validation: (rule) => rule.required(),
}),
defineField({
name: 'client',
title: 'Client',
type: 'string',
validation: (rule) => rule.required(),
}),
defineField({
name: 'date',
title: 'Date du projet',
type: 'date',
}),
defineField({
name: 'location',
title: 'Lieu',
type: 'string',
}),
defineField({
name: 'description',
title: 'Description courte',
type: 'text',
rows: 3,
}),
defineField({
name: 'heroImage',
title: 'Image principale',
type: 'image',
options: { hotspot: true },
fields: [
defineField({
name: 'alt',
title: 'Texte alternatif',
type: 'string',
}),
],
}),
defineField({
name: 'gallery',
title: 'Galerie photos',
type: 'array',
of: [
{
type: 'image',
options: { hotspot: true },
fields: [
defineField({
name: 'alt',
title: 'Texte alternatif',
type: 'string',
}),
defineField({
name: 'size',
title: "Taille d'affichage",
type: 'string',
options: {
list: [
{ title: 'Petit', value: 'small' },
{ title: 'Moyen', value: 'medium' },
{ title: 'Grand', value: 'large' },
],
},
initialValue: 'medium',
}),
],
},
],
}),
defineField({
name: 'tags',
title: 'Tags',
type: 'array',
of: [{ type: 'string' }],
options: { layout: 'tags' },
}),
defineField({
name: 'featured',
title: "Mis en avant sur la page d'accueil",
type: 'boolean',
initialValue: false,
}),
defineField({
name: 'order',
title: "Ordre d'affichage",
type: 'number',
}),
],
preview: {
select: {
title: 'title',
subtitle: 'client',
media: 'heroImage',
},
},
orderings: [
{
title: 'Par ordre',
name: 'orderAsc',
by: [{ field: 'order', direction: 'asc' }],
},
{
title: 'Par date',
name: 'dateDesc',
by: [{ field: 'date', direction: 'desc' }],
},
],
});