import {defineField, defineType} from 'sanity' export default defineType({ name: 'post', title: 'Post', type: 'document', fields: [ defineField({ name: 'title', title: 'Title', type: 'string', validation: (Rule) => Rule.required().max(100), }), defineField({ name: 'slug', title: 'Slug', type: 'slug', options: {source: 'title', maxLength: 96}, validation: (Rule) => Rule.required(), }), defineField({ name: 'author', title: 'Author', type: 'reference', to: [{type: 'author'}], }), defineField({ name: 'mainImage', title: 'Main Image', type: 'image', options: {hotspot: true}, fields: [ defineField({ name: 'alt', title: 'Alt Text', type: 'string', description: 'Describe the image for screen readers and SEO.', }), ], }), defineField({ name: 'publishedAt', title: 'Published At', type: 'datetime', initialValue: () => new Date().toISOString(), }), defineField({ name: 'excerpt', title: 'Excerpt', type: 'text', rows: 3, description: 'Short summary shown in listings and used as meta description (~160 chars).', validation: (Rule) => Rule.max(200), }), defineField({ name: 'body', title: 'Body', type: 'array', of: [ {type: 'block'}, { type: 'image', options: {hotspot: true}, fields: [ defineField({ name: 'alt', title: 'Alt Text', type: 'string', }), defineField({ name: 'caption', title: 'Caption', type: 'string', }), ], }, ], }), defineField({ name: 'seoTitle', title: 'SEO Title', type: 'string', description: 'Overrides page title in . Leave blank to use post title.', validation: (Rule) => Rule.max(70), }), defineField({ name: 'seoDescription', title: 'SEO Description', type: 'text', rows: 2, description: 'Overrides excerpt in . Leave blank to use excerpt.', validation: (Rule) => Rule.max(160), }), ], orderings: [ { title: 'Published Date, Newest', name: 'publishedAtDesc', by: [{field: 'publishedAt', direction: 'desc'}], }, ], preview: { select: { title: 'title', author: 'author.name', media: 'mainImage', publishedAt: 'publishedAt', }, prepare({title, author, media, publishedAt}) { const date = publishedAt ? new Date(publishedAt).toLocaleDateString() : 'Draft' return { title, subtitle: `${author ?? 'No author'} ยท ${date}`, media, } }, }, })