import React, { useState, useEffect } from 'react'; import { View, ActivityIndicator } from 'react-native'; import { tw, theme, MyText, MyTouchableOpacity , BottomDialog } from 'common-ui'; import { trpc, trpcClient } from '@/src/trpc-client'; import { useGetEssentialConsts } from '@/src/api-hooks/essential-consts.api'; import Constants from 'expo-constants'; import * as Linking from 'expo-linking'; interface HealthTestWrapperProps { children: React.ReactNode; } const HealthTestWrapper: React.FC = ({ children }) => { const { data, isLoading, error, refetch } = trpc.common.healthCheck.useQuery(); const { data: backendConsts } = useGetEssentialConsts(); const versionFromBackend = backendConsts?.versionNum; const appUrl = backendConsts?.playStoreUrl; const [showUpdateDialog, setShowUpdateDialog] = useState(false); // Version comparison logic useEffect(() => { const version = Constants.expoConfig?.version; if (!version || !versionFromBackend) return; // Parse local version const versionParts = version.split('.'); const versionNum1 = parseInt(versionParts[0]); const versionNum2 = parseInt(versionParts[1]); const versionNum3 = parseInt(versionParts[2]); if (isNaN(versionNum1) || isNaN(versionNum2) || isNaN(versionNum3)) return; // Parse backend version const backendVersionParts = versionFromBackend.split('.'); const backendVersionNum1 = parseInt(backendVersionParts[0]); const backendVersionNum2 = parseInt(backendVersionParts[1]); const backendVersionNum3 = parseInt(backendVersionParts[2]); if (isNaN(backendVersionNum1) || isNaN(backendVersionNum2) || isNaN(backendVersionNum3)) return; // Compare versions const needsUpdate = versionNum1 < backendVersionNum1 || (versionNum1 === backendVersionNum1 && versionNum2 < backendVersionNum2); if (needsUpdate) { setShowUpdateDialog(true); } }, [versionFromBackend]); // Log app version console.log('App Version:', Constants.expoConfig?.version); console.log('Backend Version:', versionFromBackend); if (isLoading) { return ( Checking service status... ); } if (error || data?.status !== "ok") { return ( ⚠️ Service Unavailable Please check your connection and try again. refetch()} style={tw`bg-brand500 px-8 py-3 rounded-xl shadow-md`} activeOpacity={0.8} > Retry ); } return ( <> {children} {showUpdateDialog && appUrl && ( setShowUpdateDialog(false)} enableDismiss={false}> Update Available A new version ({versionFromBackend}) is available. Your current version is {Constants.expoConfig?.version}. Please update to continue using the app. { if (appUrl) { Linking.openURL(appUrl); } }} style={{ backgroundColor: theme.colors.brand500, padding: 12, borderRadius: 8, alignItems: 'center' }} > Update Now )} ); }; export default HealthTestWrapper;