1
1
"use client" ;
2
2
3
- import { CategoryMappingKeys , DTOChannel , QueryParamChannels , QueryParamsChannelsSort ,
4
- QueryParamsChannelsType , QueryParamsStatsRange } from "podverse-helpers" ;
3
+ import { DTOChannel , QueryParamChannels } from "podverse-helpers" ;
5
4
import React , { createContext , useContext , useState , ReactNode } from "react" ;
6
5
import { apiRequestService } from "../../factories/apiRequestService" ;
7
6
import { useAccount } from "../../contexts/Account" ;
8
7
import { useSkipInitialEffect } from "../../hooks/useSkipInitialEffect" ;
9
8
import { getCurrentSortAndRange } from "./PodcastsDropdownConfig" ;
10
9
11
- interface PodcastsContextType extends QueryParamChannels {
12
- setPage : ( page : number ) => void ;
13
- setType : ( type : QueryParamsChannelsType ) => void ;
14
- setSort : ( sort : QueryParamsChannelsSort ) => void ;
15
- setRange : ( range : QueryParamsStatsRange ) => void ;
16
- setCategory : ( category : CategoryMappingKeys | undefined ) => void ;
10
+ interface PodcastsContextType {
11
+ queryParams : QueryParamChannels ;
12
+ setQueryParams : ( params : QueryParamChannels ) => void ;
17
13
channels : DTOChannel [ ] ;
18
14
setChannels : ( channels : DTOChannel [ ] ) => void ;
19
15
totalPages : number ;
@@ -32,11 +28,7 @@ export const PodcastsContextProvider = ({ children, initialQueryParams, ssrChann
32
28
ssrChannels : DTOChannel [ ] ,
33
29
ssrTotalPages : number
34
30
} ) => {
35
- const [ page , setPage ] = useState ( initialQueryParams . page ) ;
36
- const [ type , setType ] = useState ( initialQueryParams . type ) ;
37
- const [ sort , setSort ] = useState ( initialQueryParams . sort ) ;
38
- const [ range , setRange ] = useState ( initialQueryParams . range ) ;
39
- const [ category , setCategory ] = useState < string | undefined > ( initialQueryParams . category ) ;
31
+ const [ queryParams , setQueryParams ] = useState < QueryParamChannels > ( initialQueryParams ) ;
40
32
const [ channels , setChannels ] = useState < DTOChannel [ ] > ( ssrChannels || [ ] ) ;
41
33
const [ totalPages , setTotalPages ] = useState < number > ( ssrTotalPages || 1 ) ;
42
34
const [ isLoading , setIsLoading ] = useState < boolean > ( false ) ;
@@ -45,31 +37,28 @@ export const PodcastsContextProvider = ({ children, initialQueryParams, ssrChann
45
37
46
38
useSkipInitialEffect ( ( ) => {
47
39
async function fetchChannels ( ) {
48
- if ( type === "subscribed" ) {
40
+ if ( queryParams . type === "subscribed" ) {
49
41
if ( ! loggedInAccount ) {
50
42
setChannels ( [ ] ) ;
51
43
setShowSubscribeMessage ( true ) ;
52
44
return ;
53
45
}
54
46
}
55
-
47
+
56
48
setShowSubscribeMessage ( false ) ;
57
49
setIsLoading ( true ) ;
58
- const { currentSort, currentRange } = getCurrentSortAndRange ( { type, sort, range } ) ;
59
- const channels = await apiRequestService . reqChannelGetMany ( { page , type , sort : currentSort , range : currentRange , category } ) ;
50
+ const { currentSort, currentRange } = getCurrentSortAndRange ( { type : queryParams . type , sort : queryParams . sort , range : queryParams . range } ) ;
51
+ const channels = await apiRequestService . reqChannelGetMany ( { ... queryParams , sort : currentSort , range : currentRange } ) ;
60
52
setChannels ( channels . data ) ;
61
53
setIsLoading ( false ) ;
62
54
}
63
55
fetchChannels ( ) ;
64
- } , [ page , type , sort , range , category ] )
56
+ } , [ queryParams , loggedInAccount ] ) ;
65
57
66
58
return (
67
59
< PodcastsContext . Provider value = { {
68
- page, setPage,
69
- type, setType,
70
- sort, setSort,
71
- range, setRange,
72
- category, setCategory,
60
+ queryParams,
61
+ setQueryParams,
73
62
channels, setChannels,
74
63
totalPages, setTotalPages,
75
64
isLoading, setIsLoading,
0 commit comments