"use client"; import React from 'react'; import { X, Save } from '@mui/icons-material'; import { Dialog, DialogTitle, DialogContent, DialogActions, IconButton, Typography, Button, Box, Stack } from '@mui/material'; import { useForm, Controller } from 'react-hook-form'; import { QualityCheckModalProps, QualityCheckData, QualityCheckRecord, QualityCheckItem } from './types'; import { getStatusIcon, getStatusColor } from './utils/QualityCheckHelper'; import DefectsSection from './DefectsSection'; import OperatorScanner from './OperatorScanner'; const QualityCheckModal: React.FC = ({ isOpen, onClose, item = null }) => { const { control, handleSubmit, reset, watch, setValue, setError, clearErrors, formState: { errors, isValid } } = useForm({ defaultValues: { inspectors: [], checkDate: new Date().toISOString().split('T')[0], status: 'pending', notes: '', defects: [] }, mode: 'onChange' }); const watchedDefects = watch('defects'); const watchedInspectors = watch('inspectors'); const validateForm = (): boolean => { let isValid = true; // Clear previous errors clearErrors(); // Validate inspectors if (!watchedInspectors || watchedInspectors.length === 0) { setError('inspectors', { type: 'required', message: 'At least one inspector is required' }); isValid = false; } return isValid; }; const onSubmit = (data: QualityCheckData): void => { if (!validateForm()) { return; } console.log(data); const qualityRecord: QualityCheckRecord = { ...data, itemId: item?.id?.toString(), itemName: item?.name, timestamp: new Date().toISOString() }; // Save to localStorage or your preferred storage method // const existingRecords = JSON.parse(localStorage.getItem('qualityCheckRecords') || '[]'); // const updatedRecords = [...existingRecords, qualityRecord]; // localStorage.setItem('qualityCheckRecords', JSON.stringify(updatedRecords)); // Close modal and reset form handleClose(); }; const handleClose = (): void => { reset({ inspectors: [], checkDate: new Date().toISOString().split('T')[0], status: 'pending', notes: '', defects: [] }); onClose(); }; const statusOptions: Array<'pending' | 'passed' | 'failed'> = ['pending', 'passed', 'failed']; if (!isOpen) return null; return ( Quality Check {item && ( Item: {item.name} (ID: {item.id}) )} {/* Inspector and Date */} Inspector * { setValue('inspectors', operators); if (operators.length > 0) { clearErrors('inspectors'); } }} error={errors.inspectors?.message} /> Check Date * ( )} /> {errors.checkDate && ( {errors.checkDate.message} )} {/* Quality Status */} Quality Status * ( {statusOptions.map((statusOption) => { const IconComponent = getStatusIcon(statusOption); const isSelected = field.value === statusOption; return ( ); })} )} /> {errors.status && ( {errors.status.message} )} {/* Defects Section */} { setValue('defects', defects); clearErrors('defects'); }} error={errors.defects?.message} /> {/* Additional Notes */} ( Additional Notes