forked from open-telemetry/opentelemetry-demo
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCurrency.provider.tsx
More file actions
61 lines (48 loc) · 1.78 KB
/
Currency.provider.tsx
File metadata and controls
61 lines (48 loc) · 1.78 KB
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
49
50
51
52
53
54
55
56
57
58
59
60
61
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
import { createContext, useCallback, useContext, useMemo, useState, useEffect } from 'react';
import { useQuery } from '@tanstack/react-query';
import ApiGateway from '../gateways/Api.gateway';
import SessionGateway from '../gateways/Session.gateway';
import { sendEvent } from '@dash0/sdk-web';
const { currencyCode } = SessionGateway.getSession();
interface IContext {
currencyCodeList: string[];
setSelectedCurrency(currency: string): void;
selectedCurrency: string;
}
export const Context = createContext<IContext>({
currencyCodeList: [],
selectedCurrency: 'USD',
setSelectedCurrency: () => ({}),
});
interface IProps {
children: React.ReactNode;
}
export const useCurrency = () => useContext(Context);
const CurrencyProvider = ({ children }: IProps) => {
const { data: currencyCodeListUnsorted = [] } = useQuery({
queryKey: ['currency'],
queryFn: ApiGateway.getSupportedCurrencyList,
});
const [selectedCurrency, setSelectedCurrency] = useState<string>('');
useEffect(() => {
setSelectedCurrency(currencyCode);
}, []);
const onSelectCurrency = useCallback((currencyCode: string) => {
setSelectedCurrency(currencyCode);
SessionGateway.setSessionValue('currencyCode', currencyCode);
sendEvent('currency_switched', { attributes: { currencyCode }, title: `Switched to currency ${currencyCode}` });
}, []);
const currencyCodeList = currencyCodeListUnsorted.sort();
const value = useMemo(
() => ({
currencyCodeList,
selectedCurrency,
setSelectedCurrency: onSelectCurrency,
}),
[currencyCodeList, selectedCurrency, onSelectCurrency]
);
return <Context.Provider value={value}>{children}</Context.Provider>;
};
export default CurrencyProvider;