diff --git a/src/app/_components/Loading.tsx b/src/app/_components/LoadingIndicator.tsx similarity index 69% rename from src/app/_components/Loading.tsx rename to src/app/_components/LoadingIndicator.tsx index 3851c89..7b9b00e 100644 --- a/src/app/_components/Loading.tsx +++ b/src/app/_components/LoadingIndicator.tsx @@ -1,6 +1,4 @@ -"use client"; - -const Loading = () => { +const LoadingIndicator = () => { return (
@@ -8,4 +6,4 @@ const Loading = () => { ); }; -export default Loading; +export default LoadingIndicator; diff --git a/src/app/_components/RoomList.tsx b/src/app/_components/RoomList.tsx index 4ec4506..15356da 100644 --- a/src/app/_components/RoomList.tsx +++ b/src/app/_components/RoomList.tsx @@ -6,19 +6,26 @@ 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 LoadingIndicator from "./LoadingIndicator"; +import { useUser } from "@clerk/nextjs"; + +export const dynamic = "force-dynamic"; +export const revalidate = 0; +export const fetchCache = "force-no-store"; + +const RoomList = () => { + const { user } = useUser(); -const RoomList = ({ userId }: { userId: string }) => { configureAbly({ key: env.NEXT_PUBLIC_ABLY_PUBLIC_KEY, - clientId: userId, + clientId: user?.id, recover: (_, cb) => { cb(true); }, }); useChannel( - `${env.NEXT_PUBLIC_APP_ENV}-${userId}`, + `${env.NEXT_PUBLIC_APP_ENV}-${user?.id}`, () => void refetchRoomsFromDb() ); @@ -130,7 +137,7 @@ const RoomList = ({ userId }: { userId: string }) => { New Room - {roomsFromDb === undefined && } + {roomsFromDb === undefined && }
); }; diff --git a/src/app/_components/VoteUI.tsx b/src/app/_components/VoteUI.tsx index 544edd2..d0ed858 100644 --- a/src/app/_components/VoteUI.tsx +++ b/src/app/_components/VoteUI.tsx @@ -24,12 +24,17 @@ import { env } from "@/env.mjs"; import { isAdmin, isVIP, jsonToCsv } from "@/utils/helpers"; import type { PresenceItem } from "@/utils/types"; import { trpc } from "@/app/_trpc/client"; -import Loading from "@/app/_components/Loading"; -import { User } from "@clerk/nextjs/dist/types/server"; +import LoadingIndicator from "@/app/_components/LoadingIndicator"; +import { useUser } from "@clerk/nextjs"; -const VoteUI = ({ user }: { user: Partial }) => { +export const dynamic = "force-dynamic"; +export const revalidate = 0; +export const fetchCache = "force-no-store"; + +const VoteUI = () => { const params = useParams(); const roomId = params?.id as string; + const { user } = useUser(); const [storyNameText, setStoryNameText] = useState(""); const [roomScale, setRoomScale] = useState(""); @@ -99,7 +104,9 @@ const VoteUI = ({ user }: { user: Partial }) => { // Helper functions const getVoteForCurrentUser = () => { if (roomFromDb) { - return votesFromDb && votesFromDb.find((vote) => vote.userId === user.id); + return ( + votesFromDb && votesFromDb.find((vote) => vote.userId === user?.id) + ); } else { return null; } @@ -204,7 +211,7 @@ const VoteUI = ({ user }: { user: Partial }) => { // Room is loading if (roomFromDb === undefined) { - return ; + return ; // Room has been loaded } else if (roomFromDb) { return ( @@ -322,7 +329,7 @@ const VoteUI = ({ user }: { user: Partial }) => { )} {!!roomFromDb && - (roomFromDb.userId === user.id || isAdmin(user?.publicMetadata)) && ( + (roomFromDb.userId === user?.id || isAdmin(user?.publicMetadata)) && ( <>
diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx index 97c7a66..2aabd19 100644 --- a/src/app/dashboard/page.tsx +++ b/src/app/dashboard/page.tsx @@ -25,7 +25,7 @@ export default async function Dashboard() { )} - {user && } +
); } diff --git a/src/app/room/[id]/loading.tsx b/src/app/room/[id]/loading.tsx new file mode 100644 index 0000000..b61d5d9 --- /dev/null +++ b/src/app/room/[id]/loading.tsx @@ -0,0 +1,6 @@ +import LoadingIndicator from "@/app/_components/LoadingIndicator"; + +export default function Loading() { + // You can add any UI inside Loading, including a Skeleton. + return ; +} diff --git a/src/app/room/[id]/page.tsx b/src/app/room/[id]/page.tsx index 01ed746..fb3416c 100644 --- a/src/app/room/[id]/page.tsx +++ b/src/app/room/[id]/page.tsx @@ -1,5 +1,3 @@ -import { currentUser } from "@clerk/nextjs"; -import Loading from "@/app/_components/Loading"; import VoteUI from "@/app/_components/VoteUI"; export const runtime = "edge"; @@ -8,20 +6,10 @@ export const dynamic = "force-dynamic"; export const revalidate = 0; export const fetchCache = "force-no-store"; -export default async function Room() { - const user = await currentUser(); - - const shapedUser = { - id: user?.id, - firstName: user?.firstName, - lastName: user?.lastName, - imageUrl: user?.imageUrl, - publicMetadata: user?.publicMetadata, - }; - +export default function Room() { return (
- {user ? : } +
); }