Initial local backup snapshot
This commit is contained in:
commit
acd9e14ba5
367 changed files with 118038 additions and 0 deletions
72
shared/materialEvent.ts
Normal file
72
shared/materialEvent.ts
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
export const materialEventItems = [
|
||||
{ key: "tente3x3", label: "Tente 3*3" },
|
||||
{ key: "chapiteau5x5", label: "Chapiteau 5*5" },
|
||||
{ key: "podium", label: "Podium" },
|
||||
{ key: "autres", label: "Autres" },
|
||||
] as const;
|
||||
|
||||
export const materialEventInventory: Record<(typeof materialEventItems)[number]["key"], number | null> = {
|
||||
tente3x3: 12,
|
||||
chapiteau5x5: 6,
|
||||
podium: 2,
|
||||
autres: null,
|
||||
};
|
||||
|
||||
export const materialEventReplacementValues: Record<(typeof materialEventItems)[number]["key"], number | null> = {
|
||||
tente3x3: 45000,
|
||||
chapiteau5x5: 120000,
|
||||
podium: 250000,
|
||||
autres: null,
|
||||
};
|
||||
|
||||
export type MaterialEventItemKey = (typeof materialEventItems)[number]["key"];
|
||||
export type MaterialEventSelection = Record<MaterialEventItemKey, boolean>;
|
||||
export type MaterialEventQuantities = Record<MaterialEventItemKey, string>;
|
||||
export type MaterialEventQuantityMap = Record<MaterialEventItemKey, number>;
|
||||
|
||||
export const emptyMaterialEventSelection = (): MaterialEventSelection => ({
|
||||
tente3x3: false,
|
||||
chapiteau5x5: false,
|
||||
podium: false,
|
||||
autres: false,
|
||||
});
|
||||
|
||||
export const emptyMaterialEventQuantities = (): MaterialEventQuantities => ({
|
||||
tente3x3: "",
|
||||
chapiteau5x5: "",
|
||||
podium: "",
|
||||
autres: "",
|
||||
});
|
||||
|
||||
export function getMaterialEventLabel(key: MaterialEventItemKey | string) {
|
||||
return materialEventItems.find((item) => item.key === key)?.label || String(key);
|
||||
}
|
||||
|
||||
export function parseMaterialEventQuantity(value: unknown) {
|
||||
const parsed = Number.parseInt(String(value ?? "").trim(), 10);
|
||||
return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;
|
||||
}
|
||||
|
||||
export function emptyMaterialEventQuantityMap(initialValue: number = 0): MaterialEventQuantityMap {
|
||||
return {
|
||||
tente3x3: initialValue,
|
||||
chapiteau5x5: initialValue,
|
||||
podium: initialValue,
|
||||
autres: initialValue,
|
||||
};
|
||||
}
|
||||
|
||||
export function sanitizeMaterialEventQuantityMap(rawValue: unknown): MaterialEventQuantityMap {
|
||||
const next = emptyMaterialEventQuantityMap();
|
||||
|
||||
if (!rawValue || typeof rawValue !== "object") {
|
||||
return next;
|
||||
}
|
||||
|
||||
for (const item of materialEventItems) {
|
||||
const value = (rawValue as Record<string, unknown>)[item.key];
|
||||
next[item.key] = parseMaterialEventQuantity(value);
|
||||
}
|
||||
|
||||
return next;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue