import { useEffect } from 'react'; import { useLocation, useNavigate } from 'react-router'; import { useTranslation } from 'react-i18next'; import { QRCodeSVG } from 'qrcode.react'; import { useBranding } from '../hooks/useBranding'; import { AdminBackButton } from '@/components/admin'; interface ConnectionQRState { url: string; hideLink: boolean; subscriptionId?: number; } function isValidState(state: unknown): state is ConnectionQRState { if (!state || typeof state !== 'object') return false; const s = state as Record; return typeof s.url === 'string' && s.url.length > 0 && typeof s.hideLink === 'boolean'; } export default function ConnectionQR() { const { t } = useTranslation(); const navigate = useNavigate(); const location = useLocation(); const { appName } = useBranding(); const state = location.state as unknown; const validState = isValidState(state) ? state : null; const subId = validState?.subscriptionId; const connectionPath = subId ? `/connection?sub=${subId}` : '/connection'; useEffect(() => { if (!validState) { navigate(connectionPath, { replace: true }); } }, [validState, navigate, connectionPath]); if (!validState) { return null; } return (

{t('subscription.connection.qrTitle')}

{appName && (

{appName}

)}

{t('subscription.connection.qrScanHint')}

{!validState.hideLink && (

{validState.url}

)}
); }