feat: user export service. bug and UX fixes. Complete minus outstanding email template fixes.
This commit is contained in:
38
frontend/src/features/settings/hooks/useExportUserData.ts
Normal file
38
frontend/src/features/settings/hooks/useExportUserData.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* @ai-summary React Query hook for user data export
|
||||
* @ai-context Downloads tar.gz archive with all user data
|
||||
*/
|
||||
|
||||
import { useMutation } from '@tanstack/react-query';
|
||||
import toast from 'react-hot-toast';
|
||||
import { exportApi } from '../api/export.api';
|
||||
|
||||
interface ApiError {
|
||||
response?: {
|
||||
data?: {
|
||||
error?: string;
|
||||
};
|
||||
};
|
||||
message?: string;
|
||||
}
|
||||
|
||||
export const useExportUserData = () => {
|
||||
return useMutation({
|
||||
mutationFn: () => exportApi.downloadUserExport(),
|
||||
onSuccess: (blob) => {
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
const link = document.createElement('a');
|
||||
link.href = url;
|
||||
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
||||
link.download = `motovaultpro_export_${timestamp}.tar.gz`;
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
window.URL.revokeObjectURL(url);
|
||||
toast.success('Data exported successfully');
|
||||
},
|
||||
onError: (error: ApiError) => {
|
||||
toast.error(error.response?.data?.error || 'Failed to export data');
|
||||
},
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user