Files
encoach_frontend_new_v3/frontend/src/hooks/queries/useFaq.ts
Yamen Ahmad f1c4953a63 feat(v3): restructure project + add complete frontend
- Restructure: move backend from new_project/ to backend/
- Add full React/TypeScript frontend (37 pages, 17 services, 16 type defs, 11 query hooks)
- Add docs/ with SRS specs, user stories, and workflow documentation
- Update .gitignore for new directory layout

Workflows implemented:
  WF1 User Signup, WF2 Placement Test, WF3 Exam Configuration,
  WF4 General English Exam, WF5 Course Generation,
  WF6 Entity Student Onboarding, AI Course Generation,
  Adaptive Learning Engine UI, White-Label Branding, Score Release

Made-with: Cursor
2026-04-10 17:26:42 +04:00

86 lines
2.6 KiB
TypeScript

import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import { queryKeys } from "./keys";
import { faqService } from "@/services/faq.service";
import type { FaqCategoryCreateRequest, FaqItemCreateRequest } from "@/types/faq";
export function useFaqCategories(audience?: string) {
return useQuery({
queryKey: queryKeys.faqCategories(audience),
queryFn: () => faqService.listCategories(audience ? { audience } : undefined),
});
}
export function useFaqItems(params?: { category_id?: number; audience?: string; search?: string }) {
return useQuery({
queryKey: queryKeys.faqItems(params),
queryFn: () => faqService.listItems(params),
});
}
export function useCreateFaqCategory() {
const qc = useQueryClient();
return useMutation({
mutationFn: (data: FaqCategoryCreateRequest) => faqService.createCategory(data),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
},
});
}
export function useUpdateFaqCategory() {
const qc = useQueryClient();
return useMutation({
mutationFn: ({ id, data }: { id: number; data: Partial<FaqCategoryCreateRequest> }) =>
faqService.updateCategory(id, data),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
qc.invalidateQueries({ queryKey: ["faq", "items"] });
},
});
}
export function useDeleteFaqCategory() {
const qc = useQueryClient();
return useMutation({
mutationFn: (id: number) => faqService.deleteCategory(id),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
qc.invalidateQueries({ queryKey: ["faq", "items"] });
},
});
}
export function useCreateFaqItem() {
const qc = useQueryClient();
return useMutation({
mutationFn: (data: FaqItemCreateRequest) => faqService.createItem(data),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ["faq", "items"] });
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
},
});
}
export function useUpdateFaqItem() {
const qc = useQueryClient();
return useMutation({
mutationFn: ({ id, data }: { id: number; data: Partial<FaqItemCreateRequest> }) =>
faqService.updateItem(id, data),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ["faq", "items"] });
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
},
});
}
export function useDeleteFaqItem() {
const qc = useQueryClient();
return useMutation({
mutationFn: (id: number) => faqService.deleteItem(id),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ["faq", "items"] });
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
},
});
}