diff --git a/apps/web/app/(ee)/partners.dub.co/(dashboard)/messages/[programSlug]/page-client.tsx b/apps/web/app/(ee)/partners.dub.co/(dashboard)/messages/[programSlug]/page-client.tsx index a9164b6943c..70fcf84261c 100644 --- a/apps/web/app/(ee)/partners.dub.co/(dashboard)/messages/[programSlug]/page-client.tsx +++ b/apps/web/app/(ee)/partners.dub.co/(dashboard)/messages/[programSlug]/page-client.tsx @@ -17,7 +17,7 @@ import { ToggleSidePanelButton } from "@/ui/messages/toggle-side-panel-button"; import { ProgramHelpLinks } from "@/ui/partners/program-help-links"; import { ProgramRewardsPanel } from "@/ui/partners/program-rewards-panel"; import { X } from "@/ui/shared/icons"; -import { Button, Grid, useCopyToClipboard } from "@dub/ui"; +import { Button, Grid, useCopyToClipboard, useMediaQuery } from "@dub/ui"; import { Check, ChevronLeft, @@ -36,13 +36,21 @@ import { } from "@dub/utils"; import { useAction } from "next-safe-action/hooks"; import Link from "next/link"; -import { redirect, useParams } from "next/navigation"; -import { useState } from "react"; +import { + redirect, + useParams, + useRouter, + useSearchParams, +} from "next/navigation"; +import { useEffect, useState } from "react"; import { toast } from "sonner"; import { v4 as uuid } from "uuid"; export function PartnerMessagesProgramPageClient() { const { programSlug } = useParams() as { programSlug: string }; + const router = useRouter(); + const searchParams = useSearchParams(); + const { width } = useMediaQuery(); const { user } = useUser(); const { partner } = usePartnerProfile(); @@ -96,7 +104,18 @@ export function PartnerMessagesProgramPageClient() { }); const { setCurrentPanel } = useMessagesContext(); - const [isRightPanelOpen, setIsRightPanelOpen] = useState(true); + const [isRightPanelOpen, setIsRightPanelOpen] = useState(false); + const shouldAutoFocusComposer = searchParams.get("new") === "1"; + + useEffect(() => { + if (typeof width !== "number") return; + setIsRightPanelOpen(width >= 1082); + }, [programSlug, width]); + + useEffect(() => { + if (!shouldAutoFocusComposer) return; + router.replace(`/messages/${programSlug}`); + }, [programSlug, router, shouldAutoFocusComposer]); // Redirect if no messages and not enrolled, or messages error if ( @@ -194,6 +213,7 @@ export function PartnerMessagesProgramPageClient() { currentUserType="partner" currentUserId={partner?.id || ""} program={program} + autoFocusComposer={shouldAutoFocusComposer} onSendMessage={async (message) => { const createdAt = new Date(); diff --git a/apps/web/app/(ee)/partners.dub.co/(dashboard)/messages/layout.tsx b/apps/web/app/(ee)/partners.dub.co/(dashboard)/messages/layout.tsx index 401b5aeea4a..7210e2d7941 100644 --- a/apps/web/app/(ee)/partners.dub.co/(dashboard)/messages/layout.tsx +++ b/apps/web/app/(ee)/partners.dub.co/(dashboard)/messages/layout.tsx @@ -5,7 +5,7 @@ import { NavButton } from "@/ui/layout/page-content/nav-button"; import { MessagesContext, MessagesPanel } from "@/ui/messages/messages-context"; import { MessagesList } from "@/ui/messages/messages-list"; import { ProgramSelector } from "@/ui/partners/program-selector"; -import { Button, InfoTooltip, useRouterStuff } from "@dub/ui"; +import { Button, InfoTooltip } from "@dub/ui"; import { Msgs, Pen2 } from "@dub/ui/icons"; import { useParams, useRouter } from "next/navigation"; import { CSSProperties, ReactNode, useEffect, useState } from "react"; @@ -14,7 +14,6 @@ export default function MessagesLayout({ children }: { children: ReactNode }) { const { programSlug } = useParams() as { programSlug?: string }; const router = useRouter(); - const { searchParams } = useRouterStuff(); const { programMessages, isLoading, error } = useProgramMessages({ query: { messagesLimit: 1 }, @@ -25,8 +24,8 @@ export default function MessagesLayout({ children }: { children: ReactNode }) { ); useEffect(() => { - searchParams.get("new") && setCurrentPanel("main"); - }, [searchParams.get("new")]); + setCurrentPanel(programSlug ? "main" : "index"); + }, [programSlug]); return ( @@ -57,9 +56,10 @@ export default function MessagesLayout({ children }: { children: ReactNode }) { - router.push(`/messages/${slug}`) - } + setSelectedProgramSlug={(slug) => { + setCurrentPanel("main"); + router.push(`/messages/${slug}?new=1`); + }} trigger={