feat: create network, and manage members, invitations (#74)

This commit was merged in pull request #74.
This commit is contained in:
Arjun Patel
2026-03-24 19:50:06 -07:00
committed by GitHub
parent bf0147d542
commit 3d52fa6ccc
14 changed files with 655 additions and 39 deletions
+52
View File
@@ -0,0 +1,52 @@
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import { apiClient } from "@/api/client";
export function useMyInvitations() {
return useQuery({
queryKey: ["my-invitations"],
queryFn: () => apiClient.listMyInvitations(),
refetchInterval: 10_000,
});
}
export function useNetworkInvitations(networkId: string) {
return useQuery({
queryKey: ["network-invitations", networkId],
queryFn: () => apiClient.listNetworkInvitations(networkId),
});
}
export function useInviteMembers(networkId: string) {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (emailAddresses: string[]) =>
apiClient.addMembers(networkId, { email_addresses: emailAddresses }),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["network-invitations", networkId] });
queryClient.invalidateQueries({ queryKey: ["networks"] });
},
});
}
export function useAcceptInvitation() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (networkId: string) =>
apiClient.acceptInvitation({ network_id: networkId }),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["my-invitations"] });
queryClient.invalidateQueries({ queryKey: ["networks"] });
},
});
}
export function useRevokeInvitation(networkId: string) {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (email: string) =>
apiClient.revokeInvitation(networkId, { email }),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["network-invitations", networkId] });
},
});
}