@@ -37,24 +37,26 @@ export default ({ offset, setOffset, fetchMoreOffers }) => {
37
37
const [ loading , setLoading ] = useState ( false ) ;
38
38
const [ error , setError ] = useState ( null ) ;
39
39
const [ offers , setOffers ] = useState ( oldOffers ) ;
40
+ const [ fetchedOffsets , setFetchedOffsets ] = useState ( [ ] ) ;
40
41
41
42
useEffect ( ( ) => {
42
43
setOffers ( oldOffers ) ;
43
44
} , [ oldOffers ] ) ;
44
45
45
46
useEffect ( ( ) => {
46
47
setOffset ( 0 ) ;
48
+ setHasMore ( true ) ;
47
49
setError ( null ) ;
48
50
setLoading ( false ) ;
51
+ setFetchedOffsets ( [ ] ) ;
49
52
} , [ setOffset , submitNumber ] ) ;
50
53
51
54
useEffect ( ( ) => {
52
55
53
56
const fetchOffers = async ( ) => {
54
57
55
- if ( ! fetchMoreOffers || error ) return ;
56
-
57
58
try {
59
+ setFetchedOffsets ( ( offsets ) => [ ...offsets , filters . offset ] ) ;
58
60
const query = parseFiltersToURL ( filters ) ;
59
61
const res = await fetch ( `${ API_HOSTNAME } /offers?${ query } ` , {
60
62
method : "GET" ,
@@ -66,7 +68,6 @@ export default ({ offset, setOffset, fetchMoreOffers }) => {
66
68
error : res . status ,
67
69
} ) ;
68
70
setLoading ( false ) ;
69
-
70
71
return ;
71
72
}
72
73
const offersData = await res . json ( ) ;
@@ -91,18 +92,23 @@ export default ({ offset, setOffset, fetchMoreOffers }) => {
91
92
error,
92
93
} ) ;
93
94
setLoading ( false ) ;
95
+ return ;
94
96
}
95
97
} ;
96
98
97
- fetchOffers ( ) . catch ( ( error ) => {
98
- setError ( {
99
- cause : ErrorTypes . UNEXPECTED ,
100
- error,
99
+ if ( fetchMoreOffers && ! fetchedOffsets . includes ( filters . offset ) && ! initialOffersLoading && ! loading ) {
100
+ fetchOffers ( ) . catch ( ( error ) => {
101
+ setError ( {
102
+ cause : ErrorTypes . UNEXPECTED ,
103
+ error,
104
+ } ) ;
101
105
} ) ;
102
- } ) ;
103
-
104
- } , [ dispatch , filters , initialOffersLoading , oldOffers , offset , loading , error , fetchMoreOffers ] ) ;
106
+ }
105
107
108
+ } , [
109
+ dispatch , fetchMoreOffers , filters , oldOffers , initialOffersLoading , offset ,
110
+ fetchedOffsets , submitNumber , hasMore , loading , offers ,
111
+ ] ) ;
106
112
107
113
return { offers, hasMore, loading, error } ;
108
114
} ;
0 commit comments