@@ -4,14 +4,14 @@ import { ALL_PROVIDERS } from "src/utils/constants";
44
55function fetchOpportunity ( token , provider , params ) {
66 return fetch ( "/api/opportunities" , {
7- method : "POST" ,
8- headers : {
9- "Content-type" : "application/json" ,
10- "Backend" : provider ,
11- 'Authorization' : `Bearer ${ token } `
12- } ,
13- body : JSON . stringify ( params )
14- } ) ;
7+ method : "POST" ,
8+ headers : {
9+ "Content-type" : "application/json" ,
10+ "Backend" : provider ,
11+ 'Authorization' : `Bearer ${ token } `
12+ } ,
13+ body : JSON . stringify ( params )
14+ } ) ;
1515} ;
1616
1717const useGetOpportunities = ( products , postParams ) => {
@@ -21,9 +21,25 @@ const useGetOpportunities = (products, postParams) => {
2121 const [ error , setError ] = useState ( "" ) ;
2222 const { userToken } = useLocalStorage ( ) ;
2323
24+ function setAsyncResultsData ( promises ) {
25+ Promise . all ( promises ) . then ( results => {
26+ setData ( Object . fromEntries ( Object . values ( results ) . map ( value => {
27+ return [ value . provider , value . data . features ]
28+ } ) ) ) ;
29+ setIsLoading ( false ) ;
30+ } ) . catch ( e => {
31+ setError ( e ) ;
32+ setIsLoading ( false ) ;
33+ } ) ;
34+ }
35+
36+ async function fetchByProduct ( p , productId ) {
37+ return fetchOpportunity ( userToken , p , Object . assign ( params , { "product_id" : productId } ) ) . then ( async res => await res . json ( ) ) . then ( data => { return { 'provider' : p , 'data' : data } } ) ;
38+ }
39+
2440 function fetchAllProviderProducts ( p ) {
2541 return products [ p ] && products [ p ] . map ( async product => {
26- return fetchOpportunity ( userToken , p , Object . assign ( params , { "product_id" : product . id } ) ) . then ( async res => await res . json ( ) ) . then ( data => { return { 'provider' : p , 'data' : data } } ) ;
42+ return fetchByProduct ( p , product . id ) ;
2743 } ) ;
2844 } ;
2945
@@ -32,16 +48,31 @@ const useGetOpportunities = (products, postParams) => {
3248 setIsLoading ( true ) ;
3349 setError ( false ) ;
3450 // By default fetch all provider product opportunities
35- if ( ! provider && ! params [ "product_id" ] ) {
51+ if ( provider === 'all' && params [ "product_id" ] === 'all' ) {
3652 const allProvidersOpportunities = ALL_PROVIDERS . reduce ( ( all , p ) => {
3753 const promises = fetchAllProviderProducts ( p . id ) ;
3854 return promises ? [ ...all , ...promises ] : all ;
3955 } , [ ] ) ;
4056
41- Promise . all ( allProvidersOpportunities ) . then ( results => {
42- setData ( Object . fromEntries ( Object . values ( results ) . map ( value => {
43- return [ value . provider , value . data . features ]
44- } ) ) ) ;
57+ setAsyncResultsData ( allProvidersOpportunities ) ;
58+ }
59+ else if ( provider === 'all' ) {
60+ const productOpportunities = ALL_PROVIDERS . reduce ( ( all , p ) => {
61+ const promise = fetchByProduct ( p . id , params [ "product_id" ] ) ;
62+ return promise ? [ ...all , promise ] : all ;
63+ } , [ ] ) ;
64+
65+ setAsyncResultsData ( productOpportunities ) ;
66+ }
67+ else if ( params [ "product_id" ] === 'all' ) {
68+ const providerOpportunities = fetchAllProviderProducts ( provider )
69+ setAsyncResultsData ( providerOpportunities ) ;
70+ }
71+ else {
72+ fetchOpportunity ( userToken , provider , params )
73+ . then ( async res => await res . json ( ) )
74+ . then ( data => {
75+ setData ( { [ provider ] : data . features } ) ;
4576 setIsLoading ( false ) ;
4677 } ) . catch ( e => {
4778 setError ( e ) ;
0 commit comments