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
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ export function AccountHeaderMobileUI(props: AccountHeaderCompProps) {
</div>

<MobileBurgerMenuButton
type="loggedIn"
email={props.account?.email}
logout={props.logout}
connectButton={props.connectButton}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,19 @@ export function SecondaryNav(props: {
logout: () => void;
connectButton: React.ReactNode;
}) {
return (
<div className="flex items-center gap-6">
<SecondaryNavLinks />
<AccountButton
logout={props.logout}
connectButton={props.connectButton}
account={props.account}
/>
</div>
);
}

export function SecondaryNavLinks() {
return (
<div className="flex items-center gap-6">
<ToolTipLabel
Expand Down Expand Up @@ -45,12 +58,6 @@ export function SecondaryNav(props: {
>
Docs
</Link>

<AccountButton
logout={props.logout}
connectButton={props.connectButton}
account={props.account}
/>
</div>
);
}
88 changes: 53 additions & 35 deletions apps/dashboard/src/app/components/MobileBurgerMenuButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,20 @@ import { useTheme } from "next-themes";
import Link from "next/link";
import { useLayoutEffect, useState } from "react";
import { CmdKSearchModal } from "../../components/cmd-k-search";

export function MobileBurgerMenuButton(props: {
email: string | undefined;
logout: () => void;
connectButton: React.ReactNode;
}) {
import { ThirdwebMiniLogo } from "./ThirdwebMiniLogo";

export function MobileBurgerMenuButton(
props:
| {
type: "loggedIn";
email: string | undefined;
logout: () => void;
connectButton: React.ReactNode;
}
| {
type: "loggedOut";
},
) {
const [isMenuOpen, setIsMenuOpen] = useState(false);
const { setTheme, theme } = useTheme();
const [isCMDSearchModalOpen, setIsCMDSearchModalOpen] = useState(false);
Expand Down Expand Up @@ -62,41 +70,51 @@ export function MobileBurgerMenuButton(props: {
<XIcon className="size-7 text-muted-foreground" />
</Button>

<SkeletonContainer
skeletonData="someone@example.com"
loadedData={props.email}
className="inline-block self-start"
render={(email) => <p className="text-foreground">{email}</p>}
/>
<Link href="/team">
<ThirdwebMiniLogo className="h-5" />
</Link>

<div className="h-4" />
<div className="h-5" />

<div className="[&>button]:!w-full">{props.connectButton}</div>
{props.type === "loggedIn" && (
<>
<SkeletonContainer
skeletonData="someone@example.com"
loadedData={props.email}
className="inline-block self-start"
render={(email) => <p className="text-foreground">{email}</p>}
/>

<div className="h-6" />
<div className="h-3" />

<div className="flex flex-col gap-4">
<Link
href="/account"
className="flex items-center gap-2 text-base text-muted-foreground hover:text-foreground "
>
<SettingsIcon className="size-4" />
Account Settings
</Link>
<div className="[&>button]:!w-full">{props.connectButton}</div>

<Button
variant="link"
className="!h-auto hover:!no-underline justify-start gap-2 px-0 py-1 text-start text-base text-muted-foreground hover:text-foreground"
onClick={props.logout}
>
<LogOutIcon className="size-4" />
Log Out
</Button>
</div>
<div className="h-6" />

<div className="flex flex-col gap-4">
<Link
href="/account"
className="flex items-center gap-2 text-base text-muted-foreground hover:text-foreground "
>
<SettingsIcon className="size-4" />
Account Settings
</Link>

<Button
variant="link"
className="!h-auto hover:!no-underline justify-start gap-2 px-0 py-1 text-start text-base text-muted-foreground hover:text-foreground"
onClick={props.logout}
>
<LogOutIcon className="size-4" />
Log Out
</Button>
</div>

<div className="h-6" />
<Separator />
<div className="h-6" />
<div className="h-6" />
<Separator />
<div className="h-6" />
</>
)}

<div className="flex flex-col gap-5">
<Button
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import type { Meta, StoryObj } from "@storybook/react";
import { mobileViewport } from "../../../../stories/utils";
import {
TeamHeaderLoggedOutDesktopUI,
TeamHeaderLoggedOutMobileUI,
} from "./TeamHeaderLoggedOut";
import {} from "./TeamHeaderUI";

const meta = {
title: "Team/TeamHeaderLoggedOut",
component: Variants,
parameters: {
nextjs: {
appDirectory: true,
},
},
} satisfies Meta<typeof Variants>;

export default meta;
type Story = StoryObj<typeof meta>;

export const Desktop: Story = {
args: {
type: "desktop",
},
};

export const Mobile: Story = {
args: {
type: "mobile",
},
parameters: {
viewport: mobileViewport("iphone14"),
},
};

function Variants(props: {
type: "mobile" | "desktop";
}) {
const Comp =
props.type === "mobile"
? TeamHeaderLoggedOutMobileUI
: TeamHeaderLoggedOutDesktopUI;

return (
<div className="container min-h-screen bg-zinc-900 py-10">
<div className="bg-background">
<Comp />
</div>
</div>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { Button } from "@/components/ui/button";
import { cn } from "@/lib/utils";
import Link from "next/link";
import { CmdKSearch } from "../../../../components/cmd-k-search";
import { SecondaryNavLinks } from "../../../components/Header/SecondaryNav/SecondaryNav";
import { MobileBurgerMenuButton } from "../../../components/MobileBurgerMenuButton";
import { ThirdwebMiniLogo } from "../../../components/ThirdwebMiniLogo";

export function TeamHeaderLoggedOutDesktopUI(props: {
className?: string;
}) {
return (
<header
className={cn(
"flex flex-row items-center justify-between gap-2 px-6 py-4 text-foreground ",
props.className,
)}
>
<div className="flex items-center gap-4">
<Link href="/team">
<ThirdwebMiniLogo className="h-5" />
</Link>

<CmdKSearch className="h-auto py-1.5" />
</div>

<div className="flex items-center gap-6">
<SecondaryNavLinks />

<Button size="sm" variant="primary" className="rounded-lg" asChild>
<Link href="/login">Sign in</Link>
</Button>
</div>
</header>
);
}

export function TeamHeaderLoggedOutMobileUI(props: {
className?: string;
}) {
return (
<header
className={cn(
"flex flex-row items-center justify-between gap-2 px-4 py-4 text-foreground",
props.className,
)}
>
<Link href="/team">
<ThirdwebMiniLogo className="h-5" />
</Link>

<div className="flex items-center gap-3">
<Button size="sm" variant="primary" className="rounded-lg" asChild>
<Link href="/login">Sign in</Link>
</Button>
<MobileBurgerMenuButton type="loggedOut" />
</div>
</header>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ export function TeamHeaderMobileUI(props: TeamHeaderCompProps) {
</div>

<MobileBurgerMenuButton
type="loggedIn"
email={props.account?.email}
logout={props.logout}
connectButton={props.connectButton}
Expand Down
6 changes: 4 additions & 2 deletions apps/dashboard/src/components/cmd-k-search/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,9 @@ export const CmdKSearchModal = (props: {
);
};

export const CmdKSearch: React.FC = () => {
export const CmdKSearch = (props: {
className?: string;
}) => {
const [open, setOpen] = useState(false);

return (
Expand All @@ -282,7 +284,7 @@ export const CmdKSearch: React.FC = () => {
<Input
onClick={() => setOpen(true)}
placeholder="Search any contract"
className="bg-transparent pr-4"
className={cn("bg-transparent pr-4", props.className)}
/>
<div className="-translate-y-1/2 absolute top-1/2 right-3 flex items-center gap-[2px] text-muted-foreground text-sm">
<CommandIcon className="size-3" /> K
Expand Down
Loading