dstpabuaran.com/resources/js/lib/raw-material-draft.ts
Yoga Pangestu 384460686e feat: implement raw material management features including CRUD operations and draft handling
- 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.
2026-08-02 00:54:05 +07:00

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
}
}