import { MarketBuySwapQuote } from '@0x/asset-swapper'; import { BigNumber } from '@0x/utils'; import { ActionsUnion, AddressAndEthBalanceInWei, Asset, BaseCurrency, ProviderState, StandardSlidingPanelContent, } from '../types'; export interface PlainAction { type: T; } export interface ActionWithPayload extends PlainAction { data: P; } export type Action = ActionsUnion; function createAction(type: T): PlainAction; function createAction(type: T, data: P): ActionWithPayload; function createAction(type: T, data?: P): PlainAction | ActionWithPayload { return data === undefined ? { type } : { type, data }; } export enum ActionTypes { SetAccountStateLoading = 'SET_ACCOUNT_STATE_LOADING', SetAccountStateLocked = 'SET_ACCOUNT_STATE_LOCKED', SetAccountStateReady = 'SET_ACCOUNT_STATE_READY', SetAccountStateNone = 'SET_ACCOUNT_STATE_NONE', UpdateAccountEthBalance = 'UPDATE_ACCOUNT_ETH_BALANCE', UpdateEthUsdPrice = 'UPDATE_ETH_USD_PRICE', UpdateSelectedAssetUnitAmount = 'UPDATE_SELECTED_ASSET_UNIT_AMOUNT', SetSwapOrderStateNone = 'SET_SWAP_ORDER_STATE_NONE', SetSwapOrderStateValidating = 'SET_SWAP_ORDER_STATE_VALIDATING', SetSwapOrderStateProcessing = 'SET_SWAP_ORDER_STATE_PROCESSING', SetSwapOrderStateFailure = 'SET_SWAP_ORDER_STATE_FAILURE', SetSwapOrderStateSuccess = 'SET_SWAP_ORDER_STATE_SUCCESS', UpdateLatestSwapQuote = 'UPDATE_LATEST_SWAP_QUOTE', UpdateSelectedAsset = 'UPDATE_SELECTED_ASSET', SetAvailableAssets = 'SET_AVAILABLE_ASSETS', SetQuoteRequestStatePending = 'SET_QUOTE_REQUEST_STATE_PENDING', SetQuoteRequestStateFailure = 'SET_QUOTE_REQUEST_STATE_FAILURE', SetErrorMessage = 'SET_ERROR_MESSAGE', HideError = 'HIDE_ERROR', ClearError = 'CLEAR_ERROR', ResetAmount = 'RESET_AMOUNT', OpenStandardSlidingPanel = 'OPEN_STANDARD_SLIDING_PANEL', CloseStandardSlidingPanel = 'CLOSE_STANDARD_SLIDING_PANEL', UpdateBaseCurrency = 'UPDATE_BASE_CURRENCY', SetProviderState = 'SET_PROVIDER_STATE', } export const actions = { setAccountStateLoading: () => createAction(ActionTypes.SetAccountStateLoading), setAccountStateLocked: () => createAction(ActionTypes.SetAccountStateLocked), setAccountStateNone: () => createAction(ActionTypes.SetAccountStateNone), setAccountStateReady: (address: string) => createAction(ActionTypes.SetAccountStateReady, address), updateAccountEthBalance: (addressAndBalance: AddressAndEthBalanceInWei) => createAction(ActionTypes.UpdateAccountEthBalance, addressAndBalance), updateEthUsdPrice: (price?: BigNumber) => createAction(ActionTypes.UpdateEthUsdPrice, price), updateSelectedAssetAmount: (amount?: BigNumber) => createAction(ActionTypes.UpdateSelectedAssetUnitAmount, amount), setSwapOrderStateNone: () => createAction(ActionTypes.SetSwapOrderStateNone), setSwapOrderStateValidating: () => createAction(ActionTypes.SetSwapOrderStateValidating), setSwapOrderStateProcessing: (txHash: string, startTimeUnix: number, expectedEndTimeUnix: number) => createAction(ActionTypes.SetSwapOrderStateProcessing, { txHash, startTimeUnix, expectedEndTimeUnix }), setSwapOrderStateFailure: (txHash: string) => createAction(ActionTypes.SetSwapOrderStateFailure, txHash), setSwapOrderStateSuccess: (txHash: string) => createAction(ActionTypes.SetSwapOrderStateSuccess, txHash), updateLatestSwapQuote: (swapQuote?: MarketBuySwapQuote) => createAction(ActionTypes.UpdateLatestSwapQuote, swapQuote), updateSelectedAsset: (asset: Asset) => createAction(ActionTypes.UpdateSelectedAsset, asset), setAvailableAssets: (availableAssets: Asset[]) => createAction(ActionTypes.SetAvailableAssets, availableAssets), setQuoteRequestStatePending: () => createAction(ActionTypes.SetQuoteRequestStatePending), setQuoteRequestStateFailure: () => createAction(ActionTypes.SetQuoteRequestStateFailure), setErrorMessage: (errorMessage: string) => createAction(ActionTypes.SetErrorMessage, errorMessage), hideError: () => createAction(ActionTypes.HideError), clearError: () => createAction(ActionTypes.ClearError), resetAmount: () => createAction(ActionTypes.ResetAmount), openStandardSlidingPanel: (content: StandardSlidingPanelContent) => createAction(ActionTypes.OpenStandardSlidingPanel, content), closeStandardSlidingPanel: () => createAction(ActionTypes.CloseStandardSlidingPanel), updateBaseCurrency: (baseCurrency: BaseCurrency) => createAction(ActionTypes.UpdateBaseCurrency, baseCurrency), setProviderState: (providerState: ProviderState) => createAction(ActionTypes.SetProviderState, providerState), };