'use client'; import { useEffect, useState } from 'react'; import { pricingStore, usePricingStore } from '@/store/usePricingStore'; import Link from 'next/link'; export default function AdminPage() { const items = usePricingStore((s) => s.items); const isHydrated = usePricingStore((s) => s.isHydrated); const [editedPrices, setEditedPrices] = useState>({}); const [saved, setSaved] = useState(false); useEffect(() => { pricingStore.getState().hydrate(); }, []); useEffect(() => { const map: Record = {}; items.forEach((item) => { map[item.id] = item.price; }); setEditedPrices(map); }, [items]); const handlePriceChange = (id: string, value: string) => { const num = parseInt(value.replace(/[^0-9]/g, ''), 10); if (!isNaN(num)) { setEditedPrices((prev) => ({ ...prev, [id]: num })); } else if (value === '') { setEditedPrices((prev) => ({ ...prev, [id]: 0 })); } }; const handleSave = () => { Object.entries(editedPrices).forEach(([id, price]) => { pricingStore.getState().updatePrice(id, price); }); setSaved(true); setTimeout(() => setSaved(false), 2000); }; const handleReset = () => { pricingStore.getState().resetPrices(); setSaved(false); }; const formatPrice = (price: number) => { return new Intl.NumberFormat('en-AE', { style: 'decimal' }).format(price); }; if (!isHydrated) { return (

Loading...

); } return (
{/* Header */}

Pricing Dashboard

Edit prices for the G1 Robot Configurator

Back to Configurator
{/* Pricing Table */}
{/* Table Header */}
Item Price (AED)
{/* Rows */} {items.map((item, index) => (
{item.label}
{item.id}
AED handlePriceChange(item.id, e.target.value)} style={{ width: '130px', padding: '0.5rem 0.75rem', borderRadius: '0.375rem', border: '1px solid rgba(0, 0, 0, 0.1)', background: 'rgba(255, 255, 255, 1)', color: '#1a1a2e', fontSize: '0.875rem', fontFamily: 'monospace', textAlign: 'right', outline: 'none', transition: 'border-color 0.2s ease', }} onFocus={(e) => { e.currentTarget.style.borderColor = 'rgba(59, 130, 246, 0.5)'; }} onBlur={(e) => { e.currentTarget.style.borderColor = 'rgba(0, 0, 0, 0.1)'; }} aria-label={`Price for ${item.label}`} />
))}
{/* Actions */}
); } const pageStyle: React.CSSProperties = { minHeight: '100vh', background: '#ffffff', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '2rem', fontFamily: 'system-ui, -apple-system, sans-serif', }; const containerStyle: React.CSSProperties = { width: '100%', maxWidth: '640px', };