@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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@colisweb/rescript-toolkit",
3
- "version": "2.62.4",
3
+ "version": "2.63.1",
4
4
  "scripts": {
5
5
  "clean": "rescript clean",
6
6
  "build": "rescript build -with-deps",
@@ -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->Config.toString === routeB->Config.toString
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([commonClassName, "flex items-center w-full sidenav-link"])}>
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>