UNPKG

ruch

Version:

Revolutionary React TypeScript CLI with hexagonal architecture & AI-powered development assistance. Create maintainable, scalable applications with domain-driven design and integrated AI tooling.

69 lines (62 loc) 2.25 kB
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import type { OrderCreationData, OrderUpdateData } from '../entities/Order'; import { OrderService } from '../services/OrderService'; import type { OrderPort } from '../ports/OrderPort'; const QUERY_KEYS = { all: ['order'] as const, lists: () => [...QUERY_KEYS.all, 'list'] as const, list: (filters: string) => [...QUERY_KEYS.lists(), { filters }] as const, details: () => [...QUERY_KEYS.all, 'detail'] as const, detail: (id: string) => [...QUERY_KEYS.details(), id] as const, }; export function useOrderService(port: OrderPort) { return new OrderService(port); } export function useOrderList(port: OrderPort) { const service = useOrderService(port); return useQuery({ queryKey: QUERY_KEYS.lists(), queryFn: () => service.getAll(), }); } export function useOrderDetail(port: OrderPort, id: string) { const service = useOrderService(port); return useQuery({ queryKey: QUERY_KEYS.detail(id), queryFn: () => service.getById(id), enabled: !!id, }); } export function useOrderCreate(port: OrderPort) { const queryClient = useQueryClient(); const service = useOrderService(port); return useMutation({ mutationFn: (data: OrderCreationData) => service.create(data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.lists() }); }, }); } export function useOrderUpdate(port: OrderPort) { const queryClient = useQueryClient(); const service = useOrderService(port); return useMutation({ mutationFn: ({ id, data }: { id: string; data: OrderUpdateData }) => service.update(id, data), onSuccess: (_, { id }) => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.lists() }); queryClient.invalidateQueries({ queryKey: QUERY_KEYS.detail(id) }); }, }); } export function useOrderDelete(port: OrderPort) { const queryClient = useQueryClient(); const service = useOrderService(port); return useMutation({ mutationFn: (id: string) => service.delete(id), onSuccess: (_, id) => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.lists() }); queryClient.invalidateQueries({ queryKey: QUERY_KEYS.detail(id) }); }, }); }