Path: blob/main/components/dashboard/src/data/organizations/invite-query.ts
2501 views
/**1* Copyright (c) 2023 Gitpod GmbH. All rights reserved.2* Licensed under the GNU Affero General Public License (AGPL).3* See License.AGPL.txt in the project root for license information.4*/56import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";7import { useCallback } from "react";8import { organizationClient } from "../../service/public-api";9import { useCurrentOrg } from "./orgs-query";1011export function useInviteInvalidator() {12const organizationId = useCurrentOrg().data?.id;13const queryClient = useQueryClient();14return useCallback(() => {15queryClient.invalidateQueries(getQueryKey(organizationId));16}, [organizationId, queryClient]);17}1819export function useInvitationId() {20const organizationId = useCurrentOrg().data?.id;21const query = useQuery<string, Error>(22getQueryKey(organizationId),23async () => {24const response = await organizationClient.getOrganizationInvitation({25organizationId,26});27return response.invitationId;28},29{30enabled: !!organizationId,31},32);33return query;34}3536export function useResetInvitationId() {37const invalidate = useInviteInvalidator();38return useMutation<void, Error, string>({39mutationFn: async (orgId) => {40if (!orgId) {41throw new Error("No current organization selected");42}4344await organizationClient.resetOrganizationInvitation({45organizationId: orgId,46});47//TODO update useInvitation Query48},49onSuccess(updatedOrg) {50invalidate();51},52});53}5455function getQueryKey(organizationId: string | undefined) {56return ["invitationId", organizationId || "undefined"];57}585960