make client link work approval feed

This commit is contained in:
miloschwartz
2026-01-19 21:07:15 -08:00
parent 7305c721a6
commit 2e802301ae
3 changed files with 19 additions and 32 deletions

View File

@@ -4,19 +4,18 @@ import { toast } from "@app/hooks/useToast";
import { createApiClient, formatAxiosError } from "@app/lib/api";
import { getUserDisplayName } from "@app/lib/getUserDisplayName";
import { cn } from "@app/lib/cn";
import { formatFingerprintInfo, formatPlatform } from "@app/lib/formatDeviceFingerprint";
import { formatFingerprintInfo } from "@app/lib/formatDeviceFingerprint";
import {
approvalFiltersSchema,
approvalQueries,
type ApprovalItem
} from "@app/lib/queries";
import { useQuery } from "@tanstack/react-query";
import { ArrowRight, Ban, Check, Laptop, Smartphone, RefreshCw } from "lucide-react";
import { ArrowRight, Ban, Check, LaptopMinimal, RefreshCw } from "lucide-react";
import { useTranslations } from "next-intl";
import Link from "next/link";
import { usePathname, useRouter, useSearchParams } from "next/navigation";
import { Fragment, useActionState } from "react";
import type { LucideIcon } from "lucide-react";
import { Badge } from "./ui/badge";
import { Button } from "./ui/button";
import { Card, CardHeader } from "./ui/card";
@@ -200,19 +199,19 @@ function ApprovalRequest({ approval, orgId, onSuccess }: ApprovalRequestProps) {
 
{approval.type === "user_device" && (
<span className="inline-flex items-center gap-1">
{approval.deviceName ? (
<>
{t("requestingNewDeviceApproval")}:{" "}
{approval.clientId ? (
<Link
href={`/${orgId}/settings/clients/user/${approval.clientId}/general`}
className="text-primary hover:underline cursor-pointer"
>
{approval.deviceName}
</Link>
) : (
<span>{approval.deviceName}</span>
)}
{approval.deviceName ? (
<>
{t("requestingNewDeviceApproval")}:{" "}
{approval.niceId ? (
<Link
href={`/${orgId}/settings/clients/user/${approval.niceId}/general`}
className="text-primary hover:underline cursor-pointer"
>
{approval.deviceName}
</Link>
) : (
<span>{approval.deviceName}</span>
)}
{approval.fingerprint && (
<InfoPopup>
<div className="space-y-1 text-sm">
@@ -265,21 +264,6 @@ function ApprovalRequest({ approval, orgId, onSuccess }: ApprovalRequestProps) {
{approval.decision === "denied" && (
<Badge variant="red">{t("denied")}</Badge>
)}
{approval.clientId && (
<Button
variant="outline"
className="gap-2"
asChild
>
<Link
href={`/${orgId}/settings/clients/user/${approval.clientId}/general`}
>
{t("viewDetails")}
<ArrowRight className="size-4 flex-none" />
</Link>
</Button>
)}
</div>
</div>
);

View File

@@ -334,6 +334,7 @@ export type ApprovalItem = {
approvalId: number;
orgId: string;
clientId: number | null;
niceId: string | null;
decision: "pending" | "approved" | "denied";
type: "user_device";
user: {