@fayz-ai/plugin-tables 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/{TablesPage-IM732NWO.js → TablesPage-QUFTXYLX.js} +4 -4
- package/dist/TablesPage-QUFTXYLX.js.map +1 -0
- package/dist/{TablesContext.d.ts → context.d.ts} +1 -1
- package/dist/context.d.ts.map +1 -0
- package/dist/data/registries.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/{TablesPage.d.ts → views/TablesPage.d.ts} +3 -3
- package/dist/views/TablesPage.d.ts.map +1 -0
- package/package.json +6 -8
- package/dist/TablesContext.d.ts.map +0 -1
- package/dist/TablesPage-IM732NWO.js.map +0 -1
- package/dist/TablesPage.d.ts.map +0 -1
- package/dist/registries.d.ts.map +0 -1
- package/src/TablesContext.tsx +0 -41
- package/src/TablesPage.tsx +0 -20
- package/src/data/mock.ts +0 -322
- package/src/data/platform.ts +0 -348
- package/src/data/types.ts +0 -31
- package/src/index.ts +0 -179
- package/src/locales/en.ts +0 -45
- package/src/locales/index.ts +0 -4
- package/src/locales/pt-BR.ts +0 -45
- package/src/registries.ts +0 -32
- package/src/store.ts +0 -178
- package/src/types.ts +0 -116
- package/src/views/FloorPlanView.tsx +0 -388
- /package/dist/{registries.d.ts → data/registries.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -25,11 +25,11 @@ It snaps into a `defineSaas` app as the vertical surface for food. Configure zon
|
|
|
25
25
|
```bash
|
|
26
26
|
npm install @fayz-ai/plugin-tables
|
|
27
27
|
```
|
|
28
|
-
Peer deps: `react`, `react-dom`. Runtime deps: `@fayz-ai/core`, `@fayz-ai/ui`, `@fayz-ai/
|
|
28
|
+
Peer deps: `react`, `react-dom`. Runtime deps: `@fayz-ai/core`, `@fayz-ai/ui`, `@fayz-ai/admin`, `@fayz-ai/sdk`.
|
|
29
29
|
|
|
30
30
|
## Usage
|
|
31
31
|
```tsx
|
|
32
|
-
import { defineSaas } from '@fayz-ai/
|
|
32
|
+
import { defineSaas } from '@fayz-ai/admin'
|
|
33
33
|
import { createTablesPlugin } from '@fayz-ai/plugin-tables'
|
|
34
34
|
|
|
35
35
|
export const app = defineSaas({
|
|
@@ -49,7 +49,7 @@ export const app = defineSaas({
|
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
## Part of the Fayz SDK
|
|
52
|
-
One of the composable plugins for `@fayz-ai/
|
|
52
|
+
One of the composable plugins for `@fayz-ai/admin` — this is the food vertical's room-management surface.
|
|
53
53
|
|
|
54
54
|
## Roadmap & contributing
|
|
55
|
-
Built and evolving in the open. See the [Fayz SDK roadmap](../../docs/ROADMAP.md#plugin-tables) for current gaps, missing features, and good first issues.
|
|
55
|
+
Built and evolving in the open. See the [Fayz SDK roadmap](../../docs/platform/ROADMAP.md#plugin-tables) for current gaps, missing features, and good first issues.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { createPluginContext } from '@fayz-ai/
|
|
1
|
+
import { createPluginContext } from '@fayz-ai/admin';
|
|
2
2
|
import { useEffect, useMemo } from 'react';
|
|
3
3
|
import { UtensilsCrossed, MapPin } from 'lucide-react';
|
|
4
4
|
import { useTranslation } from '@fayz-ai/core';
|
|
5
5
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
|
-
// src/
|
|
7
|
+
// src/context.tsx
|
|
8
8
|
var ctx = createPluginContext("TablesPage");
|
|
9
9
|
var TablesContextProvider = ctx.ContextProvider;
|
|
10
10
|
var useTablesConfig = ctx.useConfig;
|
|
@@ -270,5 +270,5 @@ function TablesPage({ config, provider, store, registries }) {
|
|
|
270
270
|
}
|
|
271
271
|
|
|
272
272
|
export { TablesPage };
|
|
273
|
-
//# sourceMappingURL=TablesPage-
|
|
274
|
-
//# sourceMappingURL=TablesPage-
|
|
273
|
+
//# sourceMappingURL=TablesPage-QUFTXYLX.js.map
|
|
274
|
+
//# sourceMappingURL=TablesPage-QUFTXYLX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/context.tsx","../src/views/FloorPlanView.tsx","../src/views/TablesPage.tsx"],"names":["_","t","jsx"],"mappings":"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","file":"TablesPage-QUFTXYLX.js","sourcesContent":["import { createPluginContext } from '@fayz-ai/admin'\nimport type { TablesDataProvider } from './data/types'\nimport type { TablesUIState } from './store'\nimport type { TableSession } from './types'\n\n// ---------------------------------------------------------------------------\n// Plugin labels\n// ---------------------------------------------------------------------------\n\nexport interface TablesPluginLabels {\n pageTitle: string\n pageSubtitle: string\n tableSingular: string\n tablePlural: string\n sessionSingular: string\n sessionPlural: string\n}\n\n// ---------------------------------------------------------------------------\n// Resolved config — fully merged, no optionals\n// ---------------------------------------------------------------------------\n\nexport interface TablesModules {\n reservations: boolean\n sessionHistory: boolean\n}\n\nexport interface ResolvedTablesConfig {\n modules: TablesModules\n labels: TablesPluginLabels\n defaultZones: Array<{ name: string; color?: string }>\n onTableSeated?: (session: TableSession) => Promise<string | undefined>\n onTableClosed?: (session: TableSession) => Promise<void>\n}\n\nconst ctx = createPluginContext<ResolvedTablesConfig, TablesDataProvider, TablesUIState>('TablesPage')\n\nexport const TablesContextProvider = ctx.ContextProvider\nexport const useTablesConfig = ctx.useConfig\nexport const useTablesProvider = ctx.useProvider\nexport const useTablesStore = ctx.useStore\n","import React, { useEffect, useMemo } from 'react'\nimport { MapPin, Users, Clock, UtensilsCrossed, Loader2 } from 'lucide-react'\nimport { useTablesConfig, useTablesStore } from '../context'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { RestaurantTable, TableStatus } from '../types'\n\n// ---------------------------------------------------------------------------\n// Status config\n// ---------------------------------------------------------------------------\n\nconst statusConfig: Record<TableStatus, { color: string; bg: string }> = {\n available: { color: 'text-success', bg: 'bg-success/10 border-success/30 hover:bg-success/20' },\n occupied: { color: 'text-primary', bg: 'bg-primary/10 border-primary/30 hover:bg-primary/20' },\n reserved: { color: 'text-accent', bg: 'bg-accent/10 border-accent/30 hover:bg-accent/20' },\n cleaning: { color: 'text-muted-foreground', bg: 'bg-muted border-border hover:bg-muted/80' },\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction formatElapsed(minutes: number | undefined, minLabel: string): string {\n if (minutes == null) return ''\n if (minutes < 60) return `${minutes}${minLabel}`\n const h = Math.floor(minutes / 60)\n const m = minutes % 60\n return m > 0 ? `${h}h ${m}${minLabel}` : `${h}h`\n}\n\nfunction formatCurrency(value: number | undefined): string {\n if (value == null) return ''\n return new Intl.NumberFormat(undefined, { style: 'currency', currency: 'BRL' }).format(value)\n}\n\n// ---------------------------------------------------------------------------\n// Table card\n// ---------------------------------------------------------------------------\n\nfunction TableCard({ table, isSelected, onClick, t }: {\n table: RestaurantTable\n isSelected: boolean\n onClick: () => void\n t: (key: string) => string\n}) {\n const config = statusConfig[table.status]\n const isLarge = table.seats >= 6\n const minLabel = t('tables.floorPlan.min')\n\n return (\n <button\n onClick={onClick}\n className={`\n relative flex flex-col items-center justify-center rounded-lg border-2 p-3 transition-all cursor-pointer\n ${config.bg}\n ${isLarge ? 'col-span-2' : ''}\n ${isSelected ? 'ring-2 ring-primary ring-offset-2' : ''}\n `}\n style={{ minHeight: '120px' }}\n >\n <span className={`text-2xl font-bold ${config.color}`}>{table.number}</span>\n <span className=\"text-xs text-muted-foreground mt-1\">\n {table.seats} {t('tables.floorPlan.seats')}\n </span>\n\n {table.status === 'occupied' && (\n <>\n <span className=\"text-xs font-medium mt-1\">\n {table.currentGuests} {t('tables.detail.guests').toLowerCase()}\n </span>\n <span className=\"text-[10px] text-muted-foreground\">\n {formatElapsed(table.currentElapsedMinutes, minLabel)}\n </span>\n </>\n )}\n\n <span\n className={`\n absolute -top-2 -right-2 text-[10px] px-1.5 py-0.5 rounded-full font-medium border\n ${table.status === 'occupied'\n ? 'bg-primary text-primary-foreground border-primary'\n : 'bg-secondary text-secondary-foreground border-border'}\n `}\n >\n {t(`tables.floorPlan.${table.status}`)}\n </span>\n </button>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Detail sidebar\n// ---------------------------------------------------------------------------\n\nfunction DetailPanel({ table, t }: { table: RestaurantTable; t: (key: string) => string }) {\n const updateTableStatus = useTablesStore(s => s.updateTableStatus)\n const seatGuests = useTablesStore(s => s.seatGuests)\n const closeSession = useTablesStore(s => s.closeSession)\n const minLabel = t('tables.floorPlan.min')\n\n return (\n <div className=\"rounded-lg border bg-card p-5 sticky top-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg font-bold\">\n {table.name || `#${table.number}`}\n </h3>\n <span\n className={`\n text-xs px-2 py-1 rounded-full font-medium border\n ${table.status === 'occupied'\n ? 'bg-primary text-primary-foreground border-primary'\n : 'bg-secondary text-secondary-foreground border-border'}\n `}\n >\n {t(`tables.floorPlan.${table.status}`)}\n </span>\n </div>\n\n <dl className=\"space-y-3 text-sm\">\n <div className=\"flex justify-between\">\n <dt className=\"text-muted-foreground\">{t('tables.floorPlan.seats')}</dt>\n <dd className=\"font-medium\">{table.seats}</dd>\n </div>\n {table.zoneName && (\n <div className=\"flex justify-between\">\n <dt className=\"text-muted-foreground\">{t('tables.floorPlan.zone')}</dt>\n <dd className=\"font-medium\">{table.zoneName}</dd>\n </div>\n )}\n {table.status === 'occupied' && (\n <>\n {table.currentGuests != null && (\n <div className=\"flex justify-between\">\n <dt className=\"text-muted-foreground\">{t('tables.detail.guests')}</dt>\n <dd className=\"font-medium\">{table.currentGuests}</dd>\n </div>\n )}\n {table.currentWaiterName && (\n <div className=\"flex justify-between\">\n <dt className=\"text-muted-foreground\">{t('tables.detail.waiter')}</dt>\n <dd className=\"font-medium\">{table.currentWaiterName}</dd>\n </div>\n )}\n {table.currentOrderId && (\n <div className=\"flex justify-between\">\n <dt className=\"text-muted-foreground\">{t('tables.floorPlan.order')}</dt>\n <dd className=\"font-medium\">{table.currentOrderId}</dd>\n </div>\n )}\n {table.currentTotal != null && (\n <div className=\"flex justify-between\">\n <dt className=\"text-muted-foreground\">{t('tables.detail.total')}</dt>\n <dd className=\"font-bold text-base\">{formatCurrency(table.currentTotal)}</dd>\n </div>\n )}\n {table.currentElapsedMinutes != null && (\n <div className=\"flex justify-between\">\n <dt className=\"text-muted-foreground\">{t('tables.detail.elapsed')}</dt>\n <dd className=\"font-medium\">{formatElapsed(table.currentElapsedMinutes, minLabel)}</dd>\n </div>\n )}\n </>\n )}\n </dl>\n\n <div className=\"mt-5 grid grid-cols-2 gap-2\">\n {table.status === 'available' && (\n <button\n className=\"col-span-2 inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n onClick={() => seatGuests({ tableId: table.id, guests: 2 })}\n >\n {t('tables.detail.seatGuests')}\n </button>\n )}\n {table.status === 'occupied' && (\n <>\n <button className=\"inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground transition-colors\">\n {t('tables.detail.viewOrder')}\n </button>\n <button\n className=\"inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n onClick={() => {\n if (table.currentSessionId) closeSession(table.currentSessionId)\n }}\n >\n {t('tables.detail.closeTable')}\n </button>\n </>\n )}\n {table.status === 'cleaning' && (\n <button\n className=\"col-span-2 inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n onClick={() => updateTableStatus({ tableId: table.id, status: 'available' })}\n >\n {t('tables.detail.markClean')}\n </button>\n )}\n {table.status === 'reserved' && (\n <>\n <button\n className=\"inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground transition-colors\"\n onClick={() => updateTableStatus({ tableId: table.id, status: 'available' })}\n >\n {t('tables.detail.cancel')}\n </button>\n <button\n className=\"inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n onClick={() => seatGuests({ tableId: table.id, guests: 2 })}\n >\n {t('tables.floorPlan.checkIn')}\n </button>\n </>\n )}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Loading skeleton\n// ---------------------------------------------------------------------------\n\nfunction FloorPlanSkeleton() {\n return (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-3\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"h-4 w-20 rounded bg-muted animate-pulse\" />\n ))}\n </div>\n <div className=\"grid lg:grid-cols-[1fr_320px] gap-6\">\n <div className=\"space-y-6\">\n {Array.from({ length: 2 }).map((_, z) => (\n <div key={z} className=\"rounded-lg border bg-card p-5\">\n <div className=\"h-4 w-24 rounded bg-muted animate-pulse mb-4\" />\n <div className=\"grid grid-cols-4 gap-3\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"h-[120px] rounded-lg bg-muted animate-pulse\" />\n ))}\n </div>\n </div>\n ))}\n </div>\n <div className=\"h-[300px] rounded-lg bg-muted animate-pulse\" />\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main view\n// ---------------------------------------------------------------------------\n\nexport function FloorPlanView() {\n const t = useTranslation()\n const config = useTablesConfig()\n\n const tables = useTablesStore(s => s.tables)\n const zones = useTablesStore(s => s.zones)\n const tablesLoading = useTablesStore(s => s.tablesLoading)\n const fetchTables = useTablesStore(s => s.fetchTables)\n const fetchZones = useTablesStore(s => s.fetchZones)\n const selectedTableId = useTablesStore(s => s.selectedTableId)\n const selectTable = useTablesStore(s => s.selectTable)\n\n // Fetch on mount\n useEffect(() => {\n fetchTables()\n fetchZones()\n }, [fetchTables, fetchZones])\n\n // Group tables by zone\n const tablesByZone = useMemo(() => {\n const map = new Map<string, { zoneName: string; color?: string; tables: RestaurantTable[] }>()\n\n // Seed zone order from store zones\n for (const zone of zones) {\n map.set(zone.id, { zoneName: zone.name, color: zone.color, tables: [] })\n }\n\n for (const table of tables) {\n const zoneId = table.zone\n if (!map.has(zoneId)) {\n map.set(zoneId, { zoneName: table.zoneName || zoneId, tables: [] })\n }\n map.get(zoneId)!.tables.push(table)\n }\n\n // Filter out empty zones\n return Array.from(map.entries())\n .filter(([, v]) => v.tables.length > 0)\n .map(([id, v]) => ({ id, ...v }))\n }, [tables, zones])\n\n // Summary counts\n const occupiedCount = tables.filter(t => t.status === 'occupied').length\n const availableCount = tables.filter(t => t.status === 'available').length\n\n // Selected table\n const selectedTable = selectedTableId\n ? tables.find(t => t.id === selectedTableId) ?? null\n : null\n\n // Loading state\n if (tablesLoading && tables.length === 0) {\n return <FloorPlanSkeleton />\n }\n\n // Empty state\n if (!tablesLoading && tables.length === 0) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <UtensilsCrossed className=\"h-12 w-12 text-muted-foreground/40 mb-4\" />\n <h3 className=\"text-lg font-semibold\">{t('tables.floorPlan.noTables')}</h3>\n <p className=\"text-sm text-muted-foreground mt-1\">{t('tables.floorPlan.noTablesDesc')}</p>\n </div>\n )\n }\n\n return (\n <div className=\"space-y-6\">\n {/* Header: summary + status legend */}\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div>\n <p className=\"text-muted-foreground text-sm\">\n {t('tables.floorPlan.occupiedOf')\n .replace('{occupied}', String(occupiedCount))\n .replace('{available}', String(availableCount))\n .replace('{total}', String(tables.length))}\n </p>\n </div>\n <div className=\"flex gap-3 flex-wrap\">\n {(Object.keys(statusConfig) as TableStatus[]).map(status => (\n <div key={status} className=\"flex items-center gap-1.5 text-xs\">\n <div className={`h-3 w-3 rounded-full ${statusConfig[status].bg} border`} />\n <span className=\"text-muted-foreground\">{t(`tables.floorPlan.${status}`)}</span>\n </div>\n ))}\n </div>\n </div>\n\n {/* Floor plan grid + detail panel */}\n <div className=\"grid lg:grid-cols-[1fr_320px] gap-6\">\n {/* Zone sections */}\n <div className=\"space-y-6\">\n {tablesByZone.map(zone => (\n <div key={zone.id} className=\"rounded-lg border bg-card p-5\">\n <div className=\"flex items-center gap-2 mb-4\">\n {zone.color && (\n <div\n className=\"h-3 w-3 rounded-full border\"\n style={{ backgroundColor: zone.color }}\n />\n )}\n <h3 className=\"text-sm font-semibold text-muted-foreground uppercase tracking-wider\">\n {zone.zoneName}\n </h3>\n </div>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-3\">\n {zone.tables.map(table => (\n <TableCard\n key={table.id}\n table={table}\n isSelected={table.id === selectedTableId}\n onClick={() => selectTable(table.id === selectedTableId ? null : table.id)}\n t={t}\n />\n ))}\n </div>\n </div>\n ))}\n </div>\n\n {/* Detail panel / sidebar */}\n <div>\n {selectedTable ? (\n <DetailPanel table={selectedTable} t={t} />\n ) : (\n <div className=\"rounded-lg border bg-card p-8 text-center text-muted-foreground\">\n <MapPin className=\"h-10 w-10 mx-auto mb-3 text-muted-foreground/40\" />\n <p className=\"font-medium\">{t('tables.floorPlan.selectTable')}</p>\n <p className=\"text-sm mt-1\">{t('tables.floorPlan.selectTableDesc')}</p>\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport type { StoreApi } from 'zustand/vanilla'\nimport { TablesContextProvider, type ResolvedTablesConfig } from '../context'\nimport { FloorPlanView } from './FloorPlanView'\nimport type { TablesDataProvider } from '../data/types'\nimport type { TablesUIState } from '../store'\nimport type { PluginRegistryDef } from '@fayz-ai/core'\n\nexport function TablesPage({ config, provider, store, registries }: {\n config: ResolvedTablesConfig\n provider: TablesDataProvider\n store: StoreApi<TablesUIState>\n registries?: PluginRegistryDef[]\n}) {\n return (\n <TablesContextProvider config={config} provider={provider} store={store}>\n <FloorPlanView />\n </TablesContextProvider>\n )\n}\n"]}
|
|
@@ -32,4 +32,4 @@ export declare const TablesContextProvider: import("react").FC<{
|
|
|
32
32
|
export declare const useTablesConfig: () => ResolvedTablesConfig;
|
|
33
33
|
export declare const useTablesProvider: () => TablesDataProvider;
|
|
34
34
|
export declare const useTablesStore: <T>(selector: (state: TablesUIState) => T) => T;
|
|
35
|
-
//# sourceMappingURL=
|
|
35
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAM3C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;CACtB;AAMD,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACtE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AAID,eAAO,MAAM,qBAAqB;;;;;EAAsB,CAAA;AACxD,eAAO,MAAM,eAAe,4BAAgB,CAAA;AAC5C,eAAO,MAAM,iBAAiB,0BAAkB,CAAA;AAChD,eAAO,MAAM,cAAc,iDAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registries.d.ts","sourceRoot":"","sources":["../../src/data/registries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAkBtD,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,EAa/C,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -29,5 +29,5 @@ export declare function createTablesPlugin(options?: TablesPluginOptions): Plugi
|
|
|
29
29
|
export type { TablesDataProvider } from './data/types';
|
|
30
30
|
export { createFayzTablesProvider } from './data/platform';
|
|
31
31
|
export type { FayzTablesProviderOptions } from './data/platform';
|
|
32
|
-
export type { ResolvedTablesConfig } from './
|
|
32
|
+
export type { ResolvedTablesConfig } from './context';
|
|
33
33
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAa3C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAaD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB,CAAA;IACD,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpC,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAA;IAC9C,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACtE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AA2BD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,cAAc,CAkGhF;AAED,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAa3C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAaD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB,CAAA;IACD,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpC,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAA;IAC9C,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACtE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AA2BD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,cAAc,CAkGhF;AAED,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { createStore } from 'zustand/vanilla';
|
|
3
|
-
import { PluginSettingsPanel, dedup } from '@fayz-ai/
|
|
3
|
+
import { PluginSettingsPanel, dedup } from '@fayz-ai/admin';
|
|
4
4
|
import { toast } from 'sonner';
|
|
5
5
|
import { createFayzClient } from '@fayz-ai/sdk';
|
|
6
6
|
|
|
@@ -361,7 +361,7 @@ function createTablesStore(provider) {
|
|
|
361
361
|
}));
|
|
362
362
|
}
|
|
363
363
|
|
|
364
|
-
// src/registries.ts
|
|
364
|
+
// src/data/registries.ts
|
|
365
365
|
var zoneEntity = {
|
|
366
366
|
name: "Zone",
|
|
367
367
|
namePlural: "Zones",
|
|
@@ -754,7 +754,7 @@ function createFayzTablesProvider(options = {}) {
|
|
|
754
754
|
}
|
|
755
755
|
|
|
756
756
|
// src/index.ts
|
|
757
|
-
var TablesPage = React.lazy(() => import('./TablesPage-
|
|
757
|
+
var TablesPage = React.lazy(() => import('./TablesPage-QUFTXYLX.js').then((m) => ({ default: m.TablesPage })));
|
|
758
758
|
var DEFAULT_LABELS = {
|
|
759
759
|
pageTitle: "Tables",
|
|
760
760
|
floorPlan: "Floor Plan",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/mock.ts","../src/store.ts","../src/registries.ts","../src/locales/en.ts","../src/locales/pt-BR.ts","../src/locales/index.ts","../src/data/platform.ts","../src/index.ts"],"names":["table"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n RestaurantTable, TableSession, Zone,\n CreateTableInput, SeatGuestsInput, UpdateTableStatusInput,\n TableQuery, TablesSummary, TableShape,\n} from '../types'\nimport type { TablesDataProvider } from './types'\n\n// ---------------------------------------------------------------------------\n// ID generator\n// ---------------------------------------------------------------------------\n\nlet uid = 0\nfunction nextId(prefix: string) { return prefix + '-' + (++uid) }\n\n// ---------------------------------------------------------------------------\n// Seed helpers\n// ---------------------------------------------------------------------------\n\nconst TENANT = 'mock-tenant'\nconst NOW = new Date().toISOString()\n\nfunction makeTable(\n id: string,\n number: number,\n seats: number,\n zone: string,\n zoneName: string,\n shape: TableShape,\n gridCol: number,\n gridRow: number,\n): RestaurantTable {\n return {\n id,\n name: `Table ${number}`,\n number,\n seats,\n status: 'available',\n zone,\n zoneName,\n shape,\n gridCol,\n gridRow,\n isActive: true,\n tenantId: TENANT,\n createdAt: NOW,\n updatedAt: NOW,\n }\n}\n\nfunction seedZones(): Zone[] {\n return [\n { id: nextId('zone'), name: 'Indoor', color: '#3b82f6', sortOrder: 0, isActive: true, tenantId: TENANT, createdAt: NOW },\n { id: nextId('zone'), name: 'Outdoor', color: '#22c55e', sortOrder: 1, isActive: true, tenantId: TENANT, createdAt: NOW },\n { id: nextId('zone'), name: 'Bar', color: '#f59e0b', sortOrder: 2, isActive: true, tenantId: TENANT, createdAt: NOW },\n ]\n}\n\nfunction seedTables(zones: Zone[]): RestaurantTable[] {\n const [indoor, outdoor, bar] = zones\n\n const tables: RestaurantTable[] = []\n\n // Indoor zone — tables 1-8, 4x2 grid, alternating 4/6 seats, square/rectangle\n for (let i = 0; i < 8; i++) {\n const num = i + 1\n tables.push(makeTable(\n nextId('table'),\n num,\n i % 2 === 0 ? 4 : 6,\n indoor.id,\n indoor.name,\n i % 2 === 0 ? 'square' : 'rectangle',\n (i % 4),\n Math.floor(i / 4),\n ))\n }\n\n // Outdoor zone — tables 9-10, round, 4 seats\n tables.push(makeTable(nextId('table'), 9, 4, outdoor.id, outdoor.name, 'round', 0, 0))\n tables.push(makeTable(nextId('table'), 10, 4, outdoor.id, outdoor.name, 'round', 1, 0))\n\n // Bar zone — tables 11-12, bar shape, 2 seats\n tables.push(makeTable(nextId('table'), 11, 2, bar.id, bar.name, 'bar', 0, 0))\n tables.push(makeTable(nextId('table'), 12, 2, bar.id, bar.name, 'bar', 1, 0))\n\n return tables\n}\n\n// ---------------------------------------------------------------------------\n// Provider factory\n// ---------------------------------------------------------------------------\n\nexport function createMockTablesProvider(): TablesDataProvider {\n const zones = seedZones()\n const tables = seedTables(zones)\n const sessions: TableSession[] = []\n\n // ------- helpers -------\n\n function findTable(id: string) {\n return tables.find(t => t.id === id) ?? null\n }\n\n function matchesQuery(table: RestaurantTable, query?: TableQuery): boolean {\n if (!query) return true\n if (query.zone && table.zone !== query.zone) return false\n if (query.status) {\n const statuses = Array.isArray(query.status) ? query.status : [query.status]\n if (!statuses.includes(table.status)) return false\n }\n if (query.search) {\n const s = query.search.toLowerCase()\n if (\n !table.name.toLowerCase().includes(s) &&\n !String(table.number).includes(s) &&\n !(table.zoneName ?? '').toLowerCase().includes(s)\n ) return false\n }\n return true\n }\n\n // ------- provider -------\n\n return {\n // ---- Tables ----\n\n async getTables(query?: TableQuery) {\n return tables.filter(t => matchesQuery(t, query))\n },\n\n async getTableById(id: string) {\n return findTable(id)\n },\n\n async createTable(input: CreateTableInput) {\n const zone = zones.find(z => z.id === input.zone)\n const table: RestaurantTable = {\n id: nextId('table'),\n name: input.name,\n number: input.number,\n seats: input.seats,\n status: 'available',\n zone: input.zone,\n zoneName: zone?.name,\n shape: input.shape ?? 'square',\n gridCol: input.gridCol ?? 0,\n gridRow: input.gridRow ?? 0,\n isActive: true,\n tenantId: TENANT,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }\n tables.push(table)\n return table\n },\n\n async updateTable(id: string, data: Partial<RestaurantTable>) {\n const table = findTable(id)\n if (!table) throw new Error(`Table ${id} not found`)\n Object.assign(table, data, { updatedAt: new Date().toISOString() })\n return table\n },\n\n async deleteTable(id: string) {\n const idx = tables.findIndex(t => t.id === id)\n if (idx !== -1) tables.splice(idx, 1)\n },\n\n async updateTableStatus(input: UpdateTableStatusInput) {\n const table = findTable(input.tableId)\n if (!table) throw new Error(`Table ${input.tableId} not found`)\n table.status = input.status\n table.updatedAt = new Date().toISOString()\n return table\n },\n\n async updateTablePositions(positions: Array<{ id: string; gridCol: number; gridRow: number }>) {\n for (const pos of positions) {\n const table = findTable(pos.id)\n if (table) {\n table.gridCol = pos.gridCol\n table.gridRow = pos.gridRow\n table.updatedAt = new Date().toISOString()\n }\n }\n },\n\n // ---- Sessions ----\n\n async seatGuests(input: SeatGuestsInput) {\n const table = findTable(input.tableId)\n if (!table) throw new Error(`Table ${input.tableId} not found`)\n\n const session: TableSession = {\n id: nextId('session'),\n tableId: input.tableId,\n tableName: table.name,\n guests: input.guests,\n waiterId: input.waiterId,\n waiterName: input.waiterId ? `Waiter ${input.waiterId}` : undefined,\n seatedAt: new Date().toISOString(),\n status: 'active',\n notes: input.notes,\n tenantId: TENANT,\n createdAt: new Date().toISOString(),\n }\n sessions.push(session)\n\n // Denormalize onto table\n table.status = 'occupied'\n table.currentSessionId = session.id\n table.currentGuests = input.guests\n table.currentWaiterName = session.waiterName\n table.currentElapsedMinutes = 0\n table.currentTotal = 0\n table.updatedAt = new Date().toISOString()\n\n return session\n },\n\n async closeSession(sessionId: string) {\n const session = sessions.find(s => s.id === sessionId)\n if (!session) throw new Error(`Session ${sessionId} not found`)\n\n session.status = 'closed'\n session.closedAt = new Date().toISOString()\n\n // Update table → cleaning\n const table = findTable(session.tableId)\n if (table) {\n table.status = 'cleaning'\n table.currentSessionId = undefined\n table.currentOrderId = undefined\n table.currentGuests = undefined\n table.currentWaiterName = undefined\n table.currentElapsedMinutes = undefined\n table.currentTotal = undefined\n table.updatedAt = new Date().toISOString()\n }\n\n return session\n },\n\n async getActiveSessions() {\n return sessions.filter(s => s.status === 'active')\n },\n\n async getSessionHistory(tableId?: string) {\n const closed = sessions.filter(s => s.status === 'closed')\n if (tableId) return closed.filter(s => s.tableId === tableId)\n return closed\n },\n\n // ---- Zones ----\n\n async getZones() {\n return [...zones]\n },\n\n async createZone(data: Partial<Zone>) {\n const zone: Zone = {\n id: nextId('zone'),\n name: data.name ?? 'New Zone',\n color: data.color,\n sortOrder: data.sortOrder ?? zones.length,\n isActive: data.isActive ?? true,\n tenantId: TENANT,\n createdAt: new Date().toISOString(),\n }\n zones.push(zone)\n return zone\n },\n\n async updateZone(id: string, data: Partial<Zone>) {\n const zone = zones.find(z => z.id === id)\n if (!zone) throw new Error(`Zone ${id} not found`)\n Object.assign(zone, data)\n return zone\n },\n\n async deleteZone(id: string) {\n const idx = zones.findIndex(z => z.id === id)\n if (idx !== -1) zones.splice(idx, 1)\n },\n\n // ---- Summary ----\n\n async getSummary(): Promise<TablesSummary> {\n const available = tables.filter(t => t.status === 'available').length\n const occupied = tables.filter(t => t.status === 'occupied').length\n const reserved = tables.filter(t => t.status === 'reserved').length\n const cleaning = tables.filter(t => t.status === 'cleaning').length\n\n const totalSeats = tables.reduce((sum, t) => sum + t.seats, 0)\n const occupiedSeats = tables\n .filter(t => t.status === 'occupied')\n .reduce((sum, t) => sum + (t.currentGuests ?? t.seats), 0)\n\n const closedSessions = sessions.filter(s => s.status === 'closed' && s.closedAt)\n let averageSessionMinutes = 0\n if (closedSessions.length > 0) {\n const totalMinutes = closedSessions.reduce((sum, s) => {\n const seated = new Date(s.seatedAt).getTime()\n const closed = new Date(s.closedAt!).getTime()\n return sum + (closed - seated) / 60_000\n }, 0)\n averageSessionMinutes = Math.round(totalMinutes / closedSessions.length)\n }\n\n return {\n totalTables: tables.length,\n availableCount: available,\n occupiedCount: occupied,\n reservedCount: reserved,\n cleaningCount: cleaning,\n totalSeats,\n occupiedSeats,\n averageSessionMinutes,\n }\n },\n }\n}\n","import { createStore, type StoreApi } from 'zustand/vanilla'\nimport { dedup } from '@fayz-ai/saas'\nimport { toast } from 'sonner'\nimport type { TablesDataProvider } from './data/types'\nimport type {\n RestaurantTable, TableSession, Zone,\n CreateTableInput, SeatGuestsInput, UpdateTableStatusInput,\n TableQuery, TablesSummary,\n} from './types'\n\n// ---------------------------------------------------------------------------\n// Store state\n// ---------------------------------------------------------------------------\n\nexport interface TablesUIState {\n // Data cache\n tables: RestaurantTable[]\n tablesLoading: boolean\n\n zones: Zone[]\n zonesLoading: boolean\n\n activeSessions: TableSession[]\n sessionsLoading: boolean\n\n sessionHistory: TableSession[]\n historyLoading: boolean\n\n summary: TablesSummary | null\n summaryLoading: boolean\n\n selectedTableId: string | null\n\n // Actions\n fetchTables(query?: TableQuery): Promise<void>\n fetchZones(): Promise<void>\n fetchActiveSessions(): Promise<void>\n fetchSessionHistory(tableId?: string): Promise<void>\n fetchSummary(): Promise<void>\n selectTable(id: string | null): void\n seatGuests(input: SeatGuestsInput): Promise<TableSession>\n closeSession(sessionId: string): Promise<void>\n updateTableStatus(input: UpdateTableStatusInput): Promise<void>\n createTable(input: CreateTableInput): Promise<RestaurantTable>\n}\n\n// ---------------------------------------------------------------------------\n// Store factory\n// ---------------------------------------------------------------------------\n\nexport function createTablesStore(provider: TablesDataProvider): StoreApi<TablesUIState> {\n return createStore<TablesUIState>((set, get) => ({\n tables: [],\n tablesLoading: false,\n\n zones: [],\n zonesLoading: false,\n\n activeSessions: [],\n sessionsLoading: false,\n\n sessionHistory: [],\n historyLoading: false,\n\n summary: null,\n summaryLoading: false,\n\n selectedTableId: null,\n\n async fetchTables(query) {\n return dedup('tables:tables:' + JSON.stringify(query), async () => {\n set({ tablesLoading: true })\n const tables = await provider.getTables(query)\n set({ tables, tablesLoading: false })\n })\n },\n\n async fetchZones() {\n return dedup('tables:zones', async () => {\n set({ zonesLoading: true })\n const zones = await provider.getZones()\n set({ zones, zonesLoading: false })\n })\n },\n\n async fetchActiveSessions() {\n return dedup('tables:activeSessions', async () => {\n set({ sessionsLoading: true })\n const activeSessions = await provider.getActiveSessions()\n set({ activeSessions, sessionsLoading: false })\n })\n },\n\n async fetchSessionHistory(tableId) {\n return dedup('tables:history:' + (tableId ?? ''), async () => {\n set({ historyLoading: true })\n const sessionHistory = await provider.getSessionHistory(tableId)\n set({ sessionHistory, historyLoading: false })\n })\n },\n\n async fetchSummary() {\n return dedup('tables:summary', async () => {\n set({ summaryLoading: true })\n const summary = await provider.getSummary()\n set({ summary, summaryLoading: false })\n })\n },\n\n selectTable(id) {\n set({ selectedTableId: id })\n },\n\n async seatGuests(input) {\n try {\n const session = await provider.seatGuests(input)\n const [tables, activeSessions, summary] = await Promise.all([\n provider.getTables(),\n provider.getActiveSessions(),\n provider.getSummary(),\n ])\n set({ tables, activeSessions, summary })\n toast.success('Guests seated')\n return session\n } catch (err: any) {\n toast.error('Failed to seat guests', { description: err?.message })\n throw err\n }\n },\n\n async closeSession(sessionId) {\n try {\n await provider.closeSession(sessionId)\n const [tables, activeSessions, summary] = await Promise.all([\n provider.getTables(),\n provider.getActiveSessions(),\n provider.getSummary(),\n ])\n set({ tables, activeSessions, summary })\n toast.success('Session closed')\n } catch (err: any) {\n toast.error('Failed to close session', { description: err?.message })\n throw err\n }\n },\n\n async updateTableStatus(input) {\n try {\n await provider.updateTableStatus(input)\n const [tables, summary] = await Promise.all([\n provider.getTables(),\n provider.getSummary(),\n ])\n set({ tables, summary })\n toast.success('Table status updated')\n } catch (err: any) {\n toast.error('Failed to update table status', { description: err?.message })\n throw err\n }\n },\n\n async createTable(input) {\n try {\n const table = await provider.createTable(input)\n const [tables, summary] = await Promise.all([\n provider.getTables(),\n provider.getSummary(),\n ])\n set({ tables, summary })\n toast.success('Table created')\n return table\n } catch (err: any) {\n toast.error('Failed to create table', { description: err?.message })\n throw err\n }\n },\n }))\n}\n","import type { PluginRegistryDef } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\n\nconst zoneEntity: EntityDef = {\n name: 'Zone',\n namePlural: 'Zones',\n icon: 'MapPin',\n displayField: 'name',\n defaultSort: 'sortOrder',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'color', label: 'Color', type: 'text', showInTable: true },\n { key: 'sortOrder', label: 'Order', type: 'number', showInTable: true, defaultValue: 0 },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'restaurant_zones', tenantScoped: true },\n}\n\nexport const tablesRegistries: PluginRegistryDef[] = [\n {\n id: 'zones',\n entity: zoneEntity,\n icon: 'MapPin',\n description: 'Floor plan zones (indoor, outdoor, bar, etc.)',\n display: 'table',\n seedData: [\n { id: 'z-indoor', name: 'Indoor', color: '#3b82f6', sortOrder: 0, isActive: true },\n { id: 'z-outdoor', name: 'Outdoor', color: '#22c55e', sortOrder: 1, isActive: true },\n { id: 'z-bar', name: 'Bar', color: '#f59e0b', sortOrder: 2, isActive: true },\n ],\n },\n]\n","export const en: Record<string, string> = {\n 'tables.title': 'Tables',\n 'tables.nav.floorPlan': 'Floor Plan',\n 'tables.nav.zones': 'Zones',\n 'tables.nav.history': 'Session History',\n 'tables.floorPlan.title': 'Floor Plan',\n 'tables.floorPlan.subtitle': 'Manage table layout and seating',\n 'tables.floorPlan.available': 'Available',\n 'tables.floorPlan.occupied': 'Occupied',\n 'tables.floorPlan.reserved': 'Reserved',\n 'tables.floorPlan.cleaning': 'Cleaning',\n 'tables.floorPlan.seats': 'seats',\n 'tables.floorPlan.noTables': 'No tables configured',\n 'tables.floorPlan.noTablesDesc': 'Add your first table to get started',\n 'tables.floorPlan.addTable': 'Add Table',\n 'tables.floorPlan.occupiedOf': '{occupied} occupied, {available} available of {total} tables',\n 'tables.floorPlan.selectTable': 'Select a table',\n 'tables.floorPlan.selectTableDesc': 'Click on any table to see details and actions',\n 'tables.floorPlan.min': 'min',\n 'tables.floorPlan.zone': 'Zone',\n 'tables.floorPlan.order': 'Order',\n 'tables.floorPlan.checkIn': 'Check In',\n 'tables.detail.currentSession': 'Current Session',\n 'tables.detail.guests': 'Guests',\n 'tables.detail.waiter': 'Waiter',\n 'tables.detail.elapsed': 'Elapsed',\n 'tables.detail.total': 'Running Total',\n 'tables.detail.viewOrder': 'View Order',\n 'tables.detail.seatGuests': 'Seat Guests',\n 'tables.detail.closeTable': 'Close Table',\n 'tables.detail.markClean': 'Mark Ready',\n 'tables.detail.cancel': 'Cancel',\n 'tables.seat.title': 'Seat Guests',\n 'tables.seat.guestCount': 'Number of guests',\n 'tables.seat.waiter': 'Waiter',\n 'tables.seat.notes': 'Notes',\n 'tables.seat.confirm': 'Seat',\n 'tables.history.title': 'Session History',\n 'tables.history.table': 'Table',\n 'tables.history.guests': 'Guests',\n 'tables.history.waiter': 'Waiter',\n 'tables.history.duration': 'Duration',\n 'tables.history.noSessions': 'No session history yet',\n 'tables.settings.title': 'Tables Settings',\n}\n","export const ptBR: Record<string, string> = {\n 'tables.title': 'Mesas',\n 'tables.nav.floorPlan': 'Mapa de Mesas',\n 'tables.nav.zones': 'Áreas',\n 'tables.nav.history': 'Histórico',\n 'tables.floorPlan.title': 'Mapa de Mesas',\n 'tables.floorPlan.subtitle': 'Gerencie o layout e a ocupação das mesas',\n 'tables.floorPlan.available': 'Disponível',\n 'tables.floorPlan.occupied': 'Ocupada',\n 'tables.floorPlan.reserved': 'Reservada',\n 'tables.floorPlan.cleaning': 'Limpeza',\n 'tables.floorPlan.seats': 'lugares',\n 'tables.floorPlan.noTables': 'Nenhuma mesa configurada',\n 'tables.floorPlan.noTablesDesc': 'Adicione a primeira mesa para começar',\n 'tables.floorPlan.addTable': 'Adicionar Mesa',\n 'tables.floorPlan.occupiedOf': '{occupied} ocupadas, {available} disponíveis de {total} mesas',\n 'tables.floorPlan.selectTable': 'Selecione uma mesa',\n 'tables.floorPlan.selectTableDesc': 'Clique em uma mesa para ver detalhes e ações',\n 'tables.floorPlan.min': 'min',\n 'tables.floorPlan.zone': 'Área',\n 'tables.floorPlan.order': 'Pedido',\n 'tables.floorPlan.checkIn': 'Check-in',\n 'tables.detail.currentSession': 'Sessão Atual',\n 'tables.detail.guests': 'Pessoas',\n 'tables.detail.waiter': 'Garçom',\n 'tables.detail.elapsed': 'Tempo',\n 'tables.detail.total': 'Total Parcial',\n 'tables.detail.viewOrder': 'Ver Pedido',\n 'tables.detail.seatGuests': 'Sentar Clientes',\n 'tables.detail.closeTable': 'Fechar Mesa',\n 'tables.detail.markClean': 'Marcar Pronta',\n 'tables.detail.cancel': 'Cancelar',\n 'tables.seat.title': 'Sentar Clientes',\n 'tables.seat.guestCount': 'Número de pessoas',\n 'tables.seat.waiter': 'Garçom',\n 'tables.seat.notes': 'Observações',\n 'tables.seat.confirm': 'Sentar',\n 'tables.history.title': 'Histórico de Sessões',\n 'tables.history.table': 'Mesa',\n 'tables.history.guests': 'Pessoas',\n 'tables.history.waiter': 'Garçom',\n 'tables.history.duration': 'Duração',\n 'tables.history.noSessions': 'Nenhum histórico de sessões',\n 'tables.settings.title': 'Configurações de Mesas',\n}\n","import { en } from './en'\nimport { ptBR } from './pt-BR'\n\nexport const tablesLocales: Record<string, Record<string, string>> = { en, 'pt-BR': ptBR }\n","import { createFayzClient, type FayzClientOptions, type FayzTableFilter } from '@fayz-ai/sdk'\nimport type {\n CreateTableInput,\n RestaurantTable,\n SeatGuestsInput,\n TableQuery,\n TableSession,\n TablesSummary,\n TableStatus,\n UpdateTableStatusInput,\n Zone,\n} from '../types'\nimport type { TablesDataProvider } from './types'\n\nexport interface FayzTablesProviderOptions extends FayzClientOptions {\n projectId?: string\n tableName?: string\n schema?: string\n runtime?: boolean\n /**\n * Active tenant id (or a getter) used to scope reads and stamp writes on the\n * restaurant_tables table. When omitted, scoping is left to runtime/RLS.\n */\n tenantId?: string | (() => string | undefined | null)\n}\n\ninterface RestaurantTableRow {\n id: string\n tenant_id?: string | null\n name?: string | null\n number?: number | null\n seats?: number | null\n status?: TableStatus | null\n zone?: string | null\n zone_name?: string | null\n shape?: RestaurantTable['shape'] | null\n grid_col?: number | null\n grid_row?: number | null\n is_active?: boolean | null\n current_session_id?: string | null\n current_order_id?: string | null\n current_guests?: number | null\n current_waiter_name?: string | null\n current_elapsed_minutes?: number | null\n current_total?: number | null\n metadata?: Record<string, unknown> | null\n created_at?: string | null\n updated_at?: string | null\n}\n\nconst DEFAULT_TABLE_NAME = 'restaurant_tables'\n\nfunction nowIso(): string {\n return new Date().toISOString()\n}\n\nfunction rowToTable(row: RestaurantTableRow): RestaurantTable {\n const number = row.number ?? 0\n const zone = row.zone ?? 'indoor'\n return {\n id: row.id,\n name: row.name ?? `Table ${number}`,\n number,\n seats: row.seats ?? 4,\n status: row.status ?? 'available',\n zone,\n zoneName: row.zone_name ?? zone,\n shape: row.shape ?? 'square',\n gridCol: row.grid_col ?? 0,\n gridRow: row.grid_row ?? 0,\n isActive: row.is_active ?? true,\n currentSessionId: row.current_session_id ?? undefined,\n currentOrderId: row.current_order_id ?? undefined,\n currentGuests: row.current_guests ?? undefined,\n currentWaiterName: row.current_waiter_name ?? undefined,\n currentElapsedMinutes: row.current_elapsed_minutes ?? undefined,\n currentTotal: row.current_total ?? undefined,\n metadata: row.metadata ?? {},\n tenantId: row.tenant_id ?? 'runtime-tenant',\n createdAt: row.created_at ?? nowIso(),\n updatedAt: row.updated_at ?? row.created_at ?? nowIso(),\n }\n}\n\nfunction tableCreatePayload(input: CreateTableInput): Record<string, unknown> {\n return {\n name: input.name,\n number: input.number,\n seats: input.seats,\n zone: input.zone,\n shape: input.shape ?? 'square',\n grid_col: input.gridCol ?? 0,\n grid_row: input.gridRow ?? 0,\n status: 'available',\n is_active: true,\n }\n}\n\nfunction tableUpdatePayload(data: Partial<RestaurantTable>): Record<string, unknown> {\n const payload: Record<string, unknown> = {}\n if (data.name !== undefined) payload.name = data.name\n if (data.number !== undefined) payload.number = data.number\n if (data.seats !== undefined) payload.seats = data.seats\n if (data.status !== undefined) payload.status = data.status\n if (data.zone !== undefined) payload.zone = data.zone\n if (data.zoneName !== undefined) payload.zone_name = data.zoneName\n if (data.shape !== undefined) payload.shape = data.shape\n if (data.gridCol !== undefined) payload.grid_col = data.gridCol\n if (data.gridRow !== undefined) payload.grid_row = data.gridRow\n if (data.isActive !== undefined) payload.is_active = data.isActive\n if (data.currentSessionId !== undefined) payload.current_session_id = data.currentSessionId\n if (data.currentOrderId !== undefined) payload.current_order_id = data.currentOrderId\n if (data.currentGuests !== undefined) payload.current_guests = data.currentGuests\n if (data.currentWaiterName !== undefined) payload.current_waiter_name = data.currentWaiterName\n if (data.currentElapsedMinutes !== undefined) payload.current_elapsed_minutes = data.currentElapsedMinutes\n if (data.currentTotal !== undefined) payload.current_total = data.currentTotal\n if (data.metadata !== undefined) payload.metadata = data.metadata\n return payload\n}\n\nfunction filtersFromQuery(query?: TableQuery): FayzTableFilter[] {\n const filters: FayzTableFilter[] = [{ column: 'is_active', operator: 'eq', value: true }]\n if (!query) return filters\n if (query.zone) filters.push({ column: 'zone', operator: 'eq', value: query.zone })\n if (query.status && !Array.isArray(query.status)) {\n filters.push({ column: 'status', operator: 'eq', value: query.status })\n }\n return filters\n}\n\nfunction matchesClientQuery(table: RestaurantTable, query?: TableQuery): boolean {\n if (!query) return true\n if (Array.isArray(query.status) && !query.status.includes(table.status)) return false\n if (query.search) {\n const search = query.search.toLowerCase()\n return table.name.toLowerCase().includes(search)\n || String(table.number).includes(search)\n || (table.zoneName?.toLowerCase().includes(search) ?? false)\n }\n return true\n}\n\nfunction summarize(tables: RestaurantTable[]): TablesSummary {\n const availableCount = tables.filter((table) => table.status === 'available').length\n const occupiedCount = tables.filter((table) => table.status === 'occupied').length\n const reservedCount = tables.filter((table) => table.status === 'reserved').length\n const cleaningCount = tables.filter((table) => table.status === 'cleaning').length\n const totalSeats = tables.reduce((sum, table) => sum + table.seats, 0)\n const occupiedSeats = tables\n .filter((table) => table.status === 'occupied')\n .reduce((sum, table) => sum + (table.currentGuests ?? table.seats), 0)\n\n return {\n totalTables: tables.length,\n availableCount,\n occupiedCount,\n reservedCount,\n cleaningCount,\n totalSeats,\n occupiedSeats,\n averageSessionMinutes: 0,\n }\n}\n\nexport function createFayzTablesProvider(options: FayzTablesProviderOptions = {}): TablesDataProvider {\n const client = createFayzClient(options)\n const table = options.tableName ?? DEFAULT_TABLE_NAME\n const baseOptions = {\n projectId: options.projectId,\n table,\n schema: options.schema,\n runtime: options.runtime,\n }\n\n function resolveTenant(): string | undefined {\n const value = typeof options.tenantId === 'function' ? options.tenantId() : options.tenantId\n return value ?? undefined\n }\n\n function withTenant(filters: FayzTableFilter[]): FayzTableFilter[] {\n const tenantId = resolveTenant()\n return tenantId ? [{ column: 'tenant_id', operator: 'eq', value: tenantId }, ...filters] : filters\n }\n\n async function listTables(query?: TableQuery): Promise<RestaurantTable[]> {\n const response = await client.data.listRows<RestaurantTableRow>({\n ...baseOptions,\n filters: withTenant(filtersFromQuery(query)),\n sortColumn: 'number',\n sortDirection: 'asc',\n limit: 500,\n })\n return response.rows.map(rowToTable).filter((item) => matchesClientQuery(item, query))\n }\n\n async function getById(id: string): Promise<RestaurantTable | null> {\n const response = await client.data.listRows<RestaurantTableRow>({\n ...baseOptions,\n filters: withTenant([{ column: 'id', operator: 'eq', value: id }]),\n limit: 1,\n })\n return response.rows[0] ? rowToTable(response.rows[0]) : null\n }\n\n return {\n async getTables(query?: TableQuery) {\n return listTables(query)\n },\n\n async getTableById(id: string) {\n return getById(id)\n },\n\n async createTable(input: CreateTableInput) {\n const tenantId = resolveTenant()\n const row = await client.data.createRow<RestaurantTableRow>({\n ...baseOptions,\n row: tenantId ? { ...tableCreatePayload(input), tenant_id: tenantId } : tableCreatePayload(input),\n })\n return rowToTable(row)\n },\n\n async updateTable(id: string, data: Partial<RestaurantTable>) {\n const row = await client.data.updateRow<RestaurantTableRow>({\n ...baseOptions,\n primaryKeys: { id },\n row: tableUpdatePayload(data),\n })\n return rowToTable(row)\n },\n\n async deleteTable(id: string) {\n await client.data.deleteRows({ ...baseOptions, rows: [{ id }] })\n },\n\n async updateTableStatus(input: UpdateTableStatusInput) {\n return this.updateTable(input.tableId, { status: input.status })\n },\n\n async updateTablePositions(positions: Array<{ id: string; gridCol: number; gridRow: number }>) {\n await Promise.all(positions.map((position) => this.updateTable(position.id, {\n gridCol: position.gridCol,\n gridRow: position.gridRow,\n })))\n },\n\n async seatGuests(input: SeatGuestsInput) {\n const table = await this.updateTable(input.tableId, {\n status: 'occupied',\n currentGuests: input.guests,\n currentWaiterName: input.waiterId ? `Waiter ${input.waiterId}` : undefined,\n currentElapsedMinutes: 0,\n currentTotal: 0,\n })\n const session: TableSession = {\n id: table.currentSessionId ?? `runtime-session-${table.id}`,\n tableId: table.id,\n tableName: table.name,\n guests: input.guests,\n waiterId: input.waiterId,\n waiterName: table.currentWaiterName,\n seatedAt: nowIso(),\n status: 'active',\n notes: input.notes,\n tenantId: table.tenantId,\n createdAt: nowIso(),\n }\n return session\n },\n\n async closeSession(sessionId: string) {\n const tables = await listTables()\n const table = tables.find((item) => item.currentSessionId === sessionId)\n if (table) await this.updateTable(table.id, {\n status: 'cleaning',\n currentSessionId: undefined,\n currentOrderId: undefined,\n currentGuests: undefined,\n currentWaiterName: undefined,\n currentElapsedMinutes: undefined,\n currentTotal: undefined,\n })\n return {\n id: sessionId,\n tableId: table?.id ?? '',\n tableName: table?.name,\n guests: table?.currentGuests ?? 0,\n seatedAt: nowIso(),\n closedAt: nowIso(),\n status: 'closed',\n tenantId: table?.tenantId ?? 'runtime-tenant',\n createdAt: nowIso(),\n }\n },\n\n async getActiveSessions() {\n const tables = await listTables({ status: 'occupied' })\n return tables.map((table) => ({\n id: table.currentSessionId ?? `runtime-session-${table.id}`,\n tableId: table.id,\n tableName: table.name,\n guests: table.currentGuests ?? table.seats,\n waiterName: table.currentWaiterName,\n seatedAt: nowIso(),\n status: 'active' as const,\n tenantId: table.tenantId,\n createdAt: nowIso(),\n }))\n },\n\n async getSessionHistory() {\n return []\n },\n\n async getZones() {\n const tables = await listTables()\n const zones = new Map<string, Zone>()\n for (const table of tables) {\n if (zones.has(table.zone)) continue\n zones.set(table.zone, {\n id: table.zone,\n name: table.zoneName ?? table.zone,\n sortOrder: zones.size,\n isActive: true,\n tenantId: table.tenantId,\n createdAt: table.createdAt,\n })\n }\n return [...zones.values()]\n },\n\n async createZone() {\n throw new Error('Restaurant zone writes require a dedicated Fayz table/broker contract.')\n },\n\n async updateZone() {\n throw new Error('Restaurant zone writes require a dedicated Fayz table/broker contract.')\n },\n\n async deleteZone() {\n throw new Error('Restaurant zone writes require a dedicated Fayz table/broker contract.')\n },\n\n async getSummary() {\n return summarize(await listTables())\n },\n }\n}\n","import React from 'react'\nimport type { PluginManifest, PluginScope, VerticalId } from '@fayz-ai/core'\nimport type { TablesDataProvider } from './data/types'\nimport type { TableSession } from './types'\nimport { createMockTablesProvider } from './data/mock'\nimport { createTablesStore } from './store'\nimport { tablesRegistries } from './registries'\nimport { tablesLocales } from './locales'\nimport { PluginSettingsPanel } from '@fayz-ai/saas'\n\nconst TablesPage = React.lazy(() => import('./TablesPage').then((m) => ({ default: m.TablesPage })))\n\n// ---------------------------------------------------------------------------\n// Labels\n// ---------------------------------------------------------------------------\n\nexport interface TablesPluginLabels {\n pageTitle: string\n floorPlan: string\n zones: string\n sessionHistory: string\n}\n\nconst DEFAULT_LABELS: TablesPluginLabels = {\n pageTitle: 'Tables',\n floorPlan: 'Floor Plan',\n zones: 'Zones',\n sessionHistory: 'Session History',\n}\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport interface TablesPluginOptions {\n modules?: {\n reservations?: boolean\n sessionHistory?: boolean\n }\n labels?: Partial<TablesPluginLabels>\n defaultZones?: Array<{ name: string; color?: string }>\n navPosition?: number\n navSection?: 'main' | 'secondary' | 'settings'\n scope?: PluginScope\n verticalId?: VerticalId\n dataProvider?: TablesDataProvider\n onTableSeated?: (session: TableSession) => Promise<string | undefined>\n onTableClosed?: (session: TableSession) => Promise<void>\n}\n\n// ---------------------------------------------------------------------------\n// Config resolver\n// ---------------------------------------------------------------------------\n\nfunction resolveConfig(options?: TablesPluginOptions) {\n return {\n modules: {\n reservations: options?.modules?.reservations === true,\n sessionHistory: options?.modules?.sessionHistory !== false,\n },\n labels: { ...DEFAULT_LABELS, ...options?.labels } as any,\n defaultZones: options?.defaultZones ?? [\n { name: 'Indoor', color: '#3b82f6' },\n { name: 'Outdoor', color: '#22c55e' },\n { name: 'Bar', color: '#f59e0b' },\n ],\n onTableSeated: options?.onTableSeated,\n onTableClosed: options?.onTableClosed,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nexport function createTablesPlugin(options?: TablesPluginOptions): PluginManifest {\n const config = resolveConfig(options)\n const provider = options?.dataProvider ?? createMockTablesProvider()\n const store = createTablesStore(provider)\n\n const PageComponent: React.FC<any> = () =>\n React.createElement(React.Suspense, { fallback: null },\n React.createElement(TablesPage, { config, provider, store, registries: tablesRegistries })\n )\n\n return {\n id: 'tables',\n name: config.labels.pageTitle,\n icon: 'MapPin',\n version: '1.0.0',\n scope: options?.scope ?? 'vertical',\n verticalId: options?.verticalId,\n defaultEnabled: true,\n dependencies: [],\n navigation: [\n {\n section: options?.navSection ?? 'main',\n position: options?.navPosition ?? 4,\n label: config.labels.pageTitle,\n route: '/tables',\n icon: 'MapPin',\n permission: { feature: 'tables', action: 'read' as const },\n },\n ],\n routes: [\n {\n path: '/tables',\n component: PageComponent,\n permission: { feature: 'tables', action: 'read' as const },\n },\n ],\n widgets: [],\n aiTools: [\n {\n id: 'tables.availability',\n name: 'getTableAvailability',\n description: 'Returns which tables are available, occupied, reserved, or being cleaned.',\n icon: 'MapPin',\n mode: 'read' as const,\n category: 'Tables',\n parameters: {\n type: 'object' as const,\n properties: {\n zone: { type: 'string' as const, description: 'Filter by zone name' },\n status: { type: 'string' as const, enum: ['available', 'occupied', 'reserved', 'cleaning'] },\n },\n },\n suggestions: [\n { label: 'Which tables are available right now?' },\n { label: 'How many tables are occupied?' },\n ],\n },\n {\n id: 'tables.seat-guests',\n name: 'seatGuests',\n description: 'Seats guests at a specific table.',\n icon: 'UserPlus',\n mode: 'persist' as const,\n category: 'Tables',\n parameters: {\n type: 'object' as const,\n properties: {\n tableNumber: { type: 'number' as const, description: 'Table number' },\n guests: { type: 'number' as const, description: 'Number of guests' },\n },\n required: ['tableNumber', 'guests'],\n },\n permission: { feature: 'tables', action: 'edit' as const },\n },\n ],\n registries: tablesRegistries,\n settings: [\n {\n id: 'tables',\n label: config.labels.pageTitle,\n icon: 'MapPin',\n component: (() => {\n const TablesSettingsTab: React.ComponentType<unknown> = () =>\n React.createElement(PluginSettingsPanel, {\n title: 'Tables Settings',\n subtitle: 'Zones and floor plan configuration',\n registries: tablesRegistries,\n routeBase: '/settings/tables',\n })\n TablesSettingsTab.displayName = 'TablesSettingsTab'\n return TablesSettingsTab\n })(),\n order: 21,\n permission: { feature: 'tables', action: 'read' as const },\n },\n ],\n locales: tablesLocales,\n }\n}\n\nexport type { TablesDataProvider } from './data/types'\nexport { createFayzTablesProvider } from './data/platform'\nexport type { FayzTablesProviderOptions } from './data/platform'\nexport type { ResolvedTablesConfig } from './TablesContext'\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/data/mock.ts","../src/store.ts","../src/data/registries.ts","../src/locales/en.ts","../src/locales/pt-BR.ts","../src/locales/index.ts","../src/data/platform.ts","../src/index.ts"],"names":["table"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n RestaurantTable, TableSession, Zone,\n CreateTableInput, SeatGuestsInput, UpdateTableStatusInput,\n TableQuery, TablesSummary, TableShape,\n} from '../types'\nimport type { TablesDataProvider } from './types'\n\n// ---------------------------------------------------------------------------\n// ID generator\n// ---------------------------------------------------------------------------\n\nlet uid = 0\nfunction nextId(prefix: string) { return prefix + '-' + (++uid) }\n\n// ---------------------------------------------------------------------------\n// Seed helpers\n// ---------------------------------------------------------------------------\n\nconst TENANT = 'mock-tenant'\nconst NOW = new Date().toISOString()\n\nfunction makeTable(\n id: string,\n number: number,\n seats: number,\n zone: string,\n zoneName: string,\n shape: TableShape,\n gridCol: number,\n gridRow: number,\n): RestaurantTable {\n return {\n id,\n name: `Table ${number}`,\n number,\n seats,\n status: 'available',\n zone,\n zoneName,\n shape,\n gridCol,\n gridRow,\n isActive: true,\n tenantId: TENANT,\n createdAt: NOW,\n updatedAt: NOW,\n }\n}\n\nfunction seedZones(): Zone[] {\n return [\n { id: nextId('zone'), name: 'Indoor', color: '#3b82f6', sortOrder: 0, isActive: true, tenantId: TENANT, createdAt: NOW },\n { id: nextId('zone'), name: 'Outdoor', color: '#22c55e', sortOrder: 1, isActive: true, tenantId: TENANT, createdAt: NOW },\n { id: nextId('zone'), name: 'Bar', color: '#f59e0b', sortOrder: 2, isActive: true, tenantId: TENANT, createdAt: NOW },\n ]\n}\n\nfunction seedTables(zones: Zone[]): RestaurantTable[] {\n const [indoor, outdoor, bar] = zones\n\n const tables: RestaurantTable[] = []\n\n // Indoor zone — tables 1-8, 4x2 grid, alternating 4/6 seats, square/rectangle\n for (let i = 0; i < 8; i++) {\n const num = i + 1\n tables.push(makeTable(\n nextId('table'),\n num,\n i % 2 === 0 ? 4 : 6,\n indoor.id,\n indoor.name,\n i % 2 === 0 ? 'square' : 'rectangle',\n (i % 4),\n Math.floor(i / 4),\n ))\n }\n\n // Outdoor zone — tables 9-10, round, 4 seats\n tables.push(makeTable(nextId('table'), 9, 4, outdoor.id, outdoor.name, 'round', 0, 0))\n tables.push(makeTable(nextId('table'), 10, 4, outdoor.id, outdoor.name, 'round', 1, 0))\n\n // Bar zone — tables 11-12, bar shape, 2 seats\n tables.push(makeTable(nextId('table'), 11, 2, bar.id, bar.name, 'bar', 0, 0))\n tables.push(makeTable(nextId('table'), 12, 2, bar.id, bar.name, 'bar', 1, 0))\n\n return tables\n}\n\n// ---------------------------------------------------------------------------\n// Provider factory\n// ---------------------------------------------------------------------------\n\nexport function createMockTablesProvider(): TablesDataProvider {\n const zones = seedZones()\n const tables = seedTables(zones)\n const sessions: TableSession[] = []\n\n // ------- helpers -------\n\n function findTable(id: string) {\n return tables.find(t => t.id === id) ?? null\n }\n\n function matchesQuery(table: RestaurantTable, query?: TableQuery): boolean {\n if (!query) return true\n if (query.zone && table.zone !== query.zone) return false\n if (query.status) {\n const statuses = Array.isArray(query.status) ? query.status : [query.status]\n if (!statuses.includes(table.status)) return false\n }\n if (query.search) {\n const s = query.search.toLowerCase()\n if (\n !table.name.toLowerCase().includes(s) &&\n !String(table.number).includes(s) &&\n !(table.zoneName ?? '').toLowerCase().includes(s)\n ) return false\n }\n return true\n }\n\n // ------- provider -------\n\n return {\n // ---- Tables ----\n\n async getTables(query?: TableQuery) {\n return tables.filter(t => matchesQuery(t, query))\n },\n\n async getTableById(id: string) {\n return findTable(id)\n },\n\n async createTable(input: CreateTableInput) {\n const zone = zones.find(z => z.id === input.zone)\n const table: RestaurantTable = {\n id: nextId('table'),\n name: input.name,\n number: input.number,\n seats: input.seats,\n status: 'available',\n zone: input.zone,\n zoneName: zone?.name,\n shape: input.shape ?? 'square',\n gridCol: input.gridCol ?? 0,\n gridRow: input.gridRow ?? 0,\n isActive: true,\n tenantId: TENANT,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }\n tables.push(table)\n return table\n },\n\n async updateTable(id: string, data: Partial<RestaurantTable>) {\n const table = findTable(id)\n if (!table) throw new Error(`Table ${id} not found`)\n Object.assign(table, data, { updatedAt: new Date().toISOString() })\n return table\n },\n\n async deleteTable(id: string) {\n const idx = tables.findIndex(t => t.id === id)\n if (idx !== -1) tables.splice(idx, 1)\n },\n\n async updateTableStatus(input: UpdateTableStatusInput) {\n const table = findTable(input.tableId)\n if (!table) throw new Error(`Table ${input.tableId} not found`)\n table.status = input.status\n table.updatedAt = new Date().toISOString()\n return table\n },\n\n async updateTablePositions(positions: Array<{ id: string; gridCol: number; gridRow: number }>) {\n for (const pos of positions) {\n const table = findTable(pos.id)\n if (table) {\n table.gridCol = pos.gridCol\n table.gridRow = pos.gridRow\n table.updatedAt = new Date().toISOString()\n }\n }\n },\n\n // ---- Sessions ----\n\n async seatGuests(input: SeatGuestsInput) {\n const table = findTable(input.tableId)\n if (!table) throw new Error(`Table ${input.tableId} not found`)\n\n const session: TableSession = {\n id: nextId('session'),\n tableId: input.tableId,\n tableName: table.name,\n guests: input.guests,\n waiterId: input.waiterId,\n waiterName: input.waiterId ? `Waiter ${input.waiterId}` : undefined,\n seatedAt: new Date().toISOString(),\n status: 'active',\n notes: input.notes,\n tenantId: TENANT,\n createdAt: new Date().toISOString(),\n }\n sessions.push(session)\n\n // Denormalize onto table\n table.status = 'occupied'\n table.currentSessionId = session.id\n table.currentGuests = input.guests\n table.currentWaiterName = session.waiterName\n table.currentElapsedMinutes = 0\n table.currentTotal = 0\n table.updatedAt = new Date().toISOString()\n\n return session\n },\n\n async closeSession(sessionId: string) {\n const session = sessions.find(s => s.id === sessionId)\n if (!session) throw new Error(`Session ${sessionId} not found`)\n\n session.status = 'closed'\n session.closedAt = new Date().toISOString()\n\n // Update table → cleaning\n const table = findTable(session.tableId)\n if (table) {\n table.status = 'cleaning'\n table.currentSessionId = undefined\n table.currentOrderId = undefined\n table.currentGuests = undefined\n table.currentWaiterName = undefined\n table.currentElapsedMinutes = undefined\n table.currentTotal = undefined\n table.updatedAt = new Date().toISOString()\n }\n\n return session\n },\n\n async getActiveSessions() {\n return sessions.filter(s => s.status === 'active')\n },\n\n async getSessionHistory(tableId?: string) {\n const closed = sessions.filter(s => s.status === 'closed')\n if (tableId) return closed.filter(s => s.tableId === tableId)\n return closed\n },\n\n // ---- Zones ----\n\n async getZones() {\n return [...zones]\n },\n\n async createZone(data: Partial<Zone>) {\n const zone: Zone = {\n id: nextId('zone'),\n name: data.name ?? 'New Zone',\n color: data.color,\n sortOrder: data.sortOrder ?? zones.length,\n isActive: data.isActive ?? true,\n tenantId: TENANT,\n createdAt: new Date().toISOString(),\n }\n zones.push(zone)\n return zone\n },\n\n async updateZone(id: string, data: Partial<Zone>) {\n const zone = zones.find(z => z.id === id)\n if (!zone) throw new Error(`Zone ${id} not found`)\n Object.assign(zone, data)\n return zone\n },\n\n async deleteZone(id: string) {\n const idx = zones.findIndex(z => z.id === id)\n if (idx !== -1) zones.splice(idx, 1)\n },\n\n // ---- Summary ----\n\n async getSummary(): Promise<TablesSummary> {\n const available = tables.filter(t => t.status === 'available').length\n const occupied = tables.filter(t => t.status === 'occupied').length\n const reserved = tables.filter(t => t.status === 'reserved').length\n const cleaning = tables.filter(t => t.status === 'cleaning').length\n\n const totalSeats = tables.reduce((sum, t) => sum + t.seats, 0)\n const occupiedSeats = tables\n .filter(t => t.status === 'occupied')\n .reduce((sum, t) => sum + (t.currentGuests ?? t.seats), 0)\n\n const closedSessions = sessions.filter(s => s.status === 'closed' && s.closedAt)\n let averageSessionMinutes = 0\n if (closedSessions.length > 0) {\n const totalMinutes = closedSessions.reduce((sum, s) => {\n const seated = new Date(s.seatedAt).getTime()\n const closed = new Date(s.closedAt!).getTime()\n return sum + (closed - seated) / 60_000\n }, 0)\n averageSessionMinutes = Math.round(totalMinutes / closedSessions.length)\n }\n\n return {\n totalTables: tables.length,\n availableCount: available,\n occupiedCount: occupied,\n reservedCount: reserved,\n cleaningCount: cleaning,\n totalSeats,\n occupiedSeats,\n averageSessionMinutes,\n }\n },\n }\n}\n","import { createStore, type StoreApi } from 'zustand/vanilla'\nimport { dedup } from '@fayz-ai/admin'\nimport { toast } from 'sonner'\nimport type { TablesDataProvider } from './data/types'\nimport type {\n RestaurantTable, TableSession, Zone,\n CreateTableInput, SeatGuestsInput, UpdateTableStatusInput,\n TableQuery, TablesSummary,\n} from './types'\n\n// ---------------------------------------------------------------------------\n// Store state\n// ---------------------------------------------------------------------------\n\nexport interface TablesUIState {\n // Data cache\n tables: RestaurantTable[]\n tablesLoading: boolean\n\n zones: Zone[]\n zonesLoading: boolean\n\n activeSessions: TableSession[]\n sessionsLoading: boolean\n\n sessionHistory: TableSession[]\n historyLoading: boolean\n\n summary: TablesSummary | null\n summaryLoading: boolean\n\n selectedTableId: string | null\n\n // Actions\n fetchTables(query?: TableQuery): Promise<void>\n fetchZones(): Promise<void>\n fetchActiveSessions(): Promise<void>\n fetchSessionHistory(tableId?: string): Promise<void>\n fetchSummary(): Promise<void>\n selectTable(id: string | null): void\n seatGuests(input: SeatGuestsInput): Promise<TableSession>\n closeSession(sessionId: string): Promise<void>\n updateTableStatus(input: UpdateTableStatusInput): Promise<void>\n createTable(input: CreateTableInput): Promise<RestaurantTable>\n}\n\n// ---------------------------------------------------------------------------\n// Store factory\n// ---------------------------------------------------------------------------\n\nexport function createTablesStore(provider: TablesDataProvider): StoreApi<TablesUIState> {\n return createStore<TablesUIState>((set, get) => ({\n tables: [],\n tablesLoading: false,\n\n zones: [],\n zonesLoading: false,\n\n activeSessions: [],\n sessionsLoading: false,\n\n sessionHistory: [],\n historyLoading: false,\n\n summary: null,\n summaryLoading: false,\n\n selectedTableId: null,\n\n async fetchTables(query) {\n return dedup('tables:tables:' + JSON.stringify(query), async () => {\n set({ tablesLoading: true })\n const tables = await provider.getTables(query)\n set({ tables, tablesLoading: false })\n })\n },\n\n async fetchZones() {\n return dedup('tables:zones', async () => {\n set({ zonesLoading: true })\n const zones = await provider.getZones()\n set({ zones, zonesLoading: false })\n })\n },\n\n async fetchActiveSessions() {\n return dedup('tables:activeSessions', async () => {\n set({ sessionsLoading: true })\n const activeSessions = await provider.getActiveSessions()\n set({ activeSessions, sessionsLoading: false })\n })\n },\n\n async fetchSessionHistory(tableId) {\n return dedup('tables:history:' + (tableId ?? ''), async () => {\n set({ historyLoading: true })\n const sessionHistory = await provider.getSessionHistory(tableId)\n set({ sessionHistory, historyLoading: false })\n })\n },\n\n async fetchSummary() {\n return dedup('tables:summary', async () => {\n set({ summaryLoading: true })\n const summary = await provider.getSummary()\n set({ summary, summaryLoading: false })\n })\n },\n\n selectTable(id) {\n set({ selectedTableId: id })\n },\n\n async seatGuests(input) {\n try {\n const session = await provider.seatGuests(input)\n const [tables, activeSessions, summary] = await Promise.all([\n provider.getTables(),\n provider.getActiveSessions(),\n provider.getSummary(),\n ])\n set({ tables, activeSessions, summary })\n toast.success('Guests seated')\n return session\n } catch (err: any) {\n toast.error('Failed to seat guests', { description: err?.message })\n throw err\n }\n },\n\n async closeSession(sessionId) {\n try {\n await provider.closeSession(sessionId)\n const [tables, activeSessions, summary] = await Promise.all([\n provider.getTables(),\n provider.getActiveSessions(),\n provider.getSummary(),\n ])\n set({ tables, activeSessions, summary })\n toast.success('Session closed')\n } catch (err: any) {\n toast.error('Failed to close session', { description: err?.message })\n throw err\n }\n },\n\n async updateTableStatus(input) {\n try {\n await provider.updateTableStatus(input)\n const [tables, summary] = await Promise.all([\n provider.getTables(),\n provider.getSummary(),\n ])\n set({ tables, summary })\n toast.success('Table status updated')\n } catch (err: any) {\n toast.error('Failed to update table status', { description: err?.message })\n throw err\n }\n },\n\n async createTable(input) {\n try {\n const table = await provider.createTable(input)\n const [tables, summary] = await Promise.all([\n provider.getTables(),\n provider.getSummary(),\n ])\n set({ tables, summary })\n toast.success('Table created')\n return table\n } catch (err: any) {\n toast.error('Failed to create table', { description: err?.message })\n throw err\n }\n },\n }))\n}\n","import type { PluginRegistryDef } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\n\nconst zoneEntity: EntityDef = {\n name: 'Zone',\n namePlural: 'Zones',\n icon: 'MapPin',\n displayField: 'name',\n defaultSort: 'sortOrder',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'color', label: 'Color', type: 'text', showInTable: true },\n { key: 'sortOrder', label: 'Order', type: 'number', showInTable: true, defaultValue: 0 },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'restaurant_zones', tenantScoped: true },\n}\n\nexport const tablesRegistries: PluginRegistryDef[] = [\n {\n id: 'zones',\n entity: zoneEntity,\n icon: 'MapPin',\n description: 'Floor plan zones (indoor, outdoor, bar, etc.)',\n display: 'table',\n seedData: [\n { id: 'z-indoor', name: 'Indoor', color: '#3b82f6', sortOrder: 0, isActive: true },\n { id: 'z-outdoor', name: 'Outdoor', color: '#22c55e', sortOrder: 1, isActive: true },\n { id: 'z-bar', name: 'Bar', color: '#f59e0b', sortOrder: 2, isActive: true },\n ],\n },\n]\n","export const en: Record<string, string> = {\n 'tables.title': 'Tables',\n 'tables.nav.floorPlan': 'Floor Plan',\n 'tables.nav.zones': 'Zones',\n 'tables.nav.history': 'Session History',\n 'tables.floorPlan.title': 'Floor Plan',\n 'tables.floorPlan.subtitle': 'Manage table layout and seating',\n 'tables.floorPlan.available': 'Available',\n 'tables.floorPlan.occupied': 'Occupied',\n 'tables.floorPlan.reserved': 'Reserved',\n 'tables.floorPlan.cleaning': 'Cleaning',\n 'tables.floorPlan.seats': 'seats',\n 'tables.floorPlan.noTables': 'No tables configured',\n 'tables.floorPlan.noTablesDesc': 'Add your first table to get started',\n 'tables.floorPlan.addTable': 'Add Table',\n 'tables.floorPlan.occupiedOf': '{occupied} occupied, {available} available of {total} tables',\n 'tables.floorPlan.selectTable': 'Select a table',\n 'tables.floorPlan.selectTableDesc': 'Click on any table to see details and actions',\n 'tables.floorPlan.min': 'min',\n 'tables.floorPlan.zone': 'Zone',\n 'tables.floorPlan.order': 'Order',\n 'tables.floorPlan.checkIn': 'Check In',\n 'tables.detail.currentSession': 'Current Session',\n 'tables.detail.guests': 'Guests',\n 'tables.detail.waiter': 'Waiter',\n 'tables.detail.elapsed': 'Elapsed',\n 'tables.detail.total': 'Running Total',\n 'tables.detail.viewOrder': 'View Order',\n 'tables.detail.seatGuests': 'Seat Guests',\n 'tables.detail.closeTable': 'Close Table',\n 'tables.detail.markClean': 'Mark Ready',\n 'tables.detail.cancel': 'Cancel',\n 'tables.seat.title': 'Seat Guests',\n 'tables.seat.guestCount': 'Number of guests',\n 'tables.seat.waiter': 'Waiter',\n 'tables.seat.notes': 'Notes',\n 'tables.seat.confirm': 'Seat',\n 'tables.history.title': 'Session History',\n 'tables.history.table': 'Table',\n 'tables.history.guests': 'Guests',\n 'tables.history.waiter': 'Waiter',\n 'tables.history.duration': 'Duration',\n 'tables.history.noSessions': 'No session history yet',\n 'tables.settings.title': 'Tables Settings',\n}\n","export const ptBR: Record<string, string> = {\n 'tables.title': 'Mesas',\n 'tables.nav.floorPlan': 'Mapa de Mesas',\n 'tables.nav.zones': 'Áreas',\n 'tables.nav.history': 'Histórico',\n 'tables.floorPlan.title': 'Mapa de Mesas',\n 'tables.floorPlan.subtitle': 'Gerencie o layout e a ocupação das mesas',\n 'tables.floorPlan.available': 'Disponível',\n 'tables.floorPlan.occupied': 'Ocupada',\n 'tables.floorPlan.reserved': 'Reservada',\n 'tables.floorPlan.cleaning': 'Limpeza',\n 'tables.floorPlan.seats': 'lugares',\n 'tables.floorPlan.noTables': 'Nenhuma mesa configurada',\n 'tables.floorPlan.noTablesDesc': 'Adicione a primeira mesa para começar',\n 'tables.floorPlan.addTable': 'Adicionar Mesa',\n 'tables.floorPlan.occupiedOf': '{occupied} ocupadas, {available} disponíveis de {total} mesas',\n 'tables.floorPlan.selectTable': 'Selecione uma mesa',\n 'tables.floorPlan.selectTableDesc': 'Clique em uma mesa para ver detalhes e ações',\n 'tables.floorPlan.min': 'min',\n 'tables.floorPlan.zone': 'Área',\n 'tables.floorPlan.order': 'Pedido',\n 'tables.floorPlan.checkIn': 'Check-in',\n 'tables.detail.currentSession': 'Sessão Atual',\n 'tables.detail.guests': 'Pessoas',\n 'tables.detail.waiter': 'Garçom',\n 'tables.detail.elapsed': 'Tempo',\n 'tables.detail.total': 'Total Parcial',\n 'tables.detail.viewOrder': 'Ver Pedido',\n 'tables.detail.seatGuests': 'Sentar Clientes',\n 'tables.detail.closeTable': 'Fechar Mesa',\n 'tables.detail.markClean': 'Marcar Pronta',\n 'tables.detail.cancel': 'Cancelar',\n 'tables.seat.title': 'Sentar Clientes',\n 'tables.seat.guestCount': 'Número de pessoas',\n 'tables.seat.waiter': 'Garçom',\n 'tables.seat.notes': 'Observações',\n 'tables.seat.confirm': 'Sentar',\n 'tables.history.title': 'Histórico de Sessões',\n 'tables.history.table': 'Mesa',\n 'tables.history.guests': 'Pessoas',\n 'tables.history.waiter': 'Garçom',\n 'tables.history.duration': 'Duração',\n 'tables.history.noSessions': 'Nenhum histórico de sessões',\n 'tables.settings.title': 'Configurações de Mesas',\n}\n","import { en } from './en'\nimport { ptBR } from './pt-BR'\n\nexport const tablesLocales: Record<string, Record<string, string>> = { en, 'pt-BR': ptBR }\n","import { createFayzClient, type FayzClientOptions, type FayzTableFilter } from '@fayz-ai/sdk'\nimport type {\n CreateTableInput,\n RestaurantTable,\n SeatGuestsInput,\n TableQuery,\n TableSession,\n TablesSummary,\n TableStatus,\n UpdateTableStatusInput,\n Zone,\n} from '../types'\nimport type { TablesDataProvider } from './types'\n\nexport interface FayzTablesProviderOptions extends FayzClientOptions {\n projectId?: string\n tableName?: string\n schema?: string\n runtime?: boolean\n /**\n * Active tenant id (or a getter) used to scope reads and stamp writes on the\n * restaurant_tables table. When omitted, scoping is left to runtime/RLS.\n */\n tenantId?: string | (() => string | undefined | null)\n}\n\ninterface RestaurantTableRow {\n id: string\n tenant_id?: string | null\n name?: string | null\n number?: number | null\n seats?: number | null\n status?: TableStatus | null\n zone?: string | null\n zone_name?: string | null\n shape?: RestaurantTable['shape'] | null\n grid_col?: number | null\n grid_row?: number | null\n is_active?: boolean | null\n current_session_id?: string | null\n current_order_id?: string | null\n current_guests?: number | null\n current_waiter_name?: string | null\n current_elapsed_minutes?: number | null\n current_total?: number | null\n metadata?: Record<string, unknown> | null\n created_at?: string | null\n updated_at?: string | null\n}\n\nconst DEFAULT_TABLE_NAME = 'restaurant_tables'\n\nfunction nowIso(): string {\n return new Date().toISOString()\n}\n\nfunction rowToTable(row: RestaurantTableRow): RestaurantTable {\n const number = row.number ?? 0\n const zone = row.zone ?? 'indoor'\n return {\n id: row.id,\n name: row.name ?? `Table ${number}`,\n number,\n seats: row.seats ?? 4,\n status: row.status ?? 'available',\n zone,\n zoneName: row.zone_name ?? zone,\n shape: row.shape ?? 'square',\n gridCol: row.grid_col ?? 0,\n gridRow: row.grid_row ?? 0,\n isActive: row.is_active ?? true,\n currentSessionId: row.current_session_id ?? undefined,\n currentOrderId: row.current_order_id ?? undefined,\n currentGuests: row.current_guests ?? undefined,\n currentWaiterName: row.current_waiter_name ?? undefined,\n currentElapsedMinutes: row.current_elapsed_minutes ?? undefined,\n currentTotal: row.current_total ?? undefined,\n metadata: row.metadata ?? {},\n tenantId: row.tenant_id ?? 'runtime-tenant',\n createdAt: row.created_at ?? nowIso(),\n updatedAt: row.updated_at ?? row.created_at ?? nowIso(),\n }\n}\n\nfunction tableCreatePayload(input: CreateTableInput): Record<string, unknown> {\n return {\n name: input.name,\n number: input.number,\n seats: input.seats,\n zone: input.zone,\n shape: input.shape ?? 'square',\n grid_col: input.gridCol ?? 0,\n grid_row: input.gridRow ?? 0,\n status: 'available',\n is_active: true,\n }\n}\n\nfunction tableUpdatePayload(data: Partial<RestaurantTable>): Record<string, unknown> {\n const payload: Record<string, unknown> = {}\n if (data.name !== undefined) payload.name = data.name\n if (data.number !== undefined) payload.number = data.number\n if (data.seats !== undefined) payload.seats = data.seats\n if (data.status !== undefined) payload.status = data.status\n if (data.zone !== undefined) payload.zone = data.zone\n if (data.zoneName !== undefined) payload.zone_name = data.zoneName\n if (data.shape !== undefined) payload.shape = data.shape\n if (data.gridCol !== undefined) payload.grid_col = data.gridCol\n if (data.gridRow !== undefined) payload.grid_row = data.gridRow\n if (data.isActive !== undefined) payload.is_active = data.isActive\n if (data.currentSessionId !== undefined) payload.current_session_id = data.currentSessionId\n if (data.currentOrderId !== undefined) payload.current_order_id = data.currentOrderId\n if (data.currentGuests !== undefined) payload.current_guests = data.currentGuests\n if (data.currentWaiterName !== undefined) payload.current_waiter_name = data.currentWaiterName\n if (data.currentElapsedMinutes !== undefined) payload.current_elapsed_minutes = data.currentElapsedMinutes\n if (data.currentTotal !== undefined) payload.current_total = data.currentTotal\n if (data.metadata !== undefined) payload.metadata = data.metadata\n return payload\n}\n\nfunction filtersFromQuery(query?: TableQuery): FayzTableFilter[] {\n const filters: FayzTableFilter[] = [{ column: 'is_active', operator: 'eq', value: true }]\n if (!query) return filters\n if (query.zone) filters.push({ column: 'zone', operator: 'eq', value: query.zone })\n if (query.status && !Array.isArray(query.status)) {\n filters.push({ column: 'status', operator: 'eq', value: query.status })\n }\n return filters\n}\n\nfunction matchesClientQuery(table: RestaurantTable, query?: TableQuery): boolean {\n if (!query) return true\n if (Array.isArray(query.status) && !query.status.includes(table.status)) return false\n if (query.search) {\n const search = query.search.toLowerCase()\n return table.name.toLowerCase().includes(search)\n || String(table.number).includes(search)\n || (table.zoneName?.toLowerCase().includes(search) ?? false)\n }\n return true\n}\n\nfunction summarize(tables: RestaurantTable[]): TablesSummary {\n const availableCount = tables.filter((table) => table.status === 'available').length\n const occupiedCount = tables.filter((table) => table.status === 'occupied').length\n const reservedCount = tables.filter((table) => table.status === 'reserved').length\n const cleaningCount = tables.filter((table) => table.status === 'cleaning').length\n const totalSeats = tables.reduce((sum, table) => sum + table.seats, 0)\n const occupiedSeats = tables\n .filter((table) => table.status === 'occupied')\n .reduce((sum, table) => sum + (table.currentGuests ?? table.seats), 0)\n\n return {\n totalTables: tables.length,\n availableCount,\n occupiedCount,\n reservedCount,\n cleaningCount,\n totalSeats,\n occupiedSeats,\n averageSessionMinutes: 0,\n }\n}\n\nexport function createFayzTablesProvider(options: FayzTablesProviderOptions = {}): TablesDataProvider {\n const client = createFayzClient(options)\n const table = options.tableName ?? DEFAULT_TABLE_NAME\n const baseOptions = {\n projectId: options.projectId,\n table,\n schema: options.schema,\n runtime: options.runtime,\n }\n\n function resolveTenant(): string | undefined {\n const value = typeof options.tenantId === 'function' ? options.tenantId() : options.tenantId\n return value ?? undefined\n }\n\n function withTenant(filters: FayzTableFilter[]): FayzTableFilter[] {\n const tenantId = resolveTenant()\n return tenantId ? [{ column: 'tenant_id', operator: 'eq', value: tenantId }, ...filters] : filters\n }\n\n async function listTables(query?: TableQuery): Promise<RestaurantTable[]> {\n const response = await client.data.listRows<RestaurantTableRow>({\n ...baseOptions,\n filters: withTenant(filtersFromQuery(query)),\n sortColumn: 'number',\n sortDirection: 'asc',\n limit: 500,\n })\n return response.rows.map(rowToTable).filter((item) => matchesClientQuery(item, query))\n }\n\n async function getById(id: string): Promise<RestaurantTable | null> {\n const response = await client.data.listRows<RestaurantTableRow>({\n ...baseOptions,\n filters: withTenant([{ column: 'id', operator: 'eq', value: id }]),\n limit: 1,\n })\n return response.rows[0] ? rowToTable(response.rows[0]) : null\n }\n\n return {\n async getTables(query?: TableQuery) {\n return listTables(query)\n },\n\n async getTableById(id: string) {\n return getById(id)\n },\n\n async createTable(input: CreateTableInput) {\n const tenantId = resolveTenant()\n const row = await client.data.createRow<RestaurantTableRow>({\n ...baseOptions,\n row: tenantId ? { ...tableCreatePayload(input), tenant_id: tenantId } : tableCreatePayload(input),\n })\n return rowToTable(row)\n },\n\n async updateTable(id: string, data: Partial<RestaurantTable>) {\n const row = await client.data.updateRow<RestaurantTableRow>({\n ...baseOptions,\n primaryKeys: { id },\n row: tableUpdatePayload(data),\n })\n return rowToTable(row)\n },\n\n async deleteTable(id: string) {\n await client.data.deleteRows({ ...baseOptions, rows: [{ id }] })\n },\n\n async updateTableStatus(input: UpdateTableStatusInput) {\n return this.updateTable(input.tableId, { status: input.status })\n },\n\n async updateTablePositions(positions: Array<{ id: string; gridCol: number; gridRow: number }>) {\n await Promise.all(positions.map((position) => this.updateTable(position.id, {\n gridCol: position.gridCol,\n gridRow: position.gridRow,\n })))\n },\n\n async seatGuests(input: SeatGuestsInput) {\n const table = await this.updateTable(input.tableId, {\n status: 'occupied',\n currentGuests: input.guests,\n currentWaiterName: input.waiterId ? `Waiter ${input.waiterId}` : undefined,\n currentElapsedMinutes: 0,\n currentTotal: 0,\n })\n const session: TableSession = {\n id: table.currentSessionId ?? `runtime-session-${table.id}`,\n tableId: table.id,\n tableName: table.name,\n guests: input.guests,\n waiterId: input.waiterId,\n waiterName: table.currentWaiterName,\n seatedAt: nowIso(),\n status: 'active',\n notes: input.notes,\n tenantId: table.tenantId,\n createdAt: nowIso(),\n }\n return session\n },\n\n async closeSession(sessionId: string) {\n const tables = await listTables()\n const table = tables.find((item) => item.currentSessionId === sessionId)\n if (table) await this.updateTable(table.id, {\n status: 'cleaning',\n currentSessionId: undefined,\n currentOrderId: undefined,\n currentGuests: undefined,\n currentWaiterName: undefined,\n currentElapsedMinutes: undefined,\n currentTotal: undefined,\n })\n return {\n id: sessionId,\n tableId: table?.id ?? '',\n tableName: table?.name,\n guests: table?.currentGuests ?? 0,\n seatedAt: nowIso(),\n closedAt: nowIso(),\n status: 'closed',\n tenantId: table?.tenantId ?? 'runtime-tenant',\n createdAt: nowIso(),\n }\n },\n\n async getActiveSessions() {\n const tables = await listTables({ status: 'occupied' })\n return tables.map((table) => ({\n id: table.currentSessionId ?? `runtime-session-${table.id}`,\n tableId: table.id,\n tableName: table.name,\n guests: table.currentGuests ?? table.seats,\n waiterName: table.currentWaiterName,\n seatedAt: nowIso(),\n status: 'active' as const,\n tenantId: table.tenantId,\n createdAt: nowIso(),\n }))\n },\n\n async getSessionHistory() {\n return []\n },\n\n async getZones() {\n const tables = await listTables()\n const zones = new Map<string, Zone>()\n for (const table of tables) {\n if (zones.has(table.zone)) continue\n zones.set(table.zone, {\n id: table.zone,\n name: table.zoneName ?? table.zone,\n sortOrder: zones.size,\n isActive: true,\n tenantId: table.tenantId,\n createdAt: table.createdAt,\n })\n }\n return [...zones.values()]\n },\n\n async createZone() {\n throw new Error('Restaurant zone writes require a dedicated Fayz table/broker contract.')\n },\n\n async updateZone() {\n throw new Error('Restaurant zone writes require a dedicated Fayz table/broker contract.')\n },\n\n async deleteZone() {\n throw new Error('Restaurant zone writes require a dedicated Fayz table/broker contract.')\n },\n\n async getSummary() {\n return summarize(await listTables())\n },\n }\n}\n","import React from 'react'\nimport type { PluginManifest, PluginScope, VerticalId } from '@fayz-ai/core'\nimport type { TablesDataProvider } from './data/types'\nimport type { TableSession } from './types'\nimport { createMockTablesProvider } from './data/mock'\nimport { createTablesStore } from './store'\nimport { tablesRegistries } from './data/registries'\nimport { tablesLocales } from './locales'\nimport { PluginSettingsPanel } from '@fayz-ai/admin'\n\nconst TablesPage = React.lazy(() => import('./views/TablesPage').then((m) => ({ default: m.TablesPage })))\n\n// ---------------------------------------------------------------------------\n// Labels\n// ---------------------------------------------------------------------------\n\nexport interface TablesPluginLabels {\n pageTitle: string\n floorPlan: string\n zones: string\n sessionHistory: string\n}\n\nconst DEFAULT_LABELS: TablesPluginLabels = {\n pageTitle: 'Tables',\n floorPlan: 'Floor Plan',\n zones: 'Zones',\n sessionHistory: 'Session History',\n}\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport interface TablesPluginOptions {\n modules?: {\n reservations?: boolean\n sessionHistory?: boolean\n }\n labels?: Partial<TablesPluginLabels>\n defaultZones?: Array<{ name: string; color?: string }>\n navPosition?: number\n navSection?: 'main' | 'secondary' | 'settings'\n scope?: PluginScope\n verticalId?: VerticalId\n dataProvider?: TablesDataProvider\n onTableSeated?: (session: TableSession) => Promise<string | undefined>\n onTableClosed?: (session: TableSession) => Promise<void>\n}\n\n// ---------------------------------------------------------------------------\n// Config resolver\n// ---------------------------------------------------------------------------\n\nfunction resolveConfig(options?: TablesPluginOptions) {\n return {\n modules: {\n reservations: options?.modules?.reservations === true,\n sessionHistory: options?.modules?.sessionHistory !== false,\n },\n labels: { ...DEFAULT_LABELS, ...options?.labels } as any,\n defaultZones: options?.defaultZones ?? [\n { name: 'Indoor', color: '#3b82f6' },\n { name: 'Outdoor', color: '#22c55e' },\n { name: 'Bar', color: '#f59e0b' },\n ],\n onTableSeated: options?.onTableSeated,\n onTableClosed: options?.onTableClosed,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nexport function createTablesPlugin(options?: TablesPluginOptions): PluginManifest {\n const config = resolveConfig(options)\n const provider = options?.dataProvider ?? createMockTablesProvider()\n const store = createTablesStore(provider)\n\n const PageComponent: React.FC<any> = () =>\n React.createElement(React.Suspense, { fallback: null },\n React.createElement(TablesPage, { config, provider, store, registries: tablesRegistries })\n )\n\n return {\n id: 'tables',\n name: config.labels.pageTitle,\n icon: 'MapPin',\n version: '1.0.0',\n scope: options?.scope ?? 'vertical',\n verticalId: options?.verticalId,\n defaultEnabled: true,\n dependencies: [],\n navigation: [\n {\n section: options?.navSection ?? 'main',\n position: options?.navPosition ?? 4,\n label: config.labels.pageTitle,\n route: '/tables',\n icon: 'MapPin',\n permission: { feature: 'tables', action: 'read' as const },\n },\n ],\n routes: [\n {\n path: '/tables',\n component: PageComponent,\n permission: { feature: 'tables', action: 'read' as const },\n },\n ],\n widgets: [],\n aiTools: [\n {\n id: 'tables.availability',\n name: 'getTableAvailability',\n description: 'Returns which tables are available, occupied, reserved, or being cleaned.',\n icon: 'MapPin',\n mode: 'read' as const,\n category: 'Tables',\n parameters: {\n type: 'object' as const,\n properties: {\n zone: { type: 'string' as const, description: 'Filter by zone name' },\n status: { type: 'string' as const, enum: ['available', 'occupied', 'reserved', 'cleaning'] },\n },\n },\n suggestions: [\n { label: 'Which tables are available right now?' },\n { label: 'How many tables are occupied?' },\n ],\n },\n {\n id: 'tables.seat-guests',\n name: 'seatGuests',\n description: 'Seats guests at a specific table.',\n icon: 'UserPlus',\n mode: 'persist' as const,\n category: 'Tables',\n parameters: {\n type: 'object' as const,\n properties: {\n tableNumber: { type: 'number' as const, description: 'Table number' },\n guests: { type: 'number' as const, description: 'Number of guests' },\n },\n required: ['tableNumber', 'guests'],\n },\n permission: { feature: 'tables', action: 'edit' as const },\n },\n ],\n registries: tablesRegistries,\n settings: [\n {\n id: 'tables',\n label: config.labels.pageTitle,\n icon: 'MapPin',\n component: (() => {\n const TablesSettingsTab: React.ComponentType<unknown> = () =>\n React.createElement(PluginSettingsPanel, {\n title: 'Tables Settings',\n subtitle: 'Zones and floor plan configuration',\n registries: tablesRegistries,\n routeBase: '/settings/tables',\n })\n TablesSettingsTab.displayName = 'TablesSettingsTab'\n return TablesSettingsTab\n })(),\n order: 21,\n permission: { feature: 'tables', action: 'read' as const },\n },\n ],\n locales: tablesLocales,\n }\n}\n\nexport type { TablesDataProvider } from './data/types'\nexport { createFayzTablesProvider } from './data/platform'\nexport type { FayzTablesProviderOptions } from './data/platform'\nexport type { ResolvedTablesConfig } from './context'\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { StoreApi } from 'zustand/vanilla';
|
|
3
|
-
import { type ResolvedTablesConfig } from '
|
|
4
|
-
import type { TablesDataProvider } from '
|
|
5
|
-
import type { TablesUIState } from '
|
|
3
|
+
import { type ResolvedTablesConfig } from '../context';
|
|
4
|
+
import type { TablesDataProvider } from '../data/types';
|
|
5
|
+
import type { TablesUIState } from '../store';
|
|
6
6
|
import type { PluginRegistryDef } from '@fayz-ai/core';
|
|
7
7
|
export declare function TablesPage({ config, provider, store, registries }: {
|
|
8
8
|
config: ResolvedTablesConfig;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TablesPage.d.ts","sourceRoot":"","sources":["../../src/views/TablesPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEtD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;IAClE,MAAM,EAAE,oBAAoB,CAAA;IAC5B,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAA;IAC9B,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;CACjC,qBAMA"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"fayz": {
|
|
4
4
|
"status": "beta"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.9.
|
|
6
|
+
"version": "0.9.2",
|
|
7
7
|
"description": "Fayz SDK — plugin-tables plugin",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"sideEffects": false,
|
|
@@ -12,14 +12,12 @@
|
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
13
13
|
"exports": {
|
|
14
14
|
".": {
|
|
15
|
-
"source": "./src/index.ts",
|
|
16
15
|
"types": "./dist/index.d.ts",
|
|
17
16
|
"import": "./dist/index.js"
|
|
18
17
|
}
|
|
19
18
|
},
|
|
20
19
|
"files": [
|
|
21
|
-
"dist"
|
|
22
|
-
"src"
|
|
20
|
+
"dist"
|
|
23
21
|
],
|
|
24
22
|
"peerDependencies": {
|
|
25
23
|
"react": "^18.0.0 || ^19.0.0",
|
|
@@ -29,10 +27,10 @@
|
|
|
29
27
|
"sonner": "^2.0.7"
|
|
30
28
|
},
|
|
31
29
|
"dependencies": {
|
|
32
|
-
"@fayz-ai/core": "^0.
|
|
33
|
-
"@fayz-ai/sdk": "^0.
|
|
34
|
-
"@fayz-ai/
|
|
35
|
-
"@fayz-ai/ui": "^0.
|
|
30
|
+
"@fayz-ai/core": "^0.11.0",
|
|
31
|
+
"@fayz-ai/sdk": "^0.11.0",
|
|
32
|
+
"@fayz-ai/admin": "^0.11.0",
|
|
33
|
+
"@fayz-ai/ui": "^0.11.0"
|
|
36
34
|
},
|
|
37
35
|
"devDependencies": {
|
|
38
36
|
"@types/react": "^18.3.0",
|