Skip to content

Commit

Permalink
End of video
Browse files Browse the repository at this point in the history
  • Loading branch information
samselikoff committed Feb 14, 2022
1 parent b033cfc commit 27872ae
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 4 deletions.
28 changes: 25 additions & 3 deletions src/components/sidebar.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import useSWR from "swr";
import useSWR, { mutate, useSWRConfig } from "swr";
import Link from "next/link";
import { useRouter } from "next/router";
import Spinner from "./spinner";
import { messageUrl } from "../pages/message/[mid]";
import { useState } from "react";

export function Sidebar() {
let { data } = useSWR(`/api/messages`);
Expand Down Expand Up @@ -30,19 +32,39 @@ export function Sidebar() {
function MessageLink({ message }) {
let router = useRouter();
let active = router.asPath === `/message/${message.id}`;
let { fetcher } = useSWRConfig();
let url = messageUrl(message.id);
let href = `/message/${message.id}`;
let [pending, setPending] = useState(false);

return (
<Link href={`/message/${message.id}`}>
<Link href={href}>
<a
onClick={async (e) => {
if (e.ctrlKey || e.metaKey) return;

e.preventDefault();

setPending(true);
await mutate(url, async (current) => current ?? fetcher(url));
setPending(false);
router.push(href);
}}
className={`
${
active
? "bg-blue-600 text-blue-50"
: "hover:bg-zinc-700/50 text-white"
}
block px-2 py-2 rounded text-sm truncate`}
block px-2 py-2 pr-4 rounded text-sm truncate relative`}
>
{message.title}

{pending && (
<span className="absolute inset-y-0 right-0 flex pr-1">
<Spinner size="s" />
</span>
)}
</a>
</Link>
);
Expand Down
4 changes: 3 additions & 1 deletion src/pages/message/[mid].js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ import { useRouter } from "next/router";
import useSWR from "swr";
import Spinner from "../../components/spinner";

export const messageUrl = (messageId) => `/api/messages/${messageId}`;

export default function Message() {
let router = useRouter();
let { data } = useSWR(`/api/messages/${router.query.mid}`);
let { data } = useSWR(messageUrl(router.query.mid));

return (
<div className="w-full p-8 overflow-y-scroll">
Expand Down

0 comments on commit 27872ae

Please sign in to comment.