@sendbird/uikit-react-native-foundation 3.0.4 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/Icon/index.js +12 -0
- package/lib/commonjs/components/Icon/index.js.map +1 -1
- package/lib/commonjs/components/VideoThumbnail/index.js +108 -0
- package/lib/commonjs/components/VideoThumbnail/index.js.map +1 -0
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/theme/DarkUIKitTheme.js +2 -1
- package/lib/commonjs/theme/DarkUIKitTheme.js.map +1 -1
- package/lib/commonjs/theme/LightUIKitTheme.js +2 -1
- package/lib/commonjs/theme/LightUIKitTheme.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/ui/BottomSheet/index.js +1 -0
- package/lib/commonjs/ui/BottomSheet/index.js.map +1 -1
- package/lib/commonjs/ui/Dialog/DialogSheet.js +4 -3
- package/lib/commonjs/ui/Dialog/DialogSheet.js.map +1 -1
- package/lib/commonjs/ui/GroupChannelMessage/Message.file.js +6 -9
- package/lib/commonjs/ui/GroupChannelMessage/Message.file.js.map +1 -1
- package/lib/commonjs/ui/GroupChannelMessage/Message.file.video.js +9 -71
- package/lib/commonjs/ui/GroupChannelMessage/Message.file.video.js.map +1 -1
- package/lib/commonjs/ui/GroupChannelMessage/MessageContainer.js +7 -5
- package/lib/commonjs/ui/GroupChannelMessage/MessageContainer.js.map +1 -1
- package/lib/commonjs/ui/GroupChannelMessage/MessageOpenGraph.js +2 -2
- package/lib/commonjs/ui/GroupChannelMessage/MessageOpenGraph.js.map +1 -1
- package/lib/commonjs/ui/GroupChannelMessage/index.js.map +1 -1
- package/lib/commonjs/ui/OpenChannelMessage/Message.file.js +2 -8
- package/lib/commonjs/ui/OpenChannelMessage/Message.file.js.map +1 -1
- package/lib/commonjs/ui/OpenChannelMessage/Message.file.video.js +10 -77
- package/lib/commonjs/ui/OpenChannelMessage/Message.file.video.js.map +1 -1
- package/lib/commonjs/ui/OpenChannelMessage/Message.user.og.js +1 -1
- package/lib/commonjs/ui/OpenChannelMessage/Message.user.og.js.map +1 -1
- package/lib/module/components/Icon/index.js +12 -0
- package/lib/module/components/Icon/index.js.map +1 -1
- package/lib/module/components/VideoThumbnail/index.js +98 -0
- package/lib/module/components/VideoThumbnail/index.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/theme/DarkUIKitTheme.js +2 -1
- package/lib/module/theme/DarkUIKitTheme.js.map +1 -1
- package/lib/module/theme/LightUIKitTheme.js +2 -1
- package/lib/module/theme/LightUIKitTheme.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/ui/BottomSheet/index.js +1 -0
- package/lib/module/ui/BottomSheet/index.js.map +1 -1
- package/lib/module/ui/Dialog/DialogSheet.js +4 -3
- package/lib/module/ui/Dialog/DialogSheet.js.map +1 -1
- package/lib/module/ui/GroupChannelMessage/Message.file.js +7 -10
- package/lib/module/ui/GroupChannelMessage/Message.file.js.map +1 -1
- package/lib/module/ui/GroupChannelMessage/Message.file.video.js +9 -69
- package/lib/module/ui/GroupChannelMessage/Message.file.video.js.map +1 -1
- package/lib/module/ui/GroupChannelMessage/MessageContainer.js +7 -5
- package/lib/module/ui/GroupChannelMessage/MessageContainer.js.map +1 -1
- package/lib/module/ui/GroupChannelMessage/MessageOpenGraph.js +2 -2
- package/lib/module/ui/GroupChannelMessage/MessageOpenGraph.js.map +1 -1
- package/lib/module/ui/GroupChannelMessage/index.js.map +1 -1
- package/lib/module/ui/OpenChannelMessage/Message.file.js +2 -8
- package/lib/module/ui/OpenChannelMessage/Message.file.js.map +1 -1
- package/lib/module/ui/OpenChannelMessage/Message.file.video.js +10 -75
- package/lib/module/ui/OpenChannelMessage/Message.file.video.js.map +1 -1
- package/lib/module/ui/OpenChannelMessage/Message.user.og.js +1 -1
- package/lib/module/ui/OpenChannelMessage/Message.user.og.js.map +1 -1
- package/lib/typescript/src/components/Icon/index.d.ts +5 -0
- package/lib/typescript/src/components/VideoThumbnail/index.d.ts +11 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/types.d.ts +1 -1
- package/lib/typescript/src/ui/BottomSheet/index.d.ts +1 -0
- package/lib/typescript/src/ui/Dialog/DialogSheet.d.ts +2 -1
- package/lib/typescript/src/ui/GroupChannelMessage/MessageContainer.d.ts +2 -2
- package/lib/typescript/src/ui/GroupChannelMessage/MessageOpenGraph.d.ts +1 -1
- package/lib/typescript/src/ui/GroupChannelMessage/index.d.ts +8 -0
- package/package.json +3 -3
- package/src/components/Icon/index.tsx +11 -7
- package/src/components/VideoThumbnail/index.tsx +100 -0
- package/src/index.ts +1 -0
- package/src/theme/DarkUIKitTheme.ts +1 -0
- package/src/theme/LightUIKitTheme.ts +1 -0
- package/src/types.ts +1 -1
- package/src/ui/BottomSheet/index.tsx +2 -0
- package/src/ui/Dialog/DialogSheet.tsx +6 -3
- package/src/ui/GroupChannelMessage/Message.file.tsx +4 -6
- package/src/ui/GroupChannelMessage/Message.file.video.tsx +10 -58
- package/src/ui/GroupChannelMessage/MessageContainer.tsx +18 -13
- package/src/ui/GroupChannelMessage/MessageOpenGraph.tsx +3 -3
- package/src/ui/GroupChannelMessage/index.ts +1 -0
- package/src/ui/OpenChannelMessage/Message.file.tsx +1 -3
- package/src/ui/OpenChannelMessage/Message.file.video.tsx +10 -53
- package/src/ui/OpenChannelMessage/Message.user.og.tsx +1 -1
|
@@ -15,7 +15,7 @@ const MessageOpenGraph = ({
|
|
|
15
15
|
ogMetaData,
|
|
16
16
|
variant,
|
|
17
17
|
}: {
|
|
18
|
-
ogMetaData:
|
|
18
|
+
ogMetaData: NonNullable<SendbirdUserMessage['ogMetaData']>;
|
|
19
19
|
variant: 'outgoing' | 'incoming';
|
|
20
20
|
onPressURL?: (url: string) => void;
|
|
21
21
|
onLongPress?: () => void;
|
|
@@ -31,7 +31,7 @@ const MessageOpenGraph = ({
|
|
|
31
31
|
>
|
|
32
32
|
{({ pressed }) => (
|
|
33
33
|
<Box backgroundColor={pressed ? color.pressed.background : color.enabled.background}>
|
|
34
|
-
{
|
|
34
|
+
{!!ogMetaData.defaultImage && (
|
|
35
35
|
<ImageWithPlaceholder style={styles.ogImage} source={{ uri: ogMetaData.defaultImage.url }} />
|
|
36
36
|
)}
|
|
37
37
|
|
|
@@ -42,7 +42,7 @@ const MessageOpenGraph = ({
|
|
|
42
42
|
<Text numberOfLines={3} body2 color={colors.onBackground01} style={styles.ogTitle}>
|
|
43
43
|
{ogMetaData.title}
|
|
44
44
|
</Text>
|
|
45
|
-
{
|
|
45
|
+
{!!ogMetaData.description && (
|
|
46
46
|
<Text numberOfLines={1} caption2 color={colors.onBackground01} style={styles.ogDesc}>
|
|
47
47
|
{ogMetaData.description}
|
|
48
48
|
</Text>
|
|
@@ -11,8 +11,6 @@ import useUIKitTheme from '../../theme/useUIKitTheme';
|
|
|
11
11
|
import MessageContainer from './MessageContainer';
|
|
12
12
|
import type { OpenChannelMessageProps } from './index';
|
|
13
13
|
|
|
14
|
-
const iconMapper = { audio: 'file-audio', image: 'photo', video: 'play', file: 'file-document' } as const;
|
|
15
|
-
|
|
16
14
|
type Props = {};
|
|
17
15
|
const FileMessage = (props: OpenChannelMessageProps<SendbirdFileMessage, Props>) => {
|
|
18
16
|
const { colors } = useUIKitTheme();
|
|
@@ -40,7 +38,7 @@ const FileMessage = (props: OpenChannelMessageProps<SendbirdFileMessage, Props>)
|
|
|
40
38
|
alignItems={'flex-start'}
|
|
41
39
|
backgroundColor={colors.background}
|
|
42
40
|
>
|
|
43
|
-
<Icon
|
|
41
|
+
<Icon.File fileType={type} size={32} />
|
|
44
42
|
</Box>
|
|
45
43
|
<Text
|
|
46
44
|
body3
|
|
@@ -1,84 +1,41 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
|
|
3
3
|
import type { SendbirdFileMessage } from '@sendbird/uikit-utils';
|
|
4
4
|
import { getAvailableUriFromFileMessage } from '@sendbird/uikit-utils';
|
|
5
5
|
|
|
6
|
-
import Box from '../../components/Box';
|
|
7
|
-
import Icon from '../../components/Icon';
|
|
8
|
-
import ImageWithPlaceholder from '../../components/ImageWithPlaceholder';
|
|
9
6
|
import PressBox from '../../components/PressBox';
|
|
7
|
+
import { VideoThumbnail } from '../../components/VideoThumbnail';
|
|
10
8
|
import createStyleSheet from '../../styles/createStyleSheet';
|
|
11
|
-
import useUIKitTheme from '../../theme/useUIKitTheme';
|
|
12
9
|
import MessageContainer from './MessageContainer';
|
|
13
10
|
import type { OpenChannelMessageProps } from './index';
|
|
14
11
|
|
|
15
12
|
type Props = {
|
|
16
13
|
fetchThumbnailFromVideoSource: (uri: string) => Promise<{ path: string } | null>;
|
|
17
14
|
};
|
|
15
|
+
|
|
18
16
|
const VideoFileMessage = (props: OpenChannelMessageProps<SendbirdFileMessage, Props>) => {
|
|
19
|
-
const { colors, palette } = useUIKitTheme();
|
|
20
17
|
const { onPress, onLongPress, ...rest } = props;
|
|
21
18
|
const uri = getAvailableUriFromFileMessage(props.message);
|
|
22
|
-
const { thumbnail, loading } = useRetry(() => props.fetchThumbnailFromVideoSource(uri));
|
|
23
19
|
|
|
24
20
|
return (
|
|
25
21
|
<MessageContainer {...rest}>
|
|
26
22
|
<PressBox style={styles.container} activeOpacity={0.8} onPress={onPress} onLongPress={onLongPress}>
|
|
27
|
-
<
|
|
28
|
-
{
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
)}
|
|
33
|
-
|
|
34
|
-
{(loading || thumbnail !== null) && (
|
|
35
|
-
<Box style={styles.iconContainer} alignItems={'center'} justifyContent={'center'}>
|
|
36
|
-
<Icon
|
|
37
|
-
icon={'play'}
|
|
38
|
-
size={28}
|
|
39
|
-
color={palette.onBackgroundLight02}
|
|
40
|
-
containerStyle={[styles.playIcon, { backgroundColor: palette.onBackgroundDark01 }]}
|
|
41
|
-
/>
|
|
42
|
-
</Box>
|
|
43
|
-
)}
|
|
44
|
-
</Box>
|
|
23
|
+
<VideoThumbnail
|
|
24
|
+
style={styles.container}
|
|
25
|
+
videoSource={uri}
|
|
26
|
+
fetchThumbnailFromVideoSource={props.fetchThumbnailFromVideoSource}
|
|
27
|
+
/>
|
|
45
28
|
</PressBox>
|
|
46
29
|
</MessageContainer>
|
|
47
30
|
);
|
|
48
31
|
};
|
|
49
|
-
const useRetry = (fetch: () => Promise<{ path: string } | null>, retryCount = 5) => {
|
|
50
|
-
const [state, setState] = useState({ thumbnail: null as null | string, loading: true });
|
|
51
|
-
const retryCountRef = useRef(0);
|
|
52
|
-
const retryTimeoutRef = useRef<NodeJS.Timeout>();
|
|
53
|
-
const fetchThumbnail = useRef(fetch);
|
|
54
|
-
fetchThumbnail.current = fetch;
|
|
55
|
-
|
|
56
|
-
useEffect(() => {
|
|
57
|
-
if (!state.thumbnail) {
|
|
58
|
-
const reloadReservation = () => {
|
|
59
|
-
if (retryCountRef.current < retryCount) {
|
|
60
|
-
retryTimeoutRef.current = setTimeout(() => {
|
|
61
|
-
retryCountRef.current++;
|
|
62
|
-
reloadReservation();
|
|
63
|
-
fetchThumbnail.current().then((result) => {
|
|
64
|
-
setState({ loading: false, thumbnail: result?.path ?? null });
|
|
65
|
-
});
|
|
66
|
-
}, retryCountRef.current * 5000);
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
32
|
|
|
70
|
-
return reloadReservation();
|
|
71
|
-
} else {
|
|
72
|
-
return clearTimeout(retryTimeoutRef.current);
|
|
73
|
-
}
|
|
74
|
-
}, [state.thumbnail]);
|
|
75
|
-
|
|
76
|
-
return state;
|
|
77
|
-
};
|
|
78
33
|
const styles = createStyleSheet({
|
|
79
34
|
container: {
|
|
80
35
|
maxWidth: 296,
|
|
81
36
|
height: 196,
|
|
37
|
+
borderRadius: 8,
|
|
38
|
+
overflow: 'hidden',
|
|
82
39
|
},
|
|
83
40
|
iconContainer: {
|
|
84
41
|
position: 'absolute',
|
|
@@ -88,7 +88,7 @@ const OpenGraphUserMessage = (props: OpenChannelMessageProps<SendbirdUserMessage
|
|
|
88
88
|
</Text>
|
|
89
89
|
)}
|
|
90
90
|
|
|
91
|
-
{
|
|
91
|
+
{!!props.message.ogMetaData.defaultImage && (
|
|
92
92
|
<ImageWithPlaceholder
|
|
93
93
|
style={styles.ogImage}
|
|
94
94
|
source={{ uri: props.message.ogMetaData.defaultImage.url }}
|