import * as React from 'react' import ModalContent from 'semantic-ui-react/dist/commonjs/modules/Modal/ModalContent' import Icon from 'semantic-ui-react/dist/commonjs/elements/Icon' import classNames from 'classnames' import { Network } from '@dcl/schemas' import { Modal } from '../Modal/Modal' import { ModalNavigation } from '../ModalNavigation/ModalNavigation' import { Loader } from '../Loader/Loader' import { Button } from '../Button/Button' import { NetworkGatewayType } from './Network' import './FeedbackModal.css' export enum TransactionStatus { PENDING = 'pending', SUCCESS = 'success', FAILURE = 'failure' } const iconNames = { [TransactionStatus.PENDING]: 'clock outline', [TransactionStatus.FAILURE]: 'warning circle' } export type FeedbackModalProps = { className?: string message?: React.ReactNode hasError?: boolean open?: boolean loading?: boolean i18n?: FeedbackModalI18N transactionUrl?: string selectedNetwork?: Network selectedGateway?: NetworkGatewayType goToUrl?: string status: TransactionStatus onClickCta?: () => void onClickSecondaryCta?: () => void onClose?: () => void onInfo?: () => void } export type FeedbackModalI18N = { title: React.ReactNode statusTitle?: React.ReactNode description: React.ReactNode cta?: React.ReactNode secondaryCta?: React.ReactNode viewTransaction?: React.ReactNode goToText?: React.ReactNode error?: React.ReactNode } export class FeedbackModal extends React.Component { static defaultProps = { className: '', hasError: false, loading: false, i18n: { title: 'Awesome', description: 'The MANA has been added to your account. If you still don’t see it in your balance, refresh this page.', cta: 'Done', viewTransaction: 'View Transaction in Exporer' } } renderActions(): JSX.Element { const { i18n, status, goToUrl, transactionUrl, onClickCta, onClickSecondaryCta, onClose } = this.props switch (status) { case TransactionStatus.SUCCESS: return ( <> {transactionUrl ? ( {i18n.viewTransaction} ) : null} ) case TransactionStatus.PENDING: return ( <> {goToUrl ? ( {i18n?.goToText} ) : null} ) case TransactionStatus.FAILURE: return ( <> ) default: break } } renderStatusTitle(): JSX.Element { const { i18n, status } = this.props const iconName = iconNames[status] if (status === TransactionStatus.SUCCESS) return null return i18n.statusTitle ? (

{iconName ? : null} {i18n.statusTitle}

) : null } render(): JSX.Element { const { open, className, message, i18n, hasError, loading, status, selectedGateway, onClose, onInfo } = this.props return (
{this.renderStatusTitle()}

{i18n.description}

{message ? {message} : null}
{hasError ?

{i18n.error}

: null} {loading ? ( <>
) : null} {this.renderActions()}
) } }