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