fix: prevent mobile session resync flicker

Avoid unnecessary resync on clean initial stream connect
Skip no-op message snapshot writes during recovery
Only trigger mobile resume sync after real app resume
This commit is contained in:
Bohdan Triapitsyn
2026-07-02 22:44:00 +03:00
parent 01e0905e8b
commit 3bd785a10a
3 changed files with 52 additions and 23 deletions
+13 -2
View File
@@ -202,19 +202,30 @@ const useNativeMobileChrome = (): void => {
};
const useNativeMobileLifecycle = (onResume: () => void): void => {
const wasInactiveRef = React.useRef(false);
React.useEffect(() => {
if (!isCapacitorMobileApp()) return;
let disposed = false;
const cleanup: Array<() => void> = [];
const resumeAfterInactive = () => {
if (!wasInactiveRef.current) return;
wasInactiveRef.current = false;
onResume();
};
void import('@capacitor/app').then(async ({ App }) => {
if (disposed) return;
const state = await App.addListener('appStateChange', ({ isActive }) => {
document.documentElement.classList.toggle('oc-native-app-active', isActive);
if (isActive) onResume();
if (!isActive) {
wasInactiveRef.current = true;
return;
}
resumeAfterInactive();
});
const resume = await App.addListener('resume', onResume);
const resume = await App.addListener('resume', resumeAfterInactive);
if (disposed) {
void state.remove();
void resume.remove();