@sendbird/uikit-react-native 3.2.0 → 3.4.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/ChannelInput/EditInput.js +2 -11
- package/lib/commonjs/components/ChannelInput/EditInput.js.map +1 -1
- package/lib/commonjs/components/ChannelInput/SendInput.js +2 -11
- package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/commonjs/components/ChannelInput/index.js +30 -3
- package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js +148 -116
- 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/GroupChannelMessageRenderer/index.js +34 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js +14 -4
- package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +11 -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/messageSearch/component/MessageSearchHeader.js +4 -1
- package/lib/commonjs/domain/messageSearch/component/MessageSearchHeader.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/fragments/createGroupChannelFragment.js +18 -16
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/index.js +4 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js +7 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/promise.js +138 -0
- package/lib/commonjs/utils/promise.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelInput/EditInput.js +3 -12
- package/lib/module/components/ChannelInput/EditInput.js.map +1 -1
- package/lib/module/components/ChannelInput/SendInput.js +3 -12
- package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/module/components/ChannelInput/index.js +32 -5
- package/lib/module/components/ChannelInput/index.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js +148 -116
- 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/GroupChannelMessageRenderer/index.js +34 -2
- package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelHeader.js +15 -5
- package/lib/module/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +11 -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/messageSearch/component/MessageSearchHeader.js +4 -1
- package/lib/module/domain/messageSearch/component/MessageSearchHeader.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/fragments/createGroupChannelFragment.js +19 -17
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js +5 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/promise.js +132 -0
- package/lib/module/utils/promise.js.map +1 -0
- 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 -0
- package/lib/typescript/src/components/ChannelMessageList/index.d.ts +4 -1
- 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/components/GroupChannelMessageRenderer/index.d.ts +3 -0
- package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +2 -0
- 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 +5 -2
- package/lib/typescript/src/types.d.ts +4 -0
- package/lib/typescript/src/utils/promise.d.ts +7 -0
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +8 -7
- package/src/components/ChannelInput/EditInput.tsx +3 -15
- package/src/components/ChannelInput/SendInput.tsx +2 -9
- package/src/components/ChannelInput/index.tsx +27 -4
- package/src/components/ChannelMessageList/index.tsx +145 -115
- 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/GroupChannelMessageRenderer/index.tsx +34 -2
- package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +3 -2
- package/src/domain/groupChannel/component/GroupChannelHeader.tsx +14 -3
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +8 -6
- package/src/domain/groupChannel/types.ts +6 -2
- package/src/domain/messageSearch/component/MessageSearchHeader.tsx +4 -1
- package/src/domain/openChannelCreate/component/OpenChannelCreateProfileInput.tsx +4 -2
- package/src/fragments/createGroupChannelFragment.tsx +25 -15
- package/src/index.ts +5 -1
- package/src/types.ts +5 -0
- package/src/utils/promise.ts +139 -0
- 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
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import 'react-native';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This file contains subcomponents with separate copyright notices and license terms.
|
|
5
|
+
* Your use of the source code for these subcomponents is subject to the terms and conditions of the following licenses.
|
|
6
|
+
*
|
|
7
|
+
* MIT License: https://github.com/then/promise
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2014 Forbes Lindesay
|
|
10
|
+
*
|
|
11
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
12
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
13
|
+
* in the Software without restriction, including without limitation the rights
|
|
14
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
15
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
16
|
+
* furnished to do so, subject to the following conditions:
|
|
17
|
+
*
|
|
18
|
+
* The above copyright notice and this permission notice shall be included in
|
|
19
|
+
* all copies or substantial portions of the Software.
|
|
20
|
+
*
|
|
21
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
22
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
23
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
24
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
25
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
26
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
27
|
+
* THE SOFTWARE.
|
|
28
|
+
*
|
|
29
|
+
* Original code: https://github.com/then/promise/blob/master/src/es6-extensions.js
|
|
30
|
+
* */
|
|
31
|
+
let iterableToArray = function <T>(iterable: Iterable<T | PromiseLike<T>>): (T | PromiseLike<T>)[] {
|
|
32
|
+
if (typeof Array.from === 'function') {
|
|
33
|
+
// ES2015+, iterables exist
|
|
34
|
+
iterableToArray = Array.from;
|
|
35
|
+
return Array.from(iterable);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// ES5, only arrays and array-likes exist
|
|
39
|
+
iterableToArray = function (x) {
|
|
40
|
+
return Array.prototype.slice.call(x);
|
|
41
|
+
};
|
|
42
|
+
return Array.prototype.slice.call(iterable);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
function onSettledFulfill<T>(value: T) {
|
|
46
|
+
return { status: 'fulfilled', value: value } as const;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function onSettledReject<T>(reason: T) {
|
|
50
|
+
return { status: 'rejected', reason: reason } as const;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function mapAllSettled<T>(item: T | PromiseLike<T>): PromiseLike<PromiseSettledResult<T>> | PromiseSettledResult<T> {
|
|
54
|
+
if (item && (typeof item === 'object' || typeof item === 'function')) {
|
|
55
|
+
if (item instanceof Promise && item.then === Promise.prototype.then) {
|
|
56
|
+
return item.then(onSettledFulfill, onSettledReject);
|
|
57
|
+
}
|
|
58
|
+
// @ts-expect-error
|
|
59
|
+
const then = item.then;
|
|
60
|
+
if (typeof then === 'function') {
|
|
61
|
+
return new Promise<T>(then.bind(item)).then(onSettledFulfill, onSettledReject);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// @ts-expect-error
|
|
66
|
+
return onSettledFulfill(item);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function getAggregateError(errors: unknown[]) {
|
|
70
|
+
if (typeof AggregateError === 'function') {
|
|
71
|
+
return new AggregateError(errors, 'All promises were rejected');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const error = new Error('All promises were rejected') as Error & { errors: unknown[] };
|
|
75
|
+
|
|
76
|
+
error.name = 'AggregateError';
|
|
77
|
+
error.errors = errors;
|
|
78
|
+
|
|
79
|
+
return error;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export const PromisePolyfill = {
|
|
83
|
+
allSettled<T extends readonly unknown[] | []>(values: T) {
|
|
84
|
+
return Promise.all(iterableToArray(values).map(mapAllSettled)) as Promise<{
|
|
85
|
+
-readonly [P in keyof T]: PromiseSettledResult<Awaited<T[P]>>;
|
|
86
|
+
}>;
|
|
87
|
+
},
|
|
88
|
+
race<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>> {
|
|
89
|
+
return new Promise(function (resolve, reject) {
|
|
90
|
+
iterableToArray(values).forEach(function (value) {
|
|
91
|
+
Promise.resolve(value).then(resolve, reject);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
},
|
|
95
|
+
any<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>> {
|
|
96
|
+
return new Promise<Awaited<T>>(function (resolve, reject) {
|
|
97
|
+
const promises = iterableToArray(values);
|
|
98
|
+
let hasResolved = false;
|
|
99
|
+
const rejectionReasons: unknown[] = [];
|
|
100
|
+
|
|
101
|
+
function resolveOnce(value: Awaited<T>) {
|
|
102
|
+
if (!hasResolved) {
|
|
103
|
+
hasResolved = true;
|
|
104
|
+
resolve(value);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function rejectionCheck(reason: unknown) {
|
|
109
|
+
rejectionReasons.push(reason);
|
|
110
|
+
|
|
111
|
+
if (rejectionReasons.length === promises.length) {
|
|
112
|
+
reject(getAggregateError(rejectionReasons));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (promises.length === 0) {
|
|
117
|
+
reject(getAggregateError(rejectionReasons));
|
|
118
|
+
} else {
|
|
119
|
+
promises.forEach(function (value) {
|
|
120
|
+
Promise.resolve(value).then(resolveOnce, rejectionCheck);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
},
|
|
125
|
+
apply() {
|
|
126
|
+
// https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/Utilities/PolyfillFunctions.js
|
|
127
|
+
if (typeof global !== 'undefined' && 'Promise' in global) {
|
|
128
|
+
if (!global.Promise.allSettled) {
|
|
129
|
+
global.Promise.allSettled = this.allSettled;
|
|
130
|
+
}
|
|
131
|
+
if (!global.Promise.any) {
|
|
132
|
+
global.Promise.any = this.any;
|
|
133
|
+
}
|
|
134
|
+
if (!global.Promise.race) {
|
|
135
|
+
global.Promise.race = this.race;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
};
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const VERSION = '3.
|
|
1
|
+
const VERSION = '3.4.0';
|
|
2
2
|
export default VERSION;
|
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
-
var _reactNative = require("react-native");
|
|
9
|
-
var _reactNativeSafeAreaContext = require("react-native-safe-area-context");
|
|
10
|
-
var _uikitReactNativeFoundation = require("@sendbird/uikit-react-native-foundation");
|
|
11
|
-
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
12
|
-
var _useContext = require("../hooks/useContext");
|
|
13
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
14
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
15
|
-
const FileViewer = _ref => {
|
|
16
|
-
let {
|
|
17
|
-
headerShown = true,
|
|
18
|
-
deleteMessage,
|
|
19
|
-
headerTopInset,
|
|
20
|
-
fileMessage,
|
|
21
|
-
onPressDownload,
|
|
22
|
-
onPressDelete,
|
|
23
|
-
onClose
|
|
24
|
-
} = _ref;
|
|
25
|
-
const [loading, setLoading] = (0, _react.useState)(true);
|
|
26
|
-
const {
|
|
27
|
-
bottom
|
|
28
|
-
} = (0, _reactNativeSafeAreaContext.useSafeAreaInsets)();
|
|
29
|
-
const {
|
|
30
|
-
currentUser
|
|
31
|
-
} = (0, _useContext.useSendbirdChat)();
|
|
32
|
-
const {
|
|
33
|
-
palette
|
|
34
|
-
} = (0, _uikitReactNativeFoundation.useUIKitTheme)();
|
|
35
|
-
const {
|
|
36
|
-
topInset,
|
|
37
|
-
statusBarTranslucent,
|
|
38
|
-
defaultHeight
|
|
39
|
-
} = (0, _uikitReactNativeFoundation.useHeaderStyle)();
|
|
40
|
-
const {
|
|
41
|
-
STRINGS
|
|
42
|
-
} = (0, _useContext.useLocalization)();
|
|
43
|
-
const {
|
|
44
|
-
fileService,
|
|
45
|
-
mediaService
|
|
46
|
-
} = (0, _useContext.usePlatformService)();
|
|
47
|
-
const toast = (0, _uikitReactNativeFoundation.useToast)();
|
|
48
|
-
const {
|
|
49
|
-
alert
|
|
50
|
-
} = (0, _uikitReactNativeFoundation.useAlert)();
|
|
51
|
-
const basicTopInset = statusBarTranslucent ? topInset : 0;
|
|
52
|
-
const canDelete = (0, _uikitUtils.isMyMessage)(fileMessage, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId);
|
|
53
|
-
const fileType = (0, _uikitUtils.getFileType)(fileMessage.type || (0, _uikitUtils.getFileExtension)(fileMessage.url));
|
|
54
|
-
(0, _react.useEffect)(() => {
|
|
55
|
-
if (fileType === 'file') onClose();
|
|
56
|
-
}, []);
|
|
57
|
-
const fileViewer = (0, _uikitUtils.useIIFE)(() => {
|
|
58
|
-
switch (fileType) {
|
|
59
|
-
case 'image':
|
|
60
|
-
{
|
|
61
|
-
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Image, {
|
|
62
|
-
source: {
|
|
63
|
-
uri: fileMessage.url
|
|
64
|
-
},
|
|
65
|
-
style: _reactNative.StyleSheet.absoluteFill,
|
|
66
|
-
resizeMode: 'contain',
|
|
67
|
-
onLoadEnd: () => setLoading(false)
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
case 'video':
|
|
71
|
-
case 'audio':
|
|
72
|
-
{
|
|
73
|
-
return /*#__PURE__*/_react.default.createElement(mediaService.VideoComponent, {
|
|
74
|
-
source: {
|
|
75
|
-
uri: fileMessage.url
|
|
76
|
-
},
|
|
77
|
-
style: [_reactNative.StyleSheet.absoluteFill, {
|
|
78
|
-
top: basicTopInset + defaultHeight,
|
|
79
|
-
bottom: defaultHeight + bottom
|
|
80
|
-
}],
|
|
81
|
-
resizeMode: 'contain',
|
|
82
|
-
onLoad: () => setLoading(false)
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
default:
|
|
86
|
-
{
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
const _onPressDelete = () => {
|
|
92
|
-
if (!canDelete) return;
|
|
93
|
-
if (onPressDelete) {
|
|
94
|
-
onPressDelete(fileMessage);
|
|
95
|
-
} else {
|
|
96
|
-
alert({
|
|
97
|
-
title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,
|
|
98
|
-
buttons: [{
|
|
99
|
-
text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL
|
|
100
|
-
}, {
|
|
101
|
-
text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,
|
|
102
|
-
style: 'destructive',
|
|
103
|
-
onPress: () => {
|
|
104
|
-
deleteMessage().then(() => {
|
|
105
|
-
onClose();
|
|
106
|
-
}).catch(() => {
|
|
107
|
-
toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
}]
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
const _onPressDownload = () => {
|
|
115
|
-
if (onPressDownload) {
|
|
116
|
-
onPressDownload(fileMessage);
|
|
117
|
-
} else {
|
|
118
|
-
if ((0, _uikitUtils.toMegabyte)(fileMessage.size) > 4) {
|
|
119
|
-
toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');
|
|
120
|
-
}
|
|
121
|
-
fileService.save({
|
|
122
|
-
fileUrl: fileMessage.url,
|
|
123
|
-
fileName: fileMessage.name,
|
|
124
|
-
fileType: fileMessage.type
|
|
125
|
-
}).then(response => {
|
|
126
|
-
toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');
|
|
127
|
-
_uikitUtils.Logger.log('File saved to', response);
|
|
128
|
-
}).catch(err => {
|
|
129
|
-
toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');
|
|
130
|
-
_uikitUtils.Logger.log('File save failure', err);
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
135
|
-
style: {
|
|
136
|
-
flex: 1,
|
|
137
|
-
backgroundColor: palette.background700
|
|
138
|
-
}
|
|
139
|
-
}, /*#__PURE__*/_react.default.createElement(_reactNative.StatusBar, {
|
|
140
|
-
barStyle: 'light-content',
|
|
141
|
-
animated: true
|
|
142
|
-
}), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
143
|
-
style: {
|
|
144
|
-
flex: 1,
|
|
145
|
-
alignItems: 'center',
|
|
146
|
-
justifyContent: 'center'
|
|
147
|
-
}
|
|
148
|
-
}, fileViewer, loading && /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.LoadingSpinner, {
|
|
149
|
-
style: {
|
|
150
|
-
position: 'absolute'
|
|
151
|
-
},
|
|
152
|
-
size: 40,
|
|
153
|
-
color: palette.primary300
|
|
154
|
-
})), headerShown && /*#__PURE__*/_react.default.createElement(FileViewerHeader, {
|
|
155
|
-
title: STRINGS.FILE_VIEWER.TITLE(fileMessage),
|
|
156
|
-
subtitle: STRINGS.FILE_VIEWER.SUBTITLE(fileMessage),
|
|
157
|
-
topInset: headerTopInset ?? basicTopInset,
|
|
158
|
-
onClose: onClose
|
|
159
|
-
}), /*#__PURE__*/_react.default.createElement(FileViewerFooter, {
|
|
160
|
-
bottomInset: bottom,
|
|
161
|
-
deleteShown: canDelete,
|
|
162
|
-
onPressDelete: _onPressDelete,
|
|
163
|
-
onPressDownload: _onPressDownload
|
|
164
|
-
}));
|
|
165
|
-
};
|
|
166
|
-
const FileViewerHeader = _ref2 => {
|
|
167
|
-
let {
|
|
168
|
-
topInset,
|
|
169
|
-
onClose,
|
|
170
|
-
subtitle,
|
|
171
|
-
title
|
|
172
|
-
} = _ref2;
|
|
173
|
-
const {
|
|
174
|
-
palette
|
|
175
|
-
} = (0, _uikitReactNativeFoundation.useUIKitTheme)();
|
|
176
|
-
const {
|
|
177
|
-
defaultHeight
|
|
178
|
-
} = (0, _uikitReactNativeFoundation.useHeaderStyle)();
|
|
179
|
-
const {
|
|
180
|
-
left,
|
|
181
|
-
right
|
|
182
|
-
} = (0, _reactNativeSafeAreaContext.useSafeAreaInsets)();
|
|
183
|
-
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
184
|
-
style: [styles.headerContainer, {
|
|
185
|
-
paddingLeft: styles.headerContainer.paddingHorizontal + left,
|
|
186
|
-
paddingRight: styles.headerContainer.paddingHorizontal + right
|
|
187
|
-
}, {
|
|
188
|
-
paddingTop: topInset,
|
|
189
|
-
height: defaultHeight + topInset,
|
|
190
|
-
backgroundColor: palette.overlay01
|
|
191
|
-
}]
|
|
192
|
-
}, /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
|
|
193
|
-
onPress: onClose,
|
|
194
|
-
style: styles.barButton
|
|
195
|
-
}, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Icon, {
|
|
196
|
-
icon: 'close',
|
|
197
|
-
size: 24,
|
|
198
|
-
color: palette.onBackgroundDark01
|
|
199
|
-
})), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
200
|
-
style: styles.barTitleContainer
|
|
201
|
-
}, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Text, {
|
|
202
|
-
h2: true,
|
|
203
|
-
color: palette.onBackgroundDark01,
|
|
204
|
-
style: styles.headerTitle,
|
|
205
|
-
numberOfLines: 1
|
|
206
|
-
}, (0, _uikitUtils.truncate)(title, {
|
|
207
|
-
mode: 'mid',
|
|
208
|
-
maxLen: 18
|
|
209
|
-
})), /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Text, {
|
|
210
|
-
caption2: true,
|
|
211
|
-
color: palette.onBackgroundDark01,
|
|
212
|
-
numberOfLines: 1
|
|
213
|
-
}, subtitle)), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
214
|
-
style: styles.barButton
|
|
215
|
-
}));
|
|
216
|
-
};
|
|
217
|
-
const FileViewerFooter = _ref3 => {
|
|
218
|
-
let {
|
|
219
|
-
bottomInset,
|
|
220
|
-
deleteShown,
|
|
221
|
-
onPressDelete,
|
|
222
|
-
onPressDownload
|
|
223
|
-
} = _ref3;
|
|
224
|
-
const {
|
|
225
|
-
palette
|
|
226
|
-
} = (0, _uikitReactNativeFoundation.useUIKitTheme)();
|
|
227
|
-
const {
|
|
228
|
-
defaultHeight
|
|
229
|
-
} = (0, _uikitReactNativeFoundation.useHeaderStyle)();
|
|
230
|
-
const {
|
|
231
|
-
left,
|
|
232
|
-
right
|
|
233
|
-
} = (0, _reactNativeSafeAreaContext.useSafeAreaInsets)();
|
|
234
|
-
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
235
|
-
style: [styles.footerContainer, {
|
|
236
|
-
paddingLeft: styles.headerContainer.paddingHorizontal + left,
|
|
237
|
-
paddingRight: styles.headerContainer.paddingHorizontal + right
|
|
238
|
-
}, {
|
|
239
|
-
paddingBottom: bottomInset,
|
|
240
|
-
height: defaultHeight + bottomInset,
|
|
241
|
-
backgroundColor: palette.overlay01
|
|
242
|
-
}]
|
|
243
|
-
}, /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
|
|
244
|
-
onPress: onPressDownload,
|
|
245
|
-
style: styles.barButton
|
|
246
|
-
}, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Icon, {
|
|
247
|
-
icon: 'download',
|
|
248
|
-
size: 24,
|
|
249
|
-
color: palette.onBackgroundDark01
|
|
250
|
-
})), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
251
|
-
style: styles.barTitleContainer
|
|
252
|
-
}), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
|
|
253
|
-
onPress: onPressDelete,
|
|
254
|
-
style: styles.barButton,
|
|
255
|
-
disabled: !deleteShown
|
|
256
|
-
}, deleteShown && /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Icon, {
|
|
257
|
-
icon: 'delete',
|
|
258
|
-
size: 24,
|
|
259
|
-
color: palette.onBackgroundDark01
|
|
260
|
-
})));
|
|
261
|
-
};
|
|
262
|
-
const styles = (0, _uikitReactNativeFoundation.createStyleSheet)({
|
|
263
|
-
headerContainer: {
|
|
264
|
-
top: 0,
|
|
265
|
-
left: 0,
|
|
266
|
-
right: 0,
|
|
267
|
-
position: 'absolute',
|
|
268
|
-
flexDirection: 'row',
|
|
269
|
-
alignItems: 'center',
|
|
270
|
-
justifyContent: 'center',
|
|
271
|
-
paddingHorizontal: 12
|
|
272
|
-
},
|
|
273
|
-
barButton: {
|
|
274
|
-
width: 32,
|
|
275
|
-
height: 32,
|
|
276
|
-
alignItems: 'center',
|
|
277
|
-
justifyContent: 'center'
|
|
278
|
-
},
|
|
279
|
-
barTitleContainer: {
|
|
280
|
-
flex: 1,
|
|
281
|
-
alignItems: 'center',
|
|
282
|
-
justifyContent: 'center'
|
|
283
|
-
},
|
|
284
|
-
headerTitle: {
|
|
285
|
-
marginBottom: 2
|
|
286
|
-
},
|
|
287
|
-
footerContainer: {
|
|
288
|
-
position: 'absolute',
|
|
289
|
-
left: 0,
|
|
290
|
-
right: 0,
|
|
291
|
-
bottom: 0,
|
|
292
|
-
flexDirection: 'row',
|
|
293
|
-
alignItems: 'center',
|
|
294
|
-
justifyContent: 'center',
|
|
295
|
-
paddingHorizontal: 12
|
|
296
|
-
}
|
|
297
|
-
});
|
|
298
|
-
var _default = FileViewer;
|
|
299
|
-
exports.default = _default;
|
|
300
|
-
//# sourceMappingURL=FileViewer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeSafeAreaContext","_uikitReactNativeFoundation","_uikitUtils","_useContext","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","FileViewer","_ref","headerShown","deleteMessage","headerTopInset","fileMessage","onPressDownload","onPressDelete","onClose","loading","setLoading","useState","bottom","useSafeAreaInsets","currentUser","useSendbirdChat","palette","useUIKitTheme","topInset","statusBarTranslucent","defaultHeight","useHeaderStyle","STRINGS","useLocalization","fileService","mediaService","usePlatformService","toast","useToast","alert","useAlert","basicTopInset","canDelete","isMyMessage","userId","fileType","getFileType","type","getFileExtension","url","useEffect","fileViewer","useIIFE","createElement","Image","source","uri","style","StyleSheet","absoluteFill","resizeMode","onLoadEnd","VideoComponent","top","onLoad","_onPressDelete","title","LABELS","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","text","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","onPress","then","catch","show","TOAST","DELETE_MSG_ERROR","_onPressDownload","toMegabyte","size","DOWNLOAD_START","save","fileUrl","fileName","name","response","DOWNLOAD_OK","Logger","log","err","DOWNLOAD_ERROR","View","flex","backgroundColor","background700","StatusBar","barStyle","animated","alignItems","justifyContent","LoadingSpinner","position","color","primary300","FileViewerHeader","FILE_VIEWER","TITLE","subtitle","SUBTITLE","FileViewerFooter","bottomInset","deleteShown","_ref2","left","right","styles","headerContainer","paddingLeft","paddingHorizontal","paddingRight","paddingTop","height","overlay01","TouchableOpacity","barButton","Icon","icon","onBackgroundDark01","barTitleContainer","Text","h2","headerTitle","numberOfLines","truncate","mode","maxLen","caption2","_ref3","footerContainer","paddingBottom","disabled","createStyleSheet","flexDirection","width","marginBottom","_default","exports"],"sources":["FileViewer.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { StatusBar, StyleSheet, TouchableOpacity, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Icon,\n Image,\n LoadingSpinner,\n Text,\n createStyleSheet,\n useAlert,\n useHeaderStyle,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdFileMessage } from '@sendbird/uikit-utils';\nimport {\n Logger,\n getFileExtension,\n getFileType,\n isMyMessage,\n toMegabyte,\n truncate,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../hooks/useContext';\n\ntype Props = {\n fileMessage: SendbirdFileMessage;\n deleteMessage: () => Promise<void>;\n\n onClose: () => void;\n onPressDownload?: (message: SendbirdFileMessage) => void;\n onPressDelete?: (message: SendbirdFileMessage) => void;\n\n headerShown?: boolean;\n headerTopInset?: number;\n};\nconst FileViewer = ({\n headerShown = true,\n deleteMessage,\n headerTopInset,\n fileMessage,\n onPressDownload,\n onPressDelete,\n onClose,\n}: Props) => {\n const [loading, setLoading] = useState(true);\n\n const { bottom } = useSafeAreaInsets();\n\n const { currentUser } = useSendbirdChat();\n const { palette } = useUIKitTheme();\n const { topInset, statusBarTranslucent, defaultHeight } = useHeaderStyle();\n const { STRINGS } = useLocalization();\n const { fileService, mediaService } = usePlatformService();\n const toast = useToast();\n const { alert } = useAlert();\n\n const basicTopInset = statusBarTranslucent ? topInset : 0;\n const canDelete = isMyMessage(fileMessage, currentUser?.userId);\n const fileType = getFileType(fileMessage.type || getFileExtension(fileMessage.url));\n\n useEffect(() => {\n if (fileType === 'file') onClose();\n }, []);\n\n const fileViewer = useIIFE(() => {\n switch (fileType) {\n case 'image': {\n return (\n <Image\n source={{ uri: fileMessage.url }}\n style={StyleSheet.absoluteFill}\n resizeMode={'contain'}\n onLoadEnd={() => setLoading(false)}\n />\n );\n }\n\n case 'video':\n case 'audio': {\n return (\n <mediaService.VideoComponent\n source={{ uri: fileMessage.url }}\n style={[StyleSheet.absoluteFill, { top: basicTopInset + defaultHeight, bottom: defaultHeight + bottom }]}\n resizeMode={'contain'}\n onLoad={() => setLoading(false)}\n />\n );\n }\n\n default: {\n return null;\n }\n }\n });\n\n const _onPressDelete = () => {\n if (!canDelete) return;\n\n if (onPressDelete) {\n onPressDelete(fileMessage);\n } else {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL,\n },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n deleteMessage()\n .then(() => {\n onClose();\n })\n .catch(() => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n });\n },\n },\n ],\n });\n }\n };\n\n const _onPressDownload = () => {\n if (onPressDownload) {\n onPressDownload(fileMessage);\n } else {\n if (toMegabyte(fileMessage.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: fileMessage.url, fileName: fileMessage.name, fileType: fileMessage.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n return (\n <View style={{ flex: 1, backgroundColor: palette.background700 }}>\n <StatusBar barStyle={'light-content'} animated />\n <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>\n {fileViewer}\n {loading && <LoadingSpinner style={{ position: 'absolute' }} size={40} color={palette.primary300} />}\n </View>\n {headerShown && (\n <FileViewerHeader\n title={STRINGS.FILE_VIEWER.TITLE(fileMessage)}\n subtitle={STRINGS.FILE_VIEWER.SUBTITLE(fileMessage)}\n topInset={headerTopInset ?? basicTopInset}\n onClose={onClose}\n />\n )}\n <FileViewerFooter\n bottomInset={bottom}\n deleteShown={canDelete}\n onPressDelete={_onPressDelete}\n onPressDownload={_onPressDownload}\n />\n </View>\n );\n};\n\ntype HeaderProps = {\n topInset: number;\n onClose: () => void;\n title: string;\n subtitle: string;\n};\nconst FileViewerHeader = ({ topInset, onClose, subtitle, title }: HeaderProps) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <View\n style={[\n styles.headerContainer,\n {\n paddingLeft: styles.headerContainer.paddingHorizontal + left,\n paddingRight: styles.headerContainer.paddingHorizontal + right,\n },\n { paddingTop: topInset, height: defaultHeight + topInset, backgroundColor: palette.overlay01 },\n ]}\n >\n <TouchableOpacity onPress={onClose} style={styles.barButton}>\n <Icon icon={'close'} size={24} color={palette.onBackgroundDark01} />\n </TouchableOpacity>\n <View style={styles.barTitleContainer}>\n <Text h2 color={palette.onBackgroundDark01} style={styles.headerTitle} numberOfLines={1}>\n {truncate(title, { mode: 'mid', maxLen: 18 })}\n </Text>\n <Text caption2 color={palette.onBackgroundDark01} numberOfLines={1}>\n {subtitle}\n </Text>\n </View>\n <View style={styles.barButton} />\n </View>\n );\n};\n\ntype FooterProps = {\n bottomInset: number;\n deleteShown: boolean;\n onPressDelete: () => void;\n onPressDownload: () => void;\n};\nconst FileViewerFooter = ({ bottomInset, deleteShown, onPressDelete, onPressDownload }: FooterProps) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <View\n style={[\n styles.footerContainer,\n {\n paddingLeft: styles.headerContainer.paddingHorizontal + left,\n paddingRight: styles.headerContainer.paddingHorizontal + right,\n },\n {\n paddingBottom: bottomInset,\n height: defaultHeight + bottomInset,\n backgroundColor: palette.overlay01,\n },\n ]}\n >\n <TouchableOpacity onPress={onPressDownload} style={styles.barButton}>\n <Icon icon={'download'} size={24} color={palette.onBackgroundDark01} />\n </TouchableOpacity>\n <View style={styles.barTitleContainer} />\n <TouchableOpacity onPress={onPressDelete} style={styles.barButton} disabled={!deleteShown}>\n {deleteShown && <Icon icon={'delete'} size={24} color={palette.onBackgroundDark01} />}\n </TouchableOpacity>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n headerContainer: {\n top: 0,\n left: 0,\n right: 0,\n position: 'absolute',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n barButton: {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n barTitleContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n headerTitle: {\n marginBottom: 2,\n },\n footerContainer: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n});\n\nexport default FileViewer;\n"],"mappings":"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"}
|