Source index

sanity/schemaTypes/source.ts

import {defineArrayMember, defineField, defineType} from 'sanity'

export const source = defineType({
  name: 'source',
  title: 'Verified public source',
  type: 'document',
  fields: [
    defineField({name: 'title', type: 'string', validation: (r) => r.required()}),
    defineField({name: 'url', title: 'Primary W3C URL', type: 'url', validation: (r) => r.required().uri({scheme: ['https']})}),
    defineField({name: 'kind', type: 'string', options: {list: ['APG', 'WCAG-understanding']}, validation: (r) => r.required()}),
    defineField({name: 'publisher', type: 'string', initialValue: 'W3C WAI', validation: (r) => r.required()}),
    defineField({name: 'checkedAt', title: 'Source checked at', type: 'datetime', validation: (r) => r.required()}),
    defineField({name: 'sections', type: 'array', of: [defineArrayMember({type: 'string'})], validation: (r) => r.required().min(1)}),
    defineField({name: 'summary', type: 'text', validation: (r) => r.required()}),
    defineField({name: 'standardsContext', type: 'text', description: 'Distinguish informative pattern guidance from a criterion and its level.', validation: (r) => r.required()}),
    defineField({name: 'licenseUrl', type: 'url', validation: (r) => r.required().uri({scheme: ['https']})}),
    defineField({name: 'copyrightNotice', type: 'text', validation: (r) => r.required()}),
    defineField({name: 'derivationNotice', type: 'text', validation: (r) => r.required()}),
    defineField({name: 'sourceStatus', type: 'string', description: 'Informative source status where explicitly recorded.'}),
    defineField({name: 'sourceUpdatedAt', type: 'date', description: 'Update date displayed by the source, when available.'}),
  ],
  preview: {select: {title: 'title', subtitle: 'kind'}},
})