Spaces:
Running
Running
File size: 2,125 Bytes
f46336a 38de65f 255baa6 38de65f 255baa6 f46336a 38de65f f46336a 38de65f f46336a 255baa6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import Header from "@/components/Header";
import FilterBar from "@/components/FilterBar";
import ConferenceCard from "@/components/ConferenceCard";
import conferencesData from "@/data/conferences.yml";
import { Conference } from "@/types/conference";
import { useState, useMemo, useEffect } from "react";
const Index = () => {
const [selectedTag, setSelectedTag] = useState("All");
const [searchQuery, setSearchQuery] = useState("");
// Add debug logging
useEffect(() => {
console.log("Conferences data:", conferencesData);
}, []);
const filteredConferences = useMemo(() => {
if (!Array.isArray(conferencesData)) {
console.error("Conferences data is not an array:", conferencesData);
return [];
}
return conferencesData
.filter((conf: Conference) => {
const matchesTag = selectedTag === "All" || conf.tags.includes(selectedTag);
const matchesSearch = searchQuery === "" ||
conf.title.toLowerCase().includes(searchQuery.toLowerCase()) ||
(conf.full_name && conf.full_name.toLowerCase().includes(searchQuery.toLowerCase()));
return matchesTag && matchesSearch;
})
.sort((a: Conference, b: Conference) =>
new Date(a.deadline).getTime() - new Date(b.deadline).getTime()
);
}, [selectedTag, searchQuery]);
// Add debug logging for filtered conferences
useEffect(() => {
console.log("Filtered conferences:", filteredConferences);
}, [filteredConferences]);
if (!Array.isArray(conferencesData)) {
return <div>Loading conferences...</div>;
}
return (
<div className="min-h-screen bg-neutral-light">
<Header onSearch={setSearchQuery} />
<FilterBar selectedTag={selectedTag} onTagSelect={setSelectedTag} />
<main className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{filteredConferences.map((conference: Conference) => (
<ConferenceCard key={conference.id} {...conference} />
))}
</div>
</main>
</div>
);
};
export default Index;
|