-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
Ad.provider.tsx
48 lines (40 loc) · 1.26 KB
/
Ad.provider.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { createContext, useContext, useMemo } from 'react';
import { useQuery } from 'react-query';
import ApiGateway from '../gateways/Api.gateway';
import { Ad, Money, Product } from '../protos/demo';
import { useCurrency } from './Currency.provider';
interface IContext {
recommendedProductList: Product[];
adList: Ad[];
}
export const Context = createContext<IContext>({
recommendedProductList: [],
adList: [],
});
interface IProps {
children: React.ReactNode;
productIds: string[];
}
export const useAd = () => useContext(Context);
const AdProvider = ({ children, productIds }: IProps) => {
const { selectedCurrency } = useCurrency();
const { data: adList = [] } = useQuery(['ads', productIds], () => ApiGateway.listAds(productIds), {
refetchOnWindowFocus: false,
});
const { data: recommendedProductList = [] } = useQuery(
['recommendations', productIds, 'selectedCurrency', selectedCurrency],
() => ApiGateway.listRecommendations(productIds, selectedCurrency),
{
refetchOnWindowFocus: false,
}
);
const value = useMemo(
() => ({
adList,
recommendedProductList,
}),
[adList, recommendedProductList]
);
return <Context.Provider value={value}>{children}</Context.Provider>;
};
export default AdProvider;