@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.
Files changed (86) hide show
  1. package/lib/commonjs/components/Icon/index.js +12 -0
  2. package/lib/commonjs/components/Icon/index.js.map +1 -1
  3. package/lib/commonjs/components/VideoThumbnail/index.js +108 -0
  4. package/lib/commonjs/components/VideoThumbnail/index.js.map +1 -0
  5. package/lib/commonjs/index.js +7 -0
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/theme/DarkUIKitTheme.js +2 -1
  8. package/lib/commonjs/theme/DarkUIKitTheme.js.map +1 -1
  9. package/lib/commonjs/theme/LightUIKitTheme.js +2 -1
  10. package/lib/commonjs/theme/LightUIKitTheme.js.map +1 -1
  11. package/lib/commonjs/types.js.map +1 -1
  12. package/lib/commonjs/ui/BottomSheet/index.js +1 -0
  13. package/lib/commonjs/ui/BottomSheet/index.js.map +1 -1
  14. package/lib/commonjs/ui/Dialog/DialogSheet.js +4 -3
  15. package/lib/commonjs/ui/Dialog/DialogSheet.js.map +1 -1
  16. package/lib/commonjs/ui/GroupChannelMessage/Message.file.js +6 -9
  17. package/lib/commonjs/ui/GroupChannelMessage/Message.file.js.map +1 -1
  18. package/lib/commonjs/ui/GroupChannelMessage/Message.file.video.js +9 -71
  19. package/lib/commonjs/ui/GroupChannelMessage/Message.file.video.js.map +1 -1
  20. package/lib/commonjs/ui/GroupChannelMessage/MessageContainer.js +7 -5
  21. package/lib/commonjs/ui/GroupChannelMessage/MessageContainer.js.map +1 -1
  22. package/lib/commonjs/ui/GroupChannelMessage/MessageOpenGraph.js +2 -2
  23. package/lib/commonjs/ui/GroupChannelMessage/MessageOpenGraph.js.map +1 -1
  24. package/lib/commonjs/ui/GroupChannelMessage/index.js.map +1 -1
  25. package/lib/commonjs/ui/OpenChannelMessage/Message.file.js +2 -8
  26. package/lib/commonjs/ui/OpenChannelMessage/Message.file.js.map +1 -1
  27. package/lib/commonjs/ui/OpenChannelMessage/Message.file.video.js +10 -77
  28. package/lib/commonjs/ui/OpenChannelMessage/Message.file.video.js.map +1 -1
  29. package/lib/commonjs/ui/OpenChannelMessage/Message.user.og.js +1 -1
  30. package/lib/commonjs/ui/OpenChannelMessage/Message.user.og.js.map +1 -1
  31. package/lib/module/components/Icon/index.js +12 -0
  32. package/lib/module/components/Icon/index.js.map +1 -1
  33. package/lib/module/components/VideoThumbnail/index.js +98 -0
  34. package/lib/module/components/VideoThumbnail/index.js.map +1 -0
  35. package/lib/module/index.js +1 -0
  36. package/lib/module/index.js.map +1 -1
  37. package/lib/module/theme/DarkUIKitTheme.js +2 -1
  38. package/lib/module/theme/DarkUIKitTheme.js.map +1 -1
  39. package/lib/module/theme/LightUIKitTheme.js +2 -1
  40. package/lib/module/theme/LightUIKitTheme.js.map +1 -1
  41. package/lib/module/types.js.map +1 -1
  42. package/lib/module/ui/BottomSheet/index.js +1 -0
  43. package/lib/module/ui/BottomSheet/index.js.map +1 -1
  44. package/lib/module/ui/Dialog/DialogSheet.js +4 -3
  45. package/lib/module/ui/Dialog/DialogSheet.js.map +1 -1
  46. package/lib/module/ui/GroupChannelMessage/Message.file.js +7 -10
  47. package/lib/module/ui/GroupChannelMessage/Message.file.js.map +1 -1
  48. package/lib/module/ui/GroupChannelMessage/Message.file.video.js +9 -69
  49. package/lib/module/ui/GroupChannelMessage/Message.file.video.js.map +1 -1
  50. package/lib/module/ui/GroupChannelMessage/MessageContainer.js +7 -5
  51. package/lib/module/ui/GroupChannelMessage/MessageContainer.js.map +1 -1
  52. package/lib/module/ui/GroupChannelMessage/MessageOpenGraph.js +2 -2
  53. package/lib/module/ui/GroupChannelMessage/MessageOpenGraph.js.map +1 -1
  54. package/lib/module/ui/GroupChannelMessage/index.js.map +1 -1
  55. package/lib/module/ui/OpenChannelMessage/Message.file.js +2 -8
  56. package/lib/module/ui/OpenChannelMessage/Message.file.js.map +1 -1
  57. package/lib/module/ui/OpenChannelMessage/Message.file.video.js +10 -75
  58. package/lib/module/ui/OpenChannelMessage/Message.file.video.js.map +1 -1
  59. package/lib/module/ui/OpenChannelMessage/Message.user.og.js +1 -1
  60. package/lib/module/ui/OpenChannelMessage/Message.user.og.js.map +1 -1
  61. package/lib/typescript/src/components/Icon/index.d.ts +5 -0
  62. package/lib/typescript/src/components/VideoThumbnail/index.d.ts +11 -0
  63. package/lib/typescript/src/index.d.ts +1 -0
  64. package/lib/typescript/src/types.d.ts +1 -1
  65. package/lib/typescript/src/ui/BottomSheet/index.d.ts +1 -0
  66. package/lib/typescript/src/ui/Dialog/DialogSheet.d.ts +2 -1
  67. package/lib/typescript/src/ui/GroupChannelMessage/MessageContainer.d.ts +2 -2
  68. package/lib/typescript/src/ui/GroupChannelMessage/MessageOpenGraph.d.ts +1 -1
  69. package/lib/typescript/src/ui/GroupChannelMessage/index.d.ts +8 -0
  70. package/package.json +3 -3
  71. package/src/components/Icon/index.tsx +11 -7
  72. package/src/components/VideoThumbnail/index.tsx +100 -0
  73. package/src/index.ts +1 -0
  74. package/src/theme/DarkUIKitTheme.ts +1 -0
  75. package/src/theme/LightUIKitTheme.ts +1 -0
  76. package/src/types.ts +1 -1
  77. package/src/ui/BottomSheet/index.tsx +2 -0
  78. package/src/ui/Dialog/DialogSheet.tsx +6 -3
  79. package/src/ui/GroupChannelMessage/Message.file.tsx +4 -6
  80. package/src/ui/GroupChannelMessage/Message.file.video.tsx +10 -58
  81. package/src/ui/GroupChannelMessage/MessageContainer.tsx +18 -13
  82. package/src/ui/GroupChannelMessage/MessageOpenGraph.tsx +3 -3
  83. package/src/ui/GroupChannelMessage/index.ts +1 -0
  84. package/src/ui/OpenChannelMessage/Message.file.tsx +1 -3
  85. package/src/ui/OpenChannelMessage/Message.file.video.tsx +10 -53
  86. 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: Required<SendbirdUserMessage>['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
- {Boolean(ogMetaData.defaultImage) && (
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
- {Boolean(ogMetaData.description) && (
45
+ {!!ogMetaData.description && (
46
46
  <Text numberOfLines={1} caption2 color={colors.onBackground01} style={styles.ogDesc}>
47
47
  {ogMetaData.description}
48
48
  </Text>
@@ -25,6 +25,7 @@ export type GroupChannelMessageProps<T extends SendbirdMessage, AdditionalProps
25
25
 
26
26
  children?: React.ReactNode;
27
27
  sendingStatus?: React.ReactNode;
28
+ parentMessage?: React.ReactNode;
28
29
 
29
30
  groupedWithPrev: boolean;
30
31
  groupedWithNext: boolean;
@@ -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 icon={iconMapper[type]} size={32} />
41
+ <Icon.File fileType={type} size={32} />
44
42
  </Box>
45
43
  <Text
46
44
  body3
@@ -1,84 +1,41 @@
1
- import React, { useEffect, useRef, useState } from '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
- <Box borderRadius={8} overflow={'hidden'} style={styles.container}>
28
- {loading ? (
29
- <Box backgroundColor={colors.onBackground04} style={{ width: '100%', height: '100%' }} />
30
- ) : (
31
- <ImageWithPlaceholder source={{ uri: thumbnail ?? 'invalid-image' }} width={'100%'} height={'100%'} />
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
- {Boolean(props.message.ogMetaData.defaultImage) && (
91
+ {!!props.message.ogMetaData.defaultImage && (
92
92
  <ImageWithPlaceholder
93
93
  style={styles.ogImage}
94
94
  source={{ uri: props.message.ogMetaData.defaultImage.url }}