// Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 import { createContext, useCallback, useContext, useMemo, useState, useEffect } from 'react'; import { useQuery } from 'react-query'; import ApiGateway from '../gateways/Api.gateway'; import SessionGateway from '../gateways/Session.gateway'; const { currencyCode } = SessionGateway.getSession(); interface IContext { currencyCodeList: string[]; setSelectedCurrency(currency: string): void; selectedCurrency: string; } export const Context = createContext({ currencyCodeList: [], selectedCurrency: 'USD', setSelectedCurrency: () => ({}), }); interface IProps { children: React.ReactNode; } export const useCurrency = () => useContext(Context); const CurrencyProvider = ({ children }: IProps) => { const { data: currencyCodeListUnsorted = [] } = useQuery('currency', ApiGateway.getSupportedCurrencyList); const [selectedCurrency, setSelectedCurrency] = useState(''); useEffect(() => { setSelectedCurrency(currencyCode); }, []); const onSelectCurrency = useCallback((currencyCode: string) => { setSelectedCurrency(currencyCode); SessionGateway.setSessionValue('currencyCode', currencyCode); }, []); const currencyCodeList = currencyCodeListUnsorted.sort(); const value = useMemo( () => ({ currencyCodeList, selectedCurrency, setSelectedCurrency: onSelectCurrency, }), [currencyCodeList, selectedCurrency, onSelectCurrency] ); return {children}; }; export default CurrencyProvider;