Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 2x 39x 12x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | /**
* Email Templates React Query Hooks (Story 10.2)
*
* Custom hooks for email template data fetching and mutations.
*/
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import {
emailTemplateService,
type CreateEmailTemplateRequest,
type EmailTemplateResponse,
type ListEmailTemplatesParams,
type UpdateEmailTemplateRequest,
} from '@/services/emailTemplateService';
const QUERY_KEY_BASE = 'emailTemplates' as const;
export function useEmailTemplates(params?: ListEmailTemplatesParams) {
return useQuery({
queryKey: [QUERY_KEY_BASE, params ?? {}],
queryFn: () => emailTemplateService.listTemplates(params),
});
}
export function useLayoutTemplates() {
return useEmailTemplates({ isLayout: true });
}
export function useCreateEmailTemplate() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (req: CreateEmailTemplateRequest) => emailTemplateService.createTemplate(req),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: [QUERY_KEY_BASE] });
},
});
}
export function useUpdateEmailTemplate() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({
templateKey,
locale,
req,
}: {
templateKey: string;
locale: string;
req: UpdateEmailTemplateRequest;
}) => emailTemplateService.updateTemplate(templateKey, locale, req),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: [QUERY_KEY_BASE] });
},
});
}
export function useDeleteEmailTemplate() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ templateKey, locale }: { templateKey: string; locale: string }) =>
emailTemplateService.deleteTemplate(templateKey, locale),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: [QUERY_KEY_BASE] });
},
});
}
export type { EmailTemplateResponse };
|