From 1184a529cf42cfdcd89a002da3afc6254bd43679 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:05:32 +0100 Subject: [PATCH 1/6] Display an icon indicating whether a simulation is still valid --- app/api/tableSimulations.tsx | 1 + app/lib/definitions.ts | 3 +- app/ui/arrangements/arrangements-table.tsx | 79 ++++++++++++---------- 3 files changed, 48 insertions(+), 35 deletions(-) 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/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index 9a650e7..fbc132a 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -7,42 +7,53 @@ 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"; -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 -- 2.47.1 From 53a2752964237c4af60eec5525ce59061df72fca Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:06:29 +0100 Subject: [PATCH 2/6] Remove references to unsupported dark theme --- app/ui/arrangements/arrangements-table.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index fbc132a..de7a4ec 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -33,8 +33,8 @@ export default function ArrangementsTable({ onArrangementSelected }: { onArrange caption='Simulations' elements={arrangements} rowRender={(arrangement) => ( - - + + {arrangement.name} -- 2.47.1 From e597b4fc00d15a0bff78ff67023bd617ccf5bbaa Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:09:31 +0100 Subject: [PATCH 3/6] Mark expired rows with red background --- app/ui/arrangements/arrangements-table.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index de7a4ec..31cfffc 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -9,6 +9,7 @@ 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>([]); @@ -33,7 +34,10 @@ export default function ArrangementsTable({ onArrangementSelected }: { onArrange caption='Simulations' elements={arrangements} rowRender={(arrangement) => ( - + {arrangement.name} -- 2.47.1 From bf7e871a1b683ab771cf644cc2e3d2d8749f9ccc Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:21:20 +0100 Subject: [PATCH 4/6] Display a button to create new simulations --- app/[slug]/dashboard/tables/page.tsx | 15 ++++++++++++++- app/lib/tableSimulation.tsx | 6 +++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/[slug]/dashboard/tables/page.tsx b/app/[slug]/dashboard/tables/page.tsx index 9890735..3f55aa0 100644 --- a/app/[slug]/dashboard/tables/page.tsx +++ b/app/[slug]/dashboard/tables/page.tsx @@ -2,15 +2,28 @@ '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 { useState } from 'react'; export default function Page() { const [currentArrangement, setCurrentArrangement] = useState(null); + function createSimulation() { + const api = new AbstractApi(); + const serializer = new TableSimulationSerializer(); + api.create(serializer, new TableSimulation(), () => {}); + } + return ( <> +
+ +
+ {currentArrangement && } 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 || []; } } -- 2.47.1 From 157401bae51b957eac6f9ad763b28afafaa9cec6 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:33:35 +0100 Subject: [PATCH 5/6] Display a toast message after successfully creating a simulation --- app/[slug]/dashboard/tables/page.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/app/[slug]/dashboard/tables/page.tsx b/app/[slug]/dashboard/tables/page.tsx index 3f55aa0..8fd4a81 100644 --- a/app/[slug]/dashboard/tables/page.tsx +++ b/app/[slug]/dashboard/tables/page.tsx @@ -7,20 +7,33 @@ import { TableSimulation, TableSimulationSerializer } from '@/app/lib/tableSimul import Arrangement from '@/app/ui/arrangements/arrangement'; import ArrangementsTable from '@/app/ui/arrangements/arrangements-table'; import { classNames } from '@/app/ui/components/button'; -import { useState } from 'react'; +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(), () => {}); + api.create(serializer, new TableSimulation(), show); } - + return ( <> +
+
-- 2.47.1 From 0d1c46a34962a96bee3fcffdf907951c62cac939 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:47:17 +0100 Subject: [PATCH 6/6] Fix redundant class definitions --- app/ui/arrangements/arrangements-table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index 31cfffc..07a3eff 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -34,7 +34,7 @@ export default function ArrangementsTable({ onArrangementSelected }: { onArrange caption='Simulations' elements={arrangements} rowRender={(arrangement) => ( - -- 2.47.1