import { useSuspenseQuery } from "@tanstack/react-query"; import { createColumnHelper } from "@tanstack/react-table"; import axios from "axios"; import { Trash } from "lucide-react"; import { toast } from "sonner"; import type { Notifications } from "../../../../types/notifications"; import { Button } from "../../../components/ui/button"; import { Card, CardContent, CardHeader } from "../../../components/ui/card"; import { Tooltip, TooltipContent, TooltipTrigger, } from "../../../components/ui/tooltip"; import { notificationSubs } from "../../../lib/queries/notificationSubs"; import { notifications } from "../../../lib/queries/notifications"; import LstTable from "../../../lib/tableStuff/LstTable"; import SearchableHeader from "../../../lib/tableStuff/SearchableHeader"; export default function NotificationsTable({ userId }: any) { const { data: subs, refetch } = useSuspenseQuery(notificationSubs(userId)); const { data: note } = useSuspenseQuery(notifications()); const columnHelper = createColumnHelper(); // filter out the current const notificationMap = Object.fromEntries(note.map((n: any) => [n.id, n])); const data = subs.map((sub: any) => ({ ...sub, name: notificationMap[sub.notificationId].name || null, description: notificationMap[sub.notificationId].description || null, emails: sub.emails ? sub.emails.join(",") : null, })); const removeNotification = async (ns: any) => { try { const res = await axios.delete(`/lst/api/notification/sub`, { withCredentials: true, data: { userId: ns.userId, notificationId: ns.notificationId, }, }); if (res.data.success) { toast.success(`Subscription removed`); refetch(); } else { console.info(res); toast.error(res.data.message); } } catch { toast.error(`There was an error removing subscription.`); } }; const column = [ columnHelper.accessor("name", { header: ({ column }) => ( ), filterFn: "includesString", cell: (i) => i.getValue(), }), columnHelper.accessor("description", { header: ({ column }) => ( ), cell: (i) => ( {i.getValue()?.length > 25 ? ( {i.getValue().slice(0, 25)}... ) : ( {i.getValue()} )} {i.getValue()} ), }), columnHelper.accessor("emails", { header: ({ column }) => ( ), filterFn: "includesString", cell: (i) => i.getValue(), }), columnHelper.accessor("remove", { header: ({ column }) => ( ), filterFn: "includesString", cell: (i) => { return ( ); }, }), ]; return ( Subscriptions ); }