Skip to content

Commit a18c9c4

Browse files
committed
Support ssr
1 parent 10bdec3 commit a18c9c4

File tree

4 files changed

+14
-4
lines changed

4 files changed

+14
-4
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ npm install @fe-eule/react-keyboard-avoiding-view
2525
## Usage
2626

2727
```jsx
28-
// in react not react-native
28+
/**
29+
* Use react not react-native
30+
* Support server side rendering
31+
*/
2932
import React from "react";
3033
import KeyboardAvoidingView from "@fe-eule/react-keyboard-avoiding-view";
3134

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@fe-eule/react-keyboard-avoiding-view",
3-
"version": "1.0.11",
3+
"version": "1.0.12",
44
"private": false,
55
"description": "This component is a component that automatically adjusts the view so that the fixed element is not covered by the keyboard when the keyboard appears on iOS devices.",
66
"keywords": [

src/libs/keyboard-avoiding-view.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
import {
1616
checkIsIOS,
1717
computeKeyboardTopPosition,
18+
getViewPortHeight,
1819
isKeyboardAvoidingInputElement,
1920
makeNegativeTranslateY,
2021
} from "./keyboard-avoiding-view.util";
@@ -48,7 +49,7 @@ export const KeyboardAvoidingView = forwardRef<
4849
const [isVirtualKeyboardShown, setVirtualKeyboardShown] =
4950
useState<boolean>(false);
5051
const [adjustedTranslateY, setAdjustedTranslateY] = useState<number>(0);
51-
const initialInnerHeight = useRef<number>(window.innerHeight).current;
52+
const initialInnerHeight = useRef<number>(0);
5253

5354
/**
5455
* Why use debounce?
@@ -57,7 +58,7 @@ export const KeyboardAvoidingView = forwardRef<
5758
const handleChangeChildTranslateTriggerEvent = useDebouncedCallback(
5859
() => {
5960
const keyboardTopPosition = computeKeyboardTopPosition({
60-
initialInnerHeight,
61+
initialInnerHeight: initialInnerHeight.current,
6162
});
6263
if (keyboardTopPosition <= 0) {
6364
return;
@@ -138,6 +139,7 @@ export const KeyboardAvoidingView = forwardRef<
138139
return;
139140
}
140141

142+
initialInnerHeight.current = getViewPortHeight();
141143
setupListeners();
142144
});
143145

src/libs/keyboard-avoiding-view.util.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,8 @@ export const makeNegativeTranslateY = (value: number) =>
2929
`translateY(-${value}px)`;
3030

3131
export const checkIsIOS = () => /iPad|iPhone|iPod/.test(navigator.userAgent);
32+
33+
export const getViewPortHeight = () =>
34+
typeof window === "undefined"
35+
? 0
36+
: window.visualViewport?.height || window.innerHeight;

0 commit comments

Comments
 (0)