/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client' import React, { useState } from "react" 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<Array<TableArrangement>>([]); const [arrangementsLoaded, setArrangementsLoaded] = useState(false); function refreshSimulations() { loadTableSimulations((arrangements) => { setArrangements(arrangements); setArrangementsLoaded(true); }); } function arrangementClicked(e: React.MouseEvent<HTMLElement>) { onArrangementSelected(e.currentTarget.getAttribute('data-arrangement-id') || ''); } !arrangementsLoaded && refreshSimulations(); return ( <TableOfContents headers={['Name', 'Discomfort', 'Actions', 'Status']} caption='Simulations' elements={arrangements} rowRender={(arrangement) => ( <tr key={arrangement.id} className={clsx("border-b", { "bg-white odd:bg-white even:bg-gray-50": arrangement.valid, "bg-red-50 odd:bg-red-50 even:bg-red-100": !arrangement.valid })}> <th scope="row" className="px-6 py-4 font-medium text-gray-900 whitespace-nowrap"> {arrangement.name} </th> <td className="px-6 py-4"> {arrangement.discomfort} </td> <td> <button data-arrangement-id={arrangement.id} onClick={arrangementClicked} className={classNames('primary')}>Load</button> </td> <td> <Tooltip target=".tooltip-status" /> { arrangement.valid ? <CheckBadgeIcon className='size-6 tooltip-status' data-pr-position="right" data-pr-tooltip="Simulation is valid" /> : <ArchiveBoxXMarkIcon className='size-6 tooltip-status' data-pr-position="right" data-pr-tooltip="Simulation is expired due to attendance or affinity changes" /> } </td> </tr> )} /> ); }