fixing role ,apping. added accessories to ui

This commit is contained in:
2025-12-13 06:02:05 -05:00
parent 3ddb48fe58
commit 978b9df96c
4 changed files with 243 additions and 194 deletions
+75 -30
View File
@@ -1,35 +1,58 @@
// Grouping for nav + layout
export type CategoryGroup = "lower" | "upper" | "accessories";
/**
* CategoryId is the canonical identifier used throughout the UI + localStorage.
*
* ✅ Canonical IDs are kebab-case to match route segments and `gunbuilderParts.ts`.
*
* 🧯 Legacy camelCase IDs are temporarily supported to avoid breaking older
* localStorage/build-state and older code paths. Prefer kebab-case going forward.
*/
export type CategoryId =
| "upper"
| "completeUpper"
| "barrel"
| "gasBlock"
| "gasTube"
| "muzzleDevice"
| "suppressor"
| "handguard"
| "chargingHandle"
| "bcg"
| "buffer"
// ===== LOWER =====
| "lower"
| "completeLower"
| "lowerParts"
| "complete-lower"
| "lower-parts"
| "trigger"
| "grip"
| "safety"
| "buffer"
| "stock"
// ===== UPPER =====
| "upper"
| "complete-upper"
| "barrel"
| "handguard"
| "gas-block"
| "gas-tube"
| "muzzle-device"
| "bcg"
| "charging-handle"
| "suppressor"
| "sights"
| "optic"
| "stock"
// NEW ACCESSORY CATEGORIES
// ===== ACCESSORIES =====
| "magazine"
| "weaponLight"
| "weapon-light"
| "foregrip"
| "bipod"
| "sling"
| "railAccessory"
| "tools";
| "rail-accessory"
| "tools"
// ===== LEGACY (temporary) =====
| "completeUpper"
| "gasBlock"
| "gasTube"
| "muzzleDevice"
| "chargingHandle"
| "completeLower"
| "lowerParts"
| "weaponLight"
| "railAccessory";
export interface Category {
id: CategoryId;
@@ -37,6 +60,8 @@ export interface Category {
description?: string;
/** used for nav & grouping */
group?: CategoryGroup;
/** optional slug override (mostly for legacy IDs) */
slug?: string;
}
export interface Part {
@@ -46,39 +71,59 @@ export interface Part {
categoryId: CategoryId;
price: number;
affiliateUrl?: string;
url?: string;
url?: string;
imageUrl?: string;
notes?: string;
}
export const CATEGORY_SLUGS: Record<CategoryId, string> = {
/**
* Route / UI slug for each CategoryId.
*
* - Canonical kebab-case ids map 1:1.
* - Legacy camelCase ids map to the same slug.
*/
export const CATEGORY_SLUGS = {
// LOWER
lower: "lower",
completeLower: "complete-lower",
lowerParts: "lower-parts",
"complete-lower": "complete-lower",
"lower-parts": "lower-parts",
trigger: "trigger",
grip: "grip",
safety: "safety",
buffer: "buffer",
stock: "stock",
// UPPER
upper: "upper",
completeUpper: "complete-upper",
"complete-upper": "complete-upper",
barrel: "barrel",
handguard: "handguard",
gasBlock: "gas-block",
gasTube: "gas-tube",
muzzleDevice: "muzzle-device",
"gas-block": "gas-block",
"gas-tube": "gas-tube",
"muzzle-device": "muzzle-device",
sights: "sights",
bcg: "bcg",
chargingHandle: "charging-handle",
"charging-handle": "charging-handle",
suppressor: "suppressor",
optic: "optic",
// ACCESSORIES
magazine: "magazine",
weaponLight: "weapon-light",
"weapon-light": "weapon-light",
foregrip: "foregrip",
bipod: "bipod",
sling: "sling",
railAccessory: "rail-accessory",
"rail-accessory": "rail-accessory",
tools: "tools",
};
// LEGACY (temporary)
completeUpper: "complete-upper",
gasBlock: "gas-block",
gasTube: "gas-tube",
muzzleDevice: "muzzle-device",
chargingHandle: "charging-handle",
completeLower: "complete-lower",
lowerParts: "lower-parts",
weaponLight: "weapon-light",
railAccessory: "rail-accessory",
} as const satisfies Record<CategoryId, string>;