My loader
export async function loader({ request, params }: LoaderArgs) {
invariant(params.menuId, "expected params.menuId")
invariant(params.tableId, "expected params.menuId")
invariant(params.branchId, "expected params.menuId")
const { branchId, tableId, menuId } = params
let menuCategories = await getMenuCategories(menuId)
let userId = await getUserId(request)
const session = await getSession(request)
let userColor = await session.get("userColor")
// CART
let order = await createOrGetOrder(branchId, tableId)
let orderId = await getOrderId(tableId)
//~~> if not user session create <~~//
try {
await connectUserSessionToDb(
branchId,
userId,
orderId ? orderId.id : "",
userColor
)
} catch (e) {
console.error(e)
}
let cartItemsActive = await db.cartItem.findMany({
where: { orderId: orderId.id, activeOnOrder: true },
include: { menuItem: true },
orderBy: {
id: "asc",
},
})
let cartItemsNotActive = await db.cartItem.findMany({
where: { orderId: orderId.id, activeOnOrder: false, userId: userId },
include: { menuItem: true },
orderBy: {
id: "asc",
},
})
const subtotal =
Array.isArray(order) && order.length > 0
? order.reduce((acc, item) => acc + item.price * item.quantity, 0)
: undefined
const waitress = await getWaitress(tableId)
let waitressList = waitress?.map((a) => a.employee)
let data = {
menuCategories,
waitress,
order,
subtotal,
branchId,
tableId,
cartItemsActive,
cartItemsNotActive,
userColor,
}
return json({ data })
}