ultisuite-client/lib/api/hooks/use-mail-account-mutations.ts
R3D347HR4Y 8a02c10ba3 Add environment configuration and update email view components
- Created a .cursorignore file to manage local environment files.
- Updated .env.example to reflect changes in the public app URL.
- Modified the gmail workspace configuration to include the drive-suite path.
- Enhanced email view components to support attachment handling and fallback for plain text bodies.
- Improved user experience by updating attachment display logic and integrating inline attachment support.
2026-06-04 00:12:43 +02:00

84 lines
2.6 KiB
TypeScript

'use client'
import { useMutation, useQueryClient } from '@tanstack/react-query'
import { apiClient } from '../client'
import type { CreateMailAccountPayload, UpdateMailAccountPayload } from '../types'
export function useCreateMailAccount() {
const queryClient = useQueryClient()
return useMutation({
mutationFn: (payload: CreateMailAccountPayload) =>
apiClient.post<{ id: string }>('/mail/accounts', payload),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['accounts'] })
queryClient.invalidateQueries({ queryKey: ['identities'] })
queryClient.invalidateQueries({ queryKey: ['mail-signatures'] })
},
})
}
export function useUpdateMailAccount(accountId: string) {
const queryClient = useQueryClient()
return useMutation({
mutationFn: (payload: UpdateMailAccountPayload) =>
apiClient.put<void>(`/mail/accounts/${accountId}`, payload),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['accounts'] })
queryClient.invalidateQueries({ queryKey: ['mail-account', accountId] })
queryClient.invalidateQueries({ queryKey: ['identities'] })
},
})
}
export function useDeleteMailAccount() {
const queryClient = useQueryClient()
return useMutation({
mutationFn: (accountId: string) =>
apiClient.delete(`/mail/accounts/${accountId}`),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['accounts'] })
queryClient.invalidateQueries({ queryKey: ['identities'] })
queryClient.invalidateQueries({ queryKey: ['mail-signatures'] })
},
})
}
export interface ResanitizeBodiesResult {
scanned: number
updated: number
}
export function useResanitizeBodies(accountId: string) {
const queryClient = useQueryClient()
return useMutation({
mutationFn: () =>
apiClient.post<ResanitizeBodiesResult>(
`/mail/accounts/${accountId}/resanitize-bodies`
),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['messages'] })
queryClient.invalidateQueries({ queryKey: ['thread'] })
},
})
}
export function useSyncMailAccount(accountId: string) {
const queryClient = useQueryClient()
return useMutation({
mutationFn: (opts?: { force?: boolean }) =>
apiClient.post<{ status: string }>(
`/mail/accounts/${accountId}/sync${opts?.force ? "?force=true" : ""}`
),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['accounts'] })
queryClient.invalidateQueries({ queryKey: ['messages'] })
queryClient.invalidateQueries({ queryKey: ['thread'] })
},
})
}