import { useEffect, useState } from 'preact/hooks' import { Funnel } from '@phosphor-icons/react' import { marked } from 'marked' import extendedLatex from '@/client/lib/marked-latex' marked.use( extendedLatex({ lazy: false, render: (formula: string, display: boolean) => { return display ? '$$' + formula + '$$' : '$' + formula + '$' }, }), ) import type { Database } from '@/data/domande-esami.yaml' const useRemoteValue = (url: string): T | null => { const [value, setValue] = useState(null) useEffect(() => { fetch(url) .then(response => response.json()) .then(value => setValue(value)) .catch(error => console.error(error)) }, [url]) return value } type Props = { course: string } export const DomandeEsamiCourse = ({ course }: Props) => { const database = useRemoteValue(`/domande-esami/api/${course}.json`) if (!database) { return <>Loading... } if ('requestIdleCallback' in window) { // @ts-ignore requestIdleCallback(() => window.renderMath()) } else { // @ts-ignore setTimeout(() => window.renderMath(), 100) } const courseTags = [ ...new Set( database.questions.filter(question => question.course === course).flatMap(question => question.tags), ), ] const [selectedTag, setSelectedTag] = useState(null) const filteredQuestions = database.questions .filter(question => question.course === course) .filter(question => (selectedTag ? question.tags.includes(selectedTag) : true)) return ( <>

Domande Orali

{database.names[course]}

{courseTags.length > 1 && (
Filtra Tag
{!selectedTag ? courseTags.map(tag => (
setSelectedTag(tag)}> {tag}
)) : courseTags.map(tag => (
setSelectedTag(tag === selectedTag ? null : tag)} > {tag}
))}
)}
{filteredQuestions.length === 0 ? (
No questions found
) : ( filteredQuestions.map(question => (
)) )}
) }