From f25b488863ca1dfc2863d863079d2ec7abdd0068 Mon Sep 17 00:00:00 2001 From: Paul <paulmakles@gmail.com> Date: Sat, 3 Jul 2021 15:23:29 +0100 Subject: [PATCH] Fix page height on mobile. Fix keyboard focus on mobile. --- src/components/ui/TextArea.tsx | 4 ---- src/context/Theme.tsx | 9 +++++++++ src/lib/TextAreaAutoSize.tsx | 4 +++- src/pages/RevoltApp.tsx | 2 +- src/styles/_variables.scss | 1 + 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/components/ui/TextArea.tsx b/src/components/ui/TextArea.tsx index f91b428..d61e43c 100644 --- a/src/components/ui/TextArea.tsx +++ b/src/components/ui/TextArea.tsx @@ -1,7 +1,3 @@ -// import classNames from "classnames"; -// import { memo } from "preact/compat"; -// import styles from "./TextArea.module.scss"; -// import { useState, useEffect, useRef, useLayoutEffect } from "preact/hooks"; import styled, { css } from "styled-components"; export interface TextAreaProps { diff --git a/src/context/Theme.tsx b/src/context/Theme.tsx index a348dd0..f0e6db4 100644 --- a/src/context/Theme.tsx +++ b/src/context/Theme.tsx @@ -2,6 +2,7 @@ import { isTouchscreenDevice } from "../lib/isTouchscreenDevice"; import { createGlobalStyle } from "styled-components"; import { connectState } from "../redux/connector"; import { Children } from "../types/Preact"; +import { useEffect } from "preact/hooks"; import { createContext } from "preact"; import { Helmet } from "react-helmet"; @@ -126,6 +127,14 @@ function Theme(props: Props) { ...props.options?.custom }; + useEffect(() => { + const resize = () => document.documentElement.style.setProperty('--app-height', `${window.innerHeight}px`); + resize(); + + window.addEventListener('resize', resize); + return () => window.removeEventListener('resize', resize); + }, []); + return ( <ThemeContext.Provider value={theme}> <Helmet> diff --git a/src/lib/TextAreaAutoSize.tsx b/src/lib/TextAreaAutoSize.tsx index 46c4e9f..bfc515b 100644 --- a/src/lib/TextAreaAutoSize.tsx +++ b/src/lib/TextAreaAutoSize.tsx @@ -1,6 +1,7 @@ -import TextArea, { DEFAULT_LINE_HEIGHT, DEFAULT_TEXT_AREA_PADDING, TextAreaProps, TEXT_AREA_BORDER_WIDTH } from "../components/ui/TextArea"; import { useEffect, useRef } from "preact/hooks"; import { internalSubscribe } from "./eventEmitter"; +import { isTouchscreenDevice } from "./isTouchscreenDevice"; +import TextArea, { DEFAULT_LINE_HEIGHT, DEFAULT_TEXT_AREA_PADDING, TextAreaProps, TEXT_AREA_BORDER_WIDTH } from "../components/ui/TextArea"; type TextAreaAutoSizeProps = Omit<JSX.HTMLAttributes<HTMLTextAreaElement>, 'style' | 'value'> & TextAreaProps & { forceFocus?: boolean @@ -33,6 +34,7 @@ export default function TextAreaAutoSize(props: TextAreaAutoSizeProps) { ref.current.focus(); } + if (isTouchscreenDevice) return; if (autoFocus && !inputSelected()) { ref.current.focus(); } diff --git a/src/pages/RevoltApp.tsx b/src/pages/RevoltApp.tsx index f59844d..9b8cbcd 100644 --- a/src/pages/RevoltApp.tsx +++ b/src/pages/RevoltApp.tsx @@ -41,7 +41,7 @@ export default function App() { return ( <OverlappingPanels width="100vw" - height="100vh" + height="var(--app-height)" leftPanel={inSpecial ? undefined : { width: 292, component: <LeftSidebar /> }} rightPanel={(!inSettings && inChannel) ? { width: 240, component: <RightSidebar /> } : undefined} bottomNav={{ diff --git a/src/styles/_variables.scss b/src/styles/_variables.scss index 3335848..14024c1 100644 --- a/src/styles/_variables.scss +++ b/src/styles/_variables.scss @@ -1,3 +1,4 @@ :root { + --app-height: 100vh; --sidebar-active: var(--secondary-background); } -- GitLab