- Added RawMaterialController and RawMaterialVariantController for managing raw materials and their variants. - Introduced RawMaterialRequest and RawMaterialVariantRequest for validation. - Implemented RawMaterialService and RawMaterialVariantService for business logic. - Created hooks for saving drafts of raw materials. - Developed UI components for creating, editing, and listing raw materials and variants.
79 lines
1.7 KiB
TypeScript
79 lines
1.7 KiB
TypeScript
const DRAFT_PREFIX = 'raw-material-draft';
|
|
|
|
export type RawMaterialDraftData = {
|
|
name: string;
|
|
unit: string;
|
|
isActive: boolean;
|
|
variants: Array<{
|
|
id?: number | null;
|
|
variant: string;
|
|
price: number;
|
|
stock: number;
|
|
photo?: string;
|
|
}>;
|
|
};
|
|
|
|
function getKey(
|
|
type: 'create' | 'edit',
|
|
userId?: number,
|
|
rawMaterialId?: number,
|
|
): string {
|
|
if (type === 'edit' && rawMaterialId) {
|
|
return `${DRAFT_PREFIX}-edit-${userId ?? 'anon'}-${rawMaterialId}`;
|
|
}
|
|
|
|
return `${DRAFT_PREFIX}-create-${userId ?? 'anon'}`;
|
|
}
|
|
|
|
export function saveRawMaterialDraft(
|
|
type: 'create' | 'edit',
|
|
data: RawMaterialDraftData,
|
|
userId?: number,
|
|
rawMaterialId?: number,
|
|
): boolean {
|
|
if (type !== 'create') {
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
const key = getKey(type, userId, rawMaterialId);
|
|
localStorage.setItem(key, JSON.stringify(data));
|
|
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export function loadRawMaterialDraft(
|
|
type: 'create' | 'edit',
|
|
userId?: number,
|
|
rawMaterialId?: number,
|
|
): RawMaterialDraftData | null {
|
|
try {
|
|
const key = getKey(type, userId, rawMaterialId);
|
|
const raw = localStorage.getItem(key);
|
|
|
|
if (!raw) {
|
|
return null;
|
|
}
|
|
|
|
return JSON.parse(raw) as RawMaterialDraftData;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export function clearRawMaterialDraft(
|
|
type: 'create' | 'edit',
|
|
userId?: number,
|
|
rawMaterialId?: number,
|
|
): void {
|
|
try {
|
|
const key = getKey(type, userId, rawMaterialId);
|
|
localStorage.removeItem(key);
|
|
} catch {
|
|
// ignore
|
|
}
|
|
}
|