fix: useOrders unmount guard, log event errors, complete status coverage in tests

This commit is contained in:
2026-05-07 20:19:45 +03:00
parent 72407fa9b8
commit 34a2f10b67
2 changed files with 29 additions and 5 deletions
@@ -69,6 +69,7 @@ describe('useOrders', () => {
await act(async () => {});
expect(result.current.ordersByStatus['новая']).toHaveLength(2);
expect(result.current.ordersByStatus['замер']).toHaveLength(1);
expect(result.current.ordersByStatus['согласование']).toHaveLength(0);
expect(result.current.ordersByStatus['монтаж']).toHaveLength(0);
expect(result.current.ordersByStatus['закрыт']).toHaveLength(0);
});
+28 -5
View File
@@ -23,14 +23,34 @@ export function useOrders() {
}, []);
useEffect(() => {
fetchOrders();
let active = true;
const fetchOnMount = async () => {
const { data, error } = await supabase
.from('orders')
.select('*')
.order('created_at', { ascending: false });
if (!active) return;
if (error) {
setError(error.message);
} else {
setOrders(data || []);
}
setLoading(false);
};
fetchOnMount();
const channel = supabase
.channel('orders-realtime')
.on('postgres_changes', { event: '*', schema: 'public', table: 'orders' }, fetchOrders)
.subscribe();
return () => supabase.removeChannel(channel);
return () => {
active = false;
supabase.removeChannel(channel);
};
}, [fetchOrders]);
const ordersByStatus = STATUSES.reduce((acc, status) => {
@@ -46,12 +66,13 @@ export function useOrders() {
const { error } = await supabase.from('orders').update(updates).eq('id', orderId);
if (!error) {
await supabase.from('order_events').insert({
const { error: evtErr } = await supabase.from('order_events').insert({
order_id: orderId,
created_by: userEmail,
event_type: 'status_change',
description: `Статус изменён: ${order?.status}${newStatus}`,
});
if (evtErr) console.error('Failed to log order event:', evtErr);
}
return { error };
};
@@ -64,12 +85,13 @@ export function useOrders() {
.single();
if (!error && data) {
await supabase.from('order_events').insert({
const { error: evtErr } = await supabase.from('order_events').insert({
order_id: data.id,
created_by: userEmail,
event_type: 'status_change',
description: 'Заявка создана вручную',
});
if (evtErr) console.error('Failed to log order event:', evtErr);
}
return { data, error };
};
@@ -77,12 +99,13 @@ export function useOrders() {
const updateOrder = async (orderId, updates, userEmail) => {
const { error } = await supabase.from('orders').update(updates).eq('id', orderId);
if (!error) {
await supabase.from('order_events').insert({
const { error: evtErr } = await supabase.from('order_events').insert({
order_id: orderId,
created_by: userEmail,
event_type: 'edit',
description: 'Данные заказа обновлены',
});
if (evtErr) console.error('Failed to log order event:', evtErr);
}
return { error };
};