chore: display user name and email on table list

This commit is contained in:
oiov
2025-11-07 16:56:34 +08:00
parent a4b4bc7e4e
commit 3d24f9bd71
4 changed files with 48 additions and 40 deletions

View File

@@ -33,6 +33,7 @@ import {
TableRow, TableRow,
} from "@/components/ui/table"; } from "@/components/ui/table";
import { import {
ClickableTooltip,
Tooltip, Tooltip,
TooltipContent, TooltipContent,
TooltipProvider, TooltipProvider,
@@ -347,17 +348,17 @@ export default function UserRecordsList({ user, action }: RecordListProps) {
)} )}
</TableCell> </TableCell>
<TableCell className="col-span-1 hidden truncate sm:flex"> <TableCell className="col-span-1 hidden truncate sm:flex">
<TooltipProvider> <ClickableTooltip
<Tooltip delayDuration={200}> className="cursor-pointer truncate"
<TooltipTrigger className="truncate"> content={
{record.user.name ?? record.user.email} <div className="px-2 py-1">
</TooltipTrigger>
<TooltipContent>
<p>{record.user.name}</p> <p>{record.user.name}</p>
<p>{record.user.email}</p> <p>{record.user?.email}</p>
</TooltipContent> </div>
</Tooltip> }
</TooltipProvider> >
{record.user.name || record.user.email}
</ClickableTooltip>
</TableCell> </TableCell>
<TableCell className="col-span-1 hidden justify-center sm:flex"> <TableCell className="col-span-1 hidden justify-center sm:flex">
<TimeAgoIntl <TimeAgoIntl

View File

@@ -49,12 +49,7 @@ import {
TableRow, TableRow,
} from "@/components/ui/table"; } from "@/components/ui/table";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { import { ClickableTooltip } from "@/components/ui/tooltip";
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
import { UrlStatus } from "@/components/dashboard/status-card"; import { UrlStatus } from "@/components/dashboard/status-card";
import { FormType } from "@/components/forms/record-form"; import { FormType } from "@/components/forms/record-form";
import { UrlForm } from "@/components/forms/url-form"; import { UrlForm } from "@/components/forms/url-form";
@@ -69,8 +64,6 @@ import QRCodeEditor from "@/components/shared/qr";
import { TimeAgoIntl } from "@/components/shared/time-ago"; import { TimeAgoIntl } from "@/components/shared/time-ago";
import { UrlExporter } from "./export"; import { UrlExporter } from "./export";
import Globe from "./globe";
import LiveLog from "./live-logs";
import UserUrlMetaInfo from "./meta"; import UserUrlMetaInfo from "./meta";
export interface UrlListProps { export interface UrlListProps {
@@ -244,7 +237,7 @@ export default function UserUrlsList({ user, action }: UrlListProps) {
case "userName": case "userName":
return t("Search by username") + "..."; return t("Search by username") + "...";
default: default:
return t("Search") + "..."; return "Filter...";
} }
}; };
@@ -399,16 +392,17 @@ export default function UserUrlsList({ user, action }: UrlListProps) {
/> />
</TableCell> </TableCell>
<TableCell className="col-span-1 hidden truncate sm:flex"> <TableCell className="col-span-1 hidden truncate sm:flex">
<TooltipProvider> <ClickableTooltip
<Tooltip delayDuration={200}> className="cursor-pointer truncate"
<TooltipTrigger className="truncate"> content={
{short.userName ?? "Anonymous"} <div className="px-2 py-1">
</TooltipTrigger> <p>{short.user?.name}</p>
<TooltipContent> <p>{short.user?.email}</p>
{short.userName ?? "Anonymous"} </div>
</TooltipContent> }
</Tooltip> >
</TooltipProvider> {short.user?.name || short.user?.email}
</ClickableTooltip>
</TableCell> </TableCell>
<TableCell className="col-span-1 hidden sm:flex"> <TableCell className="col-span-1 hidden sm:flex">
<Switch <Switch
@@ -619,16 +613,17 @@ export default function UserUrlsList({ user, action }: UrlListProps) {
</div> </div>
<div className="mt-auto flex items-center justify-end gap-1.5 text-xs text-muted-foreground"> <div className="mt-auto flex items-center justify-end gap-1.5 text-xs text-muted-foreground">
<TooltipProvider> <ClickableTooltip
<Tooltip delayDuration={200}> className="cursor-pointer truncate"
<TooltipTrigger className="truncate"> content={
{short.userName ?? "Anonymous"} <div className="px-2 py-1">
</TooltipTrigger> <p>{short.user?.name}</p>
<TooltipContent> <p>{short.user?.email}</p>
{short.userName ?? "Anonymous"} </div>
</TooltipContent> }
</Tooltip> >
</TooltipProvider> {short.user?.name || short.user?.email}
</ClickableTooltip>
<Separator <Separator
className="h-4/5" className="h-4/5"
orientation="vertical" orientation="vertical"

View File

@@ -18,6 +18,10 @@ export interface ShortUrlFormData {
password: string; password: string;
createdAt?: Date; createdAt?: Date;
updatedAt?: Date; updatedAt?: Date;
user?: {
name: string;
email: string;
};
} }
export interface UserShortUrlInfo extends ShortUrlFormData { export interface UserShortUrlInfo extends ShortUrlFormData {
@@ -66,6 +70,14 @@ export async function getUserShortUrls(
where: option, where: option,
skip: (page - 1) * size, skip: (page - 1) * size,
take: size, take: size,
include: {
user: {
select: {
name: true,
email: true,
},
},
},
orderBy: { orderBy: {
updatedAt: "desc", updatedAt: "desc",
}, },

File diff suppressed because one or more lines are too long