84 lines
1.9 KiB
TypeScript
84 lines
1.9 KiB
TypeScript
import {defineField, defineType} from 'sanity'
|
|
|
|
export default defineType({
|
|
name: 'changelogEntry',
|
|
title: 'Changelog Entry',
|
|
type: 'document',
|
|
fields: [
|
|
defineField({
|
|
name: 'version',
|
|
title: 'Version',
|
|
type: 'string',
|
|
description: 'e.g. v1.2.0',
|
|
validation: (Rule) => Rule.required(),
|
|
}),
|
|
defineField({
|
|
name: 'title',
|
|
title: 'Title',
|
|
type: 'string',
|
|
validation: (Rule) => Rule.required().max(120),
|
|
}),
|
|
defineField({
|
|
name: 'publishedAt',
|
|
title: 'Published At',
|
|
type: 'datetime',
|
|
initialValue: () => new Date().toISOString(),
|
|
validation: (Rule) => Rule.required(),
|
|
}),
|
|
defineField({
|
|
name: 'tags',
|
|
title: 'Tags',
|
|
type: 'array',
|
|
of: [
|
|
{
|
|
type: 'string',
|
|
options: {
|
|
list: [
|
|
{title: 'Feature', value: 'feature'},
|
|
{title: 'Fix', value: 'fix'},
|
|
{title: 'Improvement', value: 'improvement'},
|
|
],
|
|
},
|
|
},
|
|
],
|
|
}),
|
|
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'}),
|
|
],
|
|
},
|
|
],
|
|
}),
|
|
],
|
|
orderings: [
|
|
{
|
|
title: 'Published Date, Newest',
|
|
name: 'publishedAtDesc',
|
|
by: [{field: 'publishedAt', direction: 'desc'}],
|
|
},
|
|
],
|
|
preview: {
|
|
select: {
|
|
title: 'title',
|
|
version: 'version',
|
|
publishedAt: 'publishedAt',
|
|
},
|
|
prepare({title, version, publishedAt}) {
|
|
const date = publishedAt ? new Date(publishedAt).toLocaleDateString() : 'Draft'
|
|
return {
|
|
title: `${version} — ${title}`,
|
|
subtitle: date,
|
|
}
|
|
},
|
|
},
|
|
})
|