11import { useRouter } from 'next/router'
2- import { useEffect , useMemo , useState } from 'react'
2+ import { useMemo } from 'react'
33import {
44 Query ,
55 ParseQuery ,
66 useAbstractQuery ,
7- Router ,
87 AbstractQuery ,
98 AbstractQueryOptions ,
9+ RouterSSR ,
1010} from '../engine/query'
1111import {
1212 PaginationQuery ,
@@ -20,35 +20,26 @@ const DEFAULT_NEXT_ROUTER_OPTIONS: RouterWithHistoryOptions = {
2020
2121const useNextRouter = (
2222 options : undefined | Partial < RouterWithHistoryOptions > ,
23- ) : Router => {
23+ ) : RouterSSR => {
2424 const nextRouter = useRouter ( )
25- const [ nextRouterQuery , setNextRouterQuery ] = useState <
26- typeof nextRouter . query
27- > ( nextRouter . isReady ? nextRouter . query : { } )
2825
2926 const mergedOptions = useMemo (
3027 ( ) => ( { ...DEFAULT_NEXT_ROUTER_OPTIONS , ...options } ) ,
3128 [ options ] ,
3229 )
3330
34- useEffect ( ( ) => {
35- if ( nextRouter . isReady ) {
36- setNextRouterQuery ( nextRouter . query )
37- }
38- } , [ nextRouter . isReady , nextRouter . query ] )
39-
4031 return {
4132 getQuery : ( defaultQuery ) => {
4233 const query : Query = { }
43- for ( const [ key , value ] of Object . entries ( nextRouterQuery ) ) {
34+ for ( const [ key , value ] of Object . entries ( nextRouter . query ) ) {
4435 if ( value !== undefined ) {
4536 query [ key ] = value
4637 }
4738 }
4839 return { ...defaultQuery , ...query }
4940 } ,
5041 setQuery : ( query , defaultQuery ) => {
51- const newQuery = { ...nextRouterQuery , ...query }
42+ const newQuery = { ...nextRouter . query , ...query }
5243 const newQueryWithoutDefaults = Object . fromEntries (
5344 Object . entries ( newQuery ) . filter (
5445 ( [ key , value ] ) => value !== defaultQuery [ key ] ,
@@ -64,6 +55,7 @@ const useNextRouter = (
6455 } )
6556 }
6657 } ,
58+ isReady : nextRouter . isReady ,
6759 }
6860}
6961
@@ -73,7 +65,8 @@ export const useQuery = <TQuery extends AbstractQuery>(
7365 options ?: Partial < AbstractQueryOptions & RouterWithHistoryOptions > ,
7466) => {
7567 const router = useNextRouter ( options )
76- return useAbstractQuery ( router , parseQuery , defaultQuery , options )
68+ const result = useAbstractQuery ( router , parseQuery , defaultQuery , options )
69+ return { ...result , isReady : router . isReady }
7770}
7871
7972export const useQueryAndPagination = < TQuery extends AbstractQuery > (
@@ -83,20 +76,36 @@ export const useQueryAndPagination = <TQuery extends AbstractQuery>(
8376 options ?: Partial < AbstractQueryOptions & RouterWithHistoryOptions > ,
8477) => {
8578 const router = useNextRouter ( options )
86- return useAbstractQueryAndPagination (
79+ const result = useAbstractQueryAndPagination (
8780 router ,
8881 parseQuery ,
8982 defaultQuery ,
9083 defaultPagination ,
9184 options ,
9285 )
86+ return { ...result , isReady : router . isReady }
9387}
9488
9589export const usePagination = (
9690 defaultPagination ?: Partial < PaginationQuery > ,
9791 options ?: Partial < AbstractQueryOptions & RouterWithHistoryOptions > ,
9892) => {
99- const { page, size, setPage, setSize, setPagination, resetPagination } =
100- useQueryAndPagination ( ( ) => ( { } ) , { } , defaultPagination , options )
101- return { page, size, setPage, setSize, setPagination, resetPagination }
93+ const {
94+ page,
95+ size,
96+ setPage,
97+ setSize,
98+ setPagination,
99+ resetPagination,
100+ isReady,
101+ } = useQueryAndPagination ( ( ) => ( { } ) , { } , defaultPagination , options )
102+ return {
103+ page,
104+ size,
105+ setPage,
106+ setSize,
107+ setPagination,
108+ resetPagination,
109+ isReady,
110+ }
102111}
0 commit comments