From 332ae408a4faef1cbbf348e17bdfbc01f6123bfe Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Wed, 5 Jul 2023 13:16:28 +0200 Subject: [PATCH] Middle Column: Fixing the keyboard hiding issue on iOs (#3488) --- src/components/middle/MiddleColumn.tsx | 10 +++++++++- src/util/windowSize.ts | 10 ++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/components/middle/MiddleColumn.tsx b/src/components/middle/MiddleColumn.tsx index 9ad7cdc5c..1971a8c9e 100644 --- a/src/components/middle/MiddleColumn.tsx +++ b/src/components/middle/MiddleColumn.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState, memo, useMemo, } from '../../lib/teact/teact'; -import { requestMutation } from '../../lib/fasterdom/fasterdom'; +import { requestMeasure, requestMutation } from '../../lib/fasterdom/fasterdom'; import { getActions, withGlobal } from '../../global'; import type { ApiChat, ApiChatBannedRights } from '../../api/types'; @@ -304,6 +304,14 @@ function MiddleColumn({ requestMutation(() => { document.body.classList.toggle('keyboard-visible', isFixNeeded); + + requestMeasure(() => { + if (!isFixNeeded && visualViewport.offsetTop) { + requestMutation(() => { + window.scrollTo({ top: 0 }); + }); + } + }); }); }; diff --git a/src/util/windowSize.ts b/src/util/windowSize.ts index a76075b8d..e65896e9b 100644 --- a/src/util/windowSize.ts +++ b/src/util/windowSize.ts @@ -7,16 +7,22 @@ type IDimensions = { height: number; }; +const WINDOW_ORIENTATION_CHANGE_THROTTLE_MS = 100; const WINDOW_RESIZE_THROTTLE_MS = 250; -const initialHeight = window.innerHeight; +let initialHeight = window.innerHeight; let currentWindowSize = updateSizes(); const handleResize = throttle(() => { currentWindowSize = updateSizes(); }, WINDOW_RESIZE_THROTTLE_MS, true); -window.addEventListener('orientationchange', handleResize); +const handleOrientationChange = throttle(() => { + initialHeight = window.innerHeight; + handleResize(); +}, WINDOW_ORIENTATION_CHANGE_THROTTLE_MS, false); + +window.addEventListener('orientationchange', handleOrientationChange); if (IS_IOS) { window.visualViewport!.addEventListener('resize', handleResize); } else {