import { useState, useEffect } from 'react' import { experimentPhaseManagement, userManagement } from '../lib/supabase' import type { ExperimentPhase, User } from '../lib/supabase' interface ExperimentPhasesProps { onPhaseSelect: (phase: ExperimentPhase) => void } export function ExperimentPhases({ onPhaseSelect }: ExperimentPhasesProps) { const [phases, setPhases] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [currentUser, setCurrentUser] = useState(null) useEffect(() => { loadData() }, []) const loadData = async () => { try { setLoading(true) setError(null) const [phasesData, userData] = await Promise.all([ experimentPhaseManagement.getAllExperimentPhases(), userManagement.getCurrentUser() ]) setPhases(phasesData) setCurrentUser(userData) } catch (err: any) { setError(err.message || 'Failed to load experiment phases') console.error('Load experiment phases error:', err) } finally { setLoading(false) } } const canManagePhases = currentUser?.roles.includes('admin') || currentUser?.roles.includes('conductor') if (loading) { return (
) } return (
{/* Header */}

Experiment Phases

Select an experiment phase to view and manage its experiments

Experiment phases help organize experiments into logical groups for easier navigation and management.

{canManagePhases && ( )}
{/* Error Message */} {error && (
{error}
)} {/* Phases Grid */}
{phases.map((phase) => (
onPhaseSelect(phase)} className="bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow duration-200 cursor-pointer border border-gray-200 hover:border-blue-300" >
Active

{phase.name}

{phase.description && (

{phase.description}

)}
Created {new Date(phase.created_at).toLocaleDateString()}
View Experiments
))}
{phases.length === 0 && (

No experiment phases found

Get started by creating your first experiment phase.

{canManagePhases && (
)}
)}
) }