@@ -6,24 +6,26 @@ import pickBy from "lodash/pickBy";
66import { Url } from "next/dist/shared/lib/router/router" ;
77import Link from "next/link" ;
88import { Router , useRouter } from "next/router" ;
9- import React , {
9+ import {
10+ ComponentProps ,
1011 createContext ,
12+ ReactNode ,
1113 useContext ,
1214 useEffect ,
1315 useMemo ,
1416 useRef ,
1517 useState ,
1618} from "react" ;
1719
18- import { SearchCubeResultOrder } from "@/graphql/query-hooks" ;
19- import { BrowseParams } from "@/pages/browse" ;
20- import useEvent from "@/utils/use-event" ;
21-
2220import {
2321 BrowseFilter ,
2422 getFiltersFromParams ,
2523 getParamsFromFilters ,
26- } from "./filters" ;
24+ } from "@/browser/filters" ;
25+ import { truthy } from "@/domain/types" ;
26+ import { SearchCubeResultOrder } from "@/graphql/query-hooks" ;
27+ import { BrowseParams } from "@/pages/browse" ;
28+ import { useEvent } from "@/utils/use-event" ;
2729
2830export const getBrowseParamsFromQuery = (
2931 query : Router [ "query" ]
@@ -75,10 +77,15 @@ export const getBrowseParamsFromQuery = (
7577 ) ;
7678} ;
7779
78- export const buildURLFromBrowseState = ( browseState : BrowseParams ) => {
79- const { type, iri, subtype, subiri, subsubtype, subsubiri, ...queryParams } =
80- browseState ;
81-
80+ export const buildURLFromBrowseState = ( {
81+ type,
82+ iri,
83+ subtype,
84+ subiri,
85+ subsubtype,
86+ subsubiri,
87+ ...queryParams
88+ } : BrowseParams ) => {
8289 const typePart =
8390 type && iri
8491 ? `${ encodeURIComponent ( type ) } /${ encodeURIComponent ( iri ) } `
@@ -91,15 +98,16 @@ export const buildURLFromBrowseState = (browseState: BrowseParams) => {
9198 subsubtype && subsubiri
9299 ? `${ encodeURIComponent ( subsubtype ) } /${ encodeURIComponent ( subsubiri ) } `
93100 : undefined ;
94-
95101 const pathname = [ "/browse" , typePart , subtypePart , subsubtypePart ]
96- . filter ( Boolean )
102+ . filter ( truthy )
97103 . join ( "/" ) ;
104+
98105 return {
99106 pathname,
100107 query : queryParams ,
101- } as React . ComponentProps < typeof Link > [ "href" ] ;
108+ } satisfies ComponentProps < typeof Link > [ "href" ] ;
102109} ;
110+
103111const extractParamFromPath = ( path : string , param : string ) =>
104112 path . match ( new RegExp ( `[&?]${ param } =(.*?)(&|$)` ) ) ;
105113
@@ -140,22 +148,22 @@ const useBrowseParamsStateWithUrlSync = (initialState: BrowseParams) => {
140148 } , [ router . isReady , router . query ] ) ;
141149
142150 const setState = useEvent (
143- (
144- stateUpdate : BrowseParams | ( ( prevState : BrowseParams ) => BrowseParams )
145- ) => {
146- rawSetState ( ( curState ) => {
151+ ( stateUpdate : BrowseParams | ( ( prev : BrowseParams ) => BrowseParams ) ) => {
152+ rawSetState ( ( prev ) => {
147153 const newState = {
148154 ...( stateUpdate instanceof Function
149- ? stateUpdate ( curState )
155+ ? stateUpdate ( prev )
150156 : stateUpdate ) ,
151- } as BrowseParams ;
157+ } satisfies BrowseParams ;
152158 router . replace ( urlCodec . serialize ( newState ) , undefined , {
153159 shallow : true ,
154160 } ) ;
161+
155162 return newState ;
156163 } ) ;
157164 }
158165 ) ;
166+
159167 return [ state , setState ] as const ;
160168} ;
161169
@@ -283,7 +291,7 @@ export const BrowseStateProvider = ({
283291 children,
284292 syncWithUrl,
285293} : {
286- children : React . ReactNode ;
294+ children : ReactNode ;
287295 syncWithUrl : boolean ;
288296} ) => {
289297 const browseState = useBrowseState ( { syncWithUrl } ) ;
0 commit comments