Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(UIKIT-4280): voice message #137

Merged
merged 81 commits into from
Nov 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
b136de4
feat: implement cli player service
bang9 Aug 21, 2023
1b1055c
chore: update player state
bang9 Aug 22, 2023
e05cf93
feat: implement cli recorder service
bang9 Aug 22, 2023
a7c4a66
chore: update recorder
bang9 Aug 23, 2023
c6b8329
test: add recorder, player service to send your first message
bang9 Aug 23, 2023
8b5c33a
chore: apply review, add resume to player
bang9 Aug 24, 2023
366d6af
feat(foundation): add audio icon
bang9 Aug 23, 2023
dd603e7
chore: extract message to reply preview as component, add voice messa…
bang9 Aug 23, 2023
85d7d58
feat(foundation): update icons
bang9 Aug 23, 2023
0b7fd40
feat: add createRecordFilePath method to FileServiceInterface
bang9 Aug 24, 2023
9e6bc75
feat: implement voice message input
bang9 Aug 24, 2023
be206f1
chore: cleaning structure
bang9 Aug 24, 2023
bef08ae
chore: update background color of voice message input
bang9 Aug 24, 2023
3b3be49
chore: create an animation only once
bang9 Aug 24, 2023
43498c5
chore: fix for android
bang9 Aug 24, 2023
74fd1a6
chore: reset on stop below minimum duration
bang9 Aug 24, 2023
19e6ebe
chore: add workaround trick for android
bang9 Aug 24, 2023
60d10e0
chore: addPlaybackListener moved to playPlayer
bang9 Aug 24, 2023
f3d540c
chore: apply review
bang9 Aug 25, 2023
806e714
chore: apply review
bang9 Aug 25, 2023
63e92b4
chore: apply review
bang9 Aug 25, 2023
d5ba580
chore: apply review
bang9 Aug 25, 2023
596e8e2
chore: apply review
bang9 Aug 25, 2023
d9844cd
chore: apply review
bang9 Aug 29, 2023
c0b12f4
chore: apply review
bang9 Aug 29, 2023
9edb266
chore: renaming
bang9 Aug 28, 2023
47852cf
chore: update createMockChannel
bang9 Aug 28, 2023
af6a2fb
feat(foundation): add progress bar component
bang9 Aug 29, 2023
1b8576a
fix(foundation): fixed to use color variant in unknown group channel …
bang9 Aug 29, 2023
474a35e
chore: add voice message string
bang9 Aug 29, 2023
7726c2f
chore: add case for voice message
bang9 Aug 29, 2023
82f4481
chore: add state listener to player service
bang9 Aug 29, 2023
9f99f04
chore: stop player before start recording
bang9 Aug 29, 2023
f6d90db
feat(foundation): implement voice file message component
bang9 Aug 29, 2023
337d022
feat: implement voice message logic
bang9 Aug 29, 2023
aaaf40b
chore: add preview text and icon of voice message
bang9 Aug 29, 2023
e0aa3ad
chore: rename color part
bang9 Aug 29, 2023
da968e9
chore: hide download button if a voice message
bang9 Aug 29, 2023
c30a87b
chore: do not stop animation if a percent is NaN
bang9 Aug 29, 2023
1d6a8e2
chore: add voice message input string set
bang9 Aug 29, 2023
b94d230
feat(foundation): add voice message input color set
bang9 Aug 29, 2023
5fc7546
chore: prevent progress flickering with seek
bang9 Aug 29, 2023
f77eeac
chore: track should not affect bar size
bang9 Aug 30, 2023
a8a87eb
chore: react-native-audio-recorder-player patch for sample
bang9 Aug 30, 2023
7003955
chore: avoid negative value
bang9 Aug 31, 2023
9e9c2e1
feat: add string set for microphone permission
bang9 Sep 4, 2023
0c8d1f5
feat: add string set for muted and frozen when sending a voice message
bang9 Sep 4, 2023
a2a0680
chore: remove satisfies due to metro backward
bang9 Sep 5, 2023
851ec0e
feat: implement recorder and player service for expo
bang9 Aug 30, 2023
415627f
chore: export expo platform service utils
bang9 Sep 5, 2023
1cbba1d
chore: fix expoPermissionGranted param
bang9 Sep 5, 2023
a4e24e6
chore: minor fix
bang9 Sep 5, 2023
7778d67
feat: add yalc for local deployment
bang9 Sep 5, 2023
7ff19e4
chore: fix typo
bang9 Sep 6, 2023
6f4386d
chore: add enableVoiceMessage uikit config
bang9 Sep 6, 2023
62ef277
fix: await onClose for voice message input before displaying permissi…
bang9 Sep 8, 2023
e8e43ec
fix: reset player and recorder if input closed with back button press
bang9 Sep 8, 2023
49a04c6
chore: add record_audio permission to android sample
bang9 Sep 7, 2023
6f5de2c
feat: add voice message config to uikit container
bang9 Sep 7, 2023
d4824d7
chore: patch android permission range in react-native-audio-recorder-…
bang9 Sep 8, 2023
477c68c
test: update introduction/NativeModules
bang9 Sep 8, 2023
a9ac377
chore: update testing-tools script to generate docs
bang9 Sep 8, 2023
693dc45
qa(UIKIT-4420): request permissions when press the voice message button
bang9 Sep 11, 2023
2dbf5ae
qa(UIKIT-4421): recording indicator should blink every 1 second
bang9 Sep 11, 2023
af37bc6
qa(UIKIT-4424): should use the remaining time to playback user interface
bang9 Sep 11, 2023
2042eee
qa(UIKIT-4422, UIKIT-4425): should reset current time when stopped pl…
bang9 Sep 11, 2023
812846e
qa(UIKIT-4428): when frozen, do not clear messageToReply if my role i…
bang9 Sep 11, 2023
e9d545c
qa(UIKIT-4427): reset the player if a playing message unmounts
bang9 Sep 11, 2023
e38512a
fix(CLNP-983): display a message unavailable text if the message is n…
bang9 Sep 12, 2023
b025f7f
fix(CLNP-983): search for messages from an accessible range
bang9 Sep 12, 2023
0cb4762
qa(UIKIT-4436): modal orientation trick should be applied when enable…
bang9 Sep 12, 2023
1e539bb
fix(UIKIT-4452): uikit configuration should always be initialized
bang9 Sep 12, 2023
f13d7e4
qa(UIKIT-4429): avoid frame drop in native player service
bang9 Sep 12, 2023
790ea08
chore: reset current time from playback listener
bang9 Sep 15, 2023
5ede803
chore: onToggleVoiceMessage should only operate when the sending stat…
bang9 Sep 15, 2023
f4ce3c8
chore: run adb reverse for all connected devices
bang9 Sep 15, 2023
13b57e6
chore: update minimum audio-recorder module version
bang9 Sep 18, 2023
4de31b1
docs(uikit): update native modules section
bang9 Sep 18, 2023
bcdae23
chore: use Object.assign instead of direct assign
bang9 Oct 11, 2023
ce2de06
docs: update uikit url path
bang9 Oct 20, 2023
e1e069b
chore: fix type errors
bang9 Nov 3, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ Sendbird UIKit for React-Native is a development kit with an user interface that
This mono-repository the UIKit source code is consists as explained below.

