simplified tagging selection
This commit is contained in:
@@ -19,8 +19,6 @@ import type { Database } from '@/data/domande-esami.yaml'
|
|||||||
const useRemoteValue = <T,>(url: string): T | null => {
|
const useRemoteValue = <T,>(url: string): T | null => {
|
||||||
const [value, setValue] = useState<T | null>(null)
|
const [value, setValue] = useState<T | null>(null)
|
||||||
|
|
||||||
console.log('fetching', url, value)
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetch(url)
|
fetch(url)
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
@@ -55,13 +53,11 @@ export const DomandeEsamiCourse = ({ course }: Props) => {
|
|||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
const [selectedTags, setSelectedTags] = useState<string[]>([])
|
const [selectedTag, setSelectedTag] = useState<string | null>(null)
|
||||||
|
|
||||||
const filteredQuestions = database.questions
|
const filteredQuestions = database.questions
|
||||||
.filter(question => question.course === course)
|
.filter(question => question.course === course)
|
||||||
.filter(question => selectedTags.length === 0 || selectedTags.every(tag => question.tags.includes(tag)))
|
.filter(question => (selectedTag ? question.tags.includes(selectedTag) : true))
|
||||||
|
|
||||||
console.log('filteredQuestions', filteredQuestions)
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -72,39 +68,34 @@ export const DomandeEsamiCourse = ({ course }: Props) => {
|
|||||||
<h1>{database.names[course]}</h1>
|
<h1>{database.names[course]}</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card filter">
|
{courseTags.length > 1 && (
|
||||||
<div class="grid-h">
|
<div class="card filter">
|
||||||
<Funnel />
|
<div class="grid-h">
|
||||||
<strong>Filtra Tag</strong>
|
<Funnel />
|
||||||
|
<strong>Filtra Tag</strong>
|
||||||
|
</div>
|
||||||
|
<div class="flex-row-wrap">
|
||||||
|
{!selectedTag
|
||||||
|
? courseTags.map(tag => (
|
||||||
|
<div class="chip clickable" onClick={() => setSelectedTag(tag)}>
|
||||||
|
{tag}
|
||||||
|
</div>
|
||||||
|
))
|
||||||
|
: courseTags.map(tag => (
|
||||||
|
<div
|
||||||
|
class={tag === selectedTag ? 'chip clickable' : 'chip clickable disabled'}
|
||||||
|
onClick={() => setSelectedTag(tag === selectedTag ? null : tag)}
|
||||||
|
>
|
||||||
|
{tag}
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-row-wrap">
|
)}
|
||||||
{selectedTags.length === 0
|
|
||||||
? courseTags.map(tag => (
|
|
||||||
<div class="chip clickable" onClick={() => setSelectedTags([tag])}>
|
|
||||||
{tag}
|
|
||||||
</div>
|
|
||||||
))
|
|
||||||
: courseTags.map(tag => (
|
|
||||||
<div
|
|
||||||
class={selectedTags.includes(tag) ? 'chip clickable' : 'chip clickable disabled'}
|
|
||||||
onClick={() =>
|
|
||||||
setSelectedTags(
|
|
||||||
selectedTags.includes(tag)
|
|
||||||
? selectedTags.filter(t => t !== tag)
|
|
||||||
: [...selectedTags, tag],
|
|
||||||
)
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{tag}
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="wide-card-list" id="questions">
|
<div class="wide-card-list" id="questions">
|
||||||
{filteredQuestions.length === 0 ? (
|
{filteredQuestions.length === 0 ? (
|
||||||
<div class="grid-center">
|
<div class="grid-center">
|
||||||
<em>No questions found</em>
|
<em>No questions found</em>
|
||||||
<button onClick={() => setSelectedTags([])}>Rimuovi i filtri</button>
|
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
filteredQuestions.map(question => (
|
filteredQuestions.map(question => (
|
||||||
|
|||||||
Reference in New Issue
Block a user