Core.Blueprint.UI.Web/src/app/sample/page.tsx
Sergio Matias Urquin 3609d1fa20 first commit
2025-04-29 18:47:35 -06:00

90 lines
2.4 KiB
TypeScript

"use client";
import { deleteSampleItem, useSampleItems } from "@/hooks/use-sample-items";
import { Suspense } from "react";
import Image from 'next/image';
import Link from "next/link";
import Loader from '../../components/ui/loader.svg';
export default function Sample() {
const formatDate = (date: Date) =>
Intl.DateTimeFormat("en-US").format(new Date(date));
let refreshData: any;
const DeleteButton = (itemId: any) => {
return (
<button
className="button deleteBtn"
value="Delete"
onClick={async () => {await deleteSampleItem(itemId.itemId); refreshData()}}
>
Delete
</button>
);
};
const ItemsData = () => {
const { items, error, isLoading, mutate } = useSampleItems();
refreshData = mutate;
if (!isLoading && !error && items != null) {
return items.map((item) => (
<tr key={item.id}>
<td>
<Link href={`sample/${item.id}`}>{item.testName}</Link>
</td>
<td>{item.statusCode}</td>
<td>{item.numValue}</td>
<td>{formatDate(item.createdAt)}</td>
<td>
<div className="flex flex-nowrap">
<Link className="button editBtn" href={`sample/${item.id}`}>
Edit
</Link>
<DeleteButton itemId={item.id}></DeleteButton>
</div>
</td>
</tr>
));
} else return Loading();
};
const Loading = () => (
<tr>
<td className="flex align-items-end" colSpan={5}><Image src={Loader} alt='Loading' width={62} />Loading</td>
</tr>
);
return (
<div id="container" className="flex align-items-start place-content-center">
<div>
<table>
<thead>
<tr>
<th colSpan={5}>
<Link className="button" href={`sample/create`}>
<span>Add new</span>
</Link>
</th>
</tr>
<tr>
<th>Name</th>
<th>Status</th>
<th>Value</th>
<th>Created At</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<Suspense fallback={Loading()}>
<ItemsData></ItemsData>
</Suspense>
</tbody>
</table>
</div>
{process.env.PUBLIC_API_URL}
</div>
);
}