2024-04-14 14:47:52 +02:00
|
|
|
import { config, fields, collection } from '@keystatic/core';
|
2024-04-15 14:54:57 +02:00
|
|
|
import ShowableFigureIcon from './keystatic/content-components/ShowableFigureIcon';
|
|
|
|
import ImageInput from './keystatic/content-components/ImageInput';
|
2024-04-14 14:47:52 +02:00
|
|
|
|
|
|
|
export default config({
|
2024-04-15 14:54:57 +02:00
|
|
|
ui: {
|
|
|
|
brand: { name: 'Filipe Medeiros CMS' },
|
|
|
|
},
|
2024-04-14 14:47:52 +02:00
|
|
|
storage: {
|
|
|
|
kind: 'local',
|
|
|
|
},
|
|
|
|
collections: {
|
|
|
|
library: collection({
|
|
|
|
label: 'Library items',
|
2024-04-15 14:54:57 +02:00
|
|
|
slugField: 'title',
|
2024-04-14 14:47:52 +02:00
|
|
|
path: 'src/content/library/**',
|
|
|
|
schema: {
|
2024-04-15 14:54:57 +02:00
|
|
|
title: fields.slug({
|
|
|
|
name: {
|
|
|
|
label: 'Title',
|
|
|
|
validation: { isRequired: true },
|
|
|
|
},
|
2024-04-14 14:47:52 +02:00
|
|
|
}),
|
|
|
|
checkedOut: fields.checkbox({ label: 'Checked out?' }),
|
|
|
|
link: fields.url({ label: 'Link', validation: { isRequired: true } }),
|
|
|
|
description: fields.text({ label: 'Description', multiline: true }),
|
|
|
|
date: fields.date({ label: 'Date', validation: { isRequired: true } }),
|
|
|
|
mainAuthor: fields.text({ label: 'Main author(s)' }),
|
|
|
|
},
|
|
|
|
}),
|
2024-04-15 14:54:57 +02:00
|
|
|
posts: collection({
|
|
|
|
label: 'Blog posts',
|
|
|
|
entryLayout: 'content',
|
|
|
|
slugField: 'slug',
|
|
|
|
path: 'src/content/blog/**',
|
|
|
|
format: { contentField: 'body' },
|
|
|
|
schema: {
|
|
|
|
language: fields.select({
|
|
|
|
label: 'Language',
|
|
|
|
options: [
|
|
|
|
{ label: 'Português', value: 'pt' },
|
|
|
|
{ label: 'English', value: 'en' },
|
|
|
|
],
|
|
|
|
defaultValue: 'pt',
|
|
|
|
}),
|
|
|
|
slug: fields.slug({
|
|
|
|
name: {
|
|
|
|
label: 'Astro slug',
|
|
|
|
validation: { isRequired: true },
|
|
|
|
},
|
|
|
|
slug: {
|
|
|
|
generate: (astroSlug) => astroSlug,
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
title: fields.text({
|
|
|
|
label: 'Title',
|
|
|
|
validation: { isRequired: true },
|
|
|
|
}),
|
|
|
|
body: fields.mdx({
|
|
|
|
label: 'Body',
|
|
|
|
components: {
|
|
|
|
ShowableFigure: {
|
|
|
|
label: 'Showable figure',
|
|
|
|
kind: 'block',
|
|
|
|
icon: ShowableFigureIcon(),
|
|
|
|
schema: {
|
|
|
|
src: {
|
|
|
|
label: 'Source',
|
|
|
|
kind: 'form',
|
|
|
|
formKind: 'asset',
|
|
|
|
Input: ImageInput,
|
|
|
|
defaultValue: () => {},
|
|
|
|
filename(value, { suggestedFilenamePrefix }) {
|
|
|
|
return `${suggestedFilenamePrefix}${value?.toString()}`;
|
|
|
|
},
|
|
|
|
parse(value, { asset }) {
|
|
|
|
return asset;
|
|
|
|
},
|
|
|
|
serialize(value, { suggestedFilenamePrefix }) {
|
|
|
|
console.log(value);
|
|
|
|
return {
|
|
|
|
value,
|
|
|
|
asset: {
|
|
|
|
content: new Uint8Array(),
|
|
|
|
filename: suggestedFilenamePrefix + '',
|
|
|
|
},
|
|
|
|
};
|
|
|
|
},
|
|
|
|
validate() {},
|
|
|
|
reader: {
|
|
|
|
parse(value) {
|
|
|
|
return value;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
subtitle: fields.text({ label: 'Subtitle' }),
|
|
|
|
summary: fields.text({
|
|
|
|
label: 'Summary',
|
|
|
|
validation: { isRequired: true },
|
|
|
|
}),
|
|
|
|
publishDate: fields.date({
|
|
|
|
label: 'Publish date',
|
|
|
|
validation: { isRequired: true },
|
|
|
|
}),
|
|
|
|
linkPreview: fields.object(
|
|
|
|
{
|
|
|
|
title: fields.text({ label: 'Title' }),
|
|
|
|
description: fields.text({ label: 'Description' }),
|
|
|
|
image: fields.object(
|
|
|
|
{
|
|
|
|
path: fields.image({
|
|
|
|
label: 'Path',
|
|
|
|
validation: { isRequired: true },
|
|
|
|
}),
|
|
|
|
altText: fields.text({
|
|
|
|
label: 'Alt text',
|
|
|
|
validation: { isRequired: true },
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
{ label: 'Image' },
|
|
|
|
),
|
|
|
|
},
|
|
|
|
{ label: 'Link preview' },
|
|
|
|
),
|
|
|
|
},
|
|
|
|
}),
|
2024-04-14 14:47:52 +02:00
|
|
|
},
|
|
|
|
});
|