import type { ConventionStatus } from '../../components/POSConvention/POSConvention.types'; /** * Estado de una ubicación/salón */ export interface Location { /** * ID único de la ubicación */ id: string; /** * Nombre de la ubicación (ej: "Antejardín", "Terraza", "Bar") */ name: string; /** * Estado general de la ubicación */ status: ConventionStatus; /** * Capacidad actual (mesas ocupadas/total) */ capacity: { current: number; total: number; }; } /** * Estado de mesa compatible con POSTable * Nota: 'busy' se usa en lugar de 'occupied' para mantener compatibilidad con POSTable */ export type TableStatus = 'available' | 'busy' | 'reserved'; /** * Mesa en el layout */ export interface TableItem { /** * Número de la mesa (ej: "01", "02") */ tableNumber: string; /** * Estado actual de la mesa * Nota: usa 'busy' en lugar de 'occupied' para POSTable */ status: TableStatus; /** * Forma de la mesa */ shape: 'square' | 'circle' | 'rectangle' | 'oval'; /** * Cantidad de sillas (2, 4, 6, 8) */ chairs: 2 | 4 | 6 | 8; /** * Si la mesa está actualmente seleccionada */ isActive?: boolean; /** * Posición en el grid (opcional, para layout libre) */ position?: { x: number; y: number; }; } /** * Props del componente TableLayoutView */ export interface TableLayoutViewProps { /** * Lista de ubicaciones/salones disponibles */ locations?: Location[]; /** * ID de la ubicación actualmente seleccionada */ activeLocationId?: string; /** * Lista de mesas en el layout actual */ tables?: TableItem[]; /** * Título del área de mesas (ej: "Mesas de Antejardín") */ tablesTitle?: string; /** * Si se está mostrando el panel de selección de personas */ showPeopleCountPanel?: boolean; /** * Información de la mesa seleccionada para el panel */ selectedTable?: { locationName: string; tableName: string; }; /** * Cantidad de personas seleccionada */ peopleCount?: number; /** * Callback cuando se selecciona una ubicación/salón */ onLocationSelect?: (locationId: string) => void; /** * Callback cuando se selecciona una mesa */ onTableSelect?: (tableNumber: string) => void; /** * Callback cuando se hace clic en "Crear Mesas" */ onCreateTables?: () => void; /** * Callback cuando se hace clic en "Unir Mesas" */ onMergeTables?: () => void; /** * Callback cuando se hace clic en "Separar Mesas" */ onSplitTables?: () => void; /** * Callback cuando se selecciona un número de personas */ onPeopleCountSelect?: (count: number) => void; /** * Callback cuando se hace clic en "Asignar" */ onAssignTable?: () => void; /** * Callback cuando se hace clic en "Transferir" */ onTransferTable?: () => void; /** * Callback cuando se hace clic en "Cubiertos" */ onSetCutlery?: () => void; /** * Callback cuando se cierra el panel de personas */ onClosePeoplePanel?: () => void; /** * Callback cuando cambia el switch de la mesa */ onTableSwitchChange?: (checked: boolean) => void; /** * Si se está cargando información */ isLoading?: boolean; /** * Mensaje de error (si existe) */ errorMessage?: string; /** * Tipo de layout para las mesas: * - 'grid': Grid automático con separación uniforme (por defecto) * - 'free': Posicionamiento libre usando position.x/y de cada mesa */ tableLayout?: 'grid' | 'free'; /** * Clases CSS adicionales para el contenedor */ className?: string; /** * Información del usuario para el navbar */ userInfo?: { avatar: string; name: string; role: string; }; } //# sourceMappingURL=TableLayoutView.types.d.ts.map