import { Spin } from 'antd' import React, { FC, useEffect, useMemo, useRef } from 'react' import { useGuardContext } from '../../../../context/global/context' import { LoginMethods, QrLoginFormProps } from '../../types' import './style.less' import { User } from 'approw-js-sdk' export const QrCodeLoginForm: FC = ({ onFail, onSuccess, type, }) => { const { state: { authClient, config }, } = useGuardContext() const timerRef = useRef() const client = useMemo(() => { return { [LoginMethods.AppQr]: authClient.qrcode, [LoginMethods.WxMinQr]: authClient.wxqrcode, //[LoginMethods.WechatMpQrcode]: authClient.wechatmpqrcode, }[type] }, [type, authClient]) useEffect(() => { client.startScanning('approwGuardQrcode', { autoExchangeUserInfo: true, ...config.qrCodeScanOptions, onStart(timer) { timerRef.current = timer }, onSuccess(user) { onSuccess && onSuccess(user as User) }, onError: (message) => { config.qrCodeScanOptions?.onError?.(message) onFail && onFail(`${message}`) }, }) return () => clearInterval(timerRef.current) }, [client, config.qrCodeScanOptions, onFail, onSuccess]) return (
) }