feat(frontend): Export data button + modal on experiment page
This commit is contained in:
@@ -9,6 +9,7 @@ import TemplateEditor from '../components/TemplateEditor';
|
|||||||
import Alert from '../components/ui/Alert';
|
import Alert from '../components/ui/Alert';
|
||||||
import AuditLogSection from '../components/AuditLogSection';
|
import AuditLogSection from '../components/AuditLogSection';
|
||||||
import ExperimentCalendar from '../components/ExperimentCalendar';
|
import ExperimentCalendar from '../components/ExperimentCalendar';
|
||||||
|
import ExportDataModal from '../components/ExportDataModal';
|
||||||
|
|
||||||
function AnimalCardList({ animals, subjectTemplate, onNavigate, onEdit }) {
|
function AnimalCardList({ animals, subjectTemplate, onNavigate, onEdit }) {
|
||||||
return (
|
return (
|
||||||
@@ -62,6 +63,7 @@ export default function ExperimentDetail() {
|
|||||||
const [editAnimal, setEditAnimal] = useState(null);
|
const [editAnimal, setEditAnimal] = useState(null);
|
||||||
const [showTemplate, setShowTemplate] = useState(false);
|
const [showTemplate, setShowTemplate] = useState(false);
|
||||||
const [showSubjectTemplate, setShowSubjectTemplate] = useState(false);
|
const [showSubjectTemplate, setShowSubjectTemplate] = useState(false);
|
||||||
|
const [showExport, setShowExport] = useState(false);
|
||||||
const [subjectTemplate, setSubjectTemplate] = useState([]);
|
const [subjectTemplate, setSubjectTemplate] = useState([]);
|
||||||
const [dailyTemplate, setDailyTemplate] = useState([]);
|
const [dailyTemplate, setDailyTemplate] = useState([]);
|
||||||
const [experimentStatuses, setExperimentStatuses] = useState([]);
|
const [experimentStatuses, setExperimentStatuses] = useState([]);
|
||||||
@@ -201,7 +203,10 @@ export default function ExperimentDetail() {
|
|||||||
{animals.length} animal{animals.length !== 1 ? 's' : ''} enrolled
|
{animals.length} animal{animals.length !== 1 ? 's' : ''} enrolled
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<Button onClick={() => setShowAddAnimal(true)}>+ Add Animal</Button>
|
<div className="flex gap-2">
|
||||||
|
<Button variant="secondary" onClick={() => setShowExport(true)}>Export data</Button>
|
||||||
|
<Button onClick={() => setShowAddAnimal(true)}>+ Add Animal</Button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{successMsg && <Alert type="success" message={successMsg} />}
|
{successMsg && <Alert type="success" message={successMsg} />}
|
||||||
@@ -405,6 +410,16 @@ export default function ExperimentDetail() {
|
|||||||
<AnimalForm existing={editAnimal} experimentId={id} onSuccess={handleAnimalSaved} onCancel={() => setEditAnimal(null)} />
|
<AnimalForm existing={editAnimal} experimentId={id} onSuccess={handleAnimalSaved} onCancel={() => setEditAnimal(null)} />
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
|
<Modal isOpen={showExport} onClose={() => setShowExport(false)} title="Export data" size="md">
|
||||||
|
<ExportDataModal
|
||||||
|
experimentId={id}
|
||||||
|
experimentTitle={experiment.title}
|
||||||
|
dailyTemplate={dailyTemplate}
|
||||||
|
animals={animals}
|
||||||
|
onClose={() => setShowExport(false)}
|
||||||
|
/>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user