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.45 kB
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import type { NotificationCreationData, NotificationUpdateData } from '../entities/Notification'; import { NotificationService } from '../services/NotificationService'; import type { NotificationPort } from '../ports/NotificationPort'; const QUERY_KEYS = { all: ['notification'] 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 useNotificationService(port: NotificationPort) { return new NotificationService(port); } export function useNotificationList(port: NotificationPort) { const service = useNotificationService(port); return useQuery({ queryKey: QUERY_KEYS.lists(), queryFn: () => service.getAll(), }); } export function useNotificationDetail(port: NotificationPort, id: string) { const service = useNotificationService(port); return useQuery({ queryKey: QUERY_KEYS.detail(id), queryFn: () => service.getById(id), enabled: !!id, }); } export function useNotificationCreate(port: NotificationPort) { const queryClient = useQueryClient(); const service = useNotificationService(port); return useMutation({ mutationFn: (data: NotificationCreationData) => service.create(data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.lists() }); }, }); } export function useNotificationUpdate(port: NotificationPort) { const queryClient = useQueryClient(); const service = useNotificationService(port); return useMutation({ mutationFn: ({ id, data }: { id: string; data: NotificationUpdateData }) => service.update(id, data), onSuccess: (_, { id }) => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.lists() }); queryClient.invalidateQueries({ queryKey: QUERY_KEYS.detail(id) }); }, }); } export function useNotificationDelete(port: NotificationPort) { const queryClient = useQueryClient(); const service = useNotificationService(port); return useMutation({ mutationFn: (id: string) => service.delete(id), onSuccess: (_, id) => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.lists() }); queryClient.invalidateQueries({ queryKey: QUERY_KEYS.detail(id) }); }, }); }