import React, { useState, useEffect } from 'react'
import {
Text,
Stack,
Box,
UnstyledButton,
Loader,
Group,
} from '@mantine/core'
import { IconDatabase, IconFlask } from '@tabler/icons-react'
import { useXRD } from '../context/XRDContext'
const ExampleDataPanel = ({ onSelect }) => {
const { loadExampleFile } = useXRD()
const [examples, setExamples] = useState([])
const [loading, setLoading] = useState(true)
const [loadingFile, setLoadingFile] = useState(null)
useEffect(() => {
const fetchExamples = async () => {
try {
const response = await fetch('/api/examples')
if (response.ok) {
const data = await response.json()
setExamples(data)
}
} catch (err) {
console.error('Failed to fetch examples:', err)
} finally {
setLoading(false)
}
}
fetchExamples()
}, [])
const handleSelect = async (filename) => {
setLoadingFile(filename)
const success = await loadExampleFile(filename)
setLoadingFile(null)
if (success && onSelect) onSelect()
}
if (loading) {
return (
)
}
if (examples.length === 0) return null
return (
Example Data
{examples.map((ex) => (
handleSelect(ex.filename)}
disabled={loadingFile !== null}
style={{
padding: '10px 12px',
borderRadius: '8px',
border: '1px solid #dee2e6',
backgroundColor: loadingFile === ex.filename ? '#f1f3f5' : '#fff',
cursor: loadingFile !== null ? 'wait' : 'pointer',
transition: 'background-color 150ms ease',
}}
onMouseEnter={(e) => {
if (!loadingFile) e.currentTarget.style.backgroundColor = '#f8f9fa'
}}
onMouseLeave={(e) => {
if (loadingFile !== ex.filename) e.currentTarget.style.backgroundColor = '#fff'
}}
>
{ex.material_id || ex.filename}
{loadingFile === ex.filename && }
))}
)
}
export default ExampleDataPanel