@sendbird/uikit-react-native 3.3.0 → 3.4.1
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/ChannelInput/index.js.map +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
- package/lib/commonjs/components/FileViewer/FileViewerContent.js +140 -0
- package/lib/commonjs/components/FileViewer/FileViewerContent.js.map +1 -0
- package/lib/commonjs/components/FileViewer/FileViewerFooter.js +82 -0
- package/lib/commonjs/components/FileViewer/FileViewerFooter.js.map +1 -0
- package/lib/commonjs/components/FileViewer/FileViewerHeader.js +93 -0
- package/lib/commonjs/components/FileViewer/FileViewerHeader.js.map +1 -0
- package/lib/commonjs/components/FileViewer/index.js +133 -0
- package/lib/commonjs/components/FileViewer/index.js.map +1 -0
- package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +10 -9
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelBannedUsers/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelList/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelModeration/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelMutedMembers/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelNotifications/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelOperators/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelSettings/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelUserList/types.js.map +1 -1
- package/lib/commonjs/domain/messageSearch/component/MessageSearchHeader.js +4 -1
- package/lib/commonjs/domain/messageSearch/component/MessageSearchHeader.js.map +1 -1
- package/lib/commonjs/domain/messageSearch/types.js.map +1 -1
- package/lib/commonjs/domain/openChannel/types.js.map +1 -1
- package/lib/commonjs/domain/openChannelBannedUsers/types.js.map +1 -1
- package/lib/commonjs/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js +4 -2
- package/lib/commonjs/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js.map +1 -1
- package/lib/commonjs/domain/openChannelCreate/types.js.map +1 -1
- package/lib/commonjs/domain/openChannelList/types.js.map +1 -1
- package/lib/commonjs/domain/openChannelModeration/types.js.map +1 -1
- package/lib/commonjs/domain/openChannelMutedParticipants/types.js.map +1 -1
- package/lib/commonjs/domain/openChannelOperators/types.js.map +1 -1
- package/lib/commonjs/domain/openChannelSettings/types.js.map +1 -1
- package/lib/commonjs/domain/openChannelUserList/types.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelFragment.js +32 -16
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelListFragment.js +25 -11
- package/lib/commonjs/fragments/createGroupChannelListFragment.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelInput/index.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js.map +1 -1
- package/lib/module/components/FileViewer/FileViewerContent.js +130 -0
- package/lib/module/components/FileViewer/FileViewerContent.js.map +1 -0
- package/lib/module/components/FileViewer/FileViewerFooter.js +74 -0
- package/lib/module/components/FileViewer/FileViewerFooter.js.map +1 -0
- package/lib/module/components/FileViewer/FileViewerHeader.js +85 -0
- package/lib/module/components/FileViewer/FileViewerHeader.js.map +1 -0
- package/lib/module/components/FileViewer/index.js +123 -0
- package/lib/module/components/FileViewer/index.js.map +1 -0
- package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +10 -9
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/domain/groupChannel/types.js.map +1 -1
- package/lib/module/domain/groupChannelBannedUsers/types.js.map +1 -1
- package/lib/module/domain/groupChannelList/types.js.map +1 -1
- package/lib/module/domain/groupChannelModeration/types.js.map +1 -1
- package/lib/module/domain/groupChannelMutedMembers/types.js.map +1 -1
- package/lib/module/domain/groupChannelNotifications/types.js.map +1 -1
- package/lib/module/domain/groupChannelOperators/types.js.map +1 -1
- package/lib/module/domain/groupChannelSettings/types.js.map +1 -1
- package/lib/module/domain/groupChannelUserList/types.js.map +1 -1
- package/lib/module/domain/messageSearch/component/MessageSearchHeader.js +4 -1
- package/lib/module/domain/messageSearch/component/MessageSearchHeader.js.map +1 -1
- package/lib/module/domain/messageSearch/types.js.map +1 -1
- package/lib/module/domain/openChannel/types.js.map +1 -1
- package/lib/module/domain/openChannelBannedUsers/types.js.map +1 -1
- package/lib/module/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js +4 -2
- package/lib/module/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js.map +1 -1
- package/lib/module/domain/openChannelCreate/types.js.map +1 -1
- package/lib/module/domain/openChannelList/types.js.map +1 -1
- package/lib/module/domain/openChannelModeration/types.js.map +1 -1
- package/lib/module/domain/openChannelMutedParticipants/types.js.map +1 -1
- package/lib/module/domain/openChannelOperators/types.js.map +1 -1
- package/lib/module/domain/openChannelSettings/types.js.map +1 -1
- package/lib/module/domain/openChannelUserList/types.js.map +1 -1
- package/lib/module/fragments/createGroupChannelFragment.js +33 -17
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/fragments/createGroupChannelListFragment.js +26 -12
- package/lib/module/fragments/createGroupChannelListFragment.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/components/ChannelInput/index.d.ts +2 -2
- package/lib/typescript/src/components/ChannelMessageList/index.d.ts +5 -6
- package/lib/typescript/src/components/FileViewer/FileViewerContent.d.ts +13 -0
- package/lib/typescript/src/components/FileViewer/FileViewerFooter.d.ts +9 -0
- package/lib/typescript/src/components/FileViewer/FileViewerHeader.d.ts +10 -0
- package/lib/typescript/src/components/{FileViewer.d.ts → FileViewer/index.d.ts} +5 -1
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +2 -2
- package/lib/typescript/src/domain/groupChannel/types.d.ts +15 -4
- package/lib/typescript/src/domain/groupChannelBannedUsers/types.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannelList/types.d.ts +13 -2
- package/lib/typescript/src/domain/groupChannelModeration/types.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannelMutedMembers/types.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannelNotifications/types.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannelOperators/types.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannelSettings/types.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannelUserList/types.d.ts +3 -2
- package/lib/typescript/src/domain/messageSearch/types.d.ts +1 -1
- package/lib/typescript/src/domain/openChannel/types.d.ts +1 -1
- package/lib/typescript/src/domain/openChannelBannedUsers/types.d.ts +1 -1
- package/lib/typescript/src/domain/openChannelCreate/types.d.ts +1 -1
- package/lib/typescript/src/domain/openChannelList/types.d.ts +1 -1
- package/lib/typescript/src/domain/openChannelModeration/types.d.ts +1 -1
- package/lib/typescript/src/domain/openChannelMutedParticipants/types.d.ts +1 -1
- package/lib/typescript/src/domain/openChannelOperators/types.d.ts +1 -1
- package/lib/typescript/src/domain/openChannelSettings/types.d.ts +1 -1
- package/lib/typescript/src/domain/openChannelUserList/types.d.ts +3 -3
- package/lib/typescript/src/types.d.ts +4 -4
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +8 -7
- package/src/components/ChannelInput/index.tsx +2 -2
- package/src/components/ChannelMessageList/index.tsx +5 -11
- package/src/components/FileViewer/FileViewerContent.tsx +141 -0
- package/src/components/FileViewer/FileViewerFooter.tsx +73 -0
- package/src/components/FileViewer/FileViewerHeader.tsx +86 -0
- package/src/components/FileViewer/index.tsx +139 -0
- package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +3 -2
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +7 -6
- package/src/domain/groupChannel/types.ts +16 -4
- package/src/domain/groupChannelBannedUsers/types.ts +1 -1
- package/src/domain/groupChannelList/types.ts +13 -2
- package/src/domain/groupChannelModeration/types.ts +1 -1
- package/src/domain/groupChannelMutedMembers/types.ts +1 -1
- package/src/domain/groupChannelNotifications/types.ts +1 -1
- package/src/domain/groupChannelOperators/types.ts +1 -1
- package/src/domain/groupChannelSettings/types.ts +1 -1
- package/src/domain/groupChannelUserList/types.ts +2 -2
- package/src/domain/messageSearch/component/MessageSearchHeader.tsx +4 -1
- package/src/domain/messageSearch/types.ts +1 -1
- package/src/domain/openChannel/types.ts +1 -1
- package/src/domain/openChannelBannedUsers/types.ts +1 -1
- package/src/domain/openChannelCreate/component/OpenChannelCreateProfileInput.tsx +4 -2
- package/src/domain/openChannelCreate/types.ts +1 -1
- package/src/domain/openChannelList/types.ts +1 -1
- package/src/domain/openChannelModeration/types.ts +1 -1
- package/src/domain/openChannelMutedParticipants/types.ts +1 -1
- package/src/domain/openChannelOperators/types.ts +1 -1
- package/src/domain/openChannelSettings/types.ts +1 -1
- package/src/domain/openChannelUserList/types.ts +4 -3
- package/src/fragments/createGroupChannelFragment.tsx +35 -17
- package/src/fragments/createGroupChannelListFragment.tsx +27 -9
- package/src/types.ts +2 -2
- package/src/version.ts +1 -1
- package/lib/commonjs/components/FileViewer.js +0 -300
- package/lib/commonjs/components/FileViewer.js.map +0 -1
- package/lib/module/components/FileViewer.js +0 -291
- package/lib/module/components/FileViewer.js.map +0 -1
- package/src/components/FileViewer.tsx +0 -288
|
@@ -8,6 +8,10 @@ type Props = {
|
|
|
8
8
|
onPressDelete?: (message: SendbirdFileMessage) => void;
|
|
9
9
|
headerShown?: boolean;
|
|
10
10
|
headerTopInset?: number;
|
|
11
|
+
/** This prop is only available on the Image viewer */
|
|
12
|
+
minZoom?: number;
|
|
13
|
+
/** This prop is only available on the Image viewer */
|
|
14
|
+
maxZoom?: number;
|
|
11
15
|
};
|
|
12
|
-
declare const FileViewer: ({ headerShown,
|
|
16
|
+
declare const FileViewer: ({ headerShown, maxZoom, minZoom, headerTopInset, fileMessage, onClose, onPressDownload, onPressDelete, deleteMessage, }: Props) => React.JSX.Element;
|
|
13
17
|
export default FileViewer;
|
|
@@ -13,7 +13,7 @@ import type { StringSet } from '../localization/StringSet.type';
|
|
|
13
13
|
import type { ClipboardServiceInterface, FileServiceInterface, MediaServiceInterface, NotificationServiceInterface, PlayerServiceInterface, RecorderServiceInterface } from '../platform/types';
|
|
14
14
|
import type { ErrorBoundaryProps, LocalCacheStorage } from '../types';
|
|
15
15
|
export declare const SendbirdUIKit: Readonly<{
|
|
16
|
-
VERSION: "3.
|
|
16
|
+
VERSION: "3.4.1";
|
|
17
17
|
PLATFORM: string;
|
|
18
18
|
DEFAULT: {
|
|
19
19
|
AUTO_PUSH_TOKEN_REGISTRATION: boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
declare const _default: React.MemoExoticComponent<(props: Pick<import("../../../components/ChannelMessageList").ChannelMessageListProps<import("@sendbird/chat/groupChannel").GroupChannel>, "channel" | "onTopReached" | "onBottomReached" | "onScrolledAwayFromBottom" | "currentUserId" | "enableMessageGrouping" | "searchItem" | "hasNext" | "onDeleteMessage" | "onResendFailedMessage" | "onPressMediaMessage" | "renderNewMessagesButton" | "renderScrollToBottomButton" | "renderMessage" | "messages" | "newMessages" | "scrolledAwayFromBottom" | "flatListProps"> & {
|
|
3
|
-
onResetMessageList: (
|
|
4
|
-
onResetMessageListWithStartingPoint: (startingPoint: number
|
|
3
|
+
onResetMessageList: () => Promise<void>;
|
|
4
|
+
onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;
|
|
5
5
|
onUpdateSearchItem: (searchItem?: {
|
|
6
6
|
startingPoint: number;
|
|
7
7
|
} | undefined) => void;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
2
|
import type { FlatList } from 'react-native';
|
|
3
|
+
import type { MessageCollectionParams, MessageFilterParams } from '@sendbird/chat/groupChannel';
|
|
3
4
|
import type { UseGroupChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';
|
|
4
5
|
import type { OnBeforeHandler, SendbirdFileMessage, SendbirdFileMessageCreateParams, SendbirdFileMessageUpdateParams, SendbirdGroupChannel, SendbirdMessage, SendbirdUser, SendbirdUserMessage, SendbirdUserMessageCreateParams, SendbirdUserMessageUpdateParams } from '@sendbird/uikit-utils';
|
|
5
6
|
import type { ChannelInputProps, SuggestedMentionListProps } from '../../components/ChannelInput';
|
|
6
7
|
import type { ChannelMessageListProps } from '../../components/ChannelMessageList';
|
|
7
8
|
import type { CommonComponent } from '../../types';
|
|
8
9
|
import type { PubSub } from '../../utils/pubsub';
|
|
10
|
+
export type MessageListQueryParamsType = Omit<MessageCollectionParams, 'filter'> & MessageFilterParams;
|
|
9
11
|
export interface GroupChannelProps {
|
|
10
12
|
Fragment: {
|
|
11
13
|
channel: SendbirdGroupChannel;
|
|
@@ -25,8 +27,17 @@ export interface GroupChannelProps {
|
|
|
25
27
|
keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];
|
|
26
28
|
flatListProps?: GroupChannelProps['MessageList']['flatListProps'];
|
|
27
29
|
sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];
|
|
28
|
-
collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];
|
|
29
30
|
searchItem?: GroupChannelProps['MessageList']['searchItem'];
|
|
31
|
+
/**
|
|
32
|
+
* @description You can specify the query parameters for the message list.
|
|
33
|
+
* @example
|
|
34
|
+
* ```
|
|
35
|
+
* <GroupChannelFragment messageListQueryParams={{ prevResultLimit: 20, customTypesFilter: ['filter'] }} />
|
|
36
|
+
* ```
|
|
37
|
+
* */
|
|
38
|
+
messageListQueryParams?: MessageListQueryParamsType;
|
|
39
|
+
/** @deprecated Please use `messageListQueryParams` instead */
|
|
40
|
+
collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];
|
|
30
41
|
};
|
|
31
42
|
Header: {
|
|
32
43
|
shouldHideRight: () => boolean;
|
|
@@ -34,8 +45,8 @@ export interface GroupChannelProps {
|
|
|
34
45
|
onPressHeaderRight: () => void;
|
|
35
46
|
};
|
|
36
47
|
MessageList: Pick<ChannelMessageListProps<SendbirdGroupChannel>, 'enableMessageGrouping' | 'currentUserId' | 'channel' | 'messages' | 'newMessages' | 'scrolledAwayFromBottom' | 'onScrolledAwayFromBottom' | 'onTopReached' | 'onBottomReached' | 'onResendFailedMessage' | 'onDeleteMessage' | 'onPressMediaMessage' | 'renderMessage' | 'renderNewMessagesButton' | 'renderScrollToBottomButton' | 'flatListProps' | 'hasNext' | 'searchItem'> & {
|
|
37
|
-
onResetMessageList: (
|
|
38
|
-
onResetMessageListWithStartingPoint: (startingPoint: number
|
|
48
|
+
onResetMessageList: () => Promise<void>;
|
|
49
|
+
onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;
|
|
39
50
|
onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;
|
|
40
51
|
};
|
|
41
52
|
Input: Pick<ChannelInputProps, 'shouldRenderInput' | 'onPressSendUserMessage' | 'onPressSendFileMessage' | 'onPressUpdateUserMessage' | 'onPressUpdateFileMessage' | 'SuggestedMentionList' | 'AttachmentsButton'>;
|
|
@@ -120,7 +131,7 @@ export interface GroupChannelModule {
|
|
|
120
131
|
StatusEmpty: CommonComponent;
|
|
121
132
|
StatusLoading: CommonComponent;
|
|
122
133
|
}
|
|
123
|
-
export type GroupChannelFragment =
|
|
134
|
+
export type GroupChannelFragment = React.FC<GroupChannelProps['Fragment']>;
|
|
124
135
|
export type GroupChannelPubSubContextPayload = {
|
|
125
136
|
type: 'MESSAGE_SENT_PENDING' | 'MESSAGE_SENT_SUCCESS';
|
|
126
137
|
data: {
|
|
@@ -46,4 +46,4 @@ export interface GroupChannelBannedUsersModule {
|
|
|
46
46
|
StatusLoading: CommonComponent;
|
|
47
47
|
StatusError: CommonComponent<GroupChannelBannedUsersProps['StatusError']>;
|
|
48
48
|
}
|
|
49
|
-
export type GroupChannelBannedUsersFragment =
|
|
49
|
+
export type GroupChannelBannedUsersFragment = React.FC<GroupChannelBannedUsersProps['Fragment']>;
|
|
@@ -1,18 +1,29 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
2
|
import type { FlatListProps } from 'react-native';
|
|
3
|
+
import type { GroupChannelCollectionParams, GroupChannelFilterParams } from '@sendbird/chat/groupChannel';
|
|
3
4
|
import type { UseGroupChannelListOptions } from '@sendbird/uikit-chat-hooks';
|
|
4
5
|
import type { ActionMenuItem } from '@sendbird/uikit-react-native-foundation';
|
|
5
6
|
import type { SendbirdGroupChannel } from '@sendbird/uikit-utils';
|
|
6
7
|
import type { CommonComponent } from '../../types';
|
|
8
|
+
export type ChannelListQueryParamsType = Omit<GroupChannelCollectionParams, 'filter'> & GroupChannelFilterParams;
|
|
7
9
|
export interface GroupChannelListProps {
|
|
8
10
|
Fragment: {
|
|
9
11
|
onPressChannel: GroupChannelListProps['List']['onPressChannel'];
|
|
10
12
|
onPressCreateChannel: (channelType: GroupChannelType) => void;
|
|
11
13
|
renderGroupChannelPreview?: GroupChannelListProps['List']['renderGroupChannelPreview'];
|
|
12
14
|
skipTypeSelection?: boolean;
|
|
13
|
-
collectionCreator?: UseGroupChannelListOptions['collectionCreator'];
|
|
14
15
|
flatListProps?: GroupChannelListProps['List']['flatListProps'];
|
|
15
16
|
menuItemCreator?: GroupChannelListProps['List']['menuItemCreator'];
|
|
17
|
+
/**
|
|
18
|
+
* @description You can specify the query parameters for the channel list.
|
|
19
|
+
* @example
|
|
20
|
+
* ```
|
|
21
|
+
* <GroupChannelListFragment channelListQueryParams={{ limit: 20, includeEmpty: false }} />
|
|
22
|
+
* ```
|
|
23
|
+
* */
|
|
24
|
+
channelListQueryParams?: ChannelListQueryParamsType;
|
|
25
|
+
/** @deprecated Please use `channelListQueryParams` instead */
|
|
26
|
+
collectionCreator?: UseGroupChannelListOptions['collectionCreator'];
|
|
16
27
|
};
|
|
17
28
|
Header: {};
|
|
18
29
|
List: {
|
|
@@ -56,5 +67,5 @@ export interface GroupChannelListModule {
|
|
|
56
67
|
StatusEmpty: CommonComponent;
|
|
57
68
|
StatusLoading: CommonComponent;
|
|
58
69
|
}
|
|
59
|
-
export type GroupChannelListFragment =
|
|
70
|
+
export type GroupChannelListFragment = React.FC<GroupChannelListProps['Fragment']>;
|
|
60
71
|
export type GroupChannelType = 'GROUP' | 'SUPER_GROUP' | 'BROADCAST';
|
|
@@ -40,4 +40,4 @@ export interface GroupChannelModerationModule {
|
|
|
40
40
|
Header: CommonComponent<GroupChannelModerationProps['Header']>;
|
|
41
41
|
Menu: CommonComponent<GroupChannelModerationProps['Menu']>;
|
|
42
42
|
}
|
|
43
|
-
export type GroupChannelModerationFragment =
|
|
43
|
+
export type GroupChannelModerationFragment = React.FC<GroupChannelModerationProps['Fragment']>;
|
|
@@ -46,4 +46,4 @@ export interface GroupChannelMutedMembersModule {
|
|
|
46
46
|
StatusLoading: CommonComponent;
|
|
47
47
|
StatusError: CommonComponent<GroupChannelMutedMembersProps['StatusError']>;
|
|
48
48
|
}
|
|
49
|
-
export type GroupChannelMutedMembersFragment =
|
|
49
|
+
export type GroupChannelMutedMembersFragment = React.FC<GroupChannelMutedMembersProps['Fragment']>;
|
|
@@ -30,4 +30,4 @@ export interface GroupChannelNotificationsModule {
|
|
|
30
30
|
Header: CommonComponent<GroupChannelNotificationsProps['Header']>;
|
|
31
31
|
View: CommonComponent<GroupChannelNotificationsProps['View']>;
|
|
32
32
|
}
|
|
33
|
-
export type GroupChannelNotificationsFragment =
|
|
33
|
+
export type GroupChannelNotificationsFragment = React.FC<GroupChannelNotificationsProps['Fragment']>;
|
|
@@ -48,4 +48,4 @@ export interface GroupChannelOperatorsModule {
|
|
|
48
48
|
StatusLoading: CommonComponent;
|
|
49
49
|
StatusError: CommonComponent<GroupChannelOperatorsProps['StatusError']>;
|
|
50
50
|
}
|
|
51
|
-
export type GroupChannelOperatorsFragment =
|
|
51
|
+
export type GroupChannelOperatorsFragment = React.FC<GroupChannelOperatorsProps['Fragment']>;
|
|
@@ -48,4 +48,4 @@ export interface GroupChannelSettingsModule {
|
|
|
48
48
|
Info: CommonComponent<GroupChannelSettingsProps['Info']>;
|
|
49
49
|
Menu: CommonComponent<GroupChannelSettingsProps['Menu']>;
|
|
50
50
|
}
|
|
51
|
-
export type GroupChannelSettingsFragment =
|
|
51
|
+
export type GroupChannelSettingsFragment = React.FC<GroupChannelSettingsProps['Fragment']>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
import type { UseUserListOptions } from '@sendbird/uikit-chat-hooks';
|
|
2
3
|
import type { SendbirdGroupChannel, SendbirdGroupChannelCreateParams, SendbirdMember, UserStruct } from '@sendbird/uikit-utils';
|
|
3
4
|
import type { CommonComponent } from '../../types';
|
|
@@ -36,7 +37,7 @@ export interface GroupChannelMembersProps {
|
|
|
36
37
|
queryCreator?: UseUserListOptions<SendbirdMember>['queryCreator'];
|
|
37
38
|
};
|
|
38
39
|
}
|
|
39
|
-
export type GroupChannelMembersFragment =
|
|
40
|
+
export type GroupChannelMembersFragment = React.FC<GroupChannelMembersProps['Fragment']>;
|
|
40
41
|
export interface GroupChannelRegisterOperatorProps {
|
|
41
42
|
Fragment: {
|
|
42
43
|
channel: SendbirdGroupChannel;
|
|
@@ -47,4 +48,4 @@ export interface GroupChannelRegisterOperatorProps {
|
|
|
47
48
|
queryCreator?: UseUserListOptions<SendbirdMember>['queryCreator'];
|
|
48
49
|
};
|
|
49
50
|
}
|
|
50
|
-
export type GroupChannelRegisterOperatorFragment =
|
|
51
|
+
export type GroupChannelRegisterOperatorFragment = React.FC<GroupChannelRegisterOperatorProps['Fragment']>;
|
|
@@ -50,4 +50,4 @@ export interface MessageSearchModule {
|
|
|
50
50
|
StatusLoading: CommonComponent;
|
|
51
51
|
StatusError: CommonComponent<MessageSearchProps['StatusError']>;
|
|
52
52
|
}
|
|
53
|
-
export type MessageSearchFragment =
|
|
53
|
+
export type MessageSearchFragment = React.FC<MessageSearchProps['Fragment']>;
|
|
@@ -63,7 +63,7 @@ export interface OpenChannelModule {
|
|
|
63
63
|
StatusEmpty: CommonComponent;
|
|
64
64
|
StatusLoading: CommonComponent;
|
|
65
65
|
}
|
|
66
|
-
export type OpenChannelFragment =
|
|
66
|
+
export type OpenChannelFragment = React.FC<OpenChannelProps['Fragment']>;
|
|
67
67
|
export type OpenChannelPubSubContextPayload = {
|
|
68
68
|
type: 'MESSAGE_SENT_PENDING' | 'MESSAGE_SENT_SUCCESS';
|
|
69
69
|
data: {
|
|
@@ -46,4 +46,4 @@ export interface OpenChannelBannedUsersModule {
|
|
|
46
46
|
StatusLoading: CommonComponent;
|
|
47
47
|
StatusError: CommonComponent<OpenChannelBannedUsersProps['StatusError']>;
|
|
48
48
|
}
|
|
49
|
-
export type OpenChannelBannedUsersFragment =
|
|
49
|
+
export type OpenChannelBannedUsersFragment = React.FC<OpenChannelBannedUsersProps['Fragment']>;
|
|
@@ -37,4 +37,4 @@ export interface OpenChannelCreateModule {
|
|
|
37
37
|
ProfileInput: CommonComponent<OpenChannelCreateProps['ProfileInput']>;
|
|
38
38
|
StatusLoading: CommonComponent;
|
|
39
39
|
}
|
|
40
|
-
export type OpenChannelCreateFragment =
|
|
40
|
+
export type OpenChannelCreateFragment = React.FC<OpenChannelCreateProps['Fragment']>;
|
|
@@ -48,4 +48,4 @@ export interface OpenChannelListModule {
|
|
|
48
48
|
StatusLoading: CommonComponent;
|
|
49
49
|
StatusError: CommonComponent<OpenChannelListProps['StatusError']>;
|
|
50
50
|
}
|
|
51
|
-
export type OpenChannelListFragment =
|
|
51
|
+
export type OpenChannelListFragment = React.FC<OpenChannelListProps['Fragment']>;
|
|
@@ -40,4 +40,4 @@ export interface OpenChannelModerationModule {
|
|
|
40
40
|
Header: CommonComponent<OpenChannelModerationProps['Header']>;
|
|
41
41
|
Menu: CommonComponent<OpenChannelModerationProps['Menu']>;
|
|
42
42
|
}
|
|
43
|
-
export type OpenChannelModerationFragment =
|
|
43
|
+
export type OpenChannelModerationFragment = React.FC<OpenChannelModerationProps['Fragment']>;
|
|
@@ -46,4 +46,4 @@ export interface OpenChannelMutedParticipantsModule {
|
|
|
46
46
|
StatusLoading: CommonComponent;
|
|
47
47
|
StatusError: CommonComponent<OpenChannelMutedParticipantsProps['StatusError']>;
|
|
48
48
|
}
|
|
49
|
-
export type OpenChannelMutedParticipantsFragment =
|
|
49
|
+
export type OpenChannelMutedParticipantsFragment = React.FC<OpenChannelMutedParticipantsProps['Fragment']>;
|
|
@@ -48,4 +48,4 @@ export interface OpenChannelOperatorsModule {
|
|
|
48
48
|
StatusLoading: CommonComponent;
|
|
49
49
|
StatusError: CommonComponent<OpenChannelOperatorsProps['StatusError']>;
|
|
50
50
|
}
|
|
51
|
-
export type OpenChannelOperatorsFragment =
|
|
51
|
+
export type OpenChannelOperatorsFragment = React.FC<OpenChannelOperatorsProps['Fragment']>;
|
|
@@ -46,4 +46,4 @@ export interface OpenChannelSettingsModule {
|
|
|
46
46
|
Info: CommonComponent<OpenChannelSettingsProps['Info']>;
|
|
47
47
|
Menu: CommonComponent<OpenChannelSettingsProps['Menu']>;
|
|
48
48
|
}
|
|
49
|
-
export type OpenChannelSettingsFragment =
|
|
49
|
+
export type OpenChannelSettingsFragment = React.FC<OpenChannelSettingsProps['Fragment']>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type React from 'react';
|
|
1
2
|
import type { UseUserListOptions } from '@sendbird/uikit-chat-hooks';
|
|
2
3
|
import type { SendbirdOpenChannel, SendbirdParticipant, SendbirdUser } from '@sendbird/uikit-utils';
|
|
3
|
-
import type { CommonComponent } from '../../types';
|
|
4
4
|
import type { UserListProps } from '../userList/types';
|
|
5
5
|
export interface OpenChannelParticipantsProps {
|
|
6
6
|
Fragment: {
|
|
@@ -11,7 +11,7 @@ export interface OpenChannelParticipantsProps {
|
|
|
11
11
|
sortComparator?: UseUserListOptions<SendbirdUser | SendbirdParticipant>['sortComparator'];
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
-
export type OpenChannelParticipantsFragment =
|
|
14
|
+
export type OpenChannelParticipantsFragment = React.FC<OpenChannelParticipantsProps['Fragment']>;
|
|
15
15
|
export interface OpenChannelRegisterOperatorProps {
|
|
16
16
|
Fragment: {
|
|
17
17
|
channel: SendbirdOpenChannel;
|
|
@@ -22,4 +22,4 @@ export interface OpenChannelRegisterOperatorProps {
|
|
|
22
22
|
sortComparator?: UseUserListOptions<SendbirdUser | SendbirdParticipant>['sortComparator'];
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
|
-
export type OpenChannelRegisterOperatorFragment =
|
|
25
|
+
export type OpenChannelRegisterOperatorFragment = React.FC<OpenChannelRegisterOperatorProps['Fragment']>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ErrorInfo, ReactNode } from 'react';
|
|
1
|
+
import type { ComponentType, ErrorInfo, ReactNode } from 'react';
|
|
2
2
|
import type { SendbirdUser } from '@sendbird/uikit-utils';
|
|
3
3
|
export type KeyValuePairGet = [string, string | null];
|
|
4
4
|
export type KeyValuePairSet = [string, string];
|
|
@@ -16,9 +16,9 @@ export type ErrorBoundaryProps = {
|
|
|
16
16
|
errorInfo: ErrorInfo;
|
|
17
17
|
reset: () => void;
|
|
18
18
|
};
|
|
19
|
-
export type CommonComponent<P = {}> =
|
|
20
|
-
children?: ReactNode;
|
|
21
|
-
}
|
|
19
|
+
export type CommonComponent<P = {}> = ComponentType<P & {
|
|
20
|
+
children?: ReactNode | undefined;
|
|
21
|
+
}>;
|
|
22
22
|
export type MentionedUser = {
|
|
23
23
|
range: Range;
|
|
24
24
|
user: SendbirdUser;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const VERSION = "3.
|
|
1
|
+
declare const VERSION = "3.4.1";
|
|
2
2
|
export default VERSION;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sendbird/uikit-react-native",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.1",
|
|
4
4
|
"description": "Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sendbird",
|
|
@@ -59,10 +59,11 @@
|
|
|
59
59
|
"access": "public"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@
|
|
63
|
-
"@sendbird/uikit-
|
|
64
|
-
"@sendbird/uikit-
|
|
65
|
-
"@sendbird/uikit-
|
|
62
|
+
"@openspacelabs/react-native-zoomable-view": "^2.1.5",
|
|
63
|
+
"@sendbird/uikit-chat-hooks": "3.4.1",
|
|
64
|
+
"@sendbird/uikit-react-native-foundation": "3.4.1",
|
|
65
|
+
"@sendbird/uikit-tools": "0.0.1-alpha.58",
|
|
66
|
+
"@sendbird/uikit-utils": "3.4.1"
|
|
66
67
|
},
|
|
67
68
|
"devDependencies": {
|
|
68
69
|
"@bam.tech/react-native-image-resizer": "^3.0.4",
|
|
@@ -107,7 +108,7 @@
|
|
|
107
108
|
"@react-native-clipboard/clipboard": ">=1.8.5",
|
|
108
109
|
"@react-native-community/netinfo": ">=9.3.0",
|
|
109
110
|
"@react-native-firebase/messaging": ">=14.4.0",
|
|
110
|
-
"@sendbird/chat": "^4.
|
|
111
|
+
"@sendbird/chat": "^4.10.7",
|
|
111
112
|
"@sendbird/react-native-scrollview-enhancer": "*",
|
|
112
113
|
"date-fns": ">=2.28.0",
|
|
113
114
|
"expo-av": ">=12.0.4",
|
|
@@ -202,5 +203,5 @@
|
|
|
202
203
|
]
|
|
203
204
|
]
|
|
204
205
|
},
|
|
205
|
-
"gitHead": "
|
|
206
|
+
"gitHead": "b3f416e3d5ab51ce020ca21f21c09ad0157722d9"
|
|
206
207
|
}
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
|
|
20
20
|
import { useSendbirdChat } from '../../hooks/useContext';
|
|
21
21
|
import useMentionTextInput from '../../hooks/useMentionTextInput';
|
|
22
|
-
import type { MentionedUser, Range } from '../../types';
|
|
22
|
+
import type { CommonComponent, MentionedUser, Range } from '../../types';
|
|
23
23
|
import type { AttachmentsButtonProps } from './AttachmentsButton';
|
|
24
24
|
import AttachmentsButton from './AttachmentsButton';
|
|
25
25
|
import EditInput from './EditInput';
|
|
@@ -67,7 +67,7 @@ export type ChannelInputProps = {
|
|
|
67
67
|
setMessageToReply?: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;
|
|
68
68
|
|
|
69
69
|
// mention
|
|
70
|
-
SuggestedMentionList?:
|
|
70
|
+
SuggestedMentionList?: CommonComponent<SuggestedMentionListProps>;
|
|
71
71
|
|
|
72
72
|
// sub-components
|
|
73
73
|
AttachmentsButton?: (props: AttachmentsButtonProps) => React.ReactNode | null;
|
|
@@ -32,7 +32,6 @@ import {
|
|
|
32
32
|
import type { UserProfileContextType } from '../../contexts/UserProfileCtx';
|
|
33
33
|
import { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';
|
|
34
34
|
import SBUUtils from '../../libs/SBUUtils';
|
|
35
|
-
import type { CommonComponent } from '../../types';
|
|
36
35
|
import ChatFlatList from '../ChatFlatList';
|
|
37
36
|
import { ReactionAddons } from '../ReactionAddons';
|
|
38
37
|
|
|
@@ -59,7 +58,7 @@ export type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpe
|
|
|
59
58
|
onEditMessage: (message: HandleableMessage) => void;
|
|
60
59
|
onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel
|
|
61
60
|
onDeleteMessage: (message: HandleableMessage) => Promise<void>;
|
|
62
|
-
onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<void>;
|
|
61
|
+
onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;
|
|
63
62
|
onPressParentMessage?: (parentMessage: SendbirdMessage) => void;
|
|
64
63
|
onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;
|
|
65
64
|
|
|
@@ -78,15 +77,10 @@ export type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpe
|
|
|
78
77
|
bottomSheetItem?: BottomSheetItem;
|
|
79
78
|
isFirstItem: boolean;
|
|
80
79
|
}) => React.ReactElement | null;
|
|
81
|
-
renderNewMessagesButton:
|
|
82
|
-
|
|
83
|
-
onPress: () => void;
|
|
84
|
-
|
|
85
|
-
}>;
|
|
86
|
-
renderScrollToBottomButton: null | CommonComponent<{
|
|
87
|
-
visible: boolean;
|
|
88
|
-
onPress: () => void;
|
|
89
|
-
}>;
|
|
80
|
+
renderNewMessagesButton:
|
|
81
|
+
| null
|
|
82
|
+
| ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);
|
|
83
|
+
renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);
|
|
90
84
|
flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;
|
|
91
85
|
} & {
|
|
92
86
|
ref?: Ref<FlatList<SendbirdMessage>> | undefined;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { ReactNativeZoomableView, ReactNativeZoomableViewProps } from '@openspacelabs/react-native-zoomable-view';
|
|
2
|
+
import React, { useLayoutEffect, useRef, useState } from 'react';
|
|
3
|
+
import { ImageProps, ImageStyle, ImageURISource, StyleProp, StyleSheet, useWindowDimensions } from 'react-native';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
Box,
|
|
7
|
+
Image,
|
|
8
|
+
LoadingSpinner,
|
|
9
|
+
createStyleSheet,
|
|
10
|
+
useHeaderStyle,
|
|
11
|
+
useUIKitTheme,
|
|
12
|
+
} from '@sendbird/uikit-react-native-foundation';
|
|
13
|
+
import { FileType, useIIFE } from '@sendbird/uikit-utils';
|
|
14
|
+
|
|
15
|
+
import { usePlatformService } from '../../hooks/useContext';
|
|
16
|
+
import SBUUtils from '../../libs/SBUUtils';
|
|
17
|
+
|
|
18
|
+
type Props = {
|
|
19
|
+
type: FileType;
|
|
20
|
+
src: string;
|
|
21
|
+
topInset?: number;
|
|
22
|
+
bottomInset?: number;
|
|
23
|
+
maxZoom?: number;
|
|
24
|
+
minZoom?: number;
|
|
25
|
+
onPress?: () => void;
|
|
26
|
+
};
|
|
27
|
+
const FileViewerContent = ({ type, src, topInset = 0, bottomInset = 0, maxZoom = 4, minZoom = 1, onPress }: Props) => {
|
|
28
|
+
const [loading, setLoading] = useState(true);
|
|
29
|
+
|
|
30
|
+
const { defaultHeight } = useHeaderStyle();
|
|
31
|
+
const { mediaService } = usePlatformService();
|
|
32
|
+
const { palette } = useUIKitTheme();
|
|
33
|
+
|
|
34
|
+
const source = { uri: src };
|
|
35
|
+
const onLoadEnd = () => setLoading(false);
|
|
36
|
+
const mediaViewer = useIIFE(() => {
|
|
37
|
+
switch (type) {
|
|
38
|
+
case 'image': {
|
|
39
|
+
return (
|
|
40
|
+
<ZoomableImageView
|
|
41
|
+
source={source}
|
|
42
|
+
style={StyleSheet.absoluteFill}
|
|
43
|
+
resizeMode={'contain'}
|
|
44
|
+
onLoadEnd={onLoadEnd}
|
|
45
|
+
zoomProps={{
|
|
46
|
+
minZoom,
|
|
47
|
+
maxZoom,
|
|
48
|
+
onTouchEnd: onPress,
|
|
49
|
+
}}
|
|
50
|
+
/>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
case 'video':
|
|
55
|
+
case 'audio': {
|
|
56
|
+
return (
|
|
57
|
+
<mediaService.VideoComponent
|
|
58
|
+
source={source}
|
|
59
|
+
style={[StyleSheet.absoluteFill, { top: topInset, bottom: defaultHeight + bottomInset }]}
|
|
60
|
+
resizeMode={'contain'}
|
|
61
|
+
onLoad={onLoadEnd}
|
|
62
|
+
/>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
default: {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<Box style={styles.container}>
|
|
74
|
+
{mediaViewer}
|
|
75
|
+
{loading && <LoadingSpinner style={{ position: 'absolute' }} size={40} color={palette.primary300} />}
|
|
76
|
+
</Box>
|
|
77
|
+
);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const ZoomableImageView = ({
|
|
81
|
+
zoomProps,
|
|
82
|
+
...props
|
|
83
|
+
}: {
|
|
84
|
+
source: ImageURISource;
|
|
85
|
+
style: StyleProp<ImageStyle>;
|
|
86
|
+
resizeMode: ImageProps['resizeMode'];
|
|
87
|
+
onLoadEnd: () => void;
|
|
88
|
+
zoomProps?: ReactNativeZoomableViewProps;
|
|
89
|
+
}) => {
|
|
90
|
+
const { width, height } = useWindowDimensions();
|
|
91
|
+
|
|
92
|
+
const imageSize = useRef<{ width: number; height: number }>();
|
|
93
|
+
const [contentSizeProps, setContentSizeProps] = useState<ReactNativeZoomableViewProps>({
|
|
94
|
+
contentWidth: width,
|
|
95
|
+
contentHeight: height,
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
useLayoutEffect(() => {
|
|
99
|
+
SBUUtils.safeRun(async () => {
|
|
100
|
+
if (props.source.uri) {
|
|
101
|
+
const image = imageSize.current ?? (await SBUUtils.getImageSize(props.source.uri));
|
|
102
|
+
imageSize.current = image;
|
|
103
|
+
|
|
104
|
+
const viewRatio = width / height;
|
|
105
|
+
const imageRatio = image.width / image.height;
|
|
106
|
+
|
|
107
|
+
const fitDirection = viewRatio > imageRatio ? 'height' : 'width';
|
|
108
|
+
const ratio = fitDirection === 'height' ? height / image.height : width / image.width;
|
|
109
|
+
const actualSize = { width: image.width * ratio, height: image.height * ratio };
|
|
110
|
+
|
|
111
|
+
setContentSizeProps({
|
|
112
|
+
contentWidth: actualSize.width,
|
|
113
|
+
contentHeight: actualSize.height,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}, [props.source.uri, width, height]);
|
|
118
|
+
|
|
119
|
+
return (
|
|
120
|
+
<ReactNativeZoomableView
|
|
121
|
+
visualTouchFeedbackEnabled={false}
|
|
122
|
+
style={{ width, height }}
|
|
123
|
+
initialZoom={1}
|
|
124
|
+
{...contentSizeProps}
|
|
125
|
+
{...zoomProps}
|
|
126
|
+
>
|
|
127
|
+
<Image {...props} />
|
|
128
|
+
</ReactNativeZoomableView>
|
|
129
|
+
);
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const styles = createStyleSheet({
|
|
133
|
+
container: {
|
|
134
|
+
zIndex: -1,
|
|
135
|
+
flex: 1,
|
|
136
|
+
alignItems: 'center',
|
|
137
|
+
justifyContent: 'center',
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
export default FileViewerContent;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
Box,
|
|
6
|
+
Icon,
|
|
7
|
+
PressBox,
|
|
8
|
+
createStyleSheet,
|
|
9
|
+
useHeaderStyle,
|
|
10
|
+
useUIKitTheme,
|
|
11
|
+
} from '@sendbird/uikit-react-native-foundation';
|
|
12
|
+
|
|
13
|
+
type Props = {
|
|
14
|
+
bottomInset: number;
|
|
15
|
+
deleteShown: boolean;
|
|
16
|
+
onPressDelete: () => void;
|
|
17
|
+
onPressDownload: () => void;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const FileViewerFooter = ({ bottomInset, deleteShown, onPressDelete, onPressDownload }: Props) => {
|
|
21
|
+
const { palette } = useUIKitTheme();
|
|
22
|
+
const { defaultHeight } = useHeaderStyle();
|
|
23
|
+
const { left, right } = useSafeAreaInsets();
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<Box
|
|
27
|
+
style={[
|
|
28
|
+
styles.container,
|
|
29
|
+
{
|
|
30
|
+
paddingLeft: styles.container.paddingHorizontal + left,
|
|
31
|
+
paddingRight: styles.container.paddingHorizontal + right,
|
|
32
|
+
paddingBottom: bottomInset,
|
|
33
|
+
height: defaultHeight + bottomInset,
|
|
34
|
+
backgroundColor: palette.overlay01,
|
|
35
|
+
},
|
|
36
|
+
]}
|
|
37
|
+
>
|
|
38
|
+
<PressBox activeOpacity={0.75} onPress={onPressDownload} style={styles.buttonContainer}>
|
|
39
|
+
<Icon icon={'download'} size={24} color={palette.onBackgroundDark01} />
|
|
40
|
+
</PressBox>
|
|
41
|
+
<Box style={styles.titleContainer} />
|
|
42
|
+
<PressBox activeOpacity={0.75} onPress={onPressDelete} style={styles.buttonContainer} disabled={!deleteShown}>
|
|
43
|
+
{deleteShown && <Icon icon={'delete'} size={24} color={palette.onBackgroundDark01} />}
|
|
44
|
+
</PressBox>
|
|
45
|
+
</Box>
|
|
46
|
+
);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const styles = createStyleSheet({
|
|
50
|
+
container: {
|
|
51
|
+
position: 'absolute',
|
|
52
|
+
left: 0,
|
|
53
|
+
right: 0,
|
|
54
|
+
bottom: 0,
|
|
55
|
+
flexDirection: 'row',
|
|
56
|
+
alignItems: 'center',
|
|
57
|
+
justifyContent: 'center',
|
|
58
|
+
paddingHorizontal: 12,
|
|
59
|
+
},
|
|
60
|
+
buttonContainer: {
|
|
61
|
+
width: 32,
|
|
62
|
+
height: 32,
|
|
63
|
+
alignItems: 'center',
|
|
64
|
+
justifyContent: 'center',
|
|
65
|
+
},
|
|
66
|
+
titleContainer: {
|
|
67
|
+
flex: 1,
|
|
68
|
+
alignItems: 'center',
|
|
69
|
+
justifyContent: 'center',
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
export default FileViewerFooter;
|