import React, { useState } from 'react'
import { ChevronLeftIcon, ChevronRightIcon } from '@heroicons/react/solid'
import useMangoGroupConfig from '../hooks/useMangoGroupConfig'
import Modal from './Modal'
import { ElementTitle } from './styles'
import Button, { LinkButton } from './Button'
import Input, { Label } from './Input'
import useMangoStore from '../stores/useMangoStore'
import useLocalStorageState from '../hooks/useLocalStorageState'
import Select from './Select'
import { useTranslation } from 'next-i18next'
import Switch from './Switch'
import { MarketKind } from '@blockworks-foundation/mango-client'
const NODE_URLS = [
{ label: 'Triton (RPC Pool)', value: 'https://mango.rpcpool.com' },
{
label: 'Genesys Go',
value: 'https://mango.genesysgo.net/',
},
{ label: 'Custom', value: '' },
]
const CUSTOM_NODE = NODE_URLS.find((n) => n.label === 'Custom')
export const NODE_URL_KEY = 'node-url-key-0.6'
export const DEFAULT_MARKET_KEY = 'defaultMarket-0.3'
export const ORDERBOOK_FLASH_KEY = 'showOrderbookFlash'
export const DEFAULT_SPOT_MARGIN_KEY = 'defaultSpotMargin'
export const initialMarket = {
base: 'SOL',
kind: 'perp' as MarketKind,
name: 'SOL-PERP',
path: '/?name=SOL-PERP',
}
const SettingsModal = ({ isOpen, onClose }) => {
const { t } = useTranslation('common')
const [settingsView, setSettingsView] = useState('')
const [rpcEndpointUrl] = useLocalStorageState(
NODE_URL_KEY,
NODE_URLS[0].value
)
const [defaultMarket] = useLocalStorageState(
DEFAULT_MARKET_KEY,
initialMarket
)
const [showOrderbookFlash, setShowOrderbookFlash] = useLocalStorageState(
ORDERBOOK_FLASH_KEY,
true
)
const [defaultSpotMargin, setDefaultSpotMargin] = useLocalStorageState(
DEFAULT_SPOT_MARGIN_KEY,
false
)
const rpcEndpoint =
NODE_URLS.find((node) => node.value === rpcEndpointUrl) || CUSTOM_NODE
return (
{settingsView !== '' ? (
setSettingsView('')}
>
{t('back')}
) : null}
{t('settings')}
{!settingsView ? (
{t('orderbook-animation')}
setShowOrderbookFlash(checked)}
/>
{t('default-spot-margin')}
setDefaultSpotMargin(checked)}
/>
) : null}
{!settingsView ? (
) : null}
)
}
export default React.memo(SettingsModal)
const SettingsContent = ({ settingsView, setSettingsView }) => {
switch (settingsView) {
case 'Default Market':
return
case 'RPC Endpoint':
return
case '':
return null
}
}
const DefaultMarketSettings = ({ setSettingsView }) => {
const { t } = useTranslation('common')
const groupConfig = useMangoGroupConfig()
const allMarkets = [
...groupConfig.spotMarkets,
...groupConfig.perpMarkets,
].sort((a, b) => a.name.localeCompare(b.name))
const [defaultMarket, setDefaultMarket] = useLocalStorageState(
DEFAULT_MARKET_KEY,
{
base: 'BTC',
kind: 'perp',
name: 'BTC-PERP',
path: '/?name=BTC-PERP',
}
)
const handleSetDefaultMarket = (market) => {
const base = market.slice(0, -5)
const kind = market.includes('PERP') ? 'perp' : 'spot'
setDefaultMarket({
base: base,
kind: kind,
name: market,
path: `/?name=${market}`,
})
}
const parsedDefaultMarket = defaultMarket
return (
)
}
const RpcEndpointSettings = ({ setSettingsView }) => {
const { t } = useTranslation('common')
const actions = useMangoStore((s) => s.actions)
const [rpcEndpointUrl, setRpcEndpointUrl] = useLocalStorageState(
NODE_URL_KEY,
NODE_URLS[0].value
)
const rpcEndpoint =
NODE_URLS.find((node) => node.value === rpcEndpointUrl) || CUSTOM_NODE
const handleSetEndpointUrl = (endpointUrl) => {
setRpcEndpointUrl(endpointUrl)
actions.updateConnection(endpointUrl)
setSettingsView('')
}
const handleSelectEndpointUrl = (url) => {
setRpcEndpointUrl(url)
}
return (
{rpcEndpoint.label === 'Custom' ? (
setRpcEndpointUrl(e.target.value)}
/>
) : null}
)
}