"use client"; import Link from "next/link"; import { configureAbly, useChannel } from "@ably-labs/react-hooks"; import { useState } from "react"; import { IoEnterOutline, IoTrashBinOutline } from "react-icons/io5"; import { env } from "@/env.mjs"; import { trpc } from "../_trpc/client"; import Loading from "./Loading"; import { useUser } from "@clerk/nextjs"; export const dynamic = "force-dynamic"; export const revalidate = 0; export const fetchCache = "force-no-store"; const RoomList = () => { const { isSignedIn, user } = useUser(); configureAbly({ key: env.NEXT_PUBLIC_ABLY_PUBLIC_KEY, clientId: user?.id, recover: (_, cb) => { cb(true); }, }); useChannel( `${env.NEXT_PUBLIC_APP_ENV}-${user?.id}`, () => void refetchRoomsFromDb() ); const [roomName, setRoomName] = useState(""); const { data: roomsFromDb, refetch: refetchRoomsFromDb } = trpc.room.getAll.useQuery(undefined); const createRoom = trpc.room.create.useMutation({}); const createRoomHandler = () => { createRoom.mutate({ name: roomName }); setRoomName(""); (document.querySelector("#roomNameInput") as HTMLInputElement).value = ""; (document.querySelector("#new-room-modal") as HTMLInputElement).checked = false; }; const deleteRoom = trpc.room.delete.useMutation({}); const deleteRoomHandler = (roomId: string) => { deleteRoom.mutate({ id: roomId }); }; return (
{/* Modal for Adding Rooms */}

Create a new room!

{ setRoomName(event.target.value); }} />
{roomName.length > 0 && ( )}
{roomsFromDb && roomsFromDb.length > 0 && (
{/* head */} {roomsFromDb?.map((room) => { return ( ); })}
Room Name Actions
{room.roomName}
)} {roomsFromDb === undefined && }
); }; export default RoomList;