@colisweb/rescript-toolkit 2.62.4 → 2.63.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -57,8 +57,23 @@ module Make = (Config: RouterConfig) => {
|
|
|
57
57
|
|
|
58
58
|
let useRoute = (): Config.t => RescriptReactRouter.useUrl()->Config.make
|
|
59
59
|
|
|
60
|
-
let isRouteEqual = (routeA: Config.t, routeB: Config.t): bool =>
|
|
61
|
-
routeA
|
|
60
|
+
let isRouteEqual = (routeA: Config.t, routeB: Config.t): bool => {
|
|
61
|
+
let routeA = {
|
|
62
|
+
let url = routeA->Config.toString
|
|
63
|
+
let queryParamsIndex = url->Js.String2.indexOf("?")
|
|
64
|
+
|
|
65
|
+
queryParamsIndex === -1 ? url : url->Js.String2.slice(~from=0, ~to_=queryParamsIndex)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
let routeB = {
|
|
69
|
+
let url = routeB->Config.toString
|
|
70
|
+
let queryParamsIndex = url->Js.String2.indexOf("?")
|
|
71
|
+
|
|
72
|
+
queryParamsIndex === -1 ? url : url->Js.String2.slice(~from=0, ~to_=queryParamsIndex)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
routeA === routeB
|
|
76
|
+
}
|
|
62
77
|
|
|
63
78
|
let useIsCurrentRoute = (route: Config.t): bool => {
|
|
64
79
|
let {currentRoute} = React.useContext(routerContext)
|
|
@@ -148,6 +163,7 @@ module Make = (Config: RouterConfig) => {
|
|
|
148
163
|
and groupInfo = {
|
|
149
164
|
label: React.element,
|
|
150
165
|
icon: React.element,
|
|
166
|
+
activeForCurrentRoute?: Config.t => bool,
|
|
151
167
|
}
|
|
152
168
|
and appLink = {
|
|
153
169
|
route: Config.t,
|
|
@@ -198,7 +214,7 @@ module Make = (Config: RouterConfig) => {
|
|
|
198
214
|
<Link
|
|
199
215
|
route
|
|
200
216
|
className={cx([commonClassName, isSubLink ? "ml-3" : "", "sidenav-link"])}
|
|
201
|
-
activeClassName="bg-primary-100 text-neutral-700"
|
|
217
|
+
activeClassName="bg-primary-100/75 text-neutral-700"
|
|
202
218
|
onClick={_ => onLinkClick()}>
|
|
203
219
|
<span className="overflow-hidden flex">
|
|
204
220
|
<span className={cx(["text-neutral-800", isNavOpen ? "pl-2" : "px-2"])}> icon </span>
|
|
@@ -231,8 +247,14 @@ module Make = (Config: RouterConfig) => {
|
|
|
231
247
|
~openMenu,
|
|
232
248
|
) => {
|
|
233
249
|
let (isOpen, setIsOpen) = React.useState(() => false)
|
|
234
|
-
|
|
250
|
+
let currentRoute = useRoute()
|
|
235
251
|
let toggle = React.useCallback0(_ => setIsOpen(v => !v))
|
|
252
|
+
let hasActiveSubRoute = links->Array.some(link => {
|
|
253
|
+
switch link {
|
|
254
|
+
| Legacy(_) => false
|
|
255
|
+
| App({route}) => isRouteEqual(currentRoute, route)
|
|
256
|
+
}
|
|
257
|
+
})
|
|
236
258
|
|
|
237
259
|
React.useEffect1(() => {
|
|
238
260
|
if !isNavOpen {
|
|
@@ -247,7 +269,15 @@ module Make = (Config: RouterConfig) => {
|
|
|
247
269
|
openMenu()
|
|
248
270
|
toggle()
|
|
249
271
|
}}
|
|
250
|
-
className={cx([
|
|
272
|
+
className={cx([
|
|
273
|
+
commonClassName,
|
|
274
|
+
"flex items-center w-full sidenav-link",
|
|
275
|
+
switch (hasActiveSubRoute, isNavOpen) {
|
|
276
|
+
| (true, true) => "bg-primary-100/50"
|
|
277
|
+
| (true, false) => "bg-primary-100/75"
|
|
278
|
+
| (false, _) => ""
|
|
279
|
+
},
|
|
280
|
+
])}>
|
|
251
281
|
<span className={cx(["mr-2 text-neutral-800", isNavOpen ? "pl-2" : "px-2"])}>
|
|
252
282
|
groupInfo.icon
|
|
253
283
|
</span>
|