@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.
Files changed (116) hide show
  1. package/lib/commonjs/components/ChannelInput/EditInput.js +2 -11
  2. package/lib/commonjs/components/ChannelInput/EditInput.js.map +1 -1
  3. package/lib/commonjs/components/ChannelInput/SendInput.js +2 -11
  4. package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
  5. package/lib/commonjs/components/ChannelInput/index.js +30 -3
  6. package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
  7. package/lib/commonjs/components/ChannelMessageList/index.js +148 -116
  8. package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
  9. package/lib/commonjs/components/FileViewer/FileViewerContent.js +140 -0
  10. package/lib/commonjs/components/FileViewer/FileViewerContent.js.map +1 -0
  11. package/lib/commonjs/components/FileViewer/FileViewerFooter.js +82 -0
  12. package/lib/commonjs/components/FileViewer/FileViewerFooter.js.map +1 -0
  13. package/lib/commonjs/components/FileViewer/FileViewerHeader.js +93 -0
  14. package/lib/commonjs/components/FileViewer/FileViewerHeader.js.map +1 -0
  15. package/lib/commonjs/components/FileViewer/index.js +133 -0
  16. package/lib/commonjs/components/FileViewer/index.js.map +1 -0
  17. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +34 -1
  18. package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
  19. package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
  20. package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js +14 -4
  21. package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
  22. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +11 -9
  23. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  24. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  25. package/lib/commonjs/domain/messageSearch/component/MessageSearchHeader.js +4 -1
  26. package/lib/commonjs/domain/messageSearch/component/MessageSearchHeader.js.map +1 -1
  27. package/lib/commonjs/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js +4 -2
  28. package/lib/commonjs/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js.map +1 -1
  29. package/lib/commonjs/fragments/createGroupChannelFragment.js +18 -16
  30. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  31. package/lib/commonjs/index.js +4 -0
  32. package/lib/commonjs/index.js.map +1 -1
  33. package/lib/commonjs/types.js +7 -0
  34. package/lib/commonjs/types.js.map +1 -1
  35. package/lib/commonjs/utils/promise.js +138 -0
  36. package/lib/commonjs/utils/promise.js.map +1 -0
  37. package/lib/commonjs/version.js +1 -1
  38. package/lib/commonjs/version.js.map +1 -1
  39. package/lib/module/components/ChannelInput/EditInput.js +3 -12
  40. package/lib/module/components/ChannelInput/EditInput.js.map +1 -1
  41. package/lib/module/components/ChannelInput/SendInput.js +3 -12
  42. package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
  43. package/lib/module/components/ChannelInput/index.js +32 -5
  44. package/lib/module/components/ChannelInput/index.js.map +1 -1
  45. package/lib/module/components/ChannelMessageList/index.js +148 -116
  46. package/lib/module/components/ChannelMessageList/index.js.map +1 -1
  47. package/lib/module/components/FileViewer/FileViewerContent.js +130 -0
  48. package/lib/module/components/FileViewer/FileViewerContent.js.map +1 -0
  49. package/lib/module/components/FileViewer/FileViewerFooter.js +74 -0
  50. package/lib/module/components/FileViewer/FileViewerFooter.js.map +1 -0
  51. package/lib/module/components/FileViewer/FileViewerHeader.js +85 -0
  52. package/lib/module/components/FileViewer/FileViewerHeader.js.map +1 -0
  53. package/lib/module/components/FileViewer/index.js +123 -0
  54. package/lib/module/components/FileViewer/index.js.map +1 -0
  55. package/lib/module/components/GroupChannelMessageRenderer/index.js +34 -2
  56. package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
  57. package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
  58. package/lib/module/domain/groupChannel/component/GroupChannelHeader.js +15 -5
  59. package/lib/module/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
  60. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +11 -9
  61. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  62. package/lib/module/domain/groupChannel/types.js.map +1 -1
  63. package/lib/module/domain/messageSearch/component/MessageSearchHeader.js +4 -1
  64. package/lib/module/domain/messageSearch/component/MessageSearchHeader.js.map +1 -1
  65. package/lib/module/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js +4 -2
  66. package/lib/module/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js.map +1 -1
  67. package/lib/module/fragments/createGroupChannelFragment.js +19 -17
  68. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  69. package/lib/module/index.js +4 -0
  70. package/lib/module/index.js.map +1 -1
  71. package/lib/module/types.js +5 -1
  72. package/lib/module/types.js.map +1 -1
  73. package/lib/module/utils/promise.js +132 -0
  74. package/lib/module/utils/promise.js.map +1 -0
  75. package/lib/module/version.js +1 -1
  76. package/lib/module/version.js.map +1 -1
  77. package/lib/typescript/src/components/ChannelInput/index.d.ts +2 -0
  78. package/lib/typescript/src/components/ChannelMessageList/index.d.ts +4 -1
  79. package/lib/typescript/src/components/FileViewer/FileViewerContent.d.ts +13 -0
  80. package/lib/typescript/src/components/FileViewer/FileViewerFooter.d.ts +9 -0
  81. package/lib/typescript/src/components/FileViewer/FileViewerHeader.d.ts +10 -0
  82. package/lib/typescript/src/components/{FileViewer.d.ts → FileViewer/index.d.ts} +5 -1
  83. package/lib/typescript/src/components/GroupChannelMessageRenderer/index.d.ts +3 -0
  84. package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +2 -0
  85. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  86. package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +2 -2
  87. package/lib/typescript/src/domain/groupChannel/types.d.ts +5 -2
  88. package/lib/typescript/src/types.d.ts +4 -0
  89. package/lib/typescript/src/utils/promise.d.ts +7 -0
  90. package/lib/typescript/src/version.d.ts +1 -1
  91. package/package.json +8 -7
  92. package/src/components/ChannelInput/EditInput.tsx +3 -15
  93. package/src/components/ChannelInput/SendInput.tsx +2 -9
  94. package/src/components/ChannelInput/index.tsx +27 -4
  95. package/src/components/ChannelMessageList/index.tsx +145 -115
  96. package/src/components/FileViewer/FileViewerContent.tsx +141 -0
  97. package/src/components/FileViewer/FileViewerFooter.tsx +73 -0
  98. package/src/components/FileViewer/FileViewerHeader.tsx +86 -0
  99. package/src/components/FileViewer/index.tsx +139 -0
  100. package/src/components/GroupChannelMessageRenderer/index.tsx +34 -2
  101. package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +3 -2
  102. package/src/domain/groupChannel/component/GroupChannelHeader.tsx +14 -3
  103. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +8 -6
  104. package/src/domain/groupChannel/types.ts +6 -2
  105. package/src/domain/messageSearch/component/MessageSearchHeader.tsx +4 -1
  106. package/src/domain/openChannelCreate/component/OpenChannelCreateProfileInput.tsx +4 -2
  107. package/src/fragments/createGroupChannelFragment.tsx +25 -15
  108. package/src/index.ts +5 -1
  109. package/src/types.ts +5 -0
  110. package/src/utils/promise.ts +139 -0
  111. package/src/version.ts +1 -1
  112. package/lib/commonjs/components/FileViewer.js +0 -300
  113. package/lib/commonjs/components/FileViewer.js.map +0 -1
  114. package/lib/module/components/FileViewer.js +0 -291
  115. package/lib/module/components/FileViewer.js.map +0 -1
  116. 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.2.0';
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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"}