84 lines
1.6 KiB
TypeScript
84 lines
1.6 KiB
TypeScript
// Grouping for nav + layout
|
|
export type CategoryGroup = "lower" | "upper" | "accessories";
|
|
|
|
export type CategoryId =
|
|
| "upper"
|
|
| "completeUpper"
|
|
| "barrel"
|
|
| "gasBlock"
|
|
| "gasTube"
|
|
| "muzzleDevice"
|
|
| "suppressor"
|
|
| "handguard"
|
|
| "chargingHandle"
|
|
| "bcg"
|
|
| "buffer"
|
|
| "lower"
|
|
| "completeLower"
|
|
| "lowerParts"
|
|
| "trigger"
|
|
| "grip"
|
|
| "safety"
|
|
| "sights"
|
|
| "optic"
|
|
| "stock"
|
|
// NEW ACCESSORY CATEGORIES
|
|
| "magazine"
|
|
| "weaponLight"
|
|
| "foregrip"
|
|
| "bipod"
|
|
| "sling"
|
|
| "railAccessory"
|
|
| "tools";
|
|
|
|
export interface Category {
|
|
id: CategoryId;
|
|
name: string;
|
|
description?: string;
|
|
/** used for nav & grouping */
|
|
group?: CategoryGroup;
|
|
}
|
|
|
|
export interface Part {
|
|
id: string;
|
|
name: string;
|
|
brand: string;
|
|
categoryId: CategoryId;
|
|
price: number;
|
|
affiliateUrl?: string;
|
|
url?: string;
|
|
imageUrl?: string;
|
|
notes?: string;
|
|
}
|
|
|
|
export const CATEGORY_SLUGS: Record<CategoryId, string> = {
|
|
lower: "lower",
|
|
completeLower: "complete-lower",
|
|
lowerParts: "lower-parts",
|
|
trigger: "trigger",
|
|
grip: "grip",
|
|
safety: "safety",
|
|
buffer: "buffer",
|
|
stock: "stock",
|
|
|
|
upper: "upper",
|
|
completeUpper: "complete-upper",
|
|
barrel: "barrel",
|
|
handguard: "handguard",
|
|
gasBlock: "gas-block",
|
|
gasTube: "gas-tube",
|
|
muzzleDevice: "muzzle-device",
|
|
sights: "sights",
|
|
bcg: "bcg",
|
|
chargingHandle: "charging-handle",
|
|
suppressor: "suppressor",
|
|
optic: "optic",
|
|
|
|
magazine: "magazine",
|
|
weaponLight: "weapon-light",
|
|
foregrip: "foregrip",
|
|
bipod: "bipod",
|
|
sling: "sling",
|
|
railAccessory: "rail-accessory",
|
|
tools: "tools",
|
|
}; |