- [**packages/uikit-react-native**](/packages/uikit-react-native) is where you can find the open source code. Check out [UIKit Open Source Guidelines](/OPENSOURCE_GUIDELINES.md) for more information regarding our stance on open source.
- [**sample**](/sample) is a chat app with UIKit’s core features in which you can see items such as push notifications, total unread message count and auto sign-in are demonstrated. When you sign in to the sample app, you will only see a list of channels rendered by the [GroupChannelListFragment](https://sendbird.com/docs/uikit/v3/react-native/key-functions/list-channels) on the screen.
- [**sample**](/sample) is a chat app with UIKit’s core features in which you can see items such as push notifications, total unread message count and auto sign-in are demonstrated. When you sign in to the sample app, you will only see a list of channels rendered by the [GroupChannelListFragment](https://sendbird.com/docs/chat/uikit/v3/react-native/key-functions/list-channels) on the screen.
- [**packages/uikit-react-native-foundation**](/packages/uikit-react-native-foundation) is a UI package for `uikit-react-native`.
- [**packages/uikit-chat-hooks**](/packages/uikit-chat-hooks) is a react hooks package for `uikit-react-native`.
- [**packages/uikit-utils**](/packages/uikit-utils) is a utility package for `uikit-react-native`.

### More about Sendbird UIKit for React-Native

Find out more about Sendbird UIKit for React-Native at [UIKit for React Native doc](https://sendbird.com/docs/uikit/v3/react-native/overview).
Find out more about Sendbird UIKit for React-Native at [UIKit for React Native doc](https://sendbird.com/docs/chat/uikit/v3/react-native/overview).
If you need any help in resolving any issues or have questions, visit [our community](https://community.sendbird.com).

<br/>
Expand Down
12 changes: 6 additions & 6 deletions docs-validation/1_introduction/Authentication.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const PROFILE_FILE: FileType = { name: '', size: 0, type: '', uri: '' };

/**
* Connect to the Sendbird server
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/authentication#2-connect-to-the-sendbird-server}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/authentication#2-connect-to-the-sendbird-server}
* */
import { useConnection } from '@sendbird/uikit-react-native';

Expand All @@ -27,7 +27,7 @@ const Component = () => {

/**
* Disconnect from the Sendbird server
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/authentication#2-disconnect-from-the-sendbird-server}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/authentication#2-disconnect-from-the-sendbird-server}
* */
const Component2 = () => {
const { disconnect } = useConnection();
Expand All @@ -37,7 +37,7 @@ const Component2 = () => {

/**
* Retrieve online status of current user
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/authentication#2-retrieve-online-status-of-current-user}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/authentication#2-retrieve-online-status-of-current-user}
* */
import { useSendbirdChat } from '@sendbird/uikit-react-native';

Expand All @@ -54,7 +54,7 @@ const Component3 = () => {

/**
* Register for push notifications
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/authentication#2-register-for-push-notifications}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/authentication#2-register-for-push-notifications}
* */
import RNFBMessaging from '@react-native-firebase/messaging';
import * as Permissions from 'react-native-permissions';
Expand All @@ -77,7 +77,7 @@ const App = () => {

/**
* Unregister push notifications
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/authentication#2-unregister-push-notifications}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/authentication#2-unregister-push-notifications}
* */
const App2 = () => {
return (
Expand All @@ -92,7 +92,7 @@ const App2 = () => {

/**
* Update user profile
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/authentication#2-update-user-profile}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/authentication#2-update-user-profile}
* */
const Component4 = () => {
const { updateCurrentUserInfo } = useSendbirdChat();
Expand Down
89 changes: 56 additions & 33 deletions docs-validation/1_introduction/NativeModules.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,19 @@ import {
createExpoFileService,
createExpoMediaService,
createExpoNotificationService,
createExpoPlayerService,
createExpoRecorderService,
createNativeClipboardService,
createNativeFileService,
createNativeMediaService,
createNativeNotificationService,
createNativePlayerService,
createNativeRecorderService,
} from '@sendbird/uikit-react-native';

/**
* Helper functions#React Native CLI
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/native-modules#2-helper-functions-3-react-native-cli}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/native-modules#2-helper-functions-3-react-native-cli}
* */
import Clipboard from '@react-native-clipboard/clipboard';
import { CameraRoll } from '@react-native-camera-roll/camera-roll';
Expand All @@ -23,29 +27,40 @@ import * as ImagePicker from 'react-native-image-picker';
import * as Permissions from 'react-native-permissions';
import * as CreateThumbnail from 'react-native-create-thumbnail';
import * as ImageResizer from '@bam.tech/react-native-image-resizer';
import * as AudioRecorderPlayer from 'react-native-audio-recorder-player';

const NativeClipboardService = createNativeClipboardService(Clipboard);
const NativeNotificationService = createNativeNotificationService({
messagingModule: RNFBMessaging,
permissionModule: Permissions,
});
const NativeFileService = createNativeFileService({
fsModule: FileAccess,
permissionModule: Permissions,
imagePickerModule: ImagePicker,
mediaLibraryModule: CameraRoll,
documentPickerModule: DocumentPicker,
});
const NativeMediaService = createNativeMediaService({
VideoComponent: Video,
thumbnailModule: CreateThumbnail,
imageResizerModule: ImageResizer,
});
const nativePlatformServices = {
clipboard: createNativeClipboardService(Clipboard),
notification: createNativeNotificationService({
messagingModule: RNFBMessaging,
permissionModule: Permissions,
}),
file: createNativeFileService({
imagePickerModule: ImagePicker,
documentPickerModule: DocumentPicker,
permissionModule: Permissions,
fsModule: FileAccess,
mediaLibraryModule: CameraRoll,
}),
media: createNativeMediaService({
VideoComponent: Video,
thumbnailModule: CreateThumbnail,
imageResizerModule: ImageResizer,
}),
player: createNativePlayerService({
audioRecorderModule: AudioRecorderPlayer,
permissionModule: Permissions,
}),
recorder: createNativeRecorderService({
audioRecorderModule: AudioRecorderPlayer,
permissionModule: Permissions,
}),
};
/** ------------------ **/

/**
* Helper functions#Expo CLI
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/native-modules#2-helper-functions-3-expo-cli}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/native-modules#2-helper-functions-3-expo-cli}
* */
import * as ExpoClipboard from 'expo-clipboard';
import * as ExpoDocumentPicker from 'expo-document-picker';
Expand All @@ -57,18 +72,26 @@ import * as ExpoAV from 'expo-av';
import * as ExpoVideoThumbnail from 'expo-video-thumbnails';
import * as ExpoImageManipulator from 'expo-image-manipulator';

const ExpoNotificationService = createExpoNotificationService(ExpoNotifications);
const ExpoClipboardService = createExpoClipboardService(ExpoClipboard);
const ExpoFileService = createExpoFileService({
fsModule: ExpoFS,
imagePickerModule: ExpoImagePicker,
mediaLibraryModule: ExpoMediaLibrary,
documentPickerModule: ExpoDocumentPicker,
});
const ExpoMediaService = createExpoMediaService({
avModule: ExpoAV,
thumbnailModule: ExpoVideoThumbnail,
imageManipulator: ExpoImageManipulator,
fsModule: ExpoFS,
})
const expoPlatformServices = {
clipboard: createExpoClipboardService(ExpoClipboard),
notification: createExpoNotificationService(ExpoNotifications),
file: createExpoFileService({
fsModule: ExpoFS,
imagePickerModule: ExpoImagePicker,
mediaLibraryModule: ExpoMediaLibrary,
documentPickerModule: ExpoDocumentPicker,
}),
media: createExpoMediaService({
avModule: ExpoAV,
thumbnailModule: ExpoVideoThumbnail,
imageManipulator: ExpoImageManipulator,
fsModule: ExpoFS,
}),
player: createExpoPlayerService({
avModule: ExpoAV,
}),
recorder: createExpoRecorderService({
avModule: ExpoAV,
}),
};
/** ------------------ **/
4 changes: 2 additions & 2 deletions docs-validation/1_introduction/ScreenNavigation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const GroupChannelScreen = () => <React.Fragment />;

/**
* Set up navigation in a fragment
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/screen-navigation#2-set-up-navigation-in-a-fragment}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/screen-navigation#2-set-up-navigation-in-a-fragment}
* */
// @ts-ignore
import { Navigation } from 'react-native-navigation';
Expand Down Expand Up @@ -34,7 +34,7 @@ const GroupChannelListScreen = (props: { componentId: string }) => {

/**
* Integrate navigation library
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/screen-navigation#2-integrate-navigation-library}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/screen-navigation#2-integrate-navigation-library}
* */
Navigation.registerComponent('GroupChannel', () => GroupChannelScreen);
Navigation.registerComponent('GroupChannelList', () => GroupChannelListScreen);
Expand Down
77 changes: 41 additions & 36 deletions docs-validation/1_introduction/SendYourFirstMessage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@ import React from 'react';

/**
* Implement platform service interfaces using native modules
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/send-first-message#2-get-started-3-step-4-implement-platform-service-interfaces-using-native-modules}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/send-first-message#2-get-started-3-step-4-implement-platform-service-interfaces-using-native-modules}
* */
import {
createNativeClipboardService,
createNativeFileService,
createNativeMediaService,
createNativeNotificationService,
} from '@sendbird/uikit-react-native';
createNativePlayerService,
createNativeRecorderService,
SendbirdUIKitContainerProps
} from "@sendbird/uikit-react-native";

import Clipboard from '@react-native-clipboard/clipboard';
import { CameraRoll } from '@react-native-camera-roll/camera-roll';
Expand All @@ -21,29 +24,41 @@ import * as ImagePicker from 'react-native-image-picker';
import * as Permissions from 'react-native-permissions';
import * as CreateThumbnail from 'react-native-create-thumbnail';
import * as ImageResizer from '@bam.tech/react-native-image-resizer';

const ClipboardService = createNativeClipboardService(Clipboard);
const NotificationService = createNativeNotificationService({
messagingModule: RNFBMessaging,
permissionModule: Permissions,
});
const FileService = createNativeFileService({
fsModule: FileAccess,
permissionModule: Permissions,
imagePickerModule: ImagePicker,
mediaLibraryModule: CameraRoll,
documentPickerModule: DocumentPicker,
});
const MediaService = createNativeMediaService({
VideoComponent: Video,
thumbnailModule: CreateThumbnail,
imageResizerModule: ImageResizer,
});
import * as AudioRecorderPlayer from 'react-native-audio-recorder-player';


export const platformServices: SendbirdUIKitContainerProps['platformServices'] = {
clipboard: createNativeClipboardService(Clipboard),
notification: createNativeNotificationService({
messagingModule: RNFBMessaging,
permissionModule: Permissions,
}),
file: createNativeFileService({
imagePickerModule: ImagePicker,
documentPickerModule: DocumentPicker,
permissionModule: Permissions,
fsModule: FileAccess,
mediaLibraryModule: CameraRoll,
}),
media: createNativeMediaService({
VideoComponent: Video,
thumbnailModule: CreateThumbnail,
imageResizerModule: ImageResizer,
}),
player: createNativePlayerService({
audioRecorderModule: AudioRecorderPlayer,
permissionModule: Permissions,
}),
recorder: createNativeRecorderService({
audioRecorderModule: AudioRecorderPlayer,
permissionModule: Permissions,
}),
};
/** ------------------ **/

/**
* Wrap your app in SendbirdUIKitContainer
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/send-first-message#2-get-started-3-step-5-wrap-your-app-in-sendbirduikitcontainer}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/send-first-message#2-get-started-3-step-5-wrap-your-app-in-sendbirduikitcontainer}
* */
import { SendbirdUIKitContainer } from '@sendbird/uikit-react-native';
import AsyncStorage from '@react-native-async-storage/async-storage';
Expand All @@ -53,12 +68,7 @@ const App = () => {
<SendbirdUIKitContainer
appId={'APP_ID'}
chatOptions={{ localCacheStorage: AsyncStorage }}
platformServices={{
file: FileService,
notification: NotificationService,
clipboard: ClipboardService,
media: MediaService,
}}
platformServices={platformServices}
>
{/* Rest of your app */}
</SendbirdUIKitContainer>
Expand All @@ -68,7 +78,7 @@ const App = () => {

/**
* Create a fragment and module components
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/send-first-message#2-get-started-3-step-7-create-a-fragment-and-module-components}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/send-first-message#2-get-started-3-step-7-create-a-fragment-and-module-components}
* */
import { useNavigation, useRoute } from '@react-navigation/native';
import { useGroupChannel } from '@sendbird/uikit-chat-hooks';
Expand Down Expand Up @@ -146,7 +156,7 @@ const GroupChannelScreen = () => {

/**
* Register navigation library to the screen
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/send-first-message#2-get-started-3-step-8-register-navigation-library-to-the-screen}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/send-first-message#2-get-started-3-step-8-register-navigation-library-to-the-screen}
* */
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
Expand Down Expand Up @@ -177,12 +187,7 @@ const App2 = () => {
<SendbirdUIKitContainer
appId={'APP_ID'}
chatOptions={{ localCacheStorage: AsyncStorage }}
platformServices={{
file: FileService,
notification: NotificationService,
clipboard: ClipboardService,
media: MediaService,
}}
platformServices={platformServices}
>
<Navigation />
</SendbirdUIKitContainer>
Expand All @@ -192,7 +197,7 @@ const App2 = () => {

/**
* Connect to the Sendbird server
* {@link https://sendbird.com/docs/uikit/v3/react-native/introduction/send-first-message#2-get-started-3-step-9-connect-to-the-sendbird-server}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/introduction/send-first-message#2-get-started-3-step-9-connect-to-the-sendbird-server}
* */
import { Pressable, Text, View } from 'react-native';
import { useConnection } from '@sendbird/uikit-react-native';
Expand Down
4 changes: 2 additions & 2 deletions docs-validation/2_features/DeliveryReceipt.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* How to use
* {@link https://sendbird.com/docs/uikit/v3/react-native/features/delivery-receipt#2-how-to-use}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/features/delivery-receipt#2-how-to-use}
* */
import { SendbirdUIKitContainer } from '@sendbird/uikit-react-native';

Expand All @@ -12,7 +12,7 @@ const App = () => {

/**
* Icon resource
* {@link https://sendbird.com/docs/uikit/v3/react-native/features/delivery-receipt#2-customize-the-ui-for-delivery-receipt-3-icon-resource}
* {@link https://sendbird.com/docs/chat/uikit/v3/react-native/features/delivery-receipt#2-customize-the-ui-for-delivery-receipt-3-icon-resource}
* */
import { Icon } from '@sendbird/uikit-react-native-foundation';

Expand Down
Loading