11import * as React from "react" ;
2- import { Link , useSubmit } from "react-router" ;
2+ import { Link } from "react-router" ;
33import { clsx } from "clsx" ;
44
55import iconsHref from "~/icons.svg" ;
@@ -8,7 +8,6 @@ import type { MenuDoc } from "~/modules/gh-docs/.server/docs";
88import { useNavigation } from "~/hooks/use-navigation" ;
99import { useDelayedValue } from "~/hooks/use-delayed-value" ;
1010import { useHeaderData } from "../docs-header/use-header-data" ;
11- import { useDocsLayoutRouteLoaderData } from "~/hooks/use-docs-layout" ;
1211
1312export function Menu ( {
1413 menu,
@@ -50,7 +49,7 @@ function MenuCategory({ category }: { category: MenuDoc }) {
5049 }
5150
5251 return (
53- < MenuCategoryDetails className = "group" slug = { category . slug } >
52+ < MenuCategoryDetails className = "group" >
5453 < MenuSummary >
5554 { category . attrs . title }
5655 < svg aria-hidden className = "hidden h-5 w-5 group-open:block" >
@@ -91,67 +90,17 @@ function MenuHeading({ label }: { label: string }) {
9190
9291type MenuCategoryDetailsType = {
9392 className ?: string ;
94- slug ?: string ;
9593 children : React . ReactNode ;
9694} ;
9795
98- function MenuCategoryDetails ( {
99- className,
100- slug,
101- children,
102- } : MenuCategoryDetailsType ) {
103- const [ isOpen , submitMenuCollapse ] = useMenuCollapse ( slug ) ;
104-
96+ function MenuCategoryDetails ( { className, children } : MenuCategoryDetailsType ) {
10597 return (
106- < details
107- className = { clsx ( className , "relative flex flex-col" ) }
108- open = { isOpen }
109- onToggle = { ( e ) => {
110- submitMenuCollapse ( e . currentTarget . open ) ;
111- } }
112- >
98+ < details className = { clsx ( className , "relative flex flex-col" ) } open >
11399 { children }
114100 </ details >
115101 ) ;
116102}
117103
118- function useMenuCollapse ( category ?: string ) {
119- const menuCollapseState = useDocsLayoutRouteLoaderData ( ) ?. menuCollapseState ;
120- const [ isOpen , setIsOpen ] = React . useState (
121- menuCollapseState ?. [ category ?? "" ] ?? true ,
122- ) ;
123- const submit = useSubmit ( ) ;
124-
125- const submitMenuCollapse = React . useCallback (
126- ( open : boolean ) => {
127- // Fire and forget, assume that the submit will succeed and just update
128- setIsOpen ( open ) ;
129-
130- if ( ! category ) return ;
131-
132- return submit (
133- { category, open } ,
134- {
135- navigate : false ,
136- method : "post" ,
137- action : "/menu-collapse" ,
138- } ,
139- ) ;
140- } ,
141- [ category , submit ] ,
142- ) ;
143-
144- // Auto-expand when navigating to a page within this category
145- let { isActive } = useNavigation ( category ) ;
146- React . useEffect ( ( ) => {
147- if ( isActive ) {
148- submitMenuCollapse ( true ) ;
149- }
150- } , [ isActive , submitMenuCollapse ] ) ;
151-
152- return [ isOpen , submitMenuCollapse ] as const ;
153- }
154-
155104let sortDocs = ( a : MenuDoc , b : MenuDoc ) =>
156105 ( a . attrs . order || Infinity ) - ( b . attrs . order || Infinity ) ;
157106
0 commit comments