'use client'; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRoutineStore } from '@/lib/routine-store'; import { RoutineEditor } from '@/components/RoutineEditor'; import { RoutineRunner } from '@/components/RoutineRunner'; import type { TransitionType } from '@/lib/routines'; import { ArrowLeft, Plus, Play, Trash2, ListChecks, Clock, Copy } from 'lucide-react'; export default function RoutinesPage() { const { routines, templates, addRoutine, addTemplate, removeRoutine, removeTemplate, start, startFromTemplate } = useRoutineStore(); const [mounted, setMounted] = useState(false); const [showEditor, setShowEditor] = useState(false); useEffect(() => { setMounted(true); }, []); if (!mounted) return null; const activeRoutine = routines.find((r) => r.status === 'active' || r.status === 'paused'); const readyRoutines = routines.filter((r) => r.status === 'ready'); const pastRoutines = routines.filter((r) => r.status === 'completed' || r.status === 'cancelled').slice(-10).reverse(); const handleSave = (name: string, description: string, steps: { label: string; durationMinutes: number; transition: TransitionType; customTransitionMinutes: number; notes: string }[], asTemplate: boolean) => { const params = { name, description: description || undefined, steps: steps.map((s) => ({ label: s.label, durationMinutes: s.durationMinutes, transition: s.transition as TransitionType, customTransitionMinutes: s.transition === 'custom' ? s.customTransitionMinutes : undefined, notes: s.notes || undefined, })), isTemplate: asTemplate, }; if (asTemplate) { addTemplate(params); } else { addRoutine(params); } }; return (
Back to Dashboard

Routines

{/* Active routine runner */} {activeRoutine && (

Running

)} {/* Templates */}

Templates ({templates.length})

{templates.length > 0 ? (
{templates.map((tmpl) => (
{tmpl.name}
{tmpl.description && (
{tmpl.description}
)}
{tmpl.steps.length} steps {tmpl.totalDurationMinutes}m
{!tmpl.isTemplate || tmpl.createdAt > Date.now() - 1000 ? ( ) : null}
))}
) : (

No templates yet. Create one above.

)}
{/* Ready routines */} {readyRoutines.length > 0 && (

Ready ({readyRoutines.length})

{readyRoutines.map((r) => (
{r.name}
{r.steps.length} steps {r.totalDurationMinutes}m
))}
)} {/* Past routines */} {pastRoutines.length > 0 && (

Recent ({pastRoutines.length})

{pastRoutines.map((r) => (
))}
)} setShowEditor(false)} onSave={handleSave} />
); }