diff --git a/app/[slug]/dashboard/tables/page.tsx b/app/[slug]/dashboard/tables/page.tsx index 9890735..8fd4a81 100644 --- a/app/[slug]/dashboard/tables/page.tsx +++ b/app/[slug]/dashboard/tables/page.tsx @@ -2,15 +2,41 @@ 'use client'; +import { AbstractApi } from '@/app/api/abstract-api'; +import { TableSimulation, TableSimulationSerializer } from '@/app/lib/tableSimulation'; import Arrangement from '@/app/ui/arrangements/arrangement'; -import React, { useState } from 'react'; import ArrangementsTable from '@/app/ui/arrangements/arrangements-table'; +import { classNames } from '@/app/ui/components/button'; +import { Toast } from 'primereact/toast'; +import React, { useRef, useState } from 'react'; export default function Page() { + const toast = useRef(null); + + const show = () => { + toast.current?.show({ + severity: 'success', + summary: 'Simulation created', + detail: 'Table distributions will be calculated shortly, please come back in some minutes' + }); + }; + const [currentArrangement, setCurrentArrangement] = useState(null); + function createSimulation() { + const api = new AbstractApi(); + const serializer = new TableSimulationSerializer(); + api.create(serializer, new TableSimulation(), show); + } + return ( <> + +
+ + +
+ {currentArrangement && } diff --git a/app/api/tableSimulations.tsx b/app/api/tableSimulations.tsx index 6bf36d7..5b0f538 100644 --- a/app/api/tableSimulations.tsx +++ b/app/api/tableSimulations.tsx @@ -12,6 +12,7 @@ export function loadTableSimulations(onLoad?: (tableSimulations: TableArrangemen id: record.id, name: record.name, discomfort: record.discomfort, + valid: record.valid, }); })); }, (error) => { diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index b03ef4b..5e6ffe8 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -12,7 +12,8 @@ export type TableArrangement = { number: number; name: string; guests?: Guest[]; - discomfort?: number + discomfort?: number; + valid?: boolean; } export type User = { diff --git a/app/lib/tableSimulation.tsx b/app/lib/tableSimulation.tsx index 9e276a4..7a01b4d 100644 --- a/app/lib/tableSimulation.tsx +++ b/app/lib/tableSimulation.tsx @@ -19,12 +19,12 @@ export type Table = { } export class TableSimulation implements Entity { - id: string; + id?: string; tables: Table[]; - constructor(id: string, tables: Table[]) { + constructor(id?: string, tables?: Table[]) { this.id = id; - this.tables = tables; + this.tables = tables || []; } } diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index 9a650e7..07a3eff 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -7,42 +7,57 @@ import { TableArrangement } from '@/app/lib/definitions'; import { classNames } from "../components/button"; import TableOfContents from "../components/table-of-contents"; import { loadTableSimulations } from "@/app/api/tableSimulations"; +import { ArchiveBoxXMarkIcon, CheckBadgeIcon } from "@heroicons/react/24/outline"; +import { Tooltip } from "primereact/tooltip"; +import clsx from "clsx"; -export default function ArrangementsTable ({onArrangementSelected}: {onArrangementSelected: (arrangementId: string) => void}) { - const [arrangements, setArrangements] = useState>([]); - const [arrangementsLoaded, setArrangementsLoaded] = useState(false); +export default function ArrangementsTable({ onArrangementSelected }: { onArrangementSelected: (arrangementId: string) => void }) { + const [arrangements, setArrangements] = useState>([]); + const [arrangementsLoaded, setArrangementsLoaded] = useState(false); - function refreshSimulations() { - loadTableSimulations((arrangements) => { - setArrangements(arrangements); - setArrangementsLoaded(true); - }); - } + function refreshSimulations() { + loadTableSimulations((arrangements) => { + setArrangements(arrangements); + setArrangementsLoaded(true); + }); + } - function arrangementClicked(e: React.MouseEvent) { - onArrangementSelected(e.currentTarget.getAttribute('data-arrangement-id') || ''); - } - - !arrangementsLoaded && refreshSimulations(); + function arrangementClicked(e: React.MouseEvent) { + onArrangementSelected(e.currentTarget.getAttribute('data-arrangement-id') || ''); + } - return( - ( - - - {arrangement.name} - - - {arrangement.discomfort} - - - - - - )} - /> - ); + !arrangementsLoaded && refreshSimulations(); + + return ( + ( + + + {arrangement.name} + + + {arrangement.discomfort} + + + + + + + + { + arrangement.valid ? + : + + } + + + )} + /> + ); } \ No newline at end of file