import { getNetworkNiceNameByChainId } from '@pooltogether/utilities' import classNames from 'classnames' import { useTheme } from 'next-themes' import React, { useEffect, useState } from 'react' import { ViewProps } from '../Containers/ViewStateMachine' import { Currencies, i18nTranslate, Languages } from 'src/types' import { NetworkIcon } from '../Icons/NetworkIcon' import { SocialLinks } from '../Navigation/SocialLinks' import { ModalWithViewStateView } from './ModalWithViewState' import { useIsTestnets } from '../../hooks/useIsTestnets' import { BottomSheetWithViewState } from '../BottomSheet/BottomSheetWithViewState' import FeatherIcon from 'feather-icons-react' import { Trans } from 'react-i18next' import { ExternalLink } from '../Links/ExternalLink' export enum ViewIds { main, network, language, currency } interface CustomButton { link: string title: string description: string } export const SettingsModal: React.FC<{ isOpen: boolean closeModal: () => void networkView: React.FC walletChainId: number t: i18nTranslate langs: Languages currentLang: string changeLang: (locale: string) => void currencies: Currencies currentCurrency: string changeCurrency: (id: string) => void customButton?: CustomButton }> = (props) => { const { isOpen, networkView, walletChainId, langs, currentLang, changeLang, currencies, currentCurrency, changeCurrency, closeModal, t, customButton } = props const [selectedViewId, setSelectedViewId] = useState(ViewIds.main) const views: ModalWithViewStateView[] = [ { id: ViewIds.main, view: MainView }, { id: ViewIds.network, view: networkView, header: t?.('selectANetwork') || 'Select a network', previousViewId: ViewIds.main, onCloseViewId: ViewIds.main }, { id: ViewIds.language, view: LanguageView, header: t?.('selectALanguage') || 'Select a language', previousViewId: ViewIds.main, onCloseViewId: ViewIds.main }, { id: ViewIds.currency, view: CurrencyView, header: t?.('selectACurrency') || 'Select a currency', previousViewId: ViewIds.main, onCloseViewId: ViewIds.main } ] return ( ) } /** * * @param props * @returns */ const MainView: React.FC< { chainId: number t: i18nTranslate langs: Languages currentLang: string currencies: Currencies currentCurrency: string customButton?: CustomButton } & ViewProps > = (props) => { const { t, chainId, setSelectedViewId, langs, currentLang, currencies, currentCurrency, customButton } = props return (
setSelectedViewId(ViewIds.network)} /> setSelectedViewId(ViewIds.currency)} currencies={currencies} currentCurrency={currentCurrency} disabled={Object.keys(currencies).length === 0} /> setSelectedViewId(ViewIds.language)} langs={langs} currentLang={currentLang} />
) } const NetworkButton: React.FC<{ chainId: number; onClick: () => void; t: i18nTranslate }> = ( props ) => ( ) } Button.defaultProps = { bgClassName: 'bg-gradient-magenta' } /** * * @returns */ const CurrencyView: React.FC< { currencies: Currencies currentCurrency: string changeCurrency: (id: string) => void closeModal: () => void } & ViewProps > = (props) => { const { currencies, currentCurrency, changeCurrency, closeModal, setSelectedViewId } = props return (
    {Object.keys(currencies).map((id) => ( { changeCurrency(id) closeModal() // NOTE: setting the view id manually here due to a `closeModal` bug setSelectedViewId(ViewIds.main) }} /> ))}
) } const CurrencyItem: React.FC<{ isSelected: boolean id: string name: string symbol: string onClick: () => void }> = (props) => { const { isSelected, name, symbol, onClick } = props return ( ) } /** * * @returns */ const LanguageView: React.FC< { langs: Languages currentLang: string changeLang: (locale: string) => void closeModal: () => void } & ViewProps > = (props) => { const { langs, currentLang, changeLang, closeModal, setSelectedViewId } = props return (
    {Object.keys(langs).map((locale) => ( { changeLang(locale) closeModal() // NOTE: setting the view id manually here due to a `closeModal` bug setSelectedViewId(ViewIds.main) }} /> ))}
) } const LanguageItem: React.FC<{ isSelected: boolean locale: string name: string nativeName: string onClick: () => void }> = (props) => { const { locale, isSelected, name, nativeName, onClick } = props return ( ) } const FeedbackPrompt = () => ( ) }} /> )