coze-realtime/src/components/AntechamberWishList/index.tsx

175 lines
6.5 KiB
TypeScript

import {
Drawer,
DrawerClose,
DrawerContent,
DrawerDescription,
DrawerHeader,
DrawerTitle,
DrawerTrigger,
} from "@/components/ui/drawer";
import { X } from "lucide-react";
import { useWishList } from "@/hooks/useWishList";
import { useContext } from "react";
import {
FileInfo,
RealtimeClientContext,
} from "../Provider/RealtimeClientProvider";
import { fetchFile } from "@/apis/user";
import { useAbortController } from "@/hooks/useAbortController";
import { useSearchParams } from "react-router-dom";
import { toast } from "@/hooks/use-toast";
export default function AntechamberWishList() {
const { wishList } = useWishList();
const { handleConnect } = useContext(RealtimeClientContext);
const { getSignal } = useAbortController();
const [searchParams] = useSearchParams();
const token = searchParams.get("token") || "";
const handleNavigate = async (item: any) => {
const result = await fetchFile({
params: { id: item.vId, location: item.personlocationCode },
options: {
signal: getSignal(),
headers: { Authorization: `Bearer ${token}` },
},
});
if (result.message) {
toast({
title: result.message,
});
}
let resp = result.result as FileInfo;
handleConnect({
fileInfo: {
type: resp.type,
url: resp.url,
tableName: resp.tableName,
provinceName: resp.provinceName,
subjectClaim: resp.subjectClaim,
},
});
};
return (
<div className="w-full p-[15px]">
<div className="px-[12px] pt-[14px] pb-[16px] rounded-[13px] bg-[#fff]">
<div className="flex items-center justify-between">
<div className="w-[96px] h-[16px] object-contain">
<img src="/icons/wish-list.png" alt="wish-list" />
</div>
<Drawer>
<DrawerTrigger className="">
<div className="flex items-center text-[13px] text-[#1580FF]">
<img
src="/icons/arrow.png"
alt="arrow"
className="w-[16px] h-[16px] object-contain ml-[2px]"
/>
</div>
</DrawerTrigger>
<DrawerContent>
<DrawerHeader className="p-0">
<DrawerTitle>
<div className="py-[13px] relative bg-white rounded-[12px]">
<span className="text-[16px] text-[#333] font-[500]">
</span>
<DrawerClose>
<X className="absolute right-[13px] top-[10px] text-[#000] text-[16px]" />
</DrawerClose>
</div>
</DrawerTitle>
<div className="grid gap-[12px] px-[15px] pb-[15px] bg-[#F4F6FA] pt-[16px]">
{wishList.map((item: any) => (
<div className="w-full bg-white" key={item.vId}>
<div className="py-[10px] pl-[16px] pr-[13px] rounded-[8px] flex items-center">
<div className="flex flex-col">
<div className="flex items-center mb-[8px]">
<span className="text-[15px] font-[600] text-[#303030] mr-[5px]">
{item.tableName}
</span>
<div className="text-[10px] px-[4px] py-[2px] rounded-[4px] text-[#636363] bg-[#fff]">
{item.type}
</div>
<div></div>
</div>
<div className="text-[#303030] text-[11px] flex items-center">
<span>
{item.locationName}·{item.score}
</span>
<span className="ml-[8px]">
{item.subjectClaim.split(",").join("/")}
</span>
</div>
</div>
<div className="ml-auto">
<div className="text-[11px] text-[636363] font-[600] mb-[8px]">
{item.createTime}
</div>
<div
className="flex items-center justify-end text-[13px] text-[#1580FF]"
onClick={() => handleNavigate(item)}
>
<img
src="/icons/rightBlue.png"
alt=""
className="ml-[2px]"
/>
</div>
</div>
</div>
</div>
))}
</div>
</DrawerHeader>
<DrawerDescription>
<></>
</DrawerDescription>
</DrawerContent>
</Drawer>
</div>
{wishList.length > 0 ? (
<div className="p-[7px] rounded-[8px] bg-[#F4F6FA] flex items-center mt-[12px]">
<img
src="/icons/wish-list-icon.png"
alt="icon"
className="w-[46px] h-[46px] object-contain mr-[8px]"
/>
<div className="flex flex-col">
<div className="flex items-center mb-[5px]">
<span className="text-[15px] font-[600] text-[#303030] mr-[5px]">
{wishList[0].tableName}
</span>
<div className="text-[10px] px-[4px] py-[2px] rounded-[4px] text-[#636363] bg-[#fff]">
{wishList[0].type}
</div>
</div>
<div className="text-[#303030] text-[11px] flex items-center">
<span>
{wishList[0].locationName}·{wishList[0].score}
</span>
<span className="ml-[8px]">
{wishList[0].subjectClaim.split(",").join("/")}
</span>
</div>
</div>
<div
className="flex items-center text-[13px] text-[#1580FF] ml-auto"
onClick={() => handleNavigate(wishList[0])}
>
<img src="/icons/rightBlue.png" alt="" className="ml-[2px]" />
</div>
</div>
) : (
<></>
)}
</div>
</div>
);
}