import React, { useState, useEffect } from 'react'; import { db } from '../../firebase/config'; import { ref, onValue, set, update, push, remove } from 'firebase/database'; import { Layout, Plus, Trash2, Map as MapIcon, Grid, Save, MousePointer2 } from 'lucide-react'; export default function TableManager() { const [tables, setTables] = useState([]); const [newTable, setNewTable] = useState({ number: '', capacity: 4 }); useEffect(() => { onValue(ref(db, 'config/tables'), (snapshot) => { const data = snapshot.val(); if (data) { setTables(Object.keys(data).map(id => ({ id, ...data[id] })).sort((a,b) => a.number - b.number)); } else { setTables([]); } }); }, []); const addTable = async (e) => { e.preventDefault(); if (!newTable.number) return; const tableRef = push(ref(db, 'config/tables')); await set(tableRef, { number: parseInt(newTable.number), capacity: parseInt(newTable.capacity), status: 'available', x: 0, y: 0 }); setNewTable({ number: '', capacity: 4 }); }; const deleteTable = async (id) => { if (window.confirm('¿Eliminar esta mesa del mapa?')) { await remove(ref(db, `config/tables/${id}`)); } }; return (

Diseño de Salón

Configura la distribución física de tu restaurante

{/* Sidebar: Add Tables */} {/* Visual Map Area */}
Arrastra para posicionar (Modo Edición)
{tables.map(t => (
4 ? '12px' : '50%', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', boxShadow: '0 0 15px rgba(255,90,95,0.1)', cursor: 'move' }}> {t.number} {t.capacity} cap
))} {tables.length === 0 && (
)}
); } const inputStyle = { width: '100%', padding: '0.8rem', borderRadius: '8px', background: 'rgba(255,255,255,0.05)', border: '1px solid var(--border-subtle)', color: '#fff', outline: 'none' }; const labelStyle = { display: 'block', fontSize: '0.8rem', color: 'var(--text-muted)', marginBottom: '0.5rem' };