import { useState, useCallback } from 'react'; export const useSparepartLogic = (sparepartForm) => { const [sparepartFields, setSparepartFields] = useState([]); const [sparepartTypes, setSparepartTypes] = useState({}); const [sparepartStatuses, setSparepartStatuses] = useState({}); const [sparepartsToDelete, setSparepartsToDelete] = useState(new Set()); const handleAddSparepartField = useCallback(() => { const newKey = Date.now(); const newField = { key: newKey, name: sparepartFields.length, isCreated: true, }; setSparepartFields(prev => [...prev, newField]); setSparepartTypes(prev => ({ ...prev, [newKey]: 'required' })); setSparepartStatuses(prev => ({ ...prev, [newKey]: true })); }, [sparepartFields.length]); const handleRemoveSparepartField = useCallback((key) => { setSparepartFields(prev => prev.filter(field => field.key !== key)); setSparepartTypes(prev => { const newTypes = { ...prev }; delete newTypes[key]; return newTypes; }); setSparepartStatuses(prev => { const newStatuses = { ...prev }; delete newStatuses[key]; return newStatuses; }); // Add to delete list if it's not a new field setSparepartsToDelete(prev => new Set([...prev, key])); }, []); const handleSparepartTypeChange = useCallback((key, type) => { setSparepartTypes(prev => ({ ...prev, [key]: type })); }, []); const handleSparepartStatusChange = useCallback((key, status) => { setSparepartStatuses(prev => ({ ...prev, [key]: status })); }, []); const resetSparepartFields = useCallback(() => { setSparepartFields([]); setSparepartTypes({}); setSparepartStatuses({}); setSparepartsToDelete(new Set()); }, []); const getSparepartData = useCallback(() => { if (!sparepartForm) return []; const values = sparepartForm.getFieldsValue(); const data = []; sparepartFields.forEach((field, index) => { const fieldData = { sparepart_id: values[`sparepart_id_${field.name}`], sparepart_name: values[`sparepart_name_${field.name}`], sparepart_description: values[`sparepart_description_${field.name}`], status: values[`sparepart_status_${field.name}`], type: sparepartTypes[field.key] || 'required', }; // Only add if required fields are filled if (fieldData.sparepart_id) { data.push(fieldData); } }); return data; }, [sparepartForm, sparepartFields, sparepartTypes]); const setSparepartsForExistingRecord = useCallback((sparepartData, form) => { resetSparepartFields(); if (!sparepartData || !Array.isArray(sparepartData)) { return; } const newFields = sparepartData.map((sp, index) => ({ key: sp.brand_sparepart_id || sp.sparepart_id || `existing-${index}`, name: index, isCreated: false, })); setSparepartFields(newFields); // Set form values for existing spareparts setTimeout(() => { const formValues = {}; sparepartData.forEach((sp, index) => { const sparepartId = sp.brand_sparepart_id || sp.sparepart_id || sp.sparepart_name; formValues[`sparepart_id_${index}`] = sparepartId; formValues[`sparepart_status_${index}`] = sp.is_active ?? sp.status ?? true; formValues[`sparepart_description_${index}`] = sp.brand_sparepart_description || sp.description || sp.sparepart_name; setSparepartTypes(prev => ({ ...prev, [sp.brand_sparepart_id || sp.sparepart_id || `existing-${index}`]: sp.type || sp.sparepart_type || 'required' })); setSparepartStatuses(prev => ({ ...prev, [sp.brand_sparepart_id || sp.sparepart_id || `existing-${index}`]: sp.is_active ?? sp.status ?? true })); }); form.setFieldsValue(formValues); }, 0); }, [resetSparepartFields]); return { sparepartFields, sparepartTypes, sparepartStatuses, sparepartsToDelete, handleAddSparepartField, handleRemoveSparepartField, handleSparepartTypeChange, handleSparepartStatusChange, resetSparepartFields, getSparepartData, setSparepartsForExistingRecord, }; };