Capital/content/schema/events.ts
2024-01-22 00:28:49 +08:00

95 lines
1.9 KiB
TypeScript

import {
checkbox,
relationship,
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 Event = 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 } }),
description: text(),
content: document({
formatting: true,
layouts: [
[1, 1],
[1, 1, 1],
[2, 1],
[1, 2],
[1, 2, 1],
],
links: true,
dividers: true,
}),
isPublished: checkbox(),
isHistory: checkbox(),
author: relationship({
ref: "User.events",
ui: {
displayMode: "cards",
cardFields: ["name", "email"],
inlineEdit: { fields: ["name", "email"] },
linkToItem: true,
inlineConnect: true,
},
many: false,
}),
categories: relationship({
ref: "Category.events",
many: true,
ui: {
displayMode: "cards",
cardFields: ["name"],
inlineEdit: { fields: ["name"] },
linkToItem: true,
inlineConnect: true,
inlineCreate: { fields: ["name"] },
},
}),
tags: relationship({
ref: "Tag.events",
many: true,
ui: {
displayMode: "cards",
cardFields: ["name"],
inlineEdit: { fields: ["name"] },
linkToItem: true,
inlineConnect: true,
inlineCreate: { fields: ["name"] },
},
}),
createdAt: timestamp({
defaultValue: { kind: "now" },
}),
},
});