Refactor samples gallery
Signed-off-by: Felipe Cardoso <felipe.cardoso@hotmail.it>
This commit is contained in:
@@ -10,7 +10,7 @@ router = APIRouter()
|
|||||||
@router.get("/list", response_model=List[Sample])
|
@router.get("/list", response_model=List[Sample])
|
||||||
async def list_samples(
|
async def list_samples(
|
||||||
request: Request,
|
request: Request,
|
||||||
limit: int = Query(20, ge=1, le=1000),
|
limit: int = Query(200, ge=1, le=1000),
|
||||||
offset: int = Query(0, ge=0)
|
offset: int = Query(0, ge=0)
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
@@ -25,7 +25,7 @@ async def list_samples(
|
|||||||
@router.get("/latest", response_model=List[Sample])
|
@router.get("/latest", response_model=List[Sample])
|
||||||
async def get_latest_samples(
|
async def get_latest_samples(
|
||||||
request: Request,
|
request: Request,
|
||||||
count: int = Query(5, ge=1, le=20)
|
count: int = Query(20, ge=1, le=100)
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Get the most recent sample images
|
Get the most recent sample images
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ class SampleManager:
|
|||||||
# Wait a bit before retrying on error
|
# Wait a bit before retrying on error
|
||||||
await asyncio.sleep(5)
|
await asyncio.sleep(5)
|
||||||
|
|
||||||
async def list_samples(self, limit: int = 20, offset: int = 0) -> List[Sample]:
|
async def list_samples(self, limit: int = 200, offset: int = 0) -> List[Sample]:
|
||||||
"""List sample images with pagination"""
|
"""List sample images with pagination"""
|
||||||
logger.info(f"Total samples: {len(self.samples)}")
|
logger.info(f"Total samples: {len(self.samples)}")
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ class SampleManager:
|
|||||||
|
|
||||||
return sorted_samples[offset:offset + limit]
|
return sorted_samples[offset:offset + limit]
|
||||||
|
|
||||||
async def get_latest_samples(self, count: int = 5) -> List[Sample]:
|
async def get_latest_samples(self, count: int = 20) -> List[Sample]:
|
||||||
"""Get most recent samples"""
|
"""Get most recent samples"""
|
||||||
return await self.list_samples(limit=count, offset=0)
|
return await self.list_samples(limit=count, offset=0)
|
||||||
|
|
||||||
|
|||||||
@@ -3,15 +3,15 @@ import {useSamples} from '@/contexts/SamplesContext'
|
|||||||
import Image from 'next/image'
|
import Image from 'next/image'
|
||||||
|
|
||||||
export function SamplesGallery() {
|
export function SamplesGallery() {
|
||||||
const {samples, isLoading, error, refreshSamples} = useSamples()
|
const {latestSamples, isLoading, error, refreshSamples} = useSamples()
|
||||||
|
|
||||||
if (isLoading) return <div>Loading samples...</div>
|
if (isLoading) return <div>Loading samples...</div>
|
||||||
if (error) return <div>Error loading samples: {error.message}</div>
|
if (error) return <div>Error loading samples: {error.message}</div>
|
||||||
if (samples.length === 0) return <div>No samples available</div>
|
if (latestSamples.length === 0) return <div>No samples available</div>
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="grid grid-cols-3 gap-4">
|
<div className="grid grid-cols-5 gap-4">
|
||||||
{samples.map((sample) => (
|
{latestSamples.map((sample) => (
|
||||||
<div key={sample.filename}>
|
<div key={sample.filename}>
|
||||||
<Image
|
<Image
|
||||||
src={`${process.env.NEXT_PUBLIC_API_URL}${sample.url}`}
|
src={`${process.env.NEXT_PUBLIC_API_URL}${sample.url}`}
|
||||||
@@ -20,7 +20,7 @@ export function SamplesGallery() {
|
|||||||
height={200}
|
height={200}
|
||||||
className="object-cover rounded"
|
className="object-cover rounded"
|
||||||
/>
|
/>
|
||||||
<p className="text-sm mt-1">{sample.filename}</p>
|
<p className="text-sm mt-1">{sample.url.split('__')[1]}</p>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import type {Sample} from '@/types/api'
|
|||||||
|
|
||||||
interface SamplesContextType {
|
interface SamplesContextType {
|
||||||
samples: Sample[]
|
samples: Sample[]
|
||||||
|
latestSamples: Sample[]
|
||||||
isLoading: boolean
|
isLoading: boolean
|
||||||
error: Error | null
|
error: Error | null
|
||||||
refreshSamples: () => Promise<void>
|
refreshSamples: () => Promise<void>
|
||||||
@@ -37,7 +38,8 @@ export function SamplesProvider({children}: { children: React.ReactNode }) {
|
|||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SamplesContext.Provider value={{samples, isLoading, error, refreshSamples: fetchSamples}}>
|
<SamplesContext.Provider
|
||||||
|
value={{samples, latestSamples: samples.slice(0, 20), isLoading, error, refreshSamples: fetchSamples}}>
|
||||||
{children}
|
{children}
|
||||||
</SamplesContext.Provider>
|
</SamplesContext.Provider>
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user