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 { api } from "~/utils/api"; import { useUser } from "@clerk/nextjs"; const RoomList = () => { const { isSignedIn, user } = useUser(); configureAbly({ key: env.NEXT_PUBLIC_ABLY_PUBLIC_KEY, clientId: user?.id, recover: (_, cb) => { cb(true); }, }); const [] = useChannel( `${env.NEXT_PUBLIC_APP_ENV}-${user?.id}`, () => void refetchRoomsFromDb() ); const [roomName, setRoomName] = useState(""); const { data: roomsFromDb, refetch: refetchRoomsFromDb } = api.room.getAll.useQuery(undefined, { enabled: isSignedIn, }); const createRoom = api.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 = api.room.delete.useMutation({}); const deleteRoomHandler = (roomId: string) => { if (isSignedIn) { 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;