useSubBalancerMutations.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { useMutation, useQueryClient } from '@tanstack/react-query';
  2. import { HttpUtil } from '@/utils';
  3. import { keys } from '@/api/queryKeys';
  4. import type { SubBalancerFormValues } from '@/schemas/subBalancer';
  5. // Deliberately urlencoded (no JSON headers): the Go side binds inboundIds from
  6. // repeated form keys, which is exactly how HttpUtil encodes arrays.
  7. export function useSubBalancerMutations() {
  8. const queryClient = useQueryClient();
  9. const invalidate = () => queryClient.invalidateQueries({ queryKey: keys.subBalancers.root() });
  10. const createMut = useMutation({
  11. mutationFn: (payload: SubBalancerFormValues) =>
  12. HttpUtil.post('/panel/api/sub-balancers', payload),
  13. onSuccess: (msg) => {
  14. if (msg?.success) invalidate();
  15. },
  16. });
  17. const updateMut = useMutation({
  18. mutationFn: ({ id, payload }: { id: number; payload: SubBalancerFormValues }) =>
  19. HttpUtil.post(`/panel/api/sub-balancers/${id}`, payload),
  20. onSuccess: (msg) => {
  21. if (msg?.success) invalidate();
  22. },
  23. });
  24. const removeMut = useMutation({
  25. mutationFn: (id: number) => HttpUtil.post(`/panel/api/sub-balancers/${id}/del`),
  26. onSuccess: (msg) => {
  27. if (msg?.success) invalidate();
  28. },
  29. });
  30. return {
  31. create: (payload: SubBalancerFormValues) => createMut.mutateAsync(payload),
  32. update: (id: number, payload: SubBalancerFormValues) => updateMut.mutateAsync({ id, payload }),
  33. remove: (id: number) => removeMut.mutateAsync(id),
  34. };
  35. }