diff --git a/showcase.json b/showcase.json index 5390926a..8a302e07 100644 --- a/showcase.json +++ b/showcase.json @@ -100,5 +100,6 @@ "revery", "hsinyau", "rootless", - "haydenull" + "haydenull", + "walk2future" ] diff --git a/src/components/dashboard/DashboardMain.tsx b/src/components/dashboard/DashboardMain.tsx index 8cf22f72..82ef7561 100644 --- a/src/components/dashboard/DashboardMain.tsx +++ b/src/components/dashboard/DashboardMain.tsx @@ -15,7 +15,7 @@ export const DashboardMain: React.FC<{ className={cn( fullWidth ? "relative" - : "max-w-screen-2xl relative px-5 py-5 md:px-10", + : "max-w-screen-2xl min-w-[270px] relative px-5 py-5 md:px-10", className, )} > diff --git a/src/components/site/SiteHeader.tsx b/src/components/site/SiteHeader.tsx index 9991da5d..3522d7ea 100644 --- a/src/components/site/SiteHeader.tsx +++ b/src/components/site/SiteHeader.tsx @@ -19,7 +19,7 @@ import { useState, useRef, useEffect, RefObject } from "react" import chroma from "chroma-js" import { Menu } from "~/components/ui/Menu" import { useTranslation } from "next-i18next" -import { HeartIcon } from "@heroicons/react/24/solid" +import { useMediaQuery } from "~/hooks/useMediaQuery" type HeaderLinkType = { icon?: React.ReactNode @@ -55,6 +55,7 @@ export const SiteHeader: React.FC<{ site?: Profile | undefined | null }> = ({ site }) => { const { t } = useTranslation("site") + const isSm = useMediaQuery("(min-width: 640px)") const leftLinks: HeaderLinkType[] = site?.navigation?.find( (nav) => nav.url === "/", ) @@ -203,17 +204,17 @@ export const SiteHeader: React.FC<{ )} -
+
-
+
{site?.name}
-
+
-
+
{moreMenuItems.map((item) => { if (item.out) { return ( @@ -273,7 +274,7 @@ export const SiteHeader: React.FC<{
{site?.bio && (
)} diff --git a/src/hooks/useMediaQuery.ts b/src/hooks/useMediaQuery.ts new file mode 100644 index 00000000..0ea42a93 --- /dev/null +++ b/src/hooks/useMediaQuery.ts @@ -0,0 +1,42 @@ +import { useEffect, useState } from "react" + +export function useMediaQuery(query: string): boolean { + const getMatches = (query: string): boolean => { + // Prevents SSR issues + if (typeof window !== "undefined") { + return window.matchMedia(query).matches + } + return false + } + + const [matches, setMatches] = useState(getMatches(query)) + + function handleChange() { + setMatches(getMatches(query)) + } + + useEffect(() => { + const matchMedia = window.matchMedia(query) + + // Triggered at the first client-side load and if query changes + handleChange() + + // Listen matchMedia + if (matchMedia.addListener) { + matchMedia.addListener(handleChange) + } else { + matchMedia.addEventListener("change", handleChange) + } + + return () => { + if (matchMedia.removeListener) { + matchMedia.removeListener(handleChange) + } else { + matchMedia.removeEventListener("change", handleChange) + } + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [query]) + + return matches +} diff --git a/src/pages/dashboard/[subdomain]/events.tsx b/src/pages/dashboard/[subdomain]/events.tsx index 93cdc6c4..70a8e8e6 100644 --- a/src/pages/dashboard/[subdomain]/events.tsx +++ b/src/pages/dashboard/[subdomain]/events.tsx @@ -79,7 +79,7 @@ export default function EventsPage() { return (
-
+
{pages.data?.pages[0]?.list.map((item) => { let status if (item.metadata?.frontMatter?.EndTime < new Date()) {