Release 3X-UI for Docker / build (push) Canceled after 0s
Release 3X-UI / build (386) (push) Canceled after 0s
Release 3X-UI / build (amd64) (push) Canceled after 0s
Release 3X-UI / build (arm64) (push) Canceled after 0s
Release 3X-UI / build (armv5) (push) Canceled after 0s
Release 3X-UI / build (armv6) (push) Canceled after 0s
Release 3X-UI / build (armv7) (push) Canceled after 0s
Release 3X-UI / build (s390x) (push) Canceled after 0s
Release 3X-UI / Build for Windows (amd64) (push) Canceled after 0s
Release 3X-UI / Publish rolling dev release (push) Canceled after 0s
42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
|
|
import { HttpUtil } from '@/utils';
|
|
import { keys } from '@/api/queryKeys';
|
|
import type { SubBalancerFormValues } from '@/schemas/subBalancer';
|
|
|
|
// Deliberately urlencoded (no JSON headers): the Go side binds inboundIds from
|
|
// repeated form keys, which is exactly how HttpUtil encodes arrays.
|
|
export function useSubBalancerMutations() {
|
|
const queryClient = useQueryClient();
|
|
const invalidate = () => queryClient.invalidateQueries({ queryKey: keys.subBalancers.root() });
|
|
|
|
const createMut = useMutation({
|
|
mutationFn: (payload: SubBalancerFormValues) =>
|
|
HttpUtil.post('/panel/api/sub-balancers', payload),
|
|
onSuccess: (msg) => {
|
|
if (msg?.success) invalidate();
|
|
},
|
|
});
|
|
|
|
const updateMut = useMutation({
|
|
mutationFn: ({ id, payload }: { id: number; payload: SubBalancerFormValues }) =>
|
|
HttpUtil.post(`/panel/api/sub-balancers/${id}`, payload),
|
|
onSuccess: (msg) => {
|
|
if (msg?.success) invalidate();
|
|
},
|
|
});
|
|
|
|
const removeMut = useMutation({
|
|
mutationFn: (id: number) => HttpUtil.post(`/panel/api/sub-balancers/${id}/del`),
|
|
onSuccess: (msg) => {
|
|
if (msg?.success) invalidate();
|
|
},
|
|
});
|
|
|
|
return {
|
|
create: (payload: SubBalancerFormValues) => createMut.mutateAsync(payload),
|
|
update: (id: number, payload: SubBalancerFormValues) => updateMut.mutateAsync({ id, payload }),
|
|
remove: (id: number) => removeMut.mutateAsync(id),
|
|
};
|
|
}
|