141 lines
4.7 KiB
JavaScript
141 lines
4.7 KiB
JavaScript
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,
|
|
};
|
|
}; |