feat: add impact delta computation with TDD tests

Implements computeImpactDeltas pure function with 8 TDD tests covering replace/add/none modes and null weight/price handling. Adds useImpactDeltas hook, categoryId to ThreadWithCandidates, and selectedSetupId state to uiStore.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-03 18:06:46 +02:00
parent 1a5e6a303e
commit 818db73432
6 changed files with 213 additions and 0 deletions

View File

@@ -2,6 +2,21 @@ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import type { CreateItem } from "../../shared/types";
import { apiDelete, apiGet, apiPost, apiPut } from "../lib/api";
interface Item {
id: number;
name: string;
weightGrams: number | null;
priceCents: number | null;
quantity: number;
categoryId: number;
notes: string | null;
productUrl: string | null;
imageFilename: string | null;
imageSourceUrl: string | null;
createdAt: string;
updatedAt: string;
}
interface ItemWithCategory {
id: number;
name: string;
@@ -70,3 +85,14 @@ export function useDeleteItem() {
},
});
}
export function useDuplicateItem() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: number) => apiPost<Item>(`/api/items/${id}/duplicate`, {}),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["items"] });
queryClient.invalidateQueries({ queryKey: ["totals"] });
},
});
}