1
0
Fork 0
polaris-task-force/src/collections/locker/Loadouts.ts

77 lines
1.9 KiB
TypeScript

import { CollectionConfig } from "payload";
import { isDeveloper } from "@/utils/access-control/isRole";
import { LOADOUT_SLOTS } from "@/lib/locker";
export const Loadouts: CollectionConfig = {
slug: "loadouts",
admin: {
group: "Locker",
useAsTitle: "name",
defaultColumns: ["name", "ownerUser", "updatedAt"],
},
access: {
read: ({ req }) => {
if (!req.user) return false;
if (isDeveloper({ req })) return true;
return { ownerUser: { equals: req.user.id } };
},
create: ({ req }) => !!req.user,
update: ({ req }) => {
if (!req.user) return false;
if (isDeveloper({ req })) return true;
return { ownerUser: { equals: req.user.id } };
},
delete: ({ req }) => {
if (!req.user) return false;
if (isDeveloper({ req })) return true;
return { ownerUser: { equals: req.user.id } };
},
},
fields: [
{
name: "name",
type: "text",
required: true,
admin: {
description: 'Loadout name (e.g., "CQB", "Overwatch", "Resupply").',
},
},
{
name: "description",
type: "textarea",
admin: {
description: "Optional notes about this loadout.",
},
},
{
name: "ownerUser",
type: "relationship",
relationTo: "users",
required: true,
admin: {
description: "The operator this loadout belongs to.",
},
},
{
name: "slots",
type: "group",
label: "Equipment Slots",
admin: {
description: "Assign assets from your locker to each equipment slot.",
},
fields: LOADOUT_SLOTS.map((slot) => ({
name: slot.name,
type: "relationship",
relationTo: "assets",
admin: {
description: slot.description,
},
filterOptions: {
assetType: {
in: slot.assetTypes.join(","),
},
},
})),
},
],
};