working
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
import {defineField, defineType} from 'sanity'
|
||||
|
||||
export default defineType({
|
||||
name: 'author',
|
||||
title: 'Author',
|
||||
type: 'document',
|
||||
fields: [
|
||||
defineField({
|
||||
name: 'name',
|
||||
title: 'Name',
|
||||
type: 'string',
|
||||
validation: (Rule) => Rule.required(),
|
||||
}),
|
||||
defineField({
|
||||
name: 'slug',
|
||||
title: 'Slug',
|
||||
type: 'slug',
|
||||
options: {source: 'name'},
|
||||
}),
|
||||
defineField({
|
||||
name: 'image',
|
||||
title: 'Image',
|
||||
type: 'image',
|
||||
options: {hotspot: true},
|
||||
}),
|
||||
defineField({
|
||||
name: 'bio',
|
||||
title: 'Bio',
|
||||
type: 'text',
|
||||
rows: 3,
|
||||
}),
|
||||
],
|
||||
preview: {
|
||||
select: {title: 'name', media: 'image'},
|
||||
},
|
||||
})
|
||||
@@ -1 +1,4 @@
|
||||
export const schemaTypes = []
|
||||
import author from './author'
|
||||
import post from './post'
|
||||
|
||||
export const schemaTypes = [author, post]
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
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 <head>. 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 <meta description>. 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,
|
||||
}
|
||||
},
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user