FastAPI backend (Python 3.11, MSSQL ODBC for SambaPOS, Azure DI OCR),
kitchen_db on central PG. React/TS/Vite frontend with navy sidebar layout.
Backend: auth.py (APP_SLUG=kitchen, SimpleNamespace — archive routes use
.kitchen_id/.is_admin without modification), main.py (51 migrations, scheduler,
internal router for KDS bookings feed), api/internal.py, full archive API
(31 routers: invoices, recipes, menus, sambapos, resos, newbook, disputes,
purchase_orders, etc.), models, migrations, OCR pipeline.
kitchen_id pinned to 1 (B1 — single hotel).
Frontend: AuthGate (app=kitchen, token shim for archive compat — B5b pending),
Layout (navy sidebar, 6 sections, Lucide icons, teal --app-primary),
App.tsx (Outlet pattern, UploadApp outside Layout), index.css (full :root block).
strict: false — archive components have type issues; build clean.
Note: 45 archive components call fetch('/api/...') without /kitchen/ prefix
(B5b). Runtime 404s; deferred until after initial testing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
37 lines
941 B
JavaScript
37 lines
941 B
JavaScript
// API
|
|
module.exports = state;
|
|
|
|
/**
|
|
* Creates initial state object
|
|
* for iteration over list
|
|
*
|
|
* @param {array|object} list - list to iterate over
|
|
* @param {function|null} sortMethod - function to use for keys sort,
|
|
* or `null` to keep them as is
|
|
* @returns {object} - initial state object
|
|
*/
|
|
function state(list, sortMethod)
|
|
{
|
|
var isNamedList = !Array.isArray(list)
|
|
, initState =
|
|
{
|
|
index : 0,
|
|
keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
|
|
jobs : {},
|
|
results : isNamedList ? {} : [],
|
|
size : isNamedList ? Object.keys(list).length : list.length
|
|
}
|
|
;
|
|
|
|
if (sortMethod)
|
|
{
|
|
// sort array keys based on it's values
|
|
// sort object's keys just on own merit
|
|
initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)
|
|
{
|
|
return sortMethod(list[a], list[b]);
|
|
});
|
|
}
|
|
|
|
return initState;
|
|
}
|