'use client'; import { Search } from 'lucide-react'; import { useState, useCallback } from 'react'; import Link from 'next/link'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardFooter, CardHeader, CardTitle, } from '@/components/ui/card'; import { CategoryFilters } from '@/components/CategoryFilters'; import { useScopedI18n } from '@/locales/client'; import { useQuestionnaire } from '@/hooks/useQuestionnaire'; import { Questionnaire, QuestionnaireCategory } from '@/types'; export default function QuestionnaireList() { const questionnaires = useQuestionnaire(); const t = useScopedI18n('component.questionnaire.list'); const [searchQuery, setSearchQuery] = useState(''); const [selectedCategory, setSelectedCategory] = useState(null); const handleCategoryChange = useCallback( (category: QuestionnaireCategory | null) => { setSelectedCategory(category); }, [], ); // Filter questionnaires based on search terms and the selected purpose. const filteredQuestionnaires = (questionnaires as Questionnaire[]).filter((q) => { // Text search filtering const matchesSearch = q.title.toLowerCase().includes(searchQuery.toLowerCase()) || q.description.toLowerCase().includes(searchQuery.toLowerCase()) || q.tags.some((tag) => tag.toLowerCase().includes(searchQuery.toLowerCase()) ); const matchesCategory = selectedCategory === null || q.category === selectedCategory; return matchesSearch && matchesCategory; }); return (

{t('title')}

{/* Search bar */}
setSearchQuery(e.target.value)} />
{/* Questionnaire list */}
{filteredQuestionnaires.length > 0 ? ( filteredQuestionnaires.map((questionnaire) => ( {questionnaire.title}

{questionnaire.description}

{questionnaire.time}
)) ) : (
{t('noMatch')}
)}
); }