Skip to content

Commit 20262d3

Browse files
authored
Add wrapper for KeyboardAvoidingView + deprecated AvoidKeyboardView (#822)
1 parent 63fe31d commit 20262d3

File tree

6 files changed

+90
-1
lines changed

6 files changed

+90
-1
lines changed

example/src/App.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import LinearProgressExample from "./LinearProgressExample";
6464
import CircularProgressExample from "./CircularProgressExample";
6565
import VideoPlayerExample from "./VideoPlayerExample";
6666
import PinInputExample from "./PinInputExample";
67+
import KeyboardAvoidingViewExample from "./KeyboardAvoidingViewExample";
6768

6869
const ROUTES = {
6970
AudioPlayer: AudioPlayerExample,
@@ -103,6 +104,7 @@ const ROUTES = {
103104
CircularProgress: CircularProgressExample,
104105
VideoPlayer: VideoPlayerExample,
105106
PinInput: PinInputExample,
107+
KeyboardAvoidingView: KeyboardAvoidingViewExample,
106108
};
107109

108110
let customFonts = {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import React from "react";
2+
import { View } from "react-native";
3+
import { KeyboardAvoidingView, TextField } from "@draftbit/ui";
4+
5+
const KeyboardAvoidingViewExample: React.FC = () => {
6+
const [value, setValue] = React.useState("");
7+
return (
8+
<View style={{ flex: 1, justifyContent: "flex-end" }}>
9+
<KeyboardAvoidingView behavior="height">
10+
<TextField
11+
value={value}
12+
onChangeText={(text) => setValue(text.toString())}
13+
numberOfLines={1}
14+
type="solid"
15+
/>
16+
</KeyboardAvoidingView>
17+
</View>
18+
);
19+
};
20+
21+
export default KeyboardAvoidingViewExample;
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import React from "react";
2+
import {
3+
KeyboardAvoidingView as KeyboardAvoidingViewComponent,
4+
Platform,
5+
ViewProps,
6+
} from "react-native";
7+
8+
const isIos = Platform.OS === "ios";
9+
const isAndroid = Platform.OS === "android";
10+
11+
type KeyboardAvoidingViewBehavior = "height" | "position" | "padding";
12+
13+
interface KeyboardAvoidingViewProps extends ViewProps {
14+
enabled?: boolean;
15+
behavior?: KeyboardAvoidingViewBehavior;
16+
keyboardVerticalOffset?: number;
17+
androidBehavior?: KeyboardAvoidingViewBehavior;
18+
androidKeyboardVerticalOffset?: number;
19+
iosBehavior?: KeyboardAvoidingViewBehavior;
20+
iosKeyboardVerticalOffset?: number;
21+
}
22+
23+
const KeyboardAvoidingView: React.FC<KeyboardAvoidingViewProps> = ({
24+
behavior = "padding",
25+
keyboardVerticalOffset = 0,
26+
androidBehavior,
27+
androidKeyboardVerticalOffset,
28+
iosBehavior,
29+
iosKeyboardVerticalOffset,
30+
...rest
31+
}) => {
32+
let behaviorResult: KeyboardAvoidingViewBehavior;
33+
34+
if (isIos && iosBehavior !== undefined) {
35+
behaviorResult = iosBehavior;
36+
} else if (isAndroid && androidBehavior !== undefined) {
37+
behaviorResult = androidBehavior;
38+
} else {
39+
behaviorResult = behavior;
40+
}
41+
42+
let keyboardVerticalOffsetResult: number;
43+
44+
if (isIos && iosKeyboardVerticalOffset !== undefined) {
45+
keyboardVerticalOffsetResult = iosKeyboardVerticalOffset;
46+
} else if (isAndroid && androidKeyboardVerticalOffset !== undefined) {
47+
keyboardVerticalOffsetResult = androidKeyboardVerticalOffset;
48+
} else {
49+
keyboardVerticalOffsetResult = keyboardVerticalOffset;
50+
}
51+
52+
return (
53+
<KeyboardAvoidingViewComponent
54+
behavior={behaviorResult}
55+
keyboardVerticalOffset={keyboardVerticalOffsetResult}
56+
{...rest}
57+
/>
58+
);
59+
};
60+
61+
export default KeyboardAvoidingView;

packages/core/src/components/AvoidKeyboardView.tsx renamed to packages/core/src/deprecated-components/AvoidKeyboardView.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ interface AvoidKeyboardViewProps
3535
onKeyboardHidden?: () => void;
3636
}
3737

38+
/**
39+
* @deprecated DEPRECATED
40+
*/
3841
const AvoidKeyboardView: React.FC<AvoidKeyboardViewProps> = ({
3942
onKeyboardHidden,
4043
onKeyboardShown,

packages/core/src/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export {
7373
Spacer,
7474
Square,
7575
} from "./components/Layout";
76-
export { default as AvoidKeyboardView } from "./components/AvoidKeyboardView";
76+
export { default as KeyboardAvoidingView } from "./components/KeyboardAvoidingView";
7777

7878
/* Deprecated: Fix or Delete! */
7979
export { default as AccordionItem } from "./deprecated-components/AccordionItem";
@@ -102,3 +102,4 @@ export { default as RowBodyIcon } from "./deprecated-components/RowBodyIcon";
102102
export { default as RowHeadlineImageCaption } from "./deprecated-components/RowHeadlineImageCaption";
103103
export { default as RowHeadlineImageIcon } from "./deprecated-components/RowHeadlineImageIcon";
104104
export { useAuthState } from "./components/useAuthState";
105+
export { default as AvoidKeyboardView } from "./deprecated-components/AvoidKeyboardView";

packages/ui/src/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ export {
6868
ZStack,
6969
PickerItem,
7070
AvoidKeyboardView,
71+
KeyboardAvoidingView,
7172
} from "@draftbit/core";
7273

7374
/**

0 commit comments

Comments
 (0)