139 lines
3.1 KiB
TypeScript
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' }],
|
|
},
|
|
],
|
|
});
|