import React, { ReactElement } from 'react'; import { View, Text, TouchableOpacity } from 'react-native'; import Loading from '../Loading'; import { IconXSuccess2, IconXRefrese1 } from '../../icons'; import { useTheme } from '../Theme'; import createStyle from './style/status.style'; import ShouldRender from '../ShouldRender'; export enum QRCodeStatusEnum { active = 'active', scanned = 'scanned', loading = 'loading', expired = 'expired', } export interface StatusRenderInfo { status: QRCodeStatusEnum; onRefresh?: () => void; } export interface QRCodeStatusProps { status: keyof typeof QRCodeStatusEnum; testID?: string; statusRender?: (info: StatusRenderInfo) => ReactElement; loadingText?: string; scanSuccessText?: string; expiredText?: string; refreshText?: string; onRefresh?: () => void; } const QRCodeStatus = (props: QRCodeStatusProps) => { const token = useTheme(); const styles = createStyle(token); const { status, statusRender, loadingText, scanSuccessText, expiredText, refreshText, onRefresh, } = props; if (status === QRCodeStatusEnum.active) { return <>; } const expired = ( {expiredText} {refreshText} ); const loading = ( {loadingText} ); const scaned = ( {scanSuccessText} ); const renderMap = { [QRCodeStatusEnum.active]: <>, [QRCodeStatusEnum.scanned]: scaned, [QRCodeStatusEnum.loading]: loading, [QRCodeStatusEnum.expired]: expired, }; const info: StatusRenderInfo = { status: QRCodeStatusEnum[status], onRefresh, }; const defaultStatusRender = (info: StatusRenderInfo) => renderMap[info.status]; const mergedStatusRender = statusRender ?? defaultStatusRender; return mergedStatusRender(info); }; export default QRCodeStatus;