"use client"; import Link from "next/link"; import { useEffect, useState } from "react"; import { IoEnterOutline, IoTrashBinOutline } from "react-icons/io5"; import { env } from "env.mjs"; import LoadingIndicator from "@/_components/LoadingIndicator"; import { useUser } from "@clerk/nextjs"; import { useChannel } from "ably/react"; import type { RoomsResponse } from "@/_utils/types"; const RoomList = () => { const { user } = useUser(); useChannel( `${env.NEXT_PUBLIC_APP_ENV}-${user?.id}`, () => void getRoomsHandler() ); const [roomName, setRoomName] = useState(""); const [roomsFromDb, setRoomsFromDb] = useState(undefined); const createRoomHandler = async () => { await fetch("/api/internal/room", { cache: "no-cache", method: "POST", body: JSON.stringify({ name: roomName }), }); setRoomName(""); (document.querySelector("#roomNameInput") as HTMLInputElement).value = ""; (document.querySelector("#new-room-modal") as HTMLInputElement).checked = false; }; const getRoomsHandler = async () => { const dbRoomsResponse = await fetch("/api/internal/room", { cache: "no-cache", method: "GET", }); const dbRooms = (await dbRoomsResponse.json()) as RoomsResponse; setRoomsFromDb(dbRooms); }; const deleteRoomHandler = async (roomId: string) => { await fetch(`/api/internal/room/${roomId}`, { cache: "no-cache", method: "DELETE", }); }; useEffect(() => { void getRoomsHandler(); }, []); 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;