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;