Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 13 additions & 11 deletions src/app/document/[documentId]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Navbar } from "./(navbar)/navbar";
import { Toolbar } from "./(toolbar)/toolbar";
import { Editor } from "./editor";
import { Room } from "./room";
// import { Room } from "./room";

interface Props {
params: Promise<{ documentId: string }>;
Expand All @@ -10,20 +10,22 @@ const Page: React.FC<Props> = async ({ params }) => {
const { documentId } = await params;
console.info(":Document:", documentId);

// <Room>
return (
<Room>
<div className="min-h-screen bg-[#fafbfd]">
<div className="flex flex-col px-4 pt-2 gap-y-2 fixed top-0 left-0 right-0 z-10 bg-[#fafbfd] print:hidden">
<Navbar />
<Toolbar />
</div>
<div className="min-h-screen bg-[#fafbfd]">
<div className="flex flex-col px-4 pt-2 gap-y-2 fixed top-0 left-0 right-0 z-10 bg-[#fafbfd] print:hidden">
<Navbar />
<Toolbar />
</div>

<div className="pt-[114px] print:pt-0">
<Editor />
</div>
<div className="pt-[114px] print:pt-0">
<Editor />
</div>
</Room>
</div>
);
{
/* </Room> */
}
};

export default Page;
114 changes: 58 additions & 56 deletions src/app/document/[documentId]/room.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
"use client";

import { FullscreenLoader } from "@/components/fullscreen-loader";
import { useToast } from "@/hooks/use-toast";
import {
ClientSideSuspense,
LiveblocksProvider,
RoomProvider,
} from "@liveblocks/react/suspense";
import { useParams } from "next/navigation";
import { ReactNode, useEffect, useMemo, useState } from "react";
import { getUsers } from "./action";
import { ReactNode } from "react";

// import { FullscreenLoader } from "@/components/fullscreen-loader";
// import { useToast } from "@/hooks/use-toast";
// import {
// ClientSideSuspense,
// LiveblocksProvider,
// RoomProvider,
// } from "@liveblocks/react/suspense";
// import { useParams } from "next/navigation";
// import { ReactNode, useEffect, useMemo, useState } from "react";
// import { getUsers } from "./action";

type User = {
id: string;
Expand All @@ -18,56 +20,56 @@ type User = {
};

export function Room({ children }: { children: ReactNode }) {
const params = useParams<{ documentId: string }>();
const { toast } = useToast();
// const params = useParams<{ documentId: string }>();
// const { toast } = useToast();

const [users, setUsers] = useState<User[]>([]);
// const [users, setUsers] = useState<User[]>([]);

const fetchUsers = useMemo(
() => async () => {
try {
const users = await getUsers();
setUsers(users);
} catch {
toast({
title: "Error",
description: "Failed to fetch users",
variant: "destructive",
});
}
},
[toast]
);
// const fetchUsers = useMemo(
// () => async () => {
// try {
// const users = await getUsers();
// setUsers(users);
// } catch {
// toast({
// title: "Error",
// description: "Failed to fetch users",
// variant: "destructive",
// });
// }
// },
// [toast]
// );

useEffect(() => {
fetchUsers();
}, [fetchUsers]);
// useEffect(() => {
// fetchUsers();
// }, [fetchUsers]);

return (
<LiveblocksProvider
authEndpoint={"/api/auth/liveblocks"}
throttle={16}
resolveUsers={({ userIds }) =>
userIds.map((id) => users.find((u) => u.id === id))
}
resolveMentionSuggestions={({ text }) => {
let filterUsers = users;
if (text) {
filterUsers = users.filter((u) =>
u.name.toLowerCase().includes(text.toLowerCase())
);
}
return filterUsers.map((u) => u.id);
}}
resolveRoomsInfo={() => []}
>
<RoomProvider id={params.documentId}>
<ClientSideSuspense
fallback={<FullscreenLoader label="Document loading..." />}
>
{children}
</ClientSideSuspense>
</RoomProvider>
</LiveblocksProvider>
// <LiveblocksProvider
// authEndpoint={"/api/auth/liveblocks"}
// throttle={16}
// resolveUsers={({ userIds }) =>
// userIds.map((id) => users.find((u) => u.id === id))
// }
// resolveMentionSuggestions={({ text }) => {
// let filterUsers = users;
// if (text) {
// filterUsers = users.filter((u) =>
// u.name.toLowerCase().includes(text.toLowerCase())
// );
// }
// return filterUsers.map((u) => u.id);
// }}
// resolveRoomsInfo={() => []}
// >
// <RoomProvider id={params.documentId}>
// <ClientSideSuspense
// fallback={<FullscreenLoader label="Document loading..." />}
// >
<>{children}</>
// </ClientSideSuspense>
// </RoomProvider>
// </LiveblocksProvider>
);
}
Loading