|
1 | 1 | module Link = Next.Link
|
2 | 2 |
|
3 |
| -let link = "no-underline block hover:cursor-pointer hover:text-fire-30 text-gray-40 mb-px" |
| 3 | +let link = "no-underline block hover:cursor-pointer hover:text-fire-30 mb-px" |
4 | 4 | let activeLink = "font-medium text-fire-30 border-b border-fire"
|
5 | 5 |
|
6 | 6 | let linkOrActiveLink = (~target, ~route) => target === route ? activeLink : link
|
7 | 7 |
|
8 | 8 | let linkOrActiveLinkSubroute = (~target, ~route) =>
|
9 | 9 | String.startsWith(route, target) ? activeLink : link
|
10 | 10 |
|
11 |
| -let isActiveLink = (~route: string, ~href: string) => { |
12 |
| - route == href ? activeLink : link |
| 11 | +let isActiveLink = (~includes: string, ~excludes: option<string>=?, ~route: string) => { |
| 12 | + // includes means we want the lnk to be active if it contains the expected text |
| 13 | + let includes = route->String.includes(includes) |
| 14 | + // excludes allows us to not have links be active even if they do have the includes text |
| 15 | + let excludes = switch excludes { |
| 16 | + | Some(excludes) => route->String.includes(excludes) |
| 17 | + | None => false |
| 18 | + } |
| 19 | + includes && !excludes ? activeLink : link |
13 | 20 | }
|
14 | 21 |
|
| 22 | +let isDocRoute = (~route) => |
| 23 | + route->String.includes("/docs/") || route->String.includes("/syntax-lookup") |
| 24 | + |
| 25 | +let isDocRouteActive = (~route) => isDocRoute(~route) ? activeLink : link |
| 26 | + |
15 | 27 | module MobileNav = {
|
16 | 28 | @react.component
|
17 | 29 | let make = (~route: string) => {
|
@@ -91,11 +103,10 @@ let make = (~fixed=true, ~isOverlayOpen: bool, ~setOverlayOpen: (bool => bool) =
|
91 | 103 | <div
|
92 | 104 | className="flex items-center xs:justify-between w-full bg-gray-90 sm:h-auto sm:relative">
|
93 | 105 | <div
|
94 |
| - className="flex ml-10 space-x-5 w-full max-w-320" |
| 106 | + className="flex ml-10 space-x-5 w-full max-w-320 text-gray-40" |
95 | 107 | style={ReactDOMStyle.make(~maxWidth="26rem", ())}>
|
96 | 108 | <Link
|
97 |
| - href={`/docs/manual/${version}/introduction`} |
98 |
| - className={isActiveLink(~route, ~href=`/docs/manual/${version}/introduction`)}> |
| 109 | + href={`/docs/manual/${version}/introduction`} className={isDocRouteActive(~route)}> |
99 | 110 | {React.string("Docs")}
|
100 | 111 | </Link>
|
101 | 112 |
|
@@ -154,24 +165,35 @@ let make = (~fixed=true, ~isOverlayOpen: bool, ~setOverlayOpen: (bool => bool) =
|
154 | 165 | <MobileNav route />
|
155 | 166 | </div>
|
156 | 167 | </nav>
|
157 |
| - <nav |
158 |
| - className="z-50 px-4 w-full h-14 bg-gray-100 shadow text-white-80 text-12 transition duration-300 ease-out group-[.nav-disappear]:-translate-y-16 md:group-[.nav-disappear]:transform-none"> |
159 |
| - <div className="pl-30 flex gap-16 items-center h-full w-full max-w-md"> |
160 |
| - <Link |
161 |
| - href={`/docs/manual/${version}/api`} |
162 |
| - className={isActiveLink(~route, ~href=`/docs/manual/${version}/api`)}> |
163 |
| - {React.string("API")} |
164 |
| - </Link> |
165 |
| - <Link href={`/syntax-lookup`} className={isActiveLink(~route, ~href=`/syntax-lookup`)}> |
166 |
| - {React.string("Syntax")} |
167 |
| - </Link> |
168 |
| - <Link |
169 |
| - href={`/docs/react/latest/introduction`} |
170 |
| - className={isActiveLink(~route, ~href=`/docs/react/latest/introduction`)}> |
171 |
| - {React.string("React")} |
172 |
| - </Link> |
173 |
| - </div> |
174 |
| - </nav> |
| 168 | + // This is a subnav for documentation pages |
| 169 | + {isDocRoute(~route) |
| 170 | + ? <nav |
| 171 | + id="docs-subnav" |
| 172 | + className="z-50 px-4 w-full h-12 bg-gray-70 shadow text-white text-14 transition duration-300 ease-out group-[.nav-disappear]:-translate-y-16 md:group-[.nav-disappear]:transform-none"> |
| 173 | + <div className="pl-30 flex gap-10 items-center h-full w-full max-w-md"> |
| 174 | + <Link |
| 175 | + href={`/docs/manual/${version}/introduction`} |
| 176 | + className={isActiveLink(~includes="/docs/manual/", ~excludes="/api", ~route)}> |
| 177 | + {React.string("Language Manual")} |
| 178 | + </Link> |
| 179 | + <Link |
| 180 | + href={`/docs/manual/${version}/api`} |
| 181 | + className={isActiveLink(~includes="/api", ~route)}> |
| 182 | + {React.string("API")} |
| 183 | + </Link> |
| 184 | + <Link |
| 185 | + href={`/syntax-lookup`} |
| 186 | + className={isActiveLink(~includes="/syntax-lookup", ~route)}> |
| 187 | + {React.string("Syntax Lookup")} |
| 188 | + </Link> |
| 189 | + <Link |
| 190 | + href={`/docs/react/latest/introduction`} |
| 191 | + className={isActiveLink(~includes="/docs/react/", ~route)}> |
| 192 | + {React.string("React")} |
| 193 | + </Link> |
| 194 | + </div> |
| 195 | + </nav> |
| 196 | + : React.null} |
175 | 197 | </header>
|
176 | 198 | </>
|
177 | 199 | }
|
|
0 commit comments