"use client"; import { PrinterReserveForm } from "@/app/printer/[printerId]/reserve/form"; import { Countdown } from "@/components/printer-card/countdown"; import { AlertDialogHeader } from "@/components/ui/alert-dialog"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Dialog, DialogContent, DialogDescription, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { UserRole, hasRole } from "@/server/auth/permissions"; import type { InferResultType } from "@/utils/drizzle"; import { PrinterStatus, derivePrinterStatus, translatePrinterStatus } from "@/utils/printers"; import { cn } from "@/utils/styles"; import type { RegisteredDatabaseUserAttributes } from "lucia"; import { CalendarPlusIcon, ChevronRightIcon } from "lucide-react"; import Link from "next/link"; import { Else, If, Then } from "react-if"; interface PrinterCardProps { printer: InferResultType<"printers", { printJobs: true }>; user?: RegisteredDatabaseUserAttributes | null; } export function PrinterCard(props: PrinterCardProps) { const { printer, user } = props; const status = derivePrinterStatus(printer); const userIsLoggedIn = Boolean(user); return (
{printer.name} {printer.description}
{status === PrinterStatus.RESERVED && } {translatePrinterStatus(status)}
{printer.name} reservieren Gebe die geschätzte Druckdauer an. {status === PrinterStatus.RESERVED && ( )}
); }