import React from 'react'; import { connect } from 'react-redux'; import Modal, { Styles } from 'react-modal'; import { Step, StepKind } from '../../../types/steps-modal'; import { getStepTitle } from '../../../util/steps'; import { StepItem } from './steps_progress'; import { CloseModalButton } from '../icons/close_modal_button'; import { ModalContent } from './steps_common'; import { StoreState } from '../../../types/store'; import { getStepsModalCurrentStep, getStepsModalDoneSteps, getStepsModalPendingSteps } from '../../../store/ui/selectors' import { stepsModalReset } from '../../../store/actions'; import { AllowanceStepContainer } from './allowance_step'; import { SwapTokensStepContainer } from './swap_step'; import { SetMinBalanceStepContainer } from './admin_set_min_balance_step'; import { SetPaymentTokenStepContainer } from './admin_set_payment_token'; import { SetFeeStepStepContainer } from './admin_set_fee'; import { WhitelistTokenStepContainer } from './admin_whitelist_token_step'; import { SetGasUsedByPostStepContainer } from './admin_set_gas_used_by_post_step'; import { SetMinGasStepContainer } from './admin_set_min_gas'; import { SetTargetStepContainer } from './admin_set_target'; import { SetRelayHubStepContainer } from './admin_set_relay_hub_step'; import { SetForwarderStepContainer } from './admin_set_forwarder_step'; import { WithdrawStepContainer } from './admin_withdraw_step'; const modalThemeStyle = { content: { backgroundColor: '#fff', borderColor: '#dedede', bottom: 'auto', display: 'flex', flexDirection: 'column', flexGrow: '0', left: 'auto', maxHeight: '90%', minWidth: '350px', overflow: 'hidden', padding: '16px', position: 'relative', right: 'auto', top: 'auto', }, overlay: { alignItems: 'center', backgroundColor: 'rgba(0, 0, 0, 0.4)', display: 'flex', justifyContent: 'center', zIndex: '12345', }, }; interface StateProps { currentStep: Step | null; doneSteps: Step[]; pendingSteps: Step[]; } interface DispatchProps { reset: () => void; } type Props = StateProps & DispatchProps; class StepsModal extends React.Component { public render = () => { const { currentStep, doneSteps, pendingSteps, reset } = this.props; const isOpen = currentStep !== null; const buildStepsProgress = (currentStepItem: StepItem): StepItem[] => [ ...doneSteps.map(doneStep => ({ title: getStepTitle(doneStep), progress: 100, active: false, isLong: false, })), currentStepItem, ...pendingSteps.map(pendingStep => ({ title: getStepTitle(pendingStep), progress: 0, active: false, isLong: false, })), ]; // this is used to avoid an issue with two consecutive steps of the same kind const stepIndex = doneSteps.length; return ( {currentStep && currentStep.kind === StepKind.Allowance && ( )} {currentStep && currentStep.kind === StepKind.Swap && ( )} {currentStep && currentStep.kind === StepKind.SetMinBalance && ( )} {currentStep && currentStep.kind === StepKind.SetPaymentToken && ( )} {currentStep && currentStep.kind === StepKind.SetFee && ( )} {currentStep && currentStep.kind === StepKind.Whitelist && ( )} {currentStep && currentStep.kind === StepKind.SetGasUsedByPost && ( )} {currentStep && currentStep.kind === StepKind.SetMinGas && ( )} {currentStep && currentStep.kind === StepKind.SetTarget && ( )} {currentStep && currentStep.kind === StepKind.SetTarget && ( )} {currentStep && currentStep.kind === StepKind.SetForwarder && ( )} {currentStep && currentStep.kind === StepKind.Withdraw && ( )} ); }; } const mapStateToProps = (state: StoreState): StateProps => { return { currentStep: getStepsModalCurrentStep(state), doneSteps: getStepsModalDoneSteps(state), pendingSteps: getStepsModalPendingSteps(state), }; }; const StepsModalContainer = connect(mapStateToProps, { reset: stepsModalReset })(StepsModal) export { StepsModal, StepsModalContainer };