Some checks are pending
E2E / Playwright e2e (push) Waiting to run
- Added SessionGuard component to manage session expiration and online status. - Updated AuthProvider to streamline session fetching and handling. - Introduced IdentityProvidersSection for managing OAuth, SAML, and LDAP identity providers. - Implemented identity provider guides for easier configuration. - Enhanced mail settings with infinite scroll option for improved user experience. - Updated global styles and layout components for better consistency across the application.
65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
'use client'
|
|
|
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
|
|
import { apiClient } from '../client'
|
|
import { useAuthReady } from '../use-auth-ready'
|
|
import type { ApiMailSignature, CreateMailSignaturePayload } from '../types'
|
|
|
|
const SIGNATURES_KEY = ['mail-signatures'] as const
|
|
|
|
async function fetchSignatures(): Promise<ApiMailSignature[]> {
|
|
const res = await apiClient.get<ApiMailSignature[] | { signatures: ApiMailSignature[] }>(
|
|
'/mail/signatures'
|
|
)
|
|
return Array.isArray(res) ? res : (res.signatures ?? [])
|
|
}
|
|
|
|
export function useMailSignatures() {
|
|
const { ready, authenticated } = useAuthReady()
|
|
|
|
return useQuery({
|
|
queryKey: SIGNATURES_KEY,
|
|
queryFn: fetchSignatures,
|
|
staleTime: 5 * 60_000,
|
|
enabled: ready && authenticated,
|
|
})
|
|
}
|
|
|
|
export function useCreateMailSignature() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (payload: CreateMailSignaturePayload) =>
|
|
apiClient.post<{ id: string }>('/mail/signatures', payload),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: SIGNATURES_KEY })
|
|
},
|
|
})
|
|
}
|
|
|
|
export function useUpdateMailSignature() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: ({
|
|
signatureId,
|
|
...payload
|
|
}: CreateMailSignaturePayload & { signatureId: string }) =>
|
|
apiClient.put(`/mail/signatures/${signatureId}`, payload),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: SIGNATURES_KEY })
|
|
queryClient.invalidateQueries({ queryKey: ['identities'] })
|
|
},
|
|
})
|
|
}
|
|
|
|
export function useDeleteMailSignature() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (signatureId: string) =>
|
|
apiClient.delete(`/mail/signatures/${signatureId}`),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: SIGNATURES_KEY })
|
|
queryClient.invalidateQueries({ queryKey: ['identities'] })
|
|
},
|
|
})
|
|
}
|