sunatest / frontend /src /hooks /react-query /pipedream /use-pipedream-profiles.ts
llama1's picture
Upload 781 files
5da4770 verified
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { pipedreamApi } from './utils';
import { pipedreamKeys } from './keys';
import type {
PipedreamProfile,
CreateProfileRequest,
UpdateProfileRequest,
} from '@/components/agents/pipedream/pipedream-types';
import { toast } from 'sonner';
export const usePipedreamProfiles = (params?: { app_slug?: string; is_active?: boolean }) => {
return useQuery({
queryKey: pipedreamKeys.profiles.list(params),
queryFn: () => pipedreamApi.getProfiles(params),
staleTime: 5 * 60 * 1000,
});
};
// Hook to get a single profile
export const usePipedreamProfile = (profileId: string, enabled = true) => {
return useQuery({
queryKey: pipedreamKeys.profiles.detail(profileId),
queryFn: () => pipedreamApi.getProfile(profileId),
enabled: enabled && !!profileId,
staleTime: 5 * 60 * 1000,
});
};
// Hook to get profile connections
export const usePipedreamProfileConnections = (profileId: string, enabled = true) => {
return useQuery({
queryKey: pipedreamKeys.profiles.connections(profileId),
queryFn: () => pipedreamApi.getProfileConnections(profileId),
enabled: enabled && !!profileId,
staleTime: 30 * 1000, // 30 seconds
});
};
// Hook to create a profile
export const useCreatePipedreamProfile = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (request: CreateProfileRequest) => pipedreamApi.createProfile(request),
onSuccess: (data) => {
queryClient.invalidateQueries({ queryKey: pipedreamKeys.profiles.all() });
toast.success(`Profile "${data.profile_name}" created successfully`);
},
onError: (error: Error) => {
toast.error(error.message || 'Failed to create profile');
},
});
};
// Hook to update a profile
export const useUpdatePipedreamProfile = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ profileId, request }: { profileId: string; request: UpdateProfileRequest }) =>
pipedreamApi.updateProfile(profileId, request),
onSuccess: (data) => {
queryClient.invalidateQueries({ queryKey: pipedreamKeys.profiles.all() });
queryClient.invalidateQueries({ queryKey: pipedreamKeys.profiles.detail(data.profile_id) });
toast.success('Profile updated successfully');
},
onError: (error: Error) => {
toast.error(error.message || 'Failed to update profile');
},
});
};
export const useDeletePipedreamProfile = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (profileId: string) => pipedreamApi.deleteProfile(profileId),
onSuccess: (_, profileId) => {
queryClient.invalidateQueries({ queryKey: pipedreamKeys.profiles.all() });
queryClient.removeQueries({ queryKey: pipedreamKeys.profiles.detail(profileId) });
toast.success('Profile deleted successfully');
},
onError: (error: Error) => {
toast.error(error.message || 'Failed to delete profile');
},
});
};
export const useConnectPipedreamProfile = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ profileId, app }: { profileId: string; app?: string }) =>
pipedreamApi.connectProfile(profileId, app),
onSuccess: (data) => {
queryClient.invalidateQueries({ queryKey: pipedreamKeys.profiles.all() });
queryClient.invalidateQueries({ queryKey: pipedreamKeys.profiles.detail(data.profile_id) });
queryClient.invalidateQueries({ queryKey: pipedreamKeys.profiles.connections(data.profile_id) });
if (data.link) {
const connectWindow = window.open(data.link, '_blank', 'width=600,height=700');
if (connectWindow) {
const checkClosed = setInterval(() => {
if (connectWindow.closed) {
clearInterval(checkClosed);
queryClient.invalidateQueries({ queryKey: pipedreamKeys.profiles.all() });
queryClient.invalidateQueries({ queryKey: pipedreamKeys.profiles.detail(data.profile_id) });
queryClient.invalidateQueries({ queryKey: pipedreamKeys.profiles.connections(data.profile_id) });
toast.success('Connection process completed');
}
}, 1000);
setTimeout(() => {
clearInterval(checkClosed);
}, 5 * 60 * 1000);
} else {
toast.error('Failed to open connection window. Please check your popup blocker.');
}
}
},
onError: (error: Error) => {
toast.error(error.message || 'Failed to connect profile');
},
});
};