Files
2026-03-31 11:32:05 -04:00

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,
}
},
},
})