All files / src/hooks useEmailTemplates.ts

100% Statements 16/16
100% Branches 2/2
100% Functions 12/12
100% Lines 16/16

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 };