+10
-9
@@ -1,3 +1,4 @@
|
|||||||
|
//HomePage.jsx
|
||||||
import React, { useEffect, useState, useContext } from 'react';
|
import React, { useEffect, useState, useContext } from 'react';
|
||||||
import { Virtuoso } from 'react-virtuoso';
|
import { Virtuoso } from 'react-virtuoso';
|
||||||
import CardRow from '../components/CardRow/CardRow';
|
import CardRow from '../components/CardRow/CardRow';
|
||||||
@@ -34,8 +35,11 @@ function HomePage() {
|
|||||||
.finally(() => setLoading(false));
|
.finally(() => setLoading(false));
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
// Load image for the currently expanded card
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!expandedCardId || cardImages[expandedCardId]) return;
|
if (!expandedCardId || cardImages[expandedCardId]) return;
|
||||||
|
|
||||||
fetchCardImage(expandedCardId)
|
fetchCardImage(expandedCardId)
|
||||||
.then(image => setCardImage(expandedCardId, image))
|
.then(image => setCardImage(expandedCardId, image))
|
||||||
.catch(err => console.error('Failed to load card image', err));
|
.catch(err => console.error('Failed to load card image', err));
|
||||||
@@ -46,6 +50,7 @@ function HomePage() {
|
|||||||
|
|
||||||
const expandedCard = cards.find(c => c.id === expandedCardId);
|
const expandedCard = cards.find(c => c.id === expandedCardId);
|
||||||
|
|
||||||
|
// Filter + sort using debounced search
|
||||||
const filteredCards = cards
|
const filteredCards = cards
|
||||||
.filter(card =>
|
.filter(card =>
|
||||||
card.name.toLowerCase().includes(debouncedSearchTerm.toLowerCase())
|
card.name.toLowerCase().includes(debouncedSearchTerm.toLowerCase())
|
||||||
@@ -53,23 +58,22 @@ function HomePage() {
|
|||||||
.sort((a, b) => a.name.localeCompare(b.name));
|
.sort((a, b) => a.name.localeCompare(b.name));
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div style={{ display: 'flex', flexDirection: 'column', minHeight: '100vh' }}>
|
<div style={{ display: 'flex', height: '100vh' }}>
|
||||||
{/* Main content scrollable area */}
|
|
||||||
<div style={{ display: 'flex', flex: 1, overflow: 'hidden' }}>
|
|
||||||
{/* Left panel: card list */}
|
{/* Left panel: card list */}
|
||||||
<div style={{ flex: 2, borderRight: '1px solid #ccc', padding: '1rem', overflowY: 'auto' }}>
|
<div style={{ flex: 2, borderRight: '1px solid #ccc', padding: '1rem' }}>
|
||||||
<h2>Card List</h2>
|
<h2>Card List</h2>
|
||||||
<SearchBar searchTerm={searchTerm} setSearchTerm={setSearchTerm} />
|
<SearchBar searchTerm={searchTerm} setSearchTerm={setSearchTerm} />
|
||||||
|
|
||||||
|
{/* ✅ Virtualized list */}
|
||||||
<Virtuoso
|
<Virtuoso
|
||||||
style={{ height: '100%' }}
|
style={{ height: 'calc(100vh - 100px)' }} // Adjust for header/search bar
|
||||||
data={filteredCards}
|
data={filteredCards}
|
||||||
itemContent={(index, card) => <CardRow key={card.id} card={card} />}
|
itemContent={(index, card) => <CardRow key={card.id} card={card} />}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Right panel: card image */}
|
{/* Right panel: card image */}
|
||||||
<div style={{ flex: 1, padding: '1rem', overflowY: 'auto' }}>
|
<div style={{ flex: 1, padding: '1rem' }}>
|
||||||
<h2>Card Image / Details</h2>
|
<h2>Card Image / Details</h2>
|
||||||
{expandedCardId && expandedCard ? (
|
{expandedCardId && expandedCard ? (
|
||||||
cardImages[expandedCardId] ? (
|
cardImages[expandedCardId] ? (
|
||||||
@@ -85,9 +89,6 @@ function HomePage() {
|
|||||||
<p>Click a card to see its image</p>
|
<p>Click a card to see its image</p>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* Footer at the bottom */}
|
|
||||||
<Footer />
|
<Footer />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user