diff --git a/ui/src/api/email-connector-hooks.ts b/ui/src/api/email-connector-hooks.ts new file mode 100644 index 0000000..0610a3f --- /dev/null +++ b/ui/src/api/email-connector-hooks.ts @@ -0,0 +1,70 @@ +import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; +import { api } from './client'; + +export interface EmailConnectorResponse { + connectorId: string; + factoryId: string; + host: string; + port: number; + username: string; + fromEmail: string; + registrationEnabled: boolean; +} + +export interface SmtpConfigRequest { + host: string; + port: number; + username: string; + password: string; + fromEmail: string; + registrationEnabled?: boolean; +} + +export interface TestEmailResult { + status: string; + message: string; +} + +export function useEmailConnector() { + return useQuery({ + queryKey: ['vendor', 'email-connector'], + queryFn: async () => { + try { + return await api.get('/vendor/email-connector'); + } catch (e) { + if (e instanceof Error && e.message.includes('404')) return null; + throw e; + } + }, + }); +} + +export function useSaveEmailConnector() { + const qc = useQueryClient(); + return useMutation({ + mutationFn: (config) => api.post('/vendor/email-connector', config), + onSuccess: () => qc.invalidateQueries({ queryKey: ['vendor', 'email-connector'] }), + }); +} + +export function useDeleteEmailConnector() { + const qc = useQueryClient(); + return useMutation({ + mutationFn: () => api.delete('/vendor/email-connector'), + onSuccess: () => qc.invalidateQueries({ queryKey: ['vendor', 'email-connector'] }), + }); +} + +export function useTestEmailConnector() { + return useMutation({ + mutationFn: (to) => api.post('/vendor/email-connector/test', { to }), + }); +} + +export function useToggleRegistration() { + const qc = useQueryClient(); + return useMutation({ + mutationFn: (enabled) => api.post('/vendor/email-connector/registration', { enabled }), + onSuccess: () => qc.invalidateQueries({ queryKey: ['vendor', 'email-connector'] }), + }); +}