2023-08-14 12:06:46 +02:00

159 lines
3.6 KiB
TypeScript

import {CogIcon} from '@sanity/icons'
import {defineType, defineField} from 'sanity'
import { languages } from '../../languages'
const TITLE = 'Settings'
export default defineType({
name: 'settings',
title: TITLE,
type: 'document',
icon: CogIcon,
groups: [
{
name: 'notFoundPage',
title: '404 page',
},
{
name: 'socialMedia',
title: 'Social media',
},
{
name: 'usps',
title: 'USPs',
},
{
name: 'contact',
title: 'Contact',
},
{
name: 'seo',
title: 'SEO',
},
],
fields: [
defineField({
name: 'language',
type: 'string',
readOnly: true,
description: 'Language of this document.'
// hidden: true,
}),
defineField({
name: 'title',
type: 'string',
title: 'Title',
description: 'Document title.',
}),
// Not found page
defineField({
name: 'notFoundPage',
title: '404 page',
type: 'object',
group: 'notFoundPage',
description: 'Information displayed on 404 page.',
fields: [
defineField({
name: 'title',
title: 'Title',
type: 'string',
validation: (Rule) => Rule.required(),
description: 'Page title displayed on 404 error page.',
}),
defineField({
name: 'body',
title: 'Body',
type: 'text',
rows: 5,
description: 'Text displayed adjacent to the title on 404 error page.'
}),
defineField({
name: 'category',
title: 'Category',
type: 'reference',
description: 'Category of products displayed on 404 error page.',
weak: true,
to: [
{
name: 'category',
type: 'category',
},
],
}),
]
}),
// Contact
defineField({
name: 'contact',
title: 'Contact options',
type: 'object',
group: 'contact',
description: 'Contact options for your business.',
options: {
collapsed: false,
collapsible: true,
},
fields: [
// Selling points
defineField({
name: 'contactOption',
title: 'Options (links)',
description: 'Links, e-mail address and phone numbers.',
type: 'array',
of: [
{type: 'linkExternal'},
],
}),
],
}),
// Social media links
defineField({
name: 'socialMedia',
title: 'Social Media',
type: 'object',
group: 'socialMedia',
description: "Links to your business's social media accounts",
options: {
collapsed: false,
collapsible: true,
},
fields: [
// Links
defineField({
name: 'links',
title: 'Links',
type: 'array',
description: 'Facebook, Twitter and Instgram etc.',
of: [
{type: 'linkExternal'},
],
}),
],
}),
// SEO
defineField({
name: 'seo',
title: 'SEO',
type: 'seo',
group: 'seo',
description: 'Default SEO displayed for every page unless overwritten on page/document level.',
}),
],
preview: {
select: {
title: 'title',
language: 'language'
},
prepare(selection) {
const {title, language} = selection;
const currentLang = languages.find(lang => lang.id === language);
return {
title: `${title}`,
subtitle: `${currentLang ? currentLang.title : ''}`,
}
},
},
})