From f92be4fb944e69ae1b7cf667d99e434ad2ed7491 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 11 Oct 2022 11:13:25 +0200 Subject: [PATCH] refactor: simplify path logic --- apps/website/src/components/CmdK.tsx | 2 +- apps/website/src/components/CodeListing.tsx | 6 ++-- apps/website/src/components/MethodItem.tsx | 6 ++-- apps/website/src/components/Sections.tsx | 4 +-- apps/website/src/components/SidebarItems.tsx | 13 +++----- apps/website/src/components/SidebarLayout.tsx | 33 ++++++++----------- apps/website/src/pages/404.tsx | 2 +- apps/website/src/pages/docs/[...slug].tsx | 12 +++++-- .../pages/docs/packages/[package]/index.tsx | 4 +-- .../website/src/pages/docs/packages/index.tsx | 6 ++-- apps/website/src/pages/index.tsx | 8 ++--- 11 files changed, 46 insertions(+), 50 deletions(-) diff --git a/apps/website/src/components/CmdK.tsx b/apps/website/src/components/CmdK.tsx index ed75819d0456..0fadbd493953 100644 --- a/apps/website/src/components/CmdK.tsx +++ b/apps/website/src/components/CmdK.tsx @@ -52,7 +52,7 @@ export function CmdKDialog({ () => searchResults?.map((item) => ( { void router.push(item.path); diff --git a/apps/website/src/components/CodeListing.tsx b/apps/website/src/components/CodeListing.tsx index 7794f1797b90..b20affd00d04 100644 --- a/apps/website/src/components/CodeListing.tsx +++ b/apps/website/src/components/CodeListing.tsx @@ -45,17 +45,17 @@ export function CodeListing({ {deprecation || readonly || optional ? (
{deprecation ? ( -
+
Deprecated
) : null} {readonly ? ( -
+
Readonly
) : null} {optional ? ( -
+
Optional
) : null} diff --git a/apps/website/src/components/MethodItem.tsx b/apps/website/src/components/MethodItem.tsx index ef71a3e10ef8..7f77b9fcc02d 100644 --- a/apps/website/src/components/MethodItem.tsx +++ b/apps/website/src/components/MethodItem.tsx @@ -47,17 +47,17 @@ export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJ (data.kind === 'Method' && method.static) ? (
{data.deprecated ? ( -
+
Deprecated
) : null} {data.kind === 'Method' && method.protected ? ( -
+
Protected
) : null} {data.kind === 'Method' && method.static ? ( -
+
Static
) : null} diff --git a/apps/website/src/components/Sections.tsx b/apps/website/src/components/Sections.tsx index 775e17ad2fff..4f196e2d6cf6 100644 --- a/apps/website/src/components/Sections.tsx +++ b/apps/website/src/components/Sections.tsx @@ -66,12 +66,12 @@ export function ConstructorSection({ data }: { data: ApiConstructorJSON }) { {data.deprecated || data.protected ? (
{data.deprecated ? ( -
+
Deprecated
) : null} {data.protected ? ( -
+
Protected
) : null} diff --git a/apps/website/src/components/SidebarItems.tsx b/apps/website/src/components/SidebarItems.tsx index 6ba808e46d32..88fb57230994 100644 --- a/apps/website/src/components/SidebarItems.tsx +++ b/apps/website/src/components/SidebarItems.tsx @@ -1,7 +1,6 @@ import { Section } from '@discordjs/ui'; import Link from 'next/link'; -import { useRouter } from 'next/router'; -import { type Dispatch, type SetStateAction, useEffect, useState, useMemo } from 'react'; +import { type Dispatch, type SetStateAction, useMemo } from 'react'; import { VscSymbolClass, VscSymbolEnum, @@ -68,18 +67,14 @@ function resolveIcon(item: keyof GroupedMembers) { export function SidebarItems({ members, setOpened, + asPath, }: { + asPath: string; members: Members; setOpened: Dispatch>; }) { - const router = useRouter(); - const [asPathWithoutQueryAndAnchor, setAsPathWithoutQueryAndAnchor] = useState(''); const groupItems = useMemo(() => groupMembers(members), [members]); - useEffect(() => { - setAsPathWithoutQueryAndAnchor(router.asPath.split('?')[0]?.split('#')[0] ?? ''); - }, [router.asPath]); - return (
{(Object.keys(groupItems) as (keyof GroupedMembers)[]) @@ -90,7 +85,7 @@ export function SidebarItems({ ; + member?: ReturnType; members: ReturnType; source: MDXRemoteSerializeResult; }; packageName: string; - - selectedMember?: ApiItemJSON | undefined; } export type Members = SidebarLayoutProps['data']['members']; @@ -55,11 +53,10 @@ export function SidebarLayout({ packageName, branchName, data, + asPath, children, -}: PropsWithChildren>) { - const router = useRouter(); +}: PropsWithChildren) { const dialog = useCmdK(); - const [asPathWithoutQueryAndAnchor, setAsPathWithoutQueryAndAnchor] = useState(''); const { data: versions } = useSWR(`https://docs.discordjs.dev/api/info?package=${packageName}`, fetcher); const { resolvedTheme, setTheme } = useTheme(); const toggleTheme = () => setTheme(resolvedTheme === 'light' ? 'dark' : 'light'); @@ -75,9 +72,7 @@ export function SidebarLayout({ } }, [matches]); - useEffect(() => { - setAsPathWithoutQueryAndAnchor(router.asPath.split('?')[0]?.split('#')[0]?.split(':')[0] ?? ''); - }, [router.asPath]); + const asPathWithoutContainerKey = useMemo(() => asPath?.split(':')[0] ?? '', [asPath]); const packageMenuItems = useMemo( () => [ @@ -129,7 +124,7 @@ export function SidebarLayout({ const pathElements = useMemo( () => - asPathWithoutQueryAndAnchor + asPathWithoutContainerKey .split('/') .slice(1) .map((path, idx, original) => ( @@ -137,7 +132,7 @@ export function SidebarLayout({ {path} )), - [asPathWithoutQueryAndAnchor], + [asPathWithoutContainerKey], ); const breadcrumbs = useMemo( @@ -174,12 +169,12 @@ export function SidebarLayout({
-
{breadcrumbs}
+
{breadcrumbs}
- +
404

Not found.

- + Take me back diff --git a/apps/website/src/pages/docs/[...slug].tsx b/apps/website/src/pages/docs/[...slug].tsx index 432f378ec569..b50200ed6490 100644 --- a/apps/website/src/pages/docs/[...slug].tsx +++ b/apps/website/src/pages/docs/[...slug].tsx @@ -20,7 +20,7 @@ import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; import { MDXRemote } from 'next-mdx-remote'; import { serialize } from 'next-mdx-remote/serialize'; -import { useMemo } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import rehypeIgnore from 'rehype-ignore'; import rehypePrettyCode, { type Options } from 'rehype-pretty-code'; import rehypeRaw from 'rehype-raw'; @@ -280,8 +280,10 @@ function member(props?: ApiItemJSON | undefined) { } } -export default function SlugPage(props: Partial) { +export default function SlugPage(props: SidebarLayoutProps & { error?: string }) { const router = useRouter(); + const [asPathWithoutQueryAndAnchor, setAsPathWithoutQueryAndAnchor] = useState(''); + const name = useMemo( () => `discord.js${props.data?.member?.name ? ` | ${props.data.member.name}` : ''}`, [props.data?.member?.name], @@ -295,6 +297,10 @@ export default function SlugPage(props: Partial { + setAsPathWithoutQueryAndAnchor(router.asPath.split('?')[0]?.split('#')[0] ?? ''); + }, [router.asPath]); + if (router.isFallback) { return null; } @@ -307,7 +313,7 @@ export default function SlugPage(props: Partial - + {props.data?.member ? ( <> diff --git a/apps/website/src/pages/docs/packages/[package]/index.tsx b/apps/website/src/pages/docs/packages/[package]/index.tsx index 18a87aeaced0..9643a856b6ca 100644 --- a/apps/website/src/pages/docs/packages/[package]/index.tsx +++ b/apps/website/src/pages/docs/packages/[package]/index.tsx @@ -71,7 +71,7 @@ export default function VersionsRoute(props: Partial & { error?: s

Select a version:

{props.data?.versions.map((version) => ( - +
@@ -83,7 +83,7 @@ export default function VersionsRoute(props: Partial & { error?: s )) ?? null} - + Go back diff --git a/apps/website/src/pages/docs/packages/index.tsx b/apps/website/src/pages/docs/packages/index.tsx index b7613f39343d..f5df38ce852e 100644 --- a/apps/website/src/pages/docs/packages/index.tsx +++ b/apps/website/src/pages/docs/packages/index.tsx @@ -79,7 +79,7 @@ export default function PackagesRoute(props: Partial & { error?: s {PACKAGES.map((pkg) => ( - +
@@ -89,7 +89,7 @@ export default function PackagesRoute(props: Partial & { error?: s