Skip to content

Commit 156cfb1

Browse files
authored
Merge pull request #37 from sendbird/feat/message-components
[UIKIT-2110] Feat/Additional message components
2 parents ab486ca + 9b9d52b commit 156cfb1

File tree

33 files changed

+751
-65
lines changed

33 files changed

+751
-65
lines changed

packages/uikit-react-native-foundation/src/styles/HeaderStyleContext.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import React from 'react';
2-
import { StatusBar } from 'react-native';
2+
import { StatusBar, useWindowDimensions } from 'react-native';
33
import { useSafeAreaInsets } from 'react-native-safe-area-context';
44

55
import type { BaseHeaderProps, HeaderElement } from '../types';
6+
import getDefaultHeaderHeight from './getDefaultHeaderHeight';
67

78
export type HeaderStyleContextType = {
89
HeaderComponent: (
@@ -20,12 +21,14 @@ export type HeaderStyleContextType = {
2021
defaultTitleAlign: 'left' | 'center';
2122
statusBarTranslucent: boolean;
2223
topInset: number;
24+
defaultHeight: number;
2325
};
2426
export const HeaderStyleContext = React.createContext<HeaderStyleContextType>({
2527
HeaderComponent: () => null,
2628
defaultTitleAlign: 'left',
2729
statusBarTranslucent: true,
2830
topInset: StatusBar.currentHeight ?? 0,
31+
defaultHeight: getDefaultHeaderHeight(false),
2932
});
3033

3134
type Props = Pick<HeaderStyleContextType, 'statusBarTranslucent' | 'defaultTitleAlign' | 'HeaderComponent'>;
@@ -36,6 +39,7 @@ export const HeaderStyleProvider = ({
3639
statusBarTranslucent,
3740
}: React.PropsWithChildren<Props>) => {
3841
const { top } = useSafeAreaInsets();
42+
const { width, height } = useWindowDimensions();
3943

4044
return (
4145
<HeaderStyleContext.Provider
@@ -44,6 +48,7 @@ export const HeaderStyleProvider = ({
4448
defaultTitleAlign,
4549
statusBarTranslucent,
4650
topInset: statusBarTranslucent ? top : 0,
51+
defaultHeight: getDefaultHeaderHeight(width > height),
4752
}}
4853
>
4954
{children}

packages/uikit-react-native-foundation/src/ui/Header/index.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
import React from 'react';
2-
import { TouchableOpacity, TouchableOpacityProps, View, useWindowDimensions } from 'react-native';
2+
import { TouchableOpacity, TouchableOpacityProps, View } from 'react-native';
33
import { useSafeAreaInsets } from 'react-native-safe-area-context';
44

55
import { conditionChaining } from '@sendbird/uikit-utils';
66

77
import type { BaseHeaderProps } from '../../index';
88
import createStyleSheet from '../../styles/createStyleSheet';
9-
import getDefaultHeaderHeight from '../../styles/getDefaultHeaderHeight';
109
import useHeaderStyle from '../../styles/useHeaderStyle';
1110
import useUIKitTheme from '../../theme/useUIKitTheme';
1211
import Text, { TextProps } from '../Text';
@@ -38,8 +37,7 @@ const Header: ((props: HeaderProps) => JSX.Element) & {
3837
onPressRight,
3938
clearTitleMargin = false,
4039
}) => {
41-
const { topInset, defaultTitleAlign } = useHeaderStyle();
42-
const { width, height } = useWindowDimensions();
40+
const { topInset, defaultTitleAlign, defaultHeight } = useHeaderStyle();
4341
const { colors } = useUIKitTheme();
4442
const { left: paddingLeft, right: paddingRight } = useSafeAreaInsets();
4543

@@ -64,7 +62,7 @@ const Header: ((props: HeaderProps) => JSX.Element) & {
6462
},
6563
]}
6664
>
67-
<View style={[styles.header, { height: getDefaultHeaderHeight(width > height) }]}>
65+
<View style={[styles.header, { height: defaultHeight }]}>
6866
<LeftSide titleAlign={actualTitleAlign} left={left} onPressLeft={onPressLeft} />
6967
<View
7068
style={[

packages/uikit-react-native/package.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,24 +53,29 @@
5353
"@react-native-firebase/messaging": "^14.4.0",
5454
"@types/react": "*",
5555
"@types/react-native": "*",
56+
"@types/react-native-video": "^5.0.14",
5657
"date-fns": "^2.28.0",
58+
"expo-av": "^12.0.4",
5759
"expo-clipboard": "^2.1.1",
5860
"expo-document-picker": "^10.1.3",
5961
"expo-file-system": "^13.1.4",
6062
"expo-image-picker": "^12.0.2",
6163
"expo-media-library": "^14.0.1",
6264
"expo-notifications": "^0.14.1",
65+
"expo-video-thumbnails": "^6.4.0",
6366
"glob": "^7.2.0",
6467
"inquirer": "^8.2.0",
6568
"js-convert-case": "^4.2.0",
6669
"react": "17.0.2",
6770
"react-native": "0.66.4",
6871
"react-native-builder-bob": "^0.18.0",
72+
"react-native-create-thumbnail": "^1.5.1",
6973
"react-native-document-picker": "^8.0.0",
7074
"react-native-file-access": "^2.4.3",
7175
"react-native-image-picker": "^4.7.1",
7276
"react-native-permissions": "^3.6.0",
7377
"react-native-safe-area-context": "^3.3.2",
78+
"react-native-video": "^5.2.0",
7479
"typescript": "^4.1.3"
7580
},
7681
"peerDependencies": {
@@ -79,18 +84,22 @@
7984
"@react-native-community/netinfo": ">=9.3.0",
8085
"@react-native-firebase/messaging": ">=14.4.0",
8186
"date-fns": ">=2.28.0",
87+
"expo-av": ">=12.0.4",
8288
"expo-clipboard": ">=2.1.1",
8389
"expo-document-picker": ">=10.1.3",
8490
"expo-file-system": ">=13.1.4",
8591
"expo-image-picker": ">=12.0.2",
8692
"expo-notifications": ">=0.14.1",
93+
"expo-video-thumbnails": ">=6.4.0",
8794
"react": ">=16.13.1",
8895
"react-native": ">=0.63.3",
96+
"react-native-create-thumbnail": ">=1.5.1",
8997
"react-native-document-picker": ">=8.0.0",
9098
"react-native-file-access": ">=2.4.3",
9199
"react-native-image-picker": ">=4.7.1",
92100
"react-native-permissions": ">=3.6.0",
93101
"react-native-safe-area-context": ">=3.3.2",
102+
"react-native-video": ">=5.2.0",
94103
"sendbird": "^3.1.22"
95104
},
96105
"peerDependenciesMeta": {

packages/uikit-react-native/src/SendbirdUIKitContainer.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ import { useLocalization } from './hooks/useContext';
2323
import StringSetEn from './localization/StringSet.en';
2424
import type { StringSet } from './localization/StringSet.type';
2525
import SBUDynamicModule from './platform/dynamicModule';
26-
import type { ClipboardServiceInterface, FileServiceInterface, NotificationServiceInterface } from './platform/types';
26+
import type {
27+
ClipboardServiceInterface,
28+
FileServiceInterface,
29+
MediaServiceInterface,
30+
NotificationServiceInterface,
31+
} from './platform/types';
2732
import type { ErrorBoundaryProps, LocalCacheStorage } from './types';
2833
import VERSION from './version';
2934

@@ -40,6 +45,7 @@ export type SendbirdUIKitContainerProps = React.PropsWithChildren<{
4045
file: FileServiceInterface;
4146
notification: NotificationServiceInterface;
4247
clipboard: ClipboardServiceInterface;
48+
media?: MediaServiceInterface;
4349
};
4450
chatOptions?: {
4551
localCacheStorage?: LocalCacheStorage;
@@ -55,6 +61,7 @@ export type SendbirdUIKitContainerProps = React.PropsWithChildren<{
5561
theme?: UIKitTheme;
5662
statusBarTranslucent?: boolean;
5763
defaultHeaderTitleAlign?: 'left' | 'center';
64+
defaultHeaderHeight?: number;
5865
HeaderComponent?: HeaderStyleContextType['HeaderComponent'];
5966
};
6067
toast?: {
@@ -142,6 +149,7 @@ const SendbirdUIKitContainer = ({
142149
fileService={platformServices.file}
143150
notificationService={platformServices.notification}
144151
clipboardService={platformServices.clipboard}
152+
mediaService={platformServices.media}
145153
>
146154
<UIKitThemeProvider theme={styles?.theme ?? LightUIKitTheme}>
147155
<HeaderStyleProvider

0 commit comments

Comments
 (0)