import { useState, useEffect } from 'react'; import { getTicketCategories, getTicketStatuses, getTicketPriorities, getKnowledgeBaseCategories, getKnowledgeBaseArticles, getFeaturedArticles, getKnowledgeBaseArticle, getArticlesByCategory, TicketCategory, TicketStatus, TicketPriority, KnowledgeBaseCategory, KnowledgeBaseArticle } from '../api/supportService'; /** * Hook to fetch ticket categories */ export const useTicketCategories = () => { const [categories, setCategories] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchCategories = async () => { try { setLoading(true); const data = await getTicketCategories(); setCategories(data); setError(null); } catch (err: any) { setError(err.message || 'Failed to fetch ticket categories'); } finally { setLoading(false); } }; fetchCategories(); }, []); return { categories, loading, error }; }; /** * Hook to fetch ticket statuses */ export const useTicketStatuses = () => { const [statuses, setStatuses] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchStatuses = async () => { try { setLoading(true); const data = await getTicketStatuses(); setStatuses(data); setError(null); } catch (err: any) { setError(err.message || 'Failed to fetch ticket statuses'); } finally { setLoading(false); } }; fetchStatuses(); }, []); return { statuses, loading, error }; }; /** * Hook to fetch ticket priorities */ export const useTicketPriorities = () => { const [priorities, setPriorities] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchPriorities = async () => { try { setLoading(true); const data = await getTicketPriorities(); setPriorities(data); setError(null); } catch (err: any) { setError(err.message || 'Failed to fetch ticket priorities'); } finally { setLoading(false); } }; fetchPriorities(); }, []); return { priorities, loading, error }; }; /** * Hook to fetch knowledge base categories */ export const useKnowledgeBaseCategories = () => { const [categories, setCategories] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchCategories = async () => { try { setLoading(true); const data = await getKnowledgeBaseCategories(); setCategories(data); setError(null); } catch (err: any) { setError(err.message || 'Failed to fetch knowledge base categories'); } finally { setLoading(false); } }; fetchCategories(); }, []); return { categories, loading, error }; }; /** * Hook to fetch knowledge base articles with optional search */ export const useKnowledgeBaseArticles = (search?: string) => { const [articles, setArticles] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchArticles = async () => { try { setLoading(true); const data = await getKnowledgeBaseArticles(search); setArticles(data); setError(null); } catch (err: any) { setError(err.message || 'Failed to fetch knowledge base articles'); } finally { setLoading(false); } }; fetchArticles(); }, [search]); return { articles, loading, error }; }; /** * Hook to fetch featured knowledge base articles */ export const useFeaturedArticles = () => { const [articles, setArticles] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchArticles = async () => { try { setLoading(true); const data = await getFeaturedArticles(); setArticles(data); setError(null); } catch (err: any) { setError(err.message || 'Failed to fetch featured articles'); } finally { setLoading(false); } }; fetchArticles(); }, []); return { articles, loading, error }; }; /** * Hook to fetch a single knowledge base article */ export const useKnowledgeBaseArticle = (slug: string | null) => { const [article, setArticle] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { if (!slug) { setLoading(false); return; } const fetchArticle = async () => { try { setLoading(true); const data = await getKnowledgeBaseArticle(slug); setArticle(data); setError(null); } catch (err: any) { setError(err.message || 'Failed to fetch knowledge base article'); } finally { setLoading(false); } }; fetchArticle(); }, [slug]); return { article, loading, error }; }; /** * Hook to fetch articles by category */ export const useArticlesByCategory = (categorySlug: string | null) => { const [articles, setArticles] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { if (!categorySlug) { setLoading(false); return; } const fetchArticles = async () => { try { setLoading(true); const data = await getArticlesByCategory(categorySlug); setArticles(data); setError(null); } catch (err: any) { setError(err.message || 'Failed to fetch articles by category'); } finally { setLoading(false); } }; fetchArticles(); }, [categorySlug]); return { articles, loading, error }; };