Files
medreport_mrb2b/packages/features/accounts/src/hooks/use-personal-account-data.ts
2025-07-09 13:31:37 +03:00

65 lines
1.4 KiB
TypeScript

import { useCallback } from 'react';
import { useQuery, useQueryClient } from '@tanstack/react-query';
import { useSupabase } from '@kit/supabase/hooks/use-supabase';
export function usePersonalAccountData(
userId: string,
partialAccount?: {
id: string | null;
name: string | null;
picture_url: string | null;
},
) {
const client = useSupabase();
const queryKey = ['account:data', userId];
const queryFn = async () => {
if (!userId) {
return null;
}
const response = await client
.schema('medreport')
.from('accounts')
.select()
.eq('primary_owner_user_id', userId)
.eq('is_personal_account', true)
.single();
if (response.error) {
throw response.error;
}
return response.data;
};
return useQuery({
queryKey,
queryFn,
enabled: !!userId,
refetchOnWindowFocus: false,
refetchOnMount: false,
initialData: partialAccount?.id
? {
id: partialAccount.id,
name: partialAccount.name,
picture_url: partialAccount.picture_url,
}
: undefined,
});
}
export function useRevalidatePersonalAccountDataQuery() {
const queryClient = useQueryClient();
return useCallback(
(userId: string) =>
queryClient.invalidateQueries({
queryKey: ['account:data', userId],
}),
[queryClient],
);
}