"use client"; import { useState } from 'react'; import { useKnowledgeBaseCategories, useFeaturedArticles, useKnowledgeBaseArticles } from '@/lib/hooks/useSupport'; import KnowledgeBaseArticleModal from './KnowledgeBaseArticleModal'; const KnowledgeBase = () => { const { categories, loading: categoriesLoading } = useKnowledgeBaseCategories(); const [searchTerm, setSearchTerm] = useState(''); const [selectedCategory, setSelectedCategory] = useState(null); const [selectedArticleSlug, setSelectedArticleSlug] = useState(null); // Fetch all articles (for browsing and category filtering) const { articles: allArticles, loading: allArticlesLoading } = useKnowledgeBaseArticles(); // Fetch featured articles (for default view) const { articles: featuredArticles, loading: featuredLoading } = useFeaturedArticles(); // Determine which articles to display let displayArticles = featuredArticles; let isLoading = featuredLoading; let headerText = 'Featured Articles'; if (searchTerm) { // If searching, filter all articles by search term displayArticles = allArticles.filter(article => article.title.toLowerCase().includes(searchTerm.toLowerCase()) || article.summary.toLowerCase().includes(searchTerm.toLowerCase()) || article.content.toLowerCase().includes(searchTerm.toLowerCase()) ); isLoading = allArticlesLoading; headerText = 'Search Results'; } else if (selectedCategory) { // If a category is selected, filter articles by that category displayArticles = allArticles.filter(article => article.category_slug === selectedCategory); isLoading = allArticlesLoading; const categoryName = categories.find(cat => cat.slug === selectedCategory)?.name || 'Category'; headerText = `${categoryName} Articles`; } const handleSearch = (e: React.FormEvent) => { e.preventDefault(); // The search is already being performed by the hook }; const filteredCategories = selectedCategory ? categories.filter(cat => cat.slug === selectedCategory) : categories; return (

Knowledge Base

Find answers to frequently asked questions and explore our documentation.

{/* Search Bar */}
setSearchTerm(e.target.value)} placeholder="Search articles, topics, or keywords..." className="form-control" /> {searchTerm && ( )}
{/* Categories */} {!searchTerm && (

Browse by Category

{categoriesLoading ? (
Loading...
) : (
{Array.isArray(categories) && categories.map(category => (
setSelectedCategory(category.slug)} style={{ borderLeftColor: category.color }} >

{category.name}

{category.description}

{category.article_count} {category.article_count === 1 ? 'article' : 'articles'}
))}
)}
)} {/* Featured/Search Results Articles */}

{headerText}

{selectedCategory && !searchTerm && ( )}
{searchTerm && (

Found {displayArticles.length} {displayArticles.length === 1 ? 'article' : 'articles'} for "{searchTerm}"

)}
{isLoading ? (
Loading...
) : displayArticles.length === 0 ? (

No articles found

{searchTerm ? `We couldn't find any articles matching "${searchTerm}". Try different keywords.` : 'No articles available at the moment.'}

) : (
{Array.isArray(displayArticles) && displayArticles.map(article => (
setSelectedArticleSlug(article.slug)} >

{article.title}

{article.is_featured && ( Featured )}

{article.summary}

{article.category_name} {article.view_count} views {article.helpful_count} helpful
))}
)}
{/* Article Modal */} {selectedArticleSlug && ( setSelectedArticleSlug(null)} /> )}
); }; export default KnowledgeBase;