import { StandardRelayerAPIOrderProvider } from '@0x/asset-buyer'; import { getContractAddressesForNetworkOrThrow } from '@0x/contract-addresses'; import { assetDataUtils } from '@0x/order-utils'; import { ObjectMap } from '@0x/types'; import * as _ from 'lodash'; import * as React from 'react'; import styled from 'styled-components'; import { CheckMark } from 'ts/components/ui/check_mark'; import { Container } from 'ts/components/ui/container'; import { MultiSelect } from 'ts/components/ui/multi_select'; import { Spinner } from 'ts/components/ui/spinner'; import { Text } from 'ts/components/ui/text'; import { ConfigGeneratorAddressInput } from 'ts/pages/instant/config_generator_address_input'; import { FeePercentageSlider } from 'ts/pages/instant/fee_percentage_slider'; import { colors } from 'ts/style/colors'; import { WebsitePaths } from 'ts/types'; import { constants } from 'ts/utils/constants'; // New components import { Heading } from 'ts/components/text'; import { Select, SelectItemConfig } from 'ts/pages/instant/select'; import { assetMetaDataMap } from '../../../../instant/src/data/asset_meta_data_map'; import { ERC20AssetMetaData, ZeroExInstantBaseConfig } from '../../../../instant/src/types'; export interface ConfigGeneratorProps { value: ZeroExInstantBaseConfig; onConfigChange: (config: ZeroExInstantBaseConfig) => void; } export interface ConfigGeneratorState { isLoadingAvailableTokens: boolean; // Address to token info availableTokens?: ObjectMap; } const SRA_ENDPOINTS = ['https://api.radarrelay.com/0x/v2/', 'https://sra.bamboorelay.com/0x/v2/']; export class ConfigGenerator extends React.Component { public state: ConfigGeneratorState = { isLoadingAvailableTokens: true, }; public componentDidMount(): void { // tslint:disable-next-line:no-floating-promises this._setAvailableAssetsFromOrderProvider(); } public componentDidUpdate(prevProps: ConfigGeneratorProps): void { if (prevProps.value.orderSource !== this.props.value.orderSource) { // tslint:disable-next-line:no-floating-promises this._setAvailableAssetsFromOrderProvider(); const newConfig: ZeroExInstantBaseConfig = { ...this.props.value, availableAssetDatas: undefined, }; this.props.onConfigChange(newConfig); } } public render(): React.ReactNode { const { value } = this.props; if (!_.isString(value.orderSource)) { throw new Error('ConfigGenerator component only supports string values as an orderSource.'); } return (