remove intermediate grocery table and add related_products feature
This commit is contained in:
@@ -101,6 +101,38 @@ const AddShoppingEventModal: React.FC<AddShoppingEventModalProps> = ({
|
||||
}
|
||||
}, [isOpen, loadEventData]);
|
||||
|
||||
const handleSubmit = useCallback(async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
setLoading(true);
|
||||
setMessage('');
|
||||
|
||||
try {
|
||||
const eventData = {
|
||||
...formData,
|
||||
products: selectedProducts
|
||||
};
|
||||
|
||||
if (isEditMode && editEvent) {
|
||||
await shoppingEventApi.update(editEvent.id, eventData);
|
||||
setMessage('Shopping event updated successfully!');
|
||||
} else {
|
||||
await shoppingEventApi.create(eventData);
|
||||
setMessage('Shopping event created successfully!');
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
onEventAdded();
|
||||
onClose();
|
||||
}, 1500);
|
||||
} catch (error) {
|
||||
console.error('Error saving shopping event:', error);
|
||||
setMessage(`Error ${isEditMode ? 'updating' : 'creating'} shopping event. Please try again.`);
|
||||
setTimeout(() => setMessage(''), 3000);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}, [formData, selectedProducts, isEditMode, editEvent, onEventAdded, onClose]);
|
||||
|
||||
useEffect(() => {
|
||||
const handleKeyDown = (event: KeyboardEvent) => {
|
||||
if (!isOpen) return;
|
||||
@@ -126,7 +158,7 @@ const AddShoppingEventModal: React.FC<AddShoppingEventModalProps> = ({
|
||||
return () => {
|
||||
document.removeEventListener('keydown', handleKeyDown);
|
||||
};
|
||||
}, [isOpen, formData, selectedProducts, loading, onClose]);
|
||||
}, [isOpen, formData, selectedProducts, loading, onClose, handleSubmit]);
|
||||
|
||||
// Update total amount whenever selectedProducts changes
|
||||
useEffect(() => {
|
||||
@@ -208,38 +240,6 @@ const AddShoppingEventModal: React.FC<AddShoppingEventModalProps> = ({
|
||||
setSelectedProducts(selectedProducts.filter((_, i) => i !== index));
|
||||
};
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
setLoading(true);
|
||||
setMessage('');
|
||||
|
||||
try {
|
||||
const eventData = {
|
||||
...formData,
|
||||
products: selectedProducts
|
||||
};
|
||||
|
||||
if (isEditMode && editEvent) {
|
||||
await shoppingEventApi.update(editEvent.id, eventData);
|
||||
setMessage('Shopping event updated successfully!');
|
||||
} else {
|
||||
await shoppingEventApi.create(eventData);
|
||||
setMessage('Shopping event created successfully!');
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
onEventAdded();
|
||||
onClose();
|
||||
}, 1500);
|
||||
} catch (error) {
|
||||
console.error('Error saving shopping event:', error);
|
||||
setMessage(`Error ${isEditMode ? 'updating' : 'creating'} shopping event. Please try again.`);
|
||||
setTimeout(() => setMessage(''), 3000);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
const getProductName = (id: number) => {
|
||||
const product = products.find(p => p.id === id);
|
||||
if (!product) return 'Unknown';
|
||||
@@ -349,7 +349,7 @@ const AddShoppingEventModal: React.FC<AddShoppingEventModalProps> = ({
|
||||
<option value={0}>Select a product</option>
|
||||
{Object.entries(
|
||||
getFilteredProducts().reduce((groups, product) => {
|
||||
const category = product.grocery.category.name;
|
||||
const category = product.category.name;
|
||||
if (!groups[category]) {
|
||||
groups[category] = [];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user