@messenger-box/platform-mobile 0.0.1-alpha.178 → 0.0.1-alpha.182
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/CHANGELOG.md +24 -0
- package/lib/index.js +52 -128
- package/lib/index.js.map +1 -1
- package/package.json +4 -4
- package/src/screens/inbox/DialogMessages.tsx +4 -8
- package/src/screens/inbox/DialogsList.tsx +4 -16
- package/src/screens/inbox/components/DialogsListItem.tsx +40 -23
- package/src/screens/inbox/components/MessageInput.tsx +22 -15
- package/src/screens/inbox/components/MessageItem.tsx +36 -18
- package/src/screens/inbox/containers/ConversationView.tsx +41 -35
- package/src/screens/inbox/containers/Dialogs.tsx +21 -19
- package/src/screens/index.ts +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,30 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.0.1-alpha.182](https://github.com/cdmbase/messenger-box/compare/v0.0.1-alpha.181...v0.0.1-alpha.182) (2022-06-14)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @messenger-box/platform-mobile
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [0.0.1-alpha.181](https://github.com/cdmbase/messenger-box/compare/v0.0.1-alpha.180...v0.0.1-alpha.181) (2022-06-13)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @messenger-box/platform-mobile
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## [0.0.1-alpha.179](https://github.com/cdmbase/messenger-box/compare/v0.0.1-alpha.178...v0.0.1-alpha.179) (2022-06-11)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @messenger-box/platform-mobile
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
6
30
|
## [0.0.1-alpha.178](https://github.com/cdmbase/messenger-box/compare/v0.0.1-alpha.177...v0.0.1-alpha.178) (2022-06-09)
|
|
7
31
|
|
|
8
32
|
**Note:** Version bump only for package @messenger-box/platform-mobile
|
package/lib/index.js
CHANGED
|
@@ -241,14 +241,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
241
241
|
exports.DialogMessages = void 0;
|
|
242
242
|
const React = __importStar(__webpack_require__(/*! react */ "react"));
|
|
243
243
|
const native_1 = __webpack_require__(/*! @react-navigation/native */ "@react-navigation/native");
|
|
244
|
-
const
|
|
245
|
-
const DialogsHeader_1 = __webpack_require__(/*! ./components/DialogsHeader */ "./src/screens/inbox/components/DialogsHeader.tsx");
|
|
244
|
+
const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
|
|
246
245
|
const ConversationView_1 = __webpack_require__(/*! ./containers/ConversationView */ "./src/screens/inbox/containers/ConversationView.tsx");
|
|
247
246
|
function DialogMessages() {
|
|
248
247
|
const { params } = native_1.useRoute();
|
|
249
248
|
const navigation = native_1.useNavigation();
|
|
250
|
-
return (React.createElement(
|
|
251
|
-
React.createElement(DialogsHeader_1.DialogsHeader, { title: params.title, onBack: navigation.goBack }),
|
|
249
|
+
return (React.createElement(native_base_1.Box, { bg: 'white', flex: 1, p: 6 },
|
|
252
250
|
React.createElement(ConversationView_1.ConversationView, { channelId: params === null || params === void 0 ? void 0 : params.channel.id })));
|
|
253
251
|
}
|
|
254
252
|
exports.DialogMessages = DialogMessages;
|
|
@@ -287,66 +285,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
287
285
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
288
286
|
exports.DialogsList = void 0;
|
|
289
287
|
const React = __importStar(__webpack_require__(/*! react */ "react"));
|
|
290
|
-
const
|
|
291
|
-
const native_1 = __webpack_require__(/*! @react-navigation/native */ "@react-navigation/native");
|
|
292
|
-
const react_native_safe_area_context_1 = __webpack_require__(/*! react-native-safe-area-context */ "react-native-safe-area-context");
|
|
293
|
-
const DialogsHeader_1 = __webpack_require__(/*! ./components/DialogsHeader */ "./src/screens/inbox/components/DialogsHeader.tsx");
|
|
288
|
+
const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
|
|
294
289
|
const Dialogs_1 = __webpack_require__(/*! ./containers/Dialogs */ "./src/screens/inbox/containers/Dialogs.tsx");
|
|
295
290
|
function DialogsList() {
|
|
296
|
-
|
|
297
|
-
const onShowFilters = () => console.log('Show filters...');
|
|
298
|
-
return (React.createElement(react_native_safe_area_context_1.SafeAreaView, null,
|
|
299
|
-
React.createElement(DialogsHeader_1.DialogsHeader, { onBack: goBack, title: "All messages", extra: React.createElement(vector_icons_1.AntDesign, { onPress: onShowFilters, name: "filter", size: 18 }) }),
|
|
291
|
+
return (React.createElement(native_base_1.Box, { bg: 'white', flex: 1 },
|
|
300
292
|
React.createElement(Dialogs_1.Dialogs, null)));
|
|
301
293
|
}
|
|
302
294
|
exports.DialogsList = DialogsList;
|
|
303
295
|
|
|
304
296
|
|
|
305
|
-
/***/ }),
|
|
306
|
-
|
|
307
|
-
/***/ "./src/screens/inbox/components/DialogsHeader.tsx":
|
|
308
|
-
/*!********************************************************!*\
|
|
309
|
-
!*** ./src/screens/inbox/components/DialogsHeader.tsx ***!
|
|
310
|
-
\********************************************************/
|
|
311
|
-
/*! no static exports found */
|
|
312
|
-
/***/ (function(module, exports, __webpack_require__) {
|
|
313
|
-
|
|
314
|
-
"use strict";
|
|
315
|
-
|
|
316
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
317
|
-
if (k2 === undefined) k2 = k;
|
|
318
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
319
|
-
}) : (function(o, m, k, k2) {
|
|
320
|
-
if (k2 === undefined) k2 = k;
|
|
321
|
-
o[k2] = m[k];
|
|
322
|
-
}));
|
|
323
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
324
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
325
|
-
}) : function(o, v) {
|
|
326
|
-
o["default"] = v;
|
|
327
|
-
});
|
|
328
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
329
|
-
if (mod && mod.__esModule) return mod;
|
|
330
|
-
var result = {};
|
|
331
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
332
|
-
__setModuleDefault(result, mod);
|
|
333
|
-
return result;
|
|
334
|
-
};
|
|
335
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
336
|
-
exports.DialogsHeader = void 0;
|
|
337
|
-
const React = __importStar(__webpack_require__(/*! react */ "react"));
|
|
338
|
-
const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
|
|
339
|
-
const vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
|
|
340
|
-
function DialogsHeader({ onBack, extra, style, title }) {
|
|
341
|
-
return (React.createElement(native_base_1.Row, { paddingX: 4, paddingY: 2, style: style, alignItems: "center", justifyContent: "space-between" },
|
|
342
|
-
React.createElement(native_base_1.View, { flex: 1 }, onBack ? React.createElement(vector_icons_1.AntDesign, { onPress: onBack, name: "left", size: 18 }) : null),
|
|
343
|
-
React.createElement(native_base_1.View, { style: { flexDirection: 'row', flex: 1, flexGrow: 1 }, flex: 1 },
|
|
344
|
-
React.createElement(native_base_1.Text, { noOfLines: 1, flexShrink: 1, textAlign: "center", flexGrow: 1, fontSize: 20, fontWeight: "semibold" }, title || " ")),
|
|
345
|
-
React.createElement(native_base_1.View, { flex: 1, alignItems: "flex-end", justifyContent: "center", textAlign: "right" }, extra)));
|
|
346
|
-
}
|
|
347
|
-
exports.DialogsHeader = DialogsHeader;
|
|
348
|
-
|
|
349
|
-
|
|
350
297
|
/***/ }),
|
|
351
298
|
|
|
352
299
|
/***/ "./src/screens/inbox/components/DialogsListItem.tsx":
|
|
@@ -383,7 +330,6 @@ const lodash_1 = __webpack_require__(/*! lodash */ "lodash");
|
|
|
383
330
|
const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
|
|
384
331
|
const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
|
|
385
332
|
const date_fns_1 = __webpack_require__(/*! date-fns */ "date-fns");
|
|
386
|
-
const react_native_gesture_handler_1 = __webpack_require__(/*! react-native-gesture-handler */ "react-native-gesture-handler");
|
|
387
333
|
const platform_client_1 = __webpack_require__(/*! @messenger-box/platform-client */ "@messenger-box/platform-client");
|
|
388
334
|
const createdAtText = (value) => {
|
|
389
335
|
if (!value)
|
|
@@ -400,7 +346,7 @@ const createdAtText = (value) => {
|
|
|
400
346
|
* - Get Reservation info: reservation date, status
|
|
401
347
|
* - Add ability to get property information: name, logo
|
|
402
348
|
*/
|
|
403
|
-
const DialogsListItem = function DialogsListItem({ refreshKey, channel, currentUserId, onOpen }) {
|
|
349
|
+
const DialogsListItem = function DialogsListItem({ refreshKey, channel, currentUserId, onOpen, }) {
|
|
404
350
|
var _a;
|
|
405
351
|
const message$ = platform_client_1.useGetMessagesQuery({
|
|
406
352
|
fetchPolicy: 'network-only',
|
|
@@ -416,16 +362,15 @@ const DialogsListItem = function DialogsListItem({ refreshKey, channel, currentU
|
|
|
416
362
|
const text = message === null || message === void 0 ? void 0 : message.message;
|
|
417
363
|
const date = createdAtText(message === null || message === void 0 ? void 0 : message.createdAt);
|
|
418
364
|
const onOpenChannel = () => onOpen(channel, { title, users });
|
|
419
|
-
return (react_1.default.createElement(
|
|
420
|
-
react_1.default.createElement(native_base_1.
|
|
421
|
-
react_1.default.createElement(native_base_1.
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
react_1.default.createElement(native_base_1.View, { flexDirection: "row", alignItems: "center", justifyContent: "space-between" },
|
|
365
|
+
return (react_1.default.createElement(native_base_1.Pressable, { onPress: onOpenChannel, borderWidth: '1', borderRadius: "md", borderColor: 'gray.200', shadow: '6' },
|
|
366
|
+
react_1.default.createElement(native_base_1.HStack, { m: 3, space: 2, alignItems: "center" },
|
|
367
|
+
react_1.default.createElement(native_base_1.Image, { alt: 'image', width: 16, borderRadius: "full", height: 16, source: { uri: 'https://picsum.photos/220' } }),
|
|
368
|
+
react_1.default.createElement(native_base_1.VStack, { space: 1 },
|
|
369
|
+
react_1.default.createElement(native_base_1.HStack, { alignItems: "center", justifyContent: "space-between" },
|
|
425
370
|
react_1.default.createElement(native_base_1.Text, { fontSize: "xs", color: "red.500" }, "Request withdrawal"),
|
|
426
371
|
react_1.default.createElement(native_base_1.Text, { color: "gray.500" }, date)),
|
|
427
|
-
react_1.default.createElement(native_base_1.Text, {
|
|
428
|
-
react_1.default.createElement(native_base_1.Text, {
|
|
372
|
+
title !== '' ? (react_1.default.createElement(native_base_1.Text, { color: "gray.600", fontSize: "lg", fontWeight: "semibold" }, title)) : null,
|
|
373
|
+
react_1.default.createElement(native_base_1.Text, { color: "gray.600" }, text),
|
|
429
374
|
react_1.default.createElement(native_base_1.Text, null, "Sep 12-16, 2019. Private room fully furnis...")))));
|
|
430
375
|
};
|
|
431
376
|
exports.DialogsListItem = DialogsListItem;
|
|
@@ -467,7 +412,6 @@ const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
|
|
|
467
412
|
const vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
|
|
468
413
|
const ImagePicker = __importStar(__webpack_require__(/*! expo-image-picker */ "expo-image-picker"));
|
|
469
414
|
const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
|
|
470
|
-
const react_native_gesture_handler_1 = __webpack_require__(/*! react-native-gesture-handler */ "react-native-gesture-handler");
|
|
471
415
|
exports.MessageInput = react_1.forwardRef(function MessageInput({ onSend }, ref) {
|
|
472
416
|
const [text, setText] = react_1.useState('');
|
|
473
417
|
const [files, setFiles] = react_1.useState([]);
|
|
@@ -479,7 +423,7 @@ exports.MessageInput = react_1.forwardRef(function MessageInput({ onSend }, ref)
|
|
|
479
423
|
const onSendMessage = () => {
|
|
480
424
|
onSend(text, files);
|
|
481
425
|
};
|
|
482
|
-
const onRemoveImage = (url) => setFiles(files => files.filter(file => file !== url));
|
|
426
|
+
const onRemoveImage = (url) => setFiles((files) => files.filter((file) => file !== url));
|
|
483
427
|
const onSelectImages = async () => {
|
|
484
428
|
// No permissions request is necessary for launching the image library
|
|
485
429
|
await ImagePicker.requestMediaLibraryPermissionsAsync();
|
|
@@ -492,12 +436,12 @@ exports.MessageInput = react_1.forwardRef(function MessageInput({ onSend }, ref)
|
|
|
492
436
|
setFiles(files.concat(result.uri)); // @igor need ot check this
|
|
493
437
|
}
|
|
494
438
|
};
|
|
495
|
-
return (react_1.default.createElement(native_base_1.
|
|
439
|
+
return (react_1.default.createElement(native_base_1.VStack, { marginTop: 3, alignContent: "center" },
|
|
496
440
|
react_1.default.createElement(native_base_1.View, null,
|
|
497
|
-
react_1.default.createElement(native_base_1.TextField, { placeholder:
|
|
498
|
-
files.length ? react_1.default.createElement(native_base_1.View, { mb: 4, flexDirection: "row" }, files.map((file, index) => (react_1.default.createElement(
|
|
499
|
-
react_1.default.createElement(native_base_1.Image, { mr: 2, height: 10, width: 10, source: { uri: file } }))))) : null,
|
|
500
|
-
react_1.default.createElement(native_base_1.
|
|
441
|
+
react_1.default.createElement(native_base_1.TextField, { placeholder: "Message...", borderColor: "gray.400", value: text, onChange: (e) => setText(e.nativeEvent.text), fontSize: 14 })),
|
|
442
|
+
files.length ? (react_1.default.createElement(native_base_1.View, { mb: 4, flexDirection: "row" }, files.map((file, index) => (react_1.default.createElement(native_base_1.Pressable, { onPress: () => onRemoveImage(file), key: index },
|
|
443
|
+
react_1.default.createElement(native_base_1.Image, { alt: 'image', mr: 2, height: 10, width: 10, source: { uri: file } })))))) : null,
|
|
444
|
+
react_1.default.createElement(native_base_1.HStack, { alignContent: "center", justifyContent: "space-between" },
|
|
501
445
|
react_1.default.createElement(vector_icons_1.FontAwesome, { onPress: onSelectImages, size: 20, style: { marginRight: 5 }, name: "file-image-o" }),
|
|
502
446
|
react_1.default.createElement(vector_icons_1.FontAwesome, { onPress: onSendMessage, size: 20, name: "send" }))));
|
|
503
447
|
});
|
|
@@ -551,23 +495,26 @@ const createdAtText = (value) => {
|
|
|
551
495
|
function MessageItem({ message, userId }) {
|
|
552
496
|
var _a;
|
|
553
497
|
const isOwnMessage = react_1.useMemo(() => { var _a, _b; return ((_b = (_a = message.editedBy) === null || _a === void 0 ? void 0 : _a.alias) === null || _b === void 0 ? void 0 : _b.includes(userId)) || false; }, [message.author, userId]);
|
|
554
|
-
const author = react_1.useMemo(() => { var _a, _b; return message.author ? `${(_a = message.author) === null || _a === void 0 ? void 0 : _a.givenName} ${(_b = message.author) === null || _b === void 0 ? void 0 : _b.familyName}` : null; }, [message.author]);
|
|
555
|
-
return (react_1.default.createElement(native_base_1.
|
|
556
|
-
isOwnMessage ? react_1.default.createElement(native_base_1.
|
|
557
|
-
react_1.default.createElement(native_base_1.
|
|
558
|
-
react_1.default.createElement(native_base_1.
|
|
498
|
+
const author = react_1.useMemo(() => { var _a, _b; return (message.author ? `${(_a = message.author) === null || _a === void 0 ? void 0 : _a.givenName} ${(_b = message.author) === null || _b === void 0 ? void 0 : _b.familyName}` : null); }, [message.author]);
|
|
499
|
+
return (react_1.default.createElement(native_base_1.HStack, { mb: 4, alignItems: "center" },
|
|
500
|
+
isOwnMessage ? react_1.default.createElement(native_base_1.Box, { flexGrow: 1 }) : null,
|
|
501
|
+
react_1.default.createElement(native_base_1.Box, { borderRadius: "md", backgroundColor: "gray.200", paddingX: 3, paddingY: "1.5", flexGrow: 3 },
|
|
502
|
+
react_1.default.createElement(native_base_1.Box, { flexDirection: "row", alignContent: "flex-start", mb: 1 },
|
|
559
503
|
react_1.default.createElement(native_base_1.Text, { flexGrow: 1, fontWeight: "semibold" }, author),
|
|
560
504
|
react_1.default.createElement(native_base_1.Text, { fontSize: "xs", color: "gray.500" }, createdAtText(message.createdAt))),
|
|
561
505
|
react_1.default.createElement(native_base_1.Text, { flexGrow: 1 }, message.message),
|
|
562
506
|
react_1.default.createElement(MessageItem.FilesView, { files: (_a = message.files) === null || _a === void 0 ? void 0 : _a.data })),
|
|
563
|
-
!isOwnMessage ? react_1.default.createElement(native_base_1.
|
|
507
|
+
!isOwnMessage ? react_1.default.createElement(native_base_1.Box, { flexGrow: 1 }) : null));
|
|
564
508
|
}
|
|
565
509
|
exports.MessageItem = MessageItem;
|
|
566
510
|
MessageItem.FilesView = function MessageItemFiles({ files = [] }) {
|
|
567
511
|
if (!files.length) {
|
|
568
512
|
return null;
|
|
569
513
|
}
|
|
570
|
-
return (react_1.default.createElement(native_base_1.
|
|
514
|
+
return (react_1.default.createElement(native_base_1.HStack, { space: 2, mt: 2 }, files.map((file) => (react_1.default.createElement(native_base_1.Image, { alt: 'image', mr: 2, height: "16", width: "16", source: {
|
|
515
|
+
uri: 'https://preview.keenthemes.com/metronic-v4/theme/assets/pages/media/profile/profile_user.jpg',
|
|
516
|
+
scale: 0.2,
|
|
517
|
+
} })))));
|
|
571
518
|
};
|
|
572
519
|
|
|
573
520
|
|
|
@@ -603,9 +550,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
603
550
|
};
|
|
604
551
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
605
552
|
exports.ConversationView = void 0;
|
|
606
|
-
const react_native_gesture_handler_1 = __webpack_require__(/*! react-native-gesture-handler */ "react-native-gesture-handler");
|
|
607
553
|
const platform_client_1 = __webpack_require__(/*! @messenger-box/platform-client */ "@messenger-box/platform-client");
|
|
608
554
|
const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
|
|
555
|
+
const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
|
|
609
556
|
const react_redux_1 = __webpack_require__(/*! react-redux */ "react-redux");
|
|
610
557
|
const MessageItem_1 = __webpack_require__(/*! ../components/MessageItem */ "./src/screens/inbox/components/MessageItem.tsx");
|
|
611
558
|
const MessageInput_1 = __webpack_require__(/*! ../components/MessageInput */ "./src/screens/inbox/components/MessageInput.tsx");
|
|
@@ -634,22 +581,22 @@ function ConversationView({ channelId }) {
|
|
|
634
581
|
react_1.useEffect(() => {
|
|
635
582
|
messages$.refetch({ skip: offset });
|
|
636
583
|
}, [offset]);
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
}, [channelId, userId]);
|
|
584
|
+
// useEffect(() => {
|
|
585
|
+
// messages$.subscribeToMore({
|
|
586
|
+
// variables: { channelId },
|
|
587
|
+
// document: onChatMessageAddedDocument,
|
|
588
|
+
// updateQuery: (prev, { subscriptionData }) => {
|
|
589
|
+
// const list = (subscriptionData.data.messages.data || []) as IPost[];
|
|
590
|
+
// const added = list.filter((data) => !data.author.alias.includes(userId));
|
|
591
|
+
// messages.concat(...added);
|
|
592
|
+
// return prev;
|
|
593
|
+
// },
|
|
594
|
+
// });
|
|
595
|
+
// }, [channelId, userId]);
|
|
649
596
|
react_1.useEffect(() => {
|
|
650
597
|
var _a, _b;
|
|
651
598
|
if ((_b = (_a = messages$.data) === null || _a === void 0 ? void 0 : _a.messages.data) === null || _b === void 0 ? void 0 : _b.length) {
|
|
652
|
-
setMessages(messages => { var _a; return [...messages, ...(((_a = messages$.data) === null || _a === void 0 ? void 0 : _a.messages.data) || [])]; });
|
|
599
|
+
setMessages((messages) => { var _a; return [...messages, ...(((_a = messages$.data) === null || _a === void 0 ? void 0 : _a.messages.data) || [])]; });
|
|
653
600
|
}
|
|
654
601
|
}, [messages$.data]);
|
|
655
602
|
const onLoadMore = () => setOffset(offset + MESSAGES_LIMIT);
|
|
@@ -676,13 +623,13 @@ function ConversationView({ channelId }) {
|
|
|
676
623
|
file: files,
|
|
677
624
|
saveUploadedFile: {
|
|
678
625
|
variables: {
|
|
679
|
-
postId: data.sendMessage.id
|
|
626
|
+
postId: data.sendMessage.id,
|
|
680
627
|
},
|
|
681
628
|
},
|
|
682
629
|
createUploadLink: {
|
|
683
630
|
variables: {
|
|
684
|
-
postId: data.sendMessage.id
|
|
685
|
-
}
|
|
631
|
+
postId: data.sendMessage.id,
|
|
632
|
+
},
|
|
686
633
|
},
|
|
687
634
|
});
|
|
688
635
|
await edit({
|
|
@@ -690,13 +637,13 @@ function ConversationView({ channelId }) {
|
|
|
690
637
|
channelId,
|
|
691
638
|
content: text,
|
|
692
639
|
messageId: data.sendMessage.id,
|
|
693
|
-
files: uploadedFiles.map(i => i.id),
|
|
694
|
-
}
|
|
640
|
+
files: uploadedFiles.map((i) => i.id),
|
|
641
|
+
},
|
|
695
642
|
});
|
|
696
643
|
}
|
|
697
644
|
};
|
|
698
645
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
699
|
-
react_1.default.createElement(
|
|
646
|
+
react_1.default.createElement(native_base_1.FlatList, { inverted: true, data: messages, onEndReached: onLoadMore, flex: 1, renderItem: ({ item }) => react_1.default.createElement(MessageItem_1.MessageItem, { userId: userId, message: item }) }),
|
|
700
647
|
react_1.default.createElement(MessageInput_1.MessageInput, { onSend: onSendMessage, ref: input$ })));
|
|
701
648
|
}
|
|
702
649
|
exports.ConversationView = ConversationView;
|
|
@@ -753,9 +700,7 @@ function Dialogs() {
|
|
|
753
700
|
* HostChannels: channel.members[0].user !== userId
|
|
754
701
|
* GuestChannels: channel.members[0].user == userId
|
|
755
702
|
*/
|
|
756
|
-
const filter = react_1.useCallback((channel) => channel.type === 'DIRECT'
|
|
757
|
-
&& (channel === null || channel === void 0 ? void 0 : channel.displayName) !== 'surveybot'
|
|
758
|
-
&& (channel === null || channel === void 0 ? void 0 : channel.displayName) !== 'admin (you)', [userId]);
|
|
703
|
+
const filter = react_1.useCallback((channel) => channel.type === 'DIRECT' && (channel === null || channel === void 0 ? void 0 : channel.displayName) !== 'surveybot' && (channel === null || channel === void 0 ? void 0 : channel.displayName) !== 'admin (you)', [userId]);
|
|
759
704
|
const users = react_1.useMemo(() => { var _a; return lodash_1.keyBy((_a = users$.data) === null || _a === void 0 ? void 0 : _a.getUsers, 'id'); }, [(_a = users$.data) === null || _a === void 0 ? void 0 : _a.getUsers]);
|
|
760
705
|
// Filter all channles
|
|
761
706
|
const list = react_1.useMemo(() => { var _a, _b; return ((_b = (_a = channels$.data) === null || _a === void 0 ? void 0 : _a.channels) === null || _b === void 0 ? void 0 : _b.filter(filter)) || []; }, [filter, (_b = channels$.data) === null || _b === void 0 ? void 0 : _b.channels]);
|
|
@@ -767,8 +712,9 @@ function Dialogs() {
|
|
|
767
712
|
return setRk(Math.random());
|
|
768
713
|
};
|
|
769
714
|
const isRefreshing = channels$.loading || users$.loading;
|
|
770
|
-
const onOpen = (channel, options) => navigation.navigate(
|
|
771
|
-
return (react_1.default.createElement(native_base_1.
|
|
715
|
+
const onOpen = (channel, options) => navigation.navigate('Inbox.DialogMessages', Object.assign(Object.assign({}, options), { channel, hideTabBar: true }));
|
|
716
|
+
return (react_1.default.createElement(native_base_1.Box, { p: 2 },
|
|
717
|
+
react_1.default.createElement(native_base_1.FlatList, { data: channels, onRefresh: onRefresh, refreshing: isRefreshing, contentContainerStyle: { minHeight: '100%' }, ItemSeparatorComponent: () => react_1.default.createElement(native_base_1.Box, { height: "0.5", backgroundColor: "gray.200" }), renderItem: ({ item: channel }) => (react_1.default.createElement(DialogsListItem_1.DialogsListItem, { refreshKey: rk, onOpen: onOpen, currentUserId: userId, channel: channel })) })));
|
|
772
718
|
}
|
|
773
719
|
exports.Dialogs = Dialogs;
|
|
774
720
|
|
|
@@ -885,28 +831,6 @@ module.exports = require("react");
|
|
|
885
831
|
|
|
886
832
|
/***/ }),
|
|
887
833
|
|
|
888
|
-
/***/ "react-native-gesture-handler":
|
|
889
|
-
/*!***********************************************!*\
|
|
890
|
-
!*** external "react-native-gesture-handler" ***!
|
|
891
|
-
\***********************************************/
|
|
892
|
-
/*! no static exports found */
|
|
893
|
-
/***/ (function(module, exports) {
|
|
894
|
-
|
|
895
|
-
module.exports = require("react-native-gesture-handler");
|
|
896
|
-
|
|
897
|
-
/***/ }),
|
|
898
|
-
|
|
899
|
-
/***/ "react-native-safe-area-context":
|
|
900
|
-
/*!*************************************************!*\
|
|
901
|
-
!*** external "react-native-safe-area-context" ***!
|
|
902
|
-
\*************************************************/
|
|
903
|
-
/*! no static exports found */
|
|
904
|
-
/***/ (function(module, exports) {
|
|
905
|
-
|
|
906
|
-
module.exports = require("react-native-safe-area-context");
|
|
907
|
-
|
|
908
|
-
/***/ }),
|
|
909
|
-
|
|
910
834
|
/***/ "react-redux":
|
|
911
835
|
/*!******************************!*\
|
|
912
836
|
!*** external "react-redux" ***!
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/index.ts","webpack:///./src/module.ts","webpack:///./src/navigation/InboxNavigation.tsx","webpack:///./src/navigation/index.ts","webpack:///./src/screens/inbox/DialogMessages.tsx","webpack:///./src/screens/inbox/DialogsList.tsx","webpack:///./src/screens/inbox/components/DialogsHeader.tsx","webpack:///./src/screens/inbox/components/DialogsListItem.tsx","webpack:///./src/screens/inbox/components/MessageInput.tsx","webpack:///./src/screens/inbox/components/MessageItem.tsx","webpack:///./src/screens/inbox/containers/ConversationView.tsx","webpack:///./src/screens/inbox/containers/Dialogs.tsx","webpack:///external \"@common-stack/client-react\"","webpack:///external \"@expo/vector-icons\"","webpack:///external \"@messenger-box/platform-client\"","webpack:///external \"@react-navigation/native\"","webpack:///external \"@react-navigation/native-stack\"","webpack:///external \"date-fns\"","webpack:///external \"expo-image-picker\"","webpack:///external \"lodash\"","webpack:///external \"native-base\"","webpack:///external \"react\"","webpack:///external \"react-native-gesture-handler\"","webpack:///external \"react-native-safe-area-context\"","webpack:///external \"react-redux\""],"names":[],"mappings":"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","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\n","import PlatformModule from './module';\n\nimport { Feature } from '@common-stack/client-react';\n\nexport default new Feature(PlatformModule);\nexport * from './navigation';\n","/* eslint-disable import/no-extraneous-dependencies */\nimport { Feature } from '@common-stack/client-react';\nimport { schema, typePolicies, dataIdFromObject } from '@messenger-box/platform-client';\n\nexport default new Feature({\n dataIdFromObject,\n clientStateParams: { typeDefs: schema, typePolicies },\n});\n","import * as React from 'react';\nimport { createNativeStackNavigator } from \"@react-navigation/native-stack\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\nimport { DialogMessages } from \"../screens/inbox/DialogMessages\";\nimport { DialogsList } from \"../screens/inbox/DialogsList\";\n\nconst InboxStack = createNativeStackNavigator();\n\nexport function InboxNavigation() {\n return (\n <InboxStack.Navigator \n initialRouteName=\"Inbox.DialogsList\"\n >\n <InboxStack.Screen \n component={DialogsList}\n name=\"Inbox.DialogsList\"\n options={{ header: () => null }}\n />\n <InboxStack.Screen \n name=\"Inbox.DialogMessages\"\n component={DialogMessages}\n options={{ header: () => null }}\n />\n </InboxStack.Navigator>\n );\n}","export * from './InboxNavigation';\n","import * as React from 'react';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { DialogsHeader } from './components/DialogsHeader';\nimport { ConversationView } from './containers/ConversationView';\n\nexport function DialogMessages() {\n const { params } = useRoute<any>();\n const navigation = useNavigation();\n\n return (\n <SafeAreaView style={{ flex: 1, flexGrow: 1 }}>\n <DialogsHeader \n title={params.title}\n onBack={navigation.goBack}\n />\n <ConversationView channelId={params?.channel.id} />\n </SafeAreaView>\n );\n}","import * as React from 'react';\nimport { AntDesign } from '@expo/vector-icons';\nimport { useNavigation } from '@react-navigation/native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\n\nimport { DialogsHeader } from './components/DialogsHeader';\nimport { Dialogs } from './containers/Dialogs';\n\nexport function DialogsList() {\n const { goBack } = useNavigation();\n\n const onShowFilters = () => console.log('Show filters...');\n\n return (\n <SafeAreaView>\n <DialogsHeader \n onBack={goBack}\n title=\"All messages\"\n extra={<AntDesign onPress={onShowFilters} name=\"filter\" size={18} />}\n />\n\n <Dialogs />\n </SafeAreaView>\n );\n}","import * as React from 'react';\nimport { Row, Text, View } from 'native-base';\nimport { AntDesign } from '@expo/vector-icons';\nimport { StyleProp, ViewStyle } from 'react-native';\n\nexport function DialogsHeader({ onBack, extra, style, title }: { onBack?: () => void, extra?: any, style?: StyleProp<ViewStyle>, title: string }) {\n return (\n <Row paddingX={4} paddingY={2} style={style} alignItems=\"center\" justifyContent=\"space-between\">\n <View flex={1}>\n {onBack ? <AntDesign onPress={onBack} name=\"left\" size={18} /> : null}\n </View>\n <View style={{ flexDirection: 'row', flex: 1, flexGrow: 1 }} flex={1}>\n <Text noOfLines={1} flexShrink={1} textAlign=\"center\" flexGrow={1} fontSize={20} fontWeight=\"semibold\">{title || \" \"}</Text>\n </View>\n <View flex={1} alignItems=\"flex-end\" justifyContent=\"center\" textAlign=\"right\">\n {extra}\n </View>\n </Row>\n );\n}\n\n","import { first } from 'lodash';\nimport React, { useEffect, useMemo } from 'react'\nimport { Text, View, Image } from 'native-base';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { TouchableOpacity } from 'react-native-gesture-handler';\nimport { IChannel, IUserAccount, useGetMessagesQuery } from '@messenger-box/platform-client';\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n let date = new Date(value);\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(new Date(value), 'MMM dd, yyyy');\n};\n\nexport interface IDialogListChannel extends IChannel {\n users: IUserAccount[];\n}\n\nexport interface IDialogListItemProps {\n refreshKey?: number;\n currentUserId: string;\n channel: IDialogListChannel;\n onOpen: (channel: IChannel, options?: any) => void;\n}\n\n/**\n * TODO:\n * - Get Reservation info: reservation date, status\n * - Add ability to get property information: name, logo\n */\nexport const DialogsListItem: React.FC<IDialogListItemProps> = function DialogsListItem({ refreshKey, channel, currentUserId, onOpen }) {\n const message$ = useGetMessagesQuery({\n fetchPolicy: 'network-only',\n variables: { limit: 1, channelId: channel.id },\n });\n\n // Workaround for messages refresh: update latest messages view after list refresh\n useEffect(() => {\n message$.refetch();\n }, [refreshKey]);\n\n const users = useMemo(() => channel.users.filter(({ alias }) => !alias?.includes(currentUserId)), [currentUserId]);\n \n const message = useMemo(() => first(message$.data?.messages.data), [message$.data?.messages]);\n const title = useMemo(() => users.map(({ givenName, familyName }) => `${givenName} ${familyName}`).join(','), [users]);\n \n const text = message?.message;\n const date = createdAtText(message?.createdAt);\n \n const onOpenChannel = () => onOpen(channel, { title, users });\n\n return (\n <TouchableOpacity onPress={onOpenChannel}>\n <View paddingX={5} paddingY={2} flexDirection=\"row\" alignItems=\"center\">\n <View>\n <Image width={16} borderRadius=\"full\" height={16} marginRight={3} source={{ uri: \"https://picsum.photos/220\" }} />\n </View>\n <View flexGrow={1}>\n <View flexDirection=\"row\" alignItems=\"center\" justifyContent=\"space-between\">\n {/* TODO: change to valid status */}\n <Text fontSize=\"xs\" color=\"red.500\">Request withdrawal</Text>\n <Text color=\"gray.500\">{date}</Text>\n </View>\n <Text marginBottom={1} color=\"gray.600\" fontSize=\"lg\" fontWeight=\"semibold\">{title}</Text>\n <Text marginBottom={1} color=\"gray.600\">{text}</Text>\n {/* TODO: change to valid reservation date */}\n <Text>Sep 12-16, 2019. Private room fully furnis...</Text>\n </View>\n </View>\n </TouchableOpacity>\n );\n}","import { TextField, View, Image } from 'native-base';\nimport { FontAwesome } from '@expo/vector-icons';\nimport * as ImagePicker from 'expo-image-picker';\nimport React, { forwardRef, useImperativeHandle, useState } from 'react';\nimport { TouchableOpacity } from 'react-native-gesture-handler';\n\nexport const MessageInput = forwardRef(function MessageInput({ onSend }: any, ref) {\n const [text, setText] = useState('');\n const [files, setFiles] = useState<string[]>([]);\n\n const reset = () => {\n setText('');\n setFiles([]);\n };\n\n useImperativeHandle(ref, () => ({ reset, text, files }));\n\n const onSendMessage = () => {\n onSend(text, files);\n };\n const onRemoveImage = (url: string) => setFiles(files => files.filter(file => file !== url));\n const onSelectImages = async () => {\n // No permissions request is necessary for launching the image library\n await ImagePicker.requestMediaLibraryPermissionsAsync();\n let result = await ImagePicker.launchImageLibraryAsync({\n // base64: true,\n // aspect: [4, 3],\n mediaTypes: ImagePicker.MediaTypeOptions.Images,\n });\n\n if (!result.cancelled) {\n setFiles(files.concat((result as any).uri)); // @igor need ot check this\n }\n };\n\n return (\n <View paddingX={3} marginTop={3} flexDirection=\"column\" alignContent=\"center\">\n <View>\n <TextField placeholder='Message...' borderColor=\"gray.400\" value={text} onChange={(e) => setText(e.nativeEvent.text)} fontSize={14} />\n </View>\n {files.length ? <View mb={4} flexDirection=\"row\">\n {files.map((file, index) => (\n <TouchableOpacity onPress={() => onRemoveImage(file)} key={index}>\n <Image mr={2} height={10} width={10} source={{ uri: file }} />\n </TouchableOpacity>\n ))}\n </View> : null}\n <View flexDirection=\"row\" paddingX=\"3\" alignContent=\"center\" justifyContent=\"space-between\">\n <FontAwesome onPress={onSelectImages} size={20} style={{ marginRight: 5 }} name=\"file-image-o\" />\n <FontAwesome onPress={onSendMessage} size={20} name=\"send\" />\n </View>\n </View>\n );\n});\n","import React, { useMemo } from 'react';\nimport { Text, View, Image } from \"native-base\";\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { IFileInfo, IPost } from '@messenger-box/platform-client';\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n let date = new Date(value);\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(new Date(value), 'MMM dd, yyyy');\n};\n\nexport function MessageItem({ message, userId }: { message: IPost, userId: string }) {\n const isOwnMessage = useMemo(() => message.editedBy?.alias?.includes(userId) || false, [message.author, userId]);\n const author = useMemo(() => message.author ? `${message.author?.givenName} ${message.author?.familyName}` : null, [message.author]);\n\n return (\n <View mb={4} flexDirection=\"row\" alignItems=\"center\" paddingX={3}>\n {isOwnMessage ? <View flexGrow={1} /> : null}\n <View borderRadius=\"md\" backgroundColor=\"gray.200\" paddingX={3} paddingY=\"1.5\" flexGrow={3}>\n <View flexDirection=\"row\" alignContent=\"flex-start\" mb={1}>\n <Text flexGrow={1} fontWeight=\"semibold\">{author}</Text>\n <Text fontSize=\"xs\" color=\"gray.500\">{createdAtText(message.createdAt)}</Text>\n </View>\n <Text flexGrow={1}>{message.message}</Text>\n <MessageItem.FilesView files={message.files?.data as IFileInfo[]} />\n </View>\n {!isOwnMessage ? <View flexGrow={1} /> : null}\n </View>\n );\n}\n\nMessageItem.FilesView = function MessageItemFiles({ files = [] }: { files: IFileInfo[] }) {\n if(!files.length) {\n return null;\n }\n\n return (\n <View mt={2} flexDirection=\"row\">\n {files.map(file => <Image mr={2} height=\"16\" width=\"16\" source={{ uri: \"https://preview.keenthemes.com/metronic-v4/theme/assets/pages/media/profile/profile_user.jpg\", scale: 0.2 }} />)}\n </View>\n );\n}\n","import { FlatList } from 'react-native-gesture-handler';\n\nimport { IPost, useEditMessageMutation, useGetMessagesQuery, useSendMessagesMutation, useUploadFiles, onChatMessageAddedDocument } from '@messenger-box/platform-client';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { MessageItem } from '../components/MessageItem';\nimport { MessageInput } from '../components/MessageInput';\nimport { IFileInfo } from '@messenger-box/core';\n\nconst MESSAGES_LIMIT = 5;\n\nexport function ConversationView({ channelId }: any) {\n const input$ = useRef<any>();\n const [offset, setOffset] = useState(0);\n const [messages, setMessages] = useState<IPost[]>([]);\n const userId = useSelector((state: any) => state.user.auth0UserId);\n\n const [send, send$] = useSendMessagesMutation({\n context: {},\n });\n\n const [edit, edit$] = useEditMessageMutation({\n context: {},\n });\n\n const { startUpload } = useUploadFiles();\n\n const messages$ = useGetMessagesQuery({\n variables: {\n // skip: count,\n channelId,\n limit: MESSAGES_LIMIT,\n },\n skip: !channelId,\n fetchPolicy: 'network-only',\n });\n\n useEffect(() => {\n messages$.refetch({ skip: offset })\n }, [offset]);\n\n useEffect(() => {\n messages$.subscribeToMore({\n variables: { channelId },\n document: onChatMessageAddedDocument,\n updateQuery: (prev, { subscriptionData }) => {\n const list = (subscriptionData.data.messages.data || []) as IPost[];\n const added = list.filter(data => !data.author.alias.includes(userId));\n\n messages.concat(...added);\n return prev;\n }\n });\n }, [channelId, userId]);\n\n useEffect(() => {\n if(messages$.data?.messages.data?.length) {\n setMessages(messages => [...messages, ...(messages$.data?.messages.data || [] as any)]);\n }\n }, [messages$.data]);\n\n const onLoadMore = () => setOffset(offset + MESSAGES_LIMIT);\n const onSendMessage = async (text: string, files: File[]) => {\n input$.current?.reset();\n const { data } = await send({\n variables: {\n channelId,\n content: text,\n // files: [], // files: uploadedFiles.map(i => i.data.id)\n },\n update: (cache, { data, errors }) => {\n if (!data || errors) {\n return;\n }\n\n if(data.sendMessage) {\n setMessages([ data.sendMessage as IPost, ...messages ]);\n }\n },\n });\n\n if(files.length) {\n const {data: uploadedFiles} = await startUpload({\n file:files,\n saveUploadedFile:{\n variables:{\n postId:data!.sendMessage!.id\n },\n },\n createUploadLink:{\n variables:{\n postId:data!.sendMessage!.id\n }\n },\n });\n\n await edit({\n variables: {\n channelId,\n content: text,\n messageId: data!.sendMessage!.id,\n files: (uploadedFiles as unknown as IFileInfo[]).map(i => i.id),\n }\n })\n }\n };\n\n return (\n <>\n <FlatList\n inverted\n data={messages}\n onEndReached={onLoadMore}\n style={{ flex: 1, flexGrow: 1 }}\n renderItem={({ item }) => <MessageItem userId={userId} message={item} />}\n />\n\n <MessageInput onSend={onSendMessage} ref={input$} />\n </>\n );\n}\n","import { FlatList, ScrollView, Text, View } from 'native-base';\nimport { IChannel, useGetAllChannelQuery, useGetAllUsersQuery } from '@messenger-box/platform-client';\nimport { useSelector } from 'react-redux';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { keyBy } from 'lodash';\nimport { useNavigation } from '@react-navigation/native';\n\nimport { DialogsListItem } from '../components/DialogsListItem';\n\nexport function Dialogs() {\n const users$ = useGetAllUsersQuery();\n const navigation: any = useNavigation();\n const channels$ = useGetAllChannelQuery();\n const [rk, setRk] = useState(Math.random()); \n const userId = useSelector((state: any) => state.user.auth0UserId);\n\n /**\n * TODO: add ability to check channel members\n * HostChannels: channel.members[0].user !== userId\n * GuestChannels: channel.members[0].user == userId\n */\n const filter = useCallback(\n (channel) =>\n channel.type === 'DIRECT' \n && channel?.displayName !== 'surveybot'\n && channel?.displayName !== 'admin (you)',\n [userId],\n );\n\n const users = useMemo(() => keyBy(users$.data?.getUsers, 'id'), [users$.data?.getUsers]);\n\n // Filter all channles\n const list = useMemo(() => \n channels$.data?.channels?.filter(filter) || [], [filter, channels$.data?.channels]);\n\n // Assign users to channel item\n const channels = useMemo(\n () => list.map((channel) => ({ ...channel, users: channel?.members?.map((record) => users[record?.user!]) }))\n , [list, users$.data?.getUsers, userId]);\n\n const onRefresh = async () => {\n await users$.refetch();\n await channels$.refetch();\n return setRk(Math.random());\n };\n\n const isRefreshing = channels$.loading || users$.loading;\n\n const onOpen = (channel: IChannel, options: { title: string }) => \n navigation.navigate(\"Inbox.DialogMessages\" as any, { ...options, channel, hideTabBar: true });\n\n return (\n <FlatList\n data={channels}\n onRefresh={onRefresh}\n refreshing={isRefreshing}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={() => <View height=\"0.5\" backgroundColor=\"gray.200\" marginY=\"0.5\" />}\n renderItem={({ item: channel }) => <DialogsListItem refreshKey={rk} onOpen={onOpen} currentUserId={userId} channel={channel} />} \n />\n );\n}\n","module.exports = require(\"@common-stack/client-react\");","module.exports = require(\"@expo/vector-icons\");","module.exports = require(\"@messenger-box/platform-client\");","module.exports = require(\"@react-navigation/native\");","module.exports = require(\"@react-navigation/native-stack\");","module.exports = require(\"date-fns\");","module.exports = require(\"expo-image-picker\");","module.exports = require(\"lodash\");","module.exports = require(\"native-base\");","module.exports = require(\"react\");","module.exports = require(\"react-native-gesture-handler\");","module.exports = require(\"react-native-safe-area-context\");","module.exports = require(\"react-redux\");"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/index.ts","webpack:///./src/module.ts","webpack:///./src/navigation/InboxNavigation.tsx","webpack:///./src/navigation/index.ts","webpack:///./src/screens/inbox/DialogMessages.tsx","webpack:///./src/screens/inbox/DialogsList.tsx","webpack:///./src/screens/inbox/components/DialogsListItem.tsx","webpack:///./src/screens/inbox/components/MessageInput.tsx","webpack:///./src/screens/inbox/components/MessageItem.tsx","webpack:///./src/screens/inbox/containers/ConversationView.tsx","webpack:///./src/screens/inbox/containers/Dialogs.tsx","webpack:///external \"@common-stack/client-react\"","webpack:///external \"@expo/vector-icons\"","webpack:///external \"@messenger-box/platform-client\"","webpack:///external \"@react-navigation/native\"","webpack:///external \"@react-navigation/native-stack\"","webpack:///external \"date-fns\"","webpack:///external \"expo-image-picker\"","webpack:///external \"lodash\"","webpack:///external \"native-base\"","webpack:///external \"react\"","webpack:///external \"react-redux\""],"names":[],"mappings":"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","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.ts\");\n","import PlatformModule from './module';\n\nimport { Feature } from '@common-stack/client-react';\n\nexport default new Feature(PlatformModule);\nexport * from './navigation';\n","/* eslint-disable import/no-extraneous-dependencies */\nimport { Feature } from '@common-stack/client-react';\nimport { schema, typePolicies, dataIdFromObject } from '@messenger-box/platform-client';\n\nexport default new Feature({\n dataIdFromObject,\n clientStateParams: { typeDefs: schema, typePolicies },\n});\n","import * as React from 'react';\nimport { createNativeStackNavigator } from \"@react-navigation/native-stack\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\nimport { DialogMessages } from \"../screens/inbox/DialogMessages\";\nimport { DialogsList } from \"../screens/inbox/DialogsList\";\n\nconst InboxStack = createNativeStackNavigator();\n\nexport function InboxNavigation() {\n return (\n <InboxStack.Navigator \n initialRouteName=\"Inbox.DialogsList\"\n >\n <InboxStack.Screen \n component={DialogsList}\n name=\"Inbox.DialogsList\"\n options={{ header: () => null }}\n />\n <InboxStack.Screen \n name=\"Inbox.DialogMessages\"\n component={DialogMessages}\n options={{ header: () => null }}\n />\n </InboxStack.Navigator>\n );\n}","export * from './InboxNavigation';\n","import * as React from 'react';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { Box } from 'native-base';\nimport { DialogsHeader } from './components/DialogsHeader';\nimport { ConversationView } from './containers/ConversationView';\n\nexport function DialogMessages() {\n const { params } = useRoute<any>();\n const navigation = useNavigation();\n\n return (\n <Box bg={'white'} flex={1} p={6}>\n <ConversationView channelId={params?.channel.id} />\n </Box>\n );\n}\n","import * as React from 'react';\nimport { Box } from 'native-base';\n\nimport { Dialogs } from './containers/Dialogs';\n\nexport function DialogsList() {\n\n return (\n <Box bg={'white'} flex={1}>\n <Dialogs />\n </Box>\n );\n}\n","import { first } from 'lodash';\nimport React, { useEffect, useMemo } from 'react';\nimport { Text, Box, Image, Pressable, HStack, VStack } from 'native-base';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { IChannel, IUserAccount, useGetMessagesQuery } from '@messenger-box/platform-client';\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n let date = new Date(value);\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(new Date(value), 'MMM dd, yyyy');\n};\n\nexport interface IDialogListChannel extends IChannel {\n users: IUserAccount[];\n}\n\nexport interface IDialogListItemProps {\n refreshKey?: number;\n currentUserId: string;\n channel: IDialogListChannel;\n onOpen: (channel: IChannel, options?: any) => void;\n}\n\n/**\n * TODO:\n * - Get Reservation info: reservation date, status\n * - Add ability to get property information: name, logo\n */\nexport const DialogsListItem: React.FC<IDialogListItemProps> = function DialogsListItem({\n refreshKey,\n channel,\n currentUserId,\n onOpen,\n}) {\n const message$ = useGetMessagesQuery({\n fetchPolicy: 'network-only',\n variables: { limit: 1, channelId: channel.id },\n });\n\n // Workaround for messages refresh: update latest messages view after list refresh\n useEffect(() => {\n message$.refetch();\n }, [refreshKey]);\n\n const users = useMemo(() => channel.users.filter(({ alias }) => !alias?.includes(currentUserId)), [currentUserId]);\n\n const message = useMemo(() => first(message$.data?.messages.data), [message$.data?.messages]);\n const title = useMemo(\n () => users.map(({ givenName, familyName }) => `${givenName} ${familyName}`).join(','),\n [users],\n );\n\n const text = message?.message;\n const date = createdAtText(message?.createdAt);\n\n const onOpenChannel = () => onOpen(channel, { title, users });\n\n return (\n <Pressable onPress={onOpenChannel} borderWidth={'1'} borderRadius=\"md\" borderColor={'gray.200'} shadow={'6'}>\n <HStack m={3} space={2} alignItems=\"center\">\n <Image\n alt={'image'}\n width={16}\n borderRadius=\"full\"\n height={16}\n source={{ uri: 'https://picsum.photos/220' }}\n />\n <VStack space={1}>\n <HStack alignItems=\"center\" justifyContent=\"space-between\">\n {/* TODO: change to valid status */}\n <Text fontSize=\"xs\" color=\"red.500\">\n Request withdrawal\n </Text>\n <Text color=\"gray.500\">{date}</Text>\n </HStack>\n {title !== '' ? (\n <Text color=\"gray.600\" fontSize=\"lg\" fontWeight=\"semibold\">\n {title}\n </Text>\n ) : null}\n <Text color=\"gray.600\">{text}</Text>\n {/* TODO: change to valid reservation date */}\n <Text>Sep 12-16, 2019. Private room fully furnis...</Text>\n </VStack>\n </HStack>\n </Pressable>\n );\n};\n","import { TextField, View, Image, Pressable, HStack, VStack } from 'native-base';\nimport { FontAwesome } from '@expo/vector-icons';\nimport * as ImagePicker from 'expo-image-picker';\nimport React, { forwardRef, useImperativeHandle, useState } from 'react';\n\nexport const MessageInput = forwardRef(function MessageInput({ onSend }: any, ref) {\n const [text, setText] = useState('');\n const [files, setFiles] = useState<string[]>([]);\n\n const reset = () => {\n setText('');\n setFiles([]);\n };\n\n useImperativeHandle(ref, () => ({ reset, text, files }));\n\n const onSendMessage = () => {\n onSend(text, files);\n };\n const onRemoveImage = (url: string) => setFiles((files) => files.filter((file) => file !== url));\n const onSelectImages = async () => {\n // No permissions request is necessary for launching the image library\n await ImagePicker.requestMediaLibraryPermissionsAsync();\n let result = await ImagePicker.launchImageLibraryAsync({\n // base64: true,\n // aspect: [4, 3],\n mediaTypes: ImagePicker.MediaTypeOptions.Images,\n });\n\n if (!result.cancelled) {\n setFiles(files.concat((result as any).uri)); // @igor need ot check this\n }\n };\n\n return (\n <VStack marginTop={3} alignContent=\"center\">\n <View>\n <TextField\n placeholder=\"Message...\"\n borderColor=\"gray.400\"\n value={text}\n onChange={(e) => setText(e.nativeEvent.text)}\n fontSize={14}\n />\n </View>\n {files.length ? (\n <View mb={4} flexDirection=\"row\">\n {files.map((file, index) => (\n <Pressable onPress={() => onRemoveImage(file)} key={index}>\n <Image alt={'image'} mr={2} height={10} width={10} source={{ uri: file }} />\n </Pressable>\n ))}\n </View>\n ) : null}\n <HStack alignContent=\"center\" justifyContent=\"space-between\">\n <FontAwesome onPress={onSelectImages} size={20} style={{ marginRight: 5 }} name=\"file-image-o\" />\n <FontAwesome onPress={onSendMessage} size={20} name=\"send\" />\n </HStack>\n </VStack>\n );\n});\n","import React, { useMemo } from 'react';\nimport { Text, Box, Image, HStack } from 'native-base';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { IFileInfo, IPost } from '@messenger-box/platform-client';\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n let date = new Date(value);\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(new Date(value), 'MMM dd, yyyy');\n};\n\nexport function MessageItem({ message, userId }: { message: IPost; userId: string }) {\n const isOwnMessage = useMemo(() => message.editedBy?.alias?.includes(userId) || false, [message.author, userId]);\n const author = useMemo(\n () => (message.author ? `${message.author?.givenName} ${message.author?.familyName}` : null),\n [message.author],\n );\n\n return (\n <HStack mb={4} alignItems=\"center\">\n {isOwnMessage ? <Box flexGrow={1} /> : null}\n <Box borderRadius=\"md\" backgroundColor=\"gray.200\" paddingX={3} paddingY=\"1.5\" flexGrow={3}>\n <Box flexDirection=\"row\" alignContent=\"flex-start\" mb={1}>\n <Text flexGrow={1} fontWeight=\"semibold\">\n {author}\n </Text>\n <Text fontSize=\"xs\" color=\"gray.500\">\n {createdAtText(message.createdAt)}\n </Text>\n </Box>\n <Text flexGrow={1}>{message.message}</Text>\n <MessageItem.FilesView files={message.files?.data as IFileInfo[]} />\n </Box>\n {!isOwnMessage ? <Box flexGrow={1} /> : null}\n </HStack>\n );\n}\n\nMessageItem.FilesView = function MessageItemFiles({ files = [] }: { files: IFileInfo[] }) {\n if (!files.length) {\n return null;\n }\n\n return (\n <HStack space={2} mt={2}>\n {files.map((file) => (\n <Image\n alt={'image'}\n mr={2}\n height=\"16\"\n width=\"16\"\n source={{\n uri: 'https://preview.keenthemes.com/metronic-v4/theme/assets/pages/media/profile/profile_user.jpg',\n scale: 0.2,\n }}\n />\n ))}\n </HStack>\n );\n};\n","import {\n IPost,\n useEditMessageMutation,\n useGetMessagesQuery,\n useSendMessagesMutation,\n useUploadFiles,\n onChatMessageAddedDocument,\n} from '@messenger-box/platform-client';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { FlatList } from 'native-base';\nimport { useSelector } from 'react-redux';\nimport { MessageItem } from '../components/MessageItem';\nimport { MessageInput } from '../components/MessageInput';\nimport { IFileInfo } from '@messenger-box/core';\n\nconst MESSAGES_LIMIT = 5;\n\nexport function ConversationView({ channelId }: any) {\n const input$ = useRef<any>();\n const [offset, setOffset] = useState(0);\n const [messages, setMessages] = useState<IPost[]>([]);\n const userId = useSelector((state: any) => state.user.auth0UserId);\n\n const [send, send$] = useSendMessagesMutation({\n context: {},\n });\n\n const [edit, edit$] = useEditMessageMutation({\n context: {},\n });\n\n const { startUpload } = useUploadFiles();\n\n const messages$ = useGetMessagesQuery({\n variables: {\n // skip: count,\n channelId,\n limit: MESSAGES_LIMIT,\n },\n skip: !channelId,\n fetchPolicy: 'network-only',\n });\n\n useEffect(() => {\n messages$.refetch({ skip: offset });\n }, [offset]);\n\n // useEffect(() => {\n // messages$.subscribeToMore({\n // variables: { channelId },\n // document: onChatMessageAddedDocument,\n // updateQuery: (prev, { subscriptionData }) => {\n // const list = (subscriptionData.data.messages.data || []) as IPost[];\n // const added = list.filter((data) => !data.author.alias.includes(userId));\n\n // messages.concat(...added);\n // return prev;\n // },\n // });\n // }, [channelId, userId]);\n\n useEffect(() => {\n if (messages$.data?.messages.data?.length) {\n setMessages((messages) => [...messages, ...(messages$.data?.messages.data || ([] as any))]);\n }\n }, [messages$.data]);\n\n const onLoadMore = () => setOffset(offset + MESSAGES_LIMIT);\n const onSendMessage = async (text: string, files: File[]) => {\n input$.current?.reset();\n const { data } = await send({\n variables: {\n channelId,\n content: text,\n // files: [], // files: uploadedFiles.map(i => i.data.id)\n },\n update: (cache, { data, errors }) => {\n if (!data || errors) {\n return;\n }\n\n if (data.sendMessage) {\n setMessages([data.sendMessage as IPost, ...messages]);\n }\n },\n });\n\n if (files.length) {\n const { data: uploadedFiles } = await startUpload({\n file: files,\n saveUploadedFile: {\n variables: {\n postId: data!.sendMessage!.id,\n },\n },\n createUploadLink: {\n variables: {\n postId: data!.sendMessage!.id,\n },\n },\n });\n\n await edit({\n variables: {\n channelId,\n content: text,\n messageId: data!.sendMessage!.id,\n files: (uploadedFiles as unknown as IFileInfo[]).map((i) => i.id),\n },\n });\n }\n };\n\n return (\n <>\n <FlatList\n inverted\n data={messages}\n onEndReached={onLoadMore}\n flex={1}\n renderItem={({ item }) => <MessageItem userId={userId} message={item} />}\n />\n\n <MessageInput onSend={onSendMessage} ref={input$} />\n </>\n );\n}\n","import { FlatList, ScrollView, Text, Box } from 'native-base';\nimport { IChannel, useGetAllChannelQuery, useGetAllUsersQuery } from '@messenger-box/platform-client';\nimport { useSelector } from 'react-redux';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { keyBy } from 'lodash';\nimport { useNavigation } from '@react-navigation/native';\n\nimport { DialogsListItem } from '../components/DialogsListItem';\n\nexport function Dialogs() {\n const users$ = useGetAllUsersQuery();\n const navigation: any = useNavigation();\n const channels$ = useGetAllChannelQuery();\n const [rk, setRk] = useState(Math.random());\n const userId = useSelector((state: any) => state.user.auth0UserId);\n\n /**\n * TODO: add ability to check channel members\n * HostChannels: channel.members[0].user !== userId\n * GuestChannels: channel.members[0].user == userId\n */\n const filter = useCallback(\n (channel) =>\n channel.type === 'DIRECT' && channel?.displayName !== 'surveybot' && channel?.displayName !== 'admin (you)',\n [userId],\n );\n\n const users = useMemo(() => keyBy(users$.data?.getUsers, 'id'), [users$.data?.getUsers]);\n\n // Filter all channles\n const list = useMemo(() => channels$.data?.channels?.filter(filter) || [], [filter, channels$.data?.channels]);\n\n // Assign users to channel item\n const channels = useMemo(\n () => list.map((channel) => ({ ...channel, users: channel?.members?.map((record) => users[record?.user!]) })),\n [list, users$.data?.getUsers, userId],\n );\n\n const onRefresh = async () => {\n await users$.refetch();\n await channels$.refetch();\n return setRk(Math.random());\n };\n\n const isRefreshing = channels$.loading || users$.loading;\n\n const onOpen = (channel: IChannel, options: { title: string }) =>\n navigation.navigate('Inbox.DialogMessages' as any, { ...options, channel, hideTabBar: true });\n\n return (\n <Box p={2}>\n <FlatList\n data={channels}\n onRefresh={onRefresh}\n refreshing={isRefreshing}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={() => <Box height=\"0.5\" backgroundColor=\"gray.200\" />}\n renderItem={({ item: channel }) => (\n <DialogsListItem refreshKey={rk} onOpen={onOpen} currentUserId={userId} channel={channel} />\n )}\n />\n </Box>\n );\n}\n","module.exports = require(\"@common-stack/client-react\");","module.exports = require(\"@expo/vector-icons\");","module.exports = require(\"@messenger-box/platform-client\");","module.exports = require(\"@react-navigation/native\");","module.exports = require(\"@react-navigation/native-stack\");","module.exports = require(\"date-fns\");","module.exports = require(\"expo-image-picker\");","module.exports = require(\"lodash\");","module.exports = require(\"native-base\");","module.exports = require(\"react\");","module.exports = require(\"react-redux\");"],"sourceRoot":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@messenger-box/platform-mobile",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.182",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"watch": "yarn build:lib:watch"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@messenger-box/core": "0.0.1-alpha.
|
|
23
|
-
"@messenger-box/platform-client": "0.0.1-alpha.
|
|
22
|
+
"@messenger-box/core": "0.0.1-alpha.179",
|
|
23
|
+
"@messenger-box/platform-client": "0.0.1-alpha.179"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/bootstrap": "4.5.0",
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"typescript": {
|
|
40
40
|
"definition": "lib/index.d.ts"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "a1dd8707577af63f4e6e6fe5aa3e5d352e69a7c4"
|
|
43
43
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useNavigation, useRoute } from '@react-navigation/native';
|
|
3
|
-
import {
|
|
3
|
+
import { Box } from 'native-base';
|
|
4
4
|
import { DialogsHeader } from './components/DialogsHeader';
|
|
5
5
|
import { ConversationView } from './containers/ConversationView';
|
|
6
6
|
|
|
@@ -9,12 +9,8 @@ export function DialogMessages() {
|
|
|
9
9
|
const navigation = useNavigation();
|
|
10
10
|
|
|
11
11
|
return (
|
|
12
|
-
<
|
|
13
|
-
<DialogsHeader
|
|
14
|
-
title={params.title}
|
|
15
|
-
onBack={navigation.goBack}
|
|
16
|
-
/>
|
|
12
|
+
<Box bg={'white'} flex={1} p={6}>
|
|
17
13
|
<ConversationView channelId={params?.channel.id} />
|
|
18
|
-
</
|
|
14
|
+
</Box>
|
|
19
15
|
);
|
|
20
|
-
}
|
|
16
|
+
}
|
|
@@ -1,25 +1,13 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import { useNavigation } from '@react-navigation/native';
|
|
4
|
-
import { SafeAreaView } from 'react-native-safe-area-context';
|
|
2
|
+
import { Box } from 'native-base';
|
|
5
3
|
|
|
6
|
-
import { DialogsHeader } from './components/DialogsHeader';
|
|
7
4
|
import { Dialogs } from './containers/Dialogs';
|
|
8
5
|
|
|
9
6
|
export function DialogsList() {
|
|
10
|
-
const { goBack } = useNavigation();
|
|
11
|
-
|
|
12
|
-
const onShowFilters = () => console.log('Show filters...');
|
|
13
7
|
|
|
14
8
|
return (
|
|
15
|
-
<
|
|
16
|
-
<DialogsHeader
|
|
17
|
-
onBack={goBack}
|
|
18
|
-
title="All messages"
|
|
19
|
-
extra={<AntDesign onPress={onShowFilters} name="filter" size={18} />}
|
|
20
|
-
/>
|
|
21
|
-
|
|
9
|
+
<Box bg={'white'} flex={1}>
|
|
22
10
|
<Dialogs />
|
|
23
|
-
</
|
|
11
|
+
</Box>
|
|
24
12
|
);
|
|
25
|
-
}
|
|
13
|
+
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { first } from 'lodash';
|
|
2
|
-
import React, { useEffect, useMemo } from 'react'
|
|
3
|
-
import { Text,
|
|
2
|
+
import React, { useEffect, useMemo } from 'react';
|
|
3
|
+
import { Text, Box, Image, Pressable, HStack, VStack } from 'native-base';
|
|
4
4
|
import { format, isToday, isYesterday } from 'date-fns';
|
|
5
|
-
import { TouchableOpacity } from 'react-native-gesture-handler';
|
|
6
5
|
import { IChannel, IUserAccount, useGetMessagesQuery } from '@messenger-box/platform-client';
|
|
7
6
|
|
|
8
7
|
const createdAtText = (value: string) => {
|
|
@@ -29,7 +28,12 @@ export interface IDialogListItemProps {
|
|
|
29
28
|
* - Get Reservation info: reservation date, status
|
|
30
29
|
* - Add ability to get property information: name, logo
|
|
31
30
|
*/
|
|
32
|
-
export const DialogsListItem: React.FC<IDialogListItemProps> = function DialogsListItem({
|
|
31
|
+
export const DialogsListItem: React.FC<IDialogListItemProps> = function DialogsListItem({
|
|
32
|
+
refreshKey,
|
|
33
|
+
channel,
|
|
34
|
+
currentUserId,
|
|
35
|
+
onOpen,
|
|
36
|
+
}) {
|
|
33
37
|
const message$ = useGetMessagesQuery({
|
|
34
38
|
fetchPolicy: 'network-only',
|
|
35
39
|
variables: { limit: 1, channelId: channel.id },
|
|
@@ -41,33 +45,46 @@ export const DialogsListItem: React.FC<IDialogListItemProps> = function DialogsL
|
|
|
41
45
|
}, [refreshKey]);
|
|
42
46
|
|
|
43
47
|
const users = useMemo(() => channel.users.filter(({ alias }) => !alias?.includes(currentUserId)), [currentUserId]);
|
|
44
|
-
|
|
48
|
+
|
|
45
49
|
const message = useMemo(() => first(message$.data?.messages.data), [message$.data?.messages]);
|
|
46
|
-
const title = useMemo(
|
|
47
|
-
|
|
50
|
+
const title = useMemo(
|
|
51
|
+
() => users.map(({ givenName, familyName }) => `${givenName} ${familyName}`).join(','),
|
|
52
|
+
[users],
|
|
53
|
+
);
|
|
54
|
+
|
|
48
55
|
const text = message?.message;
|
|
49
56
|
const date = createdAtText(message?.createdAt);
|
|
50
|
-
|
|
57
|
+
|
|
51
58
|
const onOpenChannel = () => onOpen(channel, { title, users });
|
|
52
59
|
|
|
53
60
|
return (
|
|
54
|
-
<
|
|
55
|
-
<
|
|
56
|
-
<
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
<Pressable onPress={onOpenChannel} borderWidth={'1'} borderRadius="md" borderColor={'gray.200'} shadow={'6'}>
|
|
62
|
+
<HStack m={3} space={2} alignItems="center">
|
|
63
|
+
<Image
|
|
64
|
+
alt={'image'}
|
|
65
|
+
width={16}
|
|
66
|
+
borderRadius="full"
|
|
67
|
+
height={16}
|
|
68
|
+
source={{ uri: 'https://picsum.photos/220' }}
|
|
69
|
+
/>
|
|
70
|
+
<VStack space={1}>
|
|
71
|
+
<HStack alignItems="center" justifyContent="space-between">
|
|
61
72
|
{/* TODO: change to valid status */}
|
|
62
|
-
<Text fontSize="xs" color="red.500">
|
|
73
|
+
<Text fontSize="xs" color="red.500">
|
|
74
|
+
Request withdrawal
|
|
75
|
+
</Text>
|
|
63
76
|
<Text color="gray.500">{date}</Text>
|
|
64
|
-
</
|
|
65
|
-
|
|
66
|
-
|
|
77
|
+
</HStack>
|
|
78
|
+
{title !== '' ? (
|
|
79
|
+
<Text color="gray.600" fontSize="lg" fontWeight="semibold">
|
|
80
|
+
{title}
|
|
81
|
+
</Text>
|
|
82
|
+
) : null}
|
|
83
|
+
<Text color="gray.600">{text}</Text>
|
|
67
84
|
{/* TODO: change to valid reservation date */}
|
|
68
85
|
<Text>Sep 12-16, 2019. Private room fully furnis...</Text>
|
|
69
|
-
</
|
|
70
|
-
</
|
|
71
|
-
</
|
|
86
|
+
</VStack>
|
|
87
|
+
</HStack>
|
|
88
|
+
</Pressable>
|
|
72
89
|
);
|
|
73
|
-
}
|
|
90
|
+
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { TextField, View, Image } from 'native-base';
|
|
1
|
+
import { TextField, View, Image, Pressable, HStack, VStack } from 'native-base';
|
|
2
2
|
import { FontAwesome } from '@expo/vector-icons';
|
|
3
3
|
import * as ImagePicker from 'expo-image-picker';
|
|
4
4
|
import React, { forwardRef, useImperativeHandle, useState } from 'react';
|
|
5
|
-
import { TouchableOpacity } from 'react-native-gesture-handler';
|
|
6
5
|
|
|
7
6
|
export const MessageInput = forwardRef(function MessageInput({ onSend }: any, ref) {
|
|
8
7
|
const [text, setText] = useState('');
|
|
@@ -18,7 +17,7 @@ export const MessageInput = forwardRef(function MessageInput({ onSend }: any, re
|
|
|
18
17
|
const onSendMessage = () => {
|
|
19
18
|
onSend(text, files);
|
|
20
19
|
};
|
|
21
|
-
const onRemoveImage = (url: string) => setFiles(files => files.filter(file => file !== url));
|
|
20
|
+
const onRemoveImage = (url: string) => setFiles((files) => files.filter((file) => file !== url));
|
|
22
21
|
const onSelectImages = async () => {
|
|
23
22
|
// No permissions request is necessary for launching the image library
|
|
24
23
|
await ImagePicker.requestMediaLibraryPermissionsAsync();
|
|
@@ -34,21 +33,29 @@ export const MessageInput = forwardRef(function MessageInput({ onSend }: any, re
|
|
|
34
33
|
};
|
|
35
34
|
|
|
36
35
|
return (
|
|
37
|
-
<
|
|
36
|
+
<VStack marginTop={3} alignContent="center">
|
|
38
37
|
<View>
|
|
39
|
-
<TextField
|
|
38
|
+
<TextField
|
|
39
|
+
placeholder="Message..."
|
|
40
|
+
borderColor="gray.400"
|
|
41
|
+
value={text}
|
|
42
|
+
onChange={(e) => setText(e.nativeEvent.text)}
|
|
43
|
+
fontSize={14}
|
|
44
|
+
/>
|
|
40
45
|
</View>
|
|
41
|
-
{files.length ?
|
|
42
|
-
{
|
|
43
|
-
|
|
44
|
-
<
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
{files.length ? (
|
|
47
|
+
<View mb={4} flexDirection="row">
|
|
48
|
+
{files.map((file, index) => (
|
|
49
|
+
<Pressable onPress={() => onRemoveImage(file)} key={index}>
|
|
50
|
+
<Image alt={'image'} mr={2} height={10} width={10} source={{ uri: file }} />
|
|
51
|
+
</Pressable>
|
|
52
|
+
))}
|
|
53
|
+
</View>
|
|
54
|
+
) : null}
|
|
55
|
+
<HStack alignContent="center" justifyContent="space-between">
|
|
49
56
|
<FontAwesome onPress={onSelectImages} size={20} style={{ marginRight: 5 }} name="file-image-o" />
|
|
50
57
|
<FontAwesome onPress={onSendMessage} size={20} name="send" />
|
|
51
|
-
</
|
|
52
|
-
</
|
|
58
|
+
</HStack>
|
|
59
|
+
</VStack>
|
|
53
60
|
);
|
|
54
61
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useMemo } from 'react';
|
|
2
|
-
import { Text,
|
|
2
|
+
import { Text, Box, Image, HStack } from 'native-base';
|
|
3
3
|
import { format, isToday, isYesterday } from 'date-fns';
|
|
4
4
|
import { IFileInfo, IPost } from '@messenger-box/platform-client';
|
|
5
5
|
|
|
@@ -11,34 +11,52 @@ const createdAtText = (value: string) => {
|
|
|
11
11
|
return format(new Date(value), 'MMM dd, yyyy');
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
-
export function MessageItem({ message, userId }: { message: IPost
|
|
14
|
+
export function MessageItem({ message, userId }: { message: IPost; userId: string }) {
|
|
15
15
|
const isOwnMessage = useMemo(() => message.editedBy?.alias?.includes(userId) || false, [message.author, userId]);
|
|
16
|
-
const author = useMemo(
|
|
16
|
+
const author = useMemo(
|
|
17
|
+
() => (message.author ? `${message.author?.givenName} ${message.author?.familyName}` : null),
|
|
18
|
+
[message.author],
|
|
19
|
+
);
|
|
17
20
|
|
|
18
21
|
return (
|
|
19
|
-
<
|
|
20
|
-
{isOwnMessage ? <
|
|
21
|
-
<
|
|
22
|
-
<
|
|
23
|
-
<Text flexGrow={1} fontWeight="semibold">
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
<HStack mb={4} alignItems="center">
|
|
23
|
+
{isOwnMessage ? <Box flexGrow={1} /> : null}
|
|
24
|
+
<Box borderRadius="md" backgroundColor="gray.200" paddingX={3} paddingY="1.5" flexGrow={3}>
|
|
25
|
+
<Box flexDirection="row" alignContent="flex-start" mb={1}>
|
|
26
|
+
<Text flexGrow={1} fontWeight="semibold">
|
|
27
|
+
{author}
|
|
28
|
+
</Text>
|
|
29
|
+
<Text fontSize="xs" color="gray.500">
|
|
30
|
+
{createdAtText(message.createdAt)}
|
|
31
|
+
</Text>
|
|
32
|
+
</Box>
|
|
26
33
|
<Text flexGrow={1}>{message.message}</Text>
|
|
27
34
|
<MessageItem.FilesView files={message.files?.data as IFileInfo[]} />
|
|
28
|
-
</
|
|
29
|
-
{!isOwnMessage ? <
|
|
30
|
-
</
|
|
35
|
+
</Box>
|
|
36
|
+
{!isOwnMessage ? <Box flexGrow={1} /> : null}
|
|
37
|
+
</HStack>
|
|
31
38
|
);
|
|
32
39
|
}
|
|
33
40
|
|
|
34
41
|
MessageItem.FilesView = function MessageItemFiles({ files = [] }: { files: IFileInfo[] }) {
|
|
35
|
-
if(!files.length) {
|
|
42
|
+
if (!files.length) {
|
|
36
43
|
return null;
|
|
37
44
|
}
|
|
38
45
|
|
|
39
46
|
return (
|
|
40
|
-
<
|
|
41
|
-
{files.map(file =>
|
|
42
|
-
|
|
47
|
+
<HStack space={2} mt={2}>
|
|
48
|
+
{files.map((file) => (
|
|
49
|
+
<Image
|
|
50
|
+
alt={'image'}
|
|
51
|
+
mr={2}
|
|
52
|
+
height="16"
|
|
53
|
+
width="16"
|
|
54
|
+
source={{
|
|
55
|
+
uri: 'https://preview.keenthemes.com/metronic-v4/theme/assets/pages/media/profile/profile_user.jpg',
|
|
56
|
+
scale: 0.2,
|
|
57
|
+
}}
|
|
58
|
+
/>
|
|
59
|
+
))}
|
|
60
|
+
</HStack>
|
|
43
61
|
);
|
|
44
|
-
}
|
|
62
|
+
};
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import {
|
|
2
|
+
IPost,
|
|
3
|
+
useEditMessageMutation,
|
|
4
|
+
useGetMessagesQuery,
|
|
5
|
+
useSendMessagesMutation,
|
|
6
|
+
useUploadFiles,
|
|
7
|
+
onChatMessageAddedDocument,
|
|
8
|
+
} from '@messenger-box/platform-client';
|
|
4
9
|
import React, { useEffect, useRef, useState } from 'react';
|
|
10
|
+
import { FlatList } from 'native-base';
|
|
5
11
|
import { useSelector } from 'react-redux';
|
|
6
12
|
import { MessageItem } from '../components/MessageItem';
|
|
7
13
|
import { MessageInput } from '../components/MessageInput';
|
|
@@ -36,26 +42,26 @@ export function ConversationView({ channelId }: any) {
|
|
|
36
42
|
});
|
|
37
43
|
|
|
38
44
|
useEffect(() => {
|
|
39
|
-
messages$.refetch({ skip: offset })
|
|
45
|
+
messages$.refetch({ skip: offset });
|
|
40
46
|
}, [offset]);
|
|
41
47
|
|
|
42
|
-
useEffect(() => {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}, [channelId, userId]);
|
|
48
|
+
// useEffect(() => {
|
|
49
|
+
// messages$.subscribeToMore({
|
|
50
|
+
// variables: { channelId },
|
|
51
|
+
// document: onChatMessageAddedDocument,
|
|
52
|
+
// updateQuery: (prev, { subscriptionData }) => {
|
|
53
|
+
// const list = (subscriptionData.data.messages.data || []) as IPost[];
|
|
54
|
+
// const added = list.filter((data) => !data.author.alias.includes(userId));
|
|
55
|
+
|
|
56
|
+
// messages.concat(...added);
|
|
57
|
+
// return prev;
|
|
58
|
+
// },
|
|
59
|
+
// });
|
|
60
|
+
// }, [channelId, userId]);
|
|
55
61
|
|
|
56
62
|
useEffect(() => {
|
|
57
|
-
if(messages$.data?.messages.data?.length) {
|
|
58
|
-
setMessages(messages => [...messages, ...(messages$.data?.messages.data || [] as any)]);
|
|
63
|
+
if (messages$.data?.messages.data?.length) {
|
|
64
|
+
setMessages((messages) => [...messages, ...(messages$.data?.messages.data || ([] as any))]);
|
|
59
65
|
}
|
|
60
66
|
}, [messages$.data]);
|
|
61
67
|
|
|
@@ -73,24 +79,24 @@ export function ConversationView({ channelId }: any) {
|
|
|
73
79
|
return;
|
|
74
80
|
}
|
|
75
81
|
|
|
76
|
-
if(data.sendMessage) {
|
|
77
|
-
setMessages([
|
|
82
|
+
if (data.sendMessage) {
|
|
83
|
+
setMessages([data.sendMessage as IPost, ...messages]);
|
|
78
84
|
}
|
|
79
85
|
},
|
|
80
86
|
});
|
|
81
87
|
|
|
82
|
-
if(files.length) {
|
|
83
|
-
const {data: uploadedFiles} = await startUpload({
|
|
84
|
-
file:files,
|
|
85
|
-
saveUploadedFile:{
|
|
86
|
-
variables:{
|
|
87
|
-
postId:data!.sendMessage!.id
|
|
88
|
+
if (files.length) {
|
|
89
|
+
const { data: uploadedFiles } = await startUpload({
|
|
90
|
+
file: files,
|
|
91
|
+
saveUploadedFile: {
|
|
92
|
+
variables: {
|
|
93
|
+
postId: data!.sendMessage!.id,
|
|
88
94
|
},
|
|
89
95
|
},
|
|
90
|
-
createUploadLink:{
|
|
91
|
-
variables:{
|
|
92
|
-
postId:data!.sendMessage!.id
|
|
93
|
-
}
|
|
96
|
+
createUploadLink: {
|
|
97
|
+
variables: {
|
|
98
|
+
postId: data!.sendMessage!.id,
|
|
99
|
+
},
|
|
94
100
|
},
|
|
95
101
|
});
|
|
96
102
|
|
|
@@ -99,9 +105,9 @@ export function ConversationView({ channelId }: any) {
|
|
|
99
105
|
channelId,
|
|
100
106
|
content: text,
|
|
101
107
|
messageId: data!.sendMessage!.id,
|
|
102
|
-
files: (uploadedFiles as unknown as IFileInfo[]).map(i => i.id),
|
|
103
|
-
}
|
|
104
|
-
})
|
|
108
|
+
files: (uploadedFiles as unknown as IFileInfo[]).map((i) => i.id),
|
|
109
|
+
},
|
|
110
|
+
});
|
|
105
111
|
}
|
|
106
112
|
};
|
|
107
113
|
|
|
@@ -111,7 +117,7 @@ export function ConversationView({ channelId }: any) {
|
|
|
111
117
|
inverted
|
|
112
118
|
data={messages}
|
|
113
119
|
onEndReached={onLoadMore}
|
|
114
|
-
|
|
120
|
+
flex={1}
|
|
115
121
|
renderItem={({ item }) => <MessageItem userId={userId} message={item} />}
|
|
116
122
|
/>
|
|
117
123
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FlatList, ScrollView, Text,
|
|
1
|
+
import { FlatList, ScrollView, Text, Box } from 'native-base';
|
|
2
2
|
import { IChannel, useGetAllChannelQuery, useGetAllUsersQuery } from '@messenger-box/platform-client';
|
|
3
3
|
import { useSelector } from 'react-redux';
|
|
4
4
|
import React, { useCallback, useMemo, useState } from 'react';
|
|
@@ -11,7 +11,7 @@ export function Dialogs() {
|
|
|
11
11
|
const users$ = useGetAllUsersQuery();
|
|
12
12
|
const navigation: any = useNavigation();
|
|
13
13
|
const channels$ = useGetAllChannelQuery();
|
|
14
|
-
const [rk, setRk] = useState(Math.random());
|
|
14
|
+
const [rk, setRk] = useState(Math.random());
|
|
15
15
|
const userId = useSelector((state: any) => state.user.auth0UserId);
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -21,22 +21,20 @@ export function Dialogs() {
|
|
|
21
21
|
*/
|
|
22
22
|
const filter = useCallback(
|
|
23
23
|
(channel) =>
|
|
24
|
-
channel.type === 'DIRECT'
|
|
25
|
-
&& channel?.displayName !== 'surveybot'
|
|
26
|
-
&& channel?.displayName !== 'admin (you)',
|
|
24
|
+
channel.type === 'DIRECT' && channel?.displayName !== 'surveybot' && channel?.displayName !== 'admin (you)',
|
|
27
25
|
[userId],
|
|
28
26
|
);
|
|
29
27
|
|
|
30
28
|
const users = useMemo(() => keyBy(users$.data?.getUsers, 'id'), [users$.data?.getUsers]);
|
|
31
29
|
|
|
32
30
|
// Filter all channles
|
|
33
|
-
const list = useMemo(() =>
|
|
34
|
-
channels$.data?.channels?.filter(filter) || [], [filter, channels$.data?.channels]);
|
|
31
|
+
const list = useMemo(() => channels$.data?.channels?.filter(filter) || [], [filter, channels$.data?.channels]);
|
|
35
32
|
|
|
36
33
|
// Assign users to channel item
|
|
37
34
|
const channels = useMemo(
|
|
38
|
-
() => list.map((channel) => ({ ...channel, users: channel?.members?.map((record) => users[record?.user!]) }))
|
|
39
|
-
|
|
35
|
+
() => list.map((channel) => ({ ...channel, users: channel?.members?.map((record) => users[record?.user!]) })),
|
|
36
|
+
[list, users$.data?.getUsers, userId],
|
|
37
|
+
);
|
|
40
38
|
|
|
41
39
|
const onRefresh = async () => {
|
|
42
40
|
await users$.refetch();
|
|
@@ -46,17 +44,21 @@ export function Dialogs() {
|
|
|
46
44
|
|
|
47
45
|
const isRefreshing = channels$.loading || users$.loading;
|
|
48
46
|
|
|
49
|
-
const onOpen = (channel: IChannel, options: { title: string }) =>
|
|
50
|
-
navigation.navigate(
|
|
47
|
+
const onOpen = (channel: IChannel, options: { title: string }) =>
|
|
48
|
+
navigation.navigate('Inbox.DialogMessages' as any, { ...options, channel, hideTabBar: true });
|
|
51
49
|
|
|
52
50
|
return (
|
|
53
|
-
<
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
51
|
+
<Box p={2}>
|
|
52
|
+
<FlatList
|
|
53
|
+
data={channels}
|
|
54
|
+
onRefresh={onRefresh}
|
|
55
|
+
refreshing={isRefreshing}
|
|
56
|
+
contentContainerStyle={{ minHeight: '100%' }}
|
|
57
|
+
ItemSeparatorComponent={() => <Box height="0.5" backgroundColor="gray.200" />}
|
|
58
|
+
renderItem={({ item: channel }) => (
|
|
59
|
+
<DialogsListItem refreshKey={rk} onOpen={onOpen} currentUserId={userId} channel={channel} />
|
|
60
|
+
)}
|
|
61
|
+
/>
|
|
62
|
+
</Box>
|
|
61
63
|
);
|
|
62
64
|
}
|
package/src/screens/index.ts
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './inbox';
|