68 lines
1.6 KiB
TypeScript
68 lines
1.6 KiB
TypeScript
import type { CollectionConfig } from "payload";
|
|
import { hasPermission } from "@/utils/access-control/hasPermission";
|
|
|
|
export const Releases: CollectionConfig = {
|
|
slug: "releases",
|
|
admin: {
|
|
group: "Projects",
|
|
useAsTitle: "name",
|
|
defaultColumns: ["name", "project", "targetVersion", "status", "releaseDate"],
|
|
},
|
|
access: {
|
|
read: ({ req }) => !!req.user,
|
|
create: async ({ req }) => {
|
|
if (!req.user) return false;
|
|
return await hasPermission(req.payload, req.user, "releases:create");
|
|
},
|
|
update: async ({ req }) => {
|
|
if (!req.user) return false;
|
|
return await hasPermission(req.payload, req.user, "releases:update");
|
|
},
|
|
delete: async ({ req }) => {
|
|
if (!req.user) return false;
|
|
return await hasPermission(req.payload, req.user, "releases:delete");
|
|
},
|
|
},
|
|
fields: [
|
|
{
|
|
name: "name",
|
|
type: "text",
|
|
required: true,
|
|
},
|
|
{
|
|
name: "project",
|
|
type: "relationship",
|
|
relationTo: "projects",
|
|
required: true,
|
|
index: true,
|
|
},
|
|
{
|
|
name: "description",
|
|
type: "richText",
|
|
},
|
|
{
|
|
name: "status",
|
|
type: "select",
|
|
defaultValue: "draft",
|
|
options: [
|
|
{ label: "Draft", value: "draft" },
|
|
{ label: "In Progress", value: "in_progress" },
|
|
{ label: "Released", value: "released" },
|
|
],
|
|
},
|
|
{
|
|
name: "releaseDate",
|
|
type: "date",
|
|
admin: {
|
|
date: { pickerAppearance: "dayAndTime" },
|
|
},
|
|
},
|
|
{
|
|
name: "targetVersion",
|
|
type: "text",
|
|
admin: {
|
|
description: "Semver string, e.g. 2.3.0",
|
|
},
|
|
},
|
|
],
|
|
};
|