Refactor: enhance dashboard layout and experiment management features

- Added functionality to save and retrieve the current dashboard view in localStorage for improved user experience.
- Updated DashboardLayout component to handle view changes with access control based on user roles.
- Renamed Experiments component to ExperimentManagement for clarity.
- Introduced new ExperimentPhase interface and related utility functions for managing experiment phases.
- Updated seed data to include initial roles and experiment phases for testing.
- Cleaned up unnecessary blank lines in various files for better code readability.
This commit is contained in:
salirezav
2025-09-19 12:03:46 -04:00
parent 6892919a46
commit 7328950684
31 changed files with 2305 additions and 1282 deletions

View File

@@ -32,6 +32,15 @@ export interface Role {
created_at: string
}
export interface ExperimentPhase {
id: string
name: string
description?: string | null
created_at: string
updated_at: string
created_by: string
}
export interface Experiment {
id: string
experiment_number: number
@@ -44,6 +53,7 @@ export interface Experiment {
entry_exit_height_diff_in: number
results_status: ResultsStatus
completion_status: boolean
phase_id?: string | null
created_at: string
updated_at: string
created_by: string
@@ -51,6 +61,16 @@ export interface Experiment {
export interface CreateExperimentPhaseRequest {
name: string
description?: string
}
export interface UpdateExperimentPhaseRequest {
name?: string
description?: string
}
export interface CreateExperimentRequest {
experiment_number: number
reps_required: number
@@ -62,6 +82,7 @@ export interface CreateExperimentRequest {
entry_exit_height_diff_in: number
results_status?: ResultsStatus
completion_status?: boolean
phase_id?: string
}
export interface UpdateExperimentRequest {
@@ -75,6 +96,7 @@ export interface UpdateExperimentRequest {
entry_exit_height_diff_in?: number
results_status?: ResultsStatus
completion_status?: boolean
phase_id?: string
}
export interface CreateRepetitionRequest {
@@ -378,6 +400,76 @@ export const userManagement = {
}
}
// Experiment phase management utility functions
export const experimentPhaseManagement = {
// Get all experiment phases
async getAllExperimentPhases(): Promise<ExperimentPhase[]> {
const { data, error } = await supabase
.from('experiment_phases')
.select('*')
.order('created_at', { ascending: false })
if (error) throw error
return data
},
// Get experiment phase by ID
async getExperimentPhaseById(id: string): Promise<ExperimentPhase | null> {
const { data, error } = await supabase
.from('experiment_phases')
.select('*')
.eq('id', id)
.single()
if (error) {
if (error.code === 'PGRST116') return null // Not found
throw error
}
return data
},
// Create a new experiment phase
async createExperimentPhase(phaseData: CreateExperimentPhaseRequest): Promise<ExperimentPhase> {
const { data: { user }, error: authError } = await supabase.auth.getUser()
if (authError || !user) throw new Error('User not authenticated')
const { data, error } = await supabase
.from('experiment_phases')
.insert({
...phaseData,
created_by: user.id
})
.select()
.single()
if (error) throw error
return data
},
// Update an experiment phase
async updateExperimentPhase(id: string, updates: UpdateExperimentPhaseRequest): Promise<ExperimentPhase> {
const { data, error } = await supabase
.from('experiment_phases')
.update(updates)
.eq('id', id)
.select()
.single()
if (error) throw error
return data
},
// Delete an experiment phase
async deleteExperimentPhase(id: string): Promise<void> {
const { error } = await supabase
.from('experiment_phases')
.delete()
.eq('id', id)
if (error) throw error
}
}
// Experiment management utility functions
export const experimentManagement = {
// Get all experiments
@@ -391,6 +483,18 @@ export const experimentManagement = {
return data
},
// Get experiments by phase ID
async getExperimentsByPhaseId(phaseId: string): Promise<Experiment[]> {
const { data, error } = await supabase
.from('experiments')
.select('*')
.eq('phase_id', phaseId)
.order('created_at', { ascending: false })
if (error) throw error
return data
},
// Get experiment by ID
async getExperimentById(id: string): Promise<Experiment | null> {
const { data, error } = await supabase