77 lines
1.9 KiB
TypeScript
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(","),
|
|
},
|
|
},
|
|
})),
|
|
},
|
|
],
|
|
};
|