upd: upd version
Deskripsi: - tampilan jika update versi terbaru atau sedang maintenance NO Issues
This commit is contained in:
@@ -9,16 +9,18 @@ import HeaderRightPositionList from "@/components/position/headerRightPositionLi
|
||||
import HeaderRightProjectList from "@/components/project/headerProjectList";
|
||||
import Text from "@/components/Text";
|
||||
import ToastCustom from "@/components/toastCustom";
|
||||
import { apiReadOneNotification } from "@/lib/api";
|
||||
import ModalUpdateMaintenance from "@/components/ModalUpdateMaintenance";
|
||||
import { apiGetVersion, apiReadOneNotification } from "@/lib/api";
|
||||
import { pushToPage } from "@/lib/pushToPage";
|
||||
import store from "@/lib/store";
|
||||
import { useAuthSession } from "@/providers/AuthProvider";
|
||||
import AsyncStorage from "@react-native-async-storage/async-storage";
|
||||
import Constants from "expo-constants";
|
||||
import { getApp } from "@react-native-firebase/app";
|
||||
import { getMessaging, onMessage } from "@react-native-firebase/messaging";
|
||||
import { Redirect, router, Stack, usePathname } from "expo-router";
|
||||
import { StatusBar } from 'expo-status-bar';
|
||||
import { useEffect } from "react";
|
||||
import { StatusBar } from 'expo-status-bar';
|
||||
import { useEffect, useState } from "react";
|
||||
import { Easing, Notifier, NotifierComponents } from 'react-native-notifier';
|
||||
import { Provider } from "react-redux";
|
||||
import { useTheme } from "@/providers/ThemeProvider";
|
||||
@@ -27,6 +29,81 @@ export default function RootLayout() {
|
||||
const { token, decryptToken, isLoading } = useAuthSession()
|
||||
const pathname = usePathname()
|
||||
const { colors } = useTheme()
|
||||
const [modalUpdateMaintenance, setModalUpdateMaintenance] = useState(false)
|
||||
const [modalType, setModalType] = useState<'update' | 'maintenance'>('update')
|
||||
const [isForceUpdate, setIsForceUpdate] = useState(false)
|
||||
const [updateMessage, setUpdateMessage] = useState('')
|
||||
|
||||
const currentVersion = Constants.expoConfig?.version ?? '0.0.0'
|
||||
|
||||
const compareVersions = (v1: string, v2: string) => {
|
||||
const parts1 = v1.split('.').map(Number);
|
||||
const parts2 = v2.split('.').map(Number);
|
||||
for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
|
||||
const p1 = parts1[i] || 0;
|
||||
const p2 = parts2[i] || 0;
|
||||
if (p1 < p2) return -1;
|
||||
if (p1 > p2) return 1;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const checkVersion = async () => {
|
||||
try {
|
||||
const response = await apiGetVersion();
|
||||
console.log('response',response)
|
||||
if (response.success && response.data) {
|
||||
const maintenance = response.data.find((item: any) => item.id === 'mobile_maintenance')?.value === 'true';
|
||||
const latestVersion = response.data.find((item: any) => item.id === 'mobile_latest_version')?.value || '0.0.0';
|
||||
const minVersion = response.data.find((item: any) => item.id === 'mobile_minimum_version')?.value || '0.0.0';
|
||||
const message = response.data.find((item: any) => item.id === 'mobile_message_update')?.value || '';
|
||||
|
||||
if (maintenance) {
|
||||
setModalType('maintenance');
|
||||
setModalUpdateMaintenance(true);
|
||||
setIsForceUpdate(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (compareVersions(currentVersion, minVersion) === -1) {
|
||||
setModalType('update');
|
||||
setIsForceUpdate(true);
|
||||
setUpdateMessage(message);
|
||||
setModalUpdateMaintenance(true);
|
||||
} else if (compareVersions(currentVersion, latestVersion) === -1) {
|
||||
// Check if this soft update version was already dismissed
|
||||
const dismissedVersion = await AsyncStorage.getItem('dismissed_update_version');
|
||||
if (dismissedVersion !== latestVersion) {
|
||||
setModalType('update');
|
||||
setIsForceUpdate(false);
|
||||
setUpdateMessage(message);
|
||||
setModalUpdateMaintenance(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Failed to check version:', error);
|
||||
}
|
||||
};
|
||||
|
||||
checkVersion();
|
||||
}, [currentVersion]);
|
||||
|
||||
const handleDismissUpdate = async () => {
|
||||
if (!isForceUpdate) {
|
||||
try {
|
||||
const response = await apiGetVersion();
|
||||
const latestVersion = response.data.find((item: any) => item.id === 'mobile_latest_version')?.value;
|
||||
if (latestVersion) {
|
||||
await AsyncStorage.setItem('dismissed_update_version', latestVersion);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
setModalUpdateMaintenance(false);
|
||||
}
|
||||
}
|
||||
|
||||
async function handleReadNotification(id: string, category: string, idContent: string, title: string) {
|
||||
try {
|
||||
@@ -246,6 +323,13 @@ export default function RootLayout() {
|
||||
</Stack>
|
||||
<StatusBar style={'light'} translucent={false} backgroundColor="black" />
|
||||
<ToastCustom />
|
||||
<ModalUpdateMaintenance
|
||||
visible={modalUpdateMaintenance}
|
||||
type={modalType}
|
||||
isForceUpdate={isForceUpdate}
|
||||
customDescription={updateMessage}
|
||||
onDismiss={handleDismissUpdate}
|
||||
/>
|
||||
</Provider>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user