111 lines
2.4 KiB
TypeScript
111 lines
2.4 KiB
TypeScript
|
import {
|
||
|
checkbox,
|
||
|
relationship,
|
||
|
select,
|
||
|
text,
|
||
|
timestamp,
|
||
|
} from "@keystone-6/core/fields";
|
||
|
import { document } from "@keystone-6/fields-document";
|
||
|
import { list } from "@keystone-6/core";
|
||
|
import { allowEditor } from "../limit";
|
||
|
import { Session } from "../auth";
|
||
|
|
||
|
export const Post = list({
|
||
|
access: {
|
||
|
...allowEditor,
|
||
|
|
||
|
filter: {
|
||
|
query: ({ session }: { session: Session }) => {
|
||
|
if (session?.data.isEditor || session?.data.isAdmin) return true;
|
||
|
return { isPublished: { equals: true } };
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
fields: {
|
||
|
slug: text({
|
||
|
validation: {
|
||
|
isRequired: true,
|
||
|
},
|
||
|
isIndexed: "unique",
|
||
|
}),
|
||
|
title: text({ validation: { isRequired: true } }),
|
||
|
cover: relationship({ ref: "Image" }),
|
||
|
|
||
|
description: text(),
|
||
|
|
||
|
assets: relationship({ ref: "Asset", many: true }),
|
||
|
images: relationship({ ref: "Image", many: true }),
|
||
|
content: document({
|
||
|
formatting: true,
|
||
|
layouts: [
|
||
|
[1, 1],
|
||
|
[1, 1, 1],
|
||
|
[2, 1],
|
||
|
[1, 2],
|
||
|
[1, 2, 1],
|
||
|
],
|
||
|
links: true,
|
||
|
dividers: true,
|
||
|
}),
|
||
|
|
||
|
type: select({
|
||
|
type: "enum",
|
||
|
options: [
|
||
|
{ label: "Article", value: "article" },
|
||
|
{ label: "Podcast", value: "podcast" },
|
||
|
],
|
||
|
defaultValue: "article",
|
||
|
db: { map: "post_type" },
|
||
|
validation: { isRequired: true },
|
||
|
ui: { displayMode: "select" },
|
||
|
}),
|
||
|
|
||
|
isPublished: checkbox(),
|
||
|
|
||
|
author: relationship({
|
||
|
ref: "User.posts",
|
||
|
|
||
|
ui: {
|
||
|
displayMode: "cards",
|
||
|
cardFields: ["name", "email"],
|
||
|
inlineEdit: { fields: ["name", "email"] },
|
||
|
linkToItem: true,
|
||
|
inlineConnect: true,
|
||
|
},
|
||
|
|
||
|
many: false,
|
||
|
}),
|
||
|
|
||
|
categories: relationship({
|
||
|
ref: "Category.posts",
|
||
|
many: true,
|
||
|
ui: {
|
||
|
displayMode: "cards",
|
||
|
cardFields: ["name"],
|
||
|
inlineEdit: { fields: ["name"] },
|
||
|
linkToItem: true,
|
||
|
inlineConnect: true,
|
||
|
inlineCreate: { fields: ["name"] },
|
||
|
},
|
||
|
}),
|
||
|
|
||
|
tags: relationship({
|
||
|
ref: "Tag.posts",
|
||
|
many: true,
|
||
|
ui: {
|
||
|
displayMode: "cards",
|
||
|
cardFields: ["name"],
|
||
|
inlineEdit: { fields: ["name"] },
|
||
|
linkToItem: true,
|
||
|
inlineConnect: true,
|
||
|
inlineCreate: { fields: ["name"] },
|
||
|
},
|
||
|
}),
|
||
|
|
||
|
createdAt: timestamp({
|
||
|
defaultValue: { kind: "now" },
|
||
|
}),
|
||
|
},
|
||
|
});
|