"use client"; import { useState } from "react"; import { VacationStatus, VacationType } from "@capakraken/shared"; import { trpc } from "~/lib/trpc/client.js"; import { VacationModal } from "./VacationModal.js"; import { InfoTooltip } from "~/components/ui/InfoTooltip.js"; import { BalanceCard } from "./BalanceCard.js"; import { VacationCalendar } from "./VacationCalendar.js"; import { VACATION_STATUS_BADGE as STATUS_BADGE, VACATION_TYPE_LABELS as TYPE_LABELS, VACATION_TYPE_BADGE } from "~/lib/status-styles.js"; export function MyVacationsClient() { const [showModal, setShowModal] = useState(false); const utils = trpc.useUtils(); // Find resource linked to current user const { data: myResource } = trpc.resource.getMyResource.useQuery(undefined, { staleTime: 60_000, }); const resourceId = myResource?.id; const { data: vacations, isLoading, refetch } = trpc.vacation.list.useQuery( { resourceId, limit: 200 }, { enabled: !!resourceId, staleTime: 15_000 }, ); const cancelMutation = trpc.vacation.cancel.useMutation({ onSuccess: async () => { await utils.vacation.list.invalidate(); await utils.entitlement.getBalance.invalidate(); }, }); const vacationList = vacations ?? []; return (
Manage your personal vacation requests
|
Type |
Start | End |
Days |
Status |
Note |
|
|---|---|---|---|---|---|---|
| {TYPE_LABELS[type] ?? type} | {start.toLocaleDateString("en-GB")} | {end.toLocaleDateString("en-GB")} | {vWithExtra.isHalfDay ? "0.5" : days} | {status} | {vWithExtra.rejectionReason ? ( {vWithExtra.rejectionReason} ) : (v.note ?? "—")} | {(status === VacationStatus.PENDING || status === VacationStatus.APPROVED) && ( )} |