@messenger-box/platform-mobile 0.0.1-alpha.190 → 0.0.1-alpha.197

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 (35) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/lib/index.d.ts +1 -0
  3. package/lib/index.js +508 -203
  4. package/lib/index.js.map +1 -1
  5. package/lib/navigation/InboxNavigation.d.ts +3 -1
  6. package/lib/screens/inbox/DialogMessages.d.ts +3 -1
  7. package/lib/screens/inbox/Inbox.d.ts +2 -0
  8. package/lib/screens/inbox/components/CommonMessage.d.ts +9 -0
  9. package/lib/screens/inbox/components/DialogsListItem.d.ts +5 -4
  10. package/lib/screens/inbox/components/FilesList.d.ts +13 -0
  11. package/lib/screens/inbox/components/MessageInput.d.ts +6 -1
  12. package/lib/screens/inbox/components/MessageItem.d.ts +5 -8
  13. package/lib/screens/inbox/components/PlainMessage.d.ts +6 -0
  14. package/lib/screens/inbox/config/config.d.ts +4 -0
  15. package/lib/screens/inbox/config/index.d.ts +1 -0
  16. package/lib/screens/inbox/containers/Dialogs.d.ts +5 -1
  17. package/lib/screens/index.d.ts +1 -0
  18. package/package.json +4 -4
  19. package/src/index.ts +1 -0
  20. package/src/navigation/InboxNavigation.tsx +9 -20
  21. package/src/screens/inbox/DialogMessages.tsx +2 -7
  22. package/src/screens/inbox/{DialogsList.tsx → Inbox.tsx} +4 -4
  23. package/src/screens/inbox/components/CommonMessage.tsx +52 -0
  24. package/src/screens/inbox/components/DialogsListItem.tsx +63 -44
  25. package/src/screens/inbox/components/FilesList.tsx +41 -0
  26. package/src/screens/inbox/components/MessageInput.tsx +24 -22
  27. package/src/screens/inbox/components/MessageItem.tsx +34 -55
  28. package/src/screens/inbox/components/PlainMessage.tsx +16 -0
  29. package/src/screens/inbox/config/config.ts +6 -0
  30. package/src/screens/inbox/config/index.ts +1 -0
  31. package/src/screens/inbox/containers/ConversationView.tsx +158 -83
  32. package/src/screens/inbox/containers/Dialogs.tsx +93 -48
  33. package/src/screens/index.ts +1 -0
  34. package/lib/screens/inbox/DialogsList.d.ts +0 -2
  35. package/lib/screens/inbox/components/DialogsHeader.d.ts +0 -8
package/lib/index.js CHANGED
@@ -114,6 +114,7 @@ const module_1 = __importDefault(__webpack_require__(/*! ./module */ "./src/modu
114
114
  const client_react_1 = __webpack_require__(/*! @common-stack/client-react */ "@common-stack/client-react");
115
115
  exports.default = new client_react_1.Feature(module_1.default);
116
116
  __exportStar(__webpack_require__(/*! ./navigation */ "./src/navigation/index.ts"), exports);
117
+ __exportStar(__webpack_require__(/*! ./screens */ "./src/screens/index.ts"), exports);
117
118
 
118
119
 
119
120
  /***/ }),
@@ -170,14 +171,12 @@ var __importStar = (this && this.__importStar) || function (mod) {
170
171
  Object.defineProperty(exports, "__esModule", { value: true });
171
172
  exports.InboxNavigation = void 0;
172
173
  const React = __importStar(__webpack_require__(/*! react */ "react"));
173
- const native_stack_1 = __webpack_require__(/*! @react-navigation/native-stack */ "@react-navigation/native-stack");
174
+ const stack_1 = __webpack_require__(/*! @react-navigation/stack */ "@react-navigation/stack");
174
175
  const DialogMessages_1 = __webpack_require__(/*! ../screens/inbox/DialogMessages */ "./src/screens/inbox/DialogMessages.tsx");
175
- const DialogsList_1 = __webpack_require__(/*! ../screens/inbox/DialogsList */ "./src/screens/inbox/DialogsList.tsx");
176
- const InboxStack = native_stack_1.createNativeStackNavigator();
177
- function InboxNavigation() {
178
- return (React.createElement(InboxStack.Navigator, { initialRouteName: "Inbox.DialogsList" },
179
- React.createElement(InboxStack.Screen, { component: DialogsList_1.DialogsList, name: "Inbox.DialogsList", options: { header: () => null } }),
180
- React.createElement(InboxStack.Screen, { name: "Inbox.DialogMessages", component: DialogMessages_1.DialogMessages, options: { header: () => null } })));
176
+ const InboxStack = stack_1.createStackNavigator();
177
+ function InboxNavigation({ route }) {
178
+ return (React.createElement(InboxStack.Navigator, { initialRouteName: "DialogMessages" },
179
+ React.createElement(InboxStack.Screen, { name: "DialogMessages", options: { header: () => null } }, (props) => { var _a; return React.createElement(DialogMessages_1.DialogMessages, { channelId: (_a = route === null || route === void 0 ? void 0 : route.params) === null || _a === void 0 ? void 0 : _a.channelId }); })));
181
180
  }
182
181
  exports.InboxNavigation = InboxNavigation;
183
182
 
@@ -240,24 +239,21 @@ var __importStar = (this && this.__importStar) || function (mod) {
240
239
  Object.defineProperty(exports, "__esModule", { value: true });
241
240
  exports.DialogMessages = void 0;
242
241
  const React = __importStar(__webpack_require__(/*! react */ "react"));
243
- const native_1 = __webpack_require__(/*! @react-navigation/native */ "@react-navigation/native");
244
242
  const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
245
243
  const ConversationView_1 = __webpack_require__(/*! ./containers/ConversationView */ "./src/screens/inbox/containers/ConversationView.tsx");
246
- function DialogMessages() {
247
- const { params } = native_1.useRoute();
248
- const navigation = native_1.useNavigation();
244
+ function DialogMessages({ channelId }) {
249
245
  return (React.createElement(native_base_1.Box, { bg: 'white', flex: 1, p: 6 },
250
- React.createElement(ConversationView_1.ConversationView, { channelId: params === null || params === void 0 ? void 0 : params.channel.id })));
246
+ React.createElement(ConversationView_1.ConversationView, { channelId: channelId })));
251
247
  }
252
248
  exports.DialogMessages = DialogMessages;
253
249
 
254
250
 
255
251
  /***/ }),
256
252
 
257
- /***/ "./src/screens/inbox/DialogsList.tsx":
258
- /*!*******************************************!*\
259
- !*** ./src/screens/inbox/DialogsList.tsx ***!
260
- \*******************************************/
253
+ /***/ "./src/screens/inbox/Inbox.tsx":
254
+ /*!*************************************!*\
255
+ !*** ./src/screens/inbox/Inbox.tsx ***!
256
+ \*************************************/
261
257
  /*! no static exports found */
262
258
  /***/ (function(module, exports, __webpack_require__) {
263
259
 
@@ -283,15 +279,78 @@ var __importStar = (this && this.__importStar) || function (mod) {
283
279
  return result;
284
280
  };
285
281
  Object.defineProperty(exports, "__esModule", { value: true });
286
- exports.DialogsList = void 0;
282
+ exports.Inbox = void 0;
287
283
  const React = __importStar(__webpack_require__(/*! react */ "react"));
288
284
  const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
289
285
  const Dialogs_1 = __webpack_require__(/*! ./containers/Dialogs */ "./src/screens/inbox/containers/Dialogs.tsx");
290
- function DialogsList() {
286
+ const Inbox = (props) => {
287
+ const { channelFilters, channelRole } = props;
291
288
  return (React.createElement(native_base_1.Box, { bg: 'white', flex: 1 },
292
- React.createElement(Dialogs_1.Dialogs, null)));
293
- }
294
- exports.DialogsList = DialogsList;
289
+ React.createElement(Dialogs_1.Dialogs, { channelFilters: channelFilters, channelRole: channelRole })));
290
+ };
291
+ exports.Inbox = Inbox;
292
+
293
+
294
+ /***/ }),
295
+
296
+ /***/ "./src/screens/inbox/components/CommonMessage.tsx":
297
+ /*!********************************************************!*\
298
+ !*** ./src/screens/inbox/components/CommonMessage.tsx ***!
299
+ \********************************************************/
300
+ /*! no static exports found */
301
+ /***/ (function(module, exports, __webpack_require__) {
302
+
303
+ "use strict";
304
+
305
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
306
+ if (k2 === undefined) k2 = k;
307
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
308
+ }) : (function(o, m, k, k2) {
309
+ if (k2 === undefined) k2 = k;
310
+ o[k2] = m[k];
311
+ }));
312
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
313
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
314
+ }) : function(o, v) {
315
+ o["default"] = v;
316
+ });
317
+ var __importStar = (this && this.__importStar) || function (mod) {
318
+ if (mod && mod.__esModule) return mod;
319
+ var result = {};
320
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
321
+ __setModuleDefault(result, mod);
322
+ return result;
323
+ };
324
+ Object.defineProperty(exports, "__esModule", { value: true });
325
+ exports.CommonMessage = void 0;
326
+ const React = __importStar(__webpack_require__(/*! react */ "react"));
327
+ const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
328
+ const vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
329
+ const date_fns_1 = __webpack_require__(/*! date-fns */ "date-fns");
330
+ const FilesList_1 = __webpack_require__(/*! ./FilesList */ "./src/screens/inbox/components/FilesList.tsx");
331
+ const lodash_1 = __webpack_require__(/*! lodash */ "lodash");
332
+ const CommonMessage = (props) => {
333
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
334
+ const { message, currentUser } = props;
335
+ return (React.createElement(native_base_1.Box, { mb: "7" },
336
+ React.createElement(native_base_1.HStack, { space: 2 },
337
+ React.createElement(native_base_1.Avatar, { backgroundColor: "grey", source: { uri: ((_a = message === null || message === void 0 ? void 0 : message.author) === null || _a === void 0 ? void 0 : _a.picture) || undefined } }, lodash_1.startCase((_c = (_b = message === null || message === void 0 ? void 0 : message.author) === null || _b === void 0 ? void 0 : _b.username) === null || _c === void 0 ? void 0 : _c.charAt(0))),
338
+ React.createElement(native_base_1.Box, null,
339
+ React.createElement(native_base_1.HStack, { width: '80%', justifyContent: 'space-between', alignItems: 'center' },
340
+ React.createElement(native_base_1.HStack, { space: 2 },
341
+ React.createElement(native_base_1.Text, { fontSize: "14px", color: "gray.600", fontWeight: 'bold' }, ((_d = message === null || message === void 0 ? void 0 : message.author) === null || _d === void 0 ? void 0 : _d.familyName) && ((_e = message === null || message === void 0 ? void 0 : message.author) === null || _e === void 0 ? void 0 : _e.givenName)
342
+ ? ((_f = message === null || message === void 0 ? void 0 : message.author) === null || _f === void 0 ? void 0 : _f.givenName) + ' ' + ((_g = message === null || message === void 0 ? void 0 : message.author) === null || _g === void 0 ? void 0 : _g.familyName)
343
+ : (_h = message === null || message === void 0 ? void 0 : message.author) === null || _h === void 0 ? void 0 : _h.username),
344
+ React.createElement(native_base_1.Text, { fontSize: "14px", color: "gray.500", ml: "10px" }, date_fns_1.formatDistance(new Date(message === null || message === void 0 ? void 0 : message.createdAt), new Date(), {
345
+ includeSeconds: true,
346
+ addSuffix: true,
347
+ }))),
348
+ (currentUser === null || currentUser === void 0 ? void 0 : currentUser.id) !== ((_j = message === null || message === void 0 ? void 0 : message.author) === null || _j === void 0 ? void 0 : _j.id) && (React.createElement(native_base_1.Box, { ml: "8px" },
349
+ React.createElement(native_base_1.Icon, { as: vector_icons_1.Ionicons, name: 'flag', color: "gray.600", size: "sm" })))),
350
+ React.createElement(native_base_1.Text, { fontSize: "14px", mt: "5px" }, message === null || message === void 0 ? void 0 : message.message),
351
+ ((_k = message.files) === null || _k === void 0 ? void 0 : _k.totalCount) ? React.createElement(FilesList_1.FilesList, { uploaded: true, files: (_l = message === null || message === void 0 ? void 0 : message.files) === null || _l === void 0 ? void 0 : _l.data }) : null))));
352
+ };
353
+ exports.CommonMessage = CommonMessage;
295
354
 
296
355
 
297
356
  /***/ }),
@@ -326,7 +385,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
326
385
  };
327
386
  Object.defineProperty(exports, "__esModule", { value: true });
328
387
  exports.DialogsListItem = void 0;
329
- const lodash_1 = __webpack_require__(/*! lodash */ "lodash");
330
388
  const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
331
389
  const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
332
390
  const date_fns_1 = __webpack_require__(/*! date-fns */ "date-fns");
@@ -346,36 +404,106 @@ const createdAtText = (value) => {
346
404
  * - Get Reservation info: reservation date, status
347
405
  * - Add ability to get property information: name, logo
348
406
  */
349
- const DialogsListItem = function DialogsListItem({ refreshKey, channel, currentUserId, onOpen, }) {
350
- var _a;
351
- const message$ = platform_client_1.useGetMessagesQuery({
352
- fetchPolicy: 'network-only',
353
- variables: { limit: 1, channelId: channel.id },
407
+ const DialogsListItem = function DialogsListItem({ currentUser, users, selectedChannelId, channel, onOpen, }) {
408
+ var _a, _b;
409
+ const { data: messagesQuery, loading: messageLoading } = platform_client_1.useMessagesQuery({
410
+ variables: {
411
+ channelId: (_a = channel === null || channel === void 0 ? void 0 : channel.id) === null || _a === void 0 ? void 0 : _a.toString(),
412
+ limit: 1,
413
+ },
414
+ fetchPolicy: 'cache-and-network',
354
415
  });
355
- // Workaround for messages refresh: update latest messages view after list refresh
356
- react_1.useEffect(() => {
357
- message$.refetch();
358
- }, [refreshKey]);
359
- const users = react_1.useMemo(() => channel.users.filter(({ alias }) => !(alias === null || alias === void 0 ? void 0 : alias.includes(currentUserId))), [currentUserId]);
360
- const message = react_1.useMemo(() => { var _a; return lodash_1.first((_a = message$.data) === null || _a === void 0 ? void 0 : _a.messages.data); }, [(_a = message$.data) === null || _a === void 0 ? void 0 : _a.messages]);
361
- const title = react_1.useMemo(() => users.map(({ givenName, familyName }) => `${givenName} ${familyName}`).join(','), [users]);
362
- const text = message === null || message === void 0 ? void 0 : message.message;
363
- const date = createdAtText(message === null || message === void 0 ? void 0 : message.createdAt);
364
- const onOpenChannel = () => onOpen(channel, { title, users });
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 },
416
+ const chatUser = react_1.useMemo(() => users === null || users === void 0 ? void 0 : users.find(({ id }) => {
417
+ var _a;
418
+ const isNotCurrentUser = id !== (currentUser === null || currentUser === void 0 ? void 0 : currentUser.id);
419
+ if (isNotCurrentUser) {
420
+ return (_a = channel === null || channel === void 0 ? void 0 : channel.members) === null || _a === void 0 ? void 0 : _a.find(({ user }) => user.id === id);
421
+ }
422
+ return isNotCurrentUser;
423
+ }), [users, currentUser, channel]);
424
+ const { data: userQuery } = platform_client_1.useUserAccountQuery({
425
+ variables: {
426
+ userId: chatUser === null || chatUser === void 0 ? void 0 : chatUser.id,
427
+ },
428
+ skip: !(chatUser === null || chatUser === void 0 ? void 0 : chatUser.id),
429
+ });
430
+ const lastMessage = react_1.useMemo(() => {
431
+ var _a, _b;
432
+ if (!((_b = (_a = messagesQuery === null || messagesQuery === void 0 ? void 0 : messagesQuery.messages) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.length)) {
433
+ return null;
434
+ }
435
+ const { data } = messagesQuery.messages;
436
+ return data[data.length - 1];
437
+ }, [messagesQuery]);
438
+ const channelType = react_1.useMemo(() => {
439
+ return channel === null || channel === void 0 ? void 0 : channel.type;
440
+ }, [channel]);
441
+ return (react_1.default.createElement(native_base_1.Pressable, { onPress: () => (channel === null || channel === void 0 ? void 0 : channel.id) !== selectedChannelId && onOpen(channel === null || channel === void 0 ? void 0 : channel.id), borderWidth: '1', borderRadius: 10, borderColor: 'gray.200', shadow: '6' },
442
+ react_1.default.createElement(native_base_1.HStack, { m: 3, space: 2 },
443
+ react_1.default.createElement(native_base_1.Image, { alt: 'image', width: 16, borderRadius: 10, height: 16, source: { uri: ((_b = userQuery === null || userQuery === void 0 ? void 0 : userQuery.getUserAccount) === null || _b === void 0 ? void 0 : _b.picture) || 'https://picsum.photos/220' } }),
444
+ react_1.default.createElement(native_base_1.Box, { width: '80%' },
369
445
  react_1.default.createElement(native_base_1.HStack, { alignItems: "center", justifyContent: "space-between" },
370
- react_1.default.createElement(native_base_1.Text, { fontSize: "xs", color: "red.500" }, "Request withdrawal"),
371
- react_1.default.createElement(native_base_1.Text, { color: "gray.500" }, date)),
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),
374
- react_1.default.createElement(native_base_1.Text, null, "Sep 12-16, 2019. Private room fully furnis...")))));
446
+ react_1.default.createElement(native_base_1.Text, { fontSize: "xs", color: "red.500" }, channelType),
447
+ react_1.default.createElement(native_base_1.Text, { color: "gray.500" }, lastMessage ? createdAtText(lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.createdAt) : '')),
448
+ react_1.default.createElement(native_base_1.Text, { color: "gray.600", fontSize: "lg", fontWeight: "semibold" }, (chatUser === null || chatUser === void 0 ? void 0 : chatUser.givenName) + ' ' + (chatUser === null || chatUser === void 0 ? void 0 : chatUser.familyName)),
449
+ react_1.default.createElement(native_base_1.Text, { color: "gray.600" }, lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.message)))));
375
450
  };
376
451
  exports.DialogsListItem = DialogsListItem;
377
452
 
378
453
 
454
+ /***/ }),
455
+
456
+ /***/ "./src/screens/inbox/components/FilesList.tsx":
457
+ /*!****************************************************!*\
458
+ !*** ./src/screens/inbox/components/FilesList.tsx ***!
459
+ \****************************************************/
460
+ /*! no static exports found */
461
+ /***/ (function(module, exports, __webpack_require__) {
462
+
463
+ "use strict";
464
+
465
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
466
+ if (k2 === undefined) k2 = k;
467
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
468
+ }) : (function(o, m, k, k2) {
469
+ if (k2 === undefined) k2 = k;
470
+ o[k2] = m[k];
471
+ }));
472
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
473
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
474
+ }) : function(o, v) {
475
+ o["default"] = v;
476
+ });
477
+ var __importStar = (this && this.__importStar) || function (mod) {
478
+ if (mod && mod.__esModule) return mod;
479
+ var result = {};
480
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
481
+ __setModuleDefault(result, mod);
482
+ return result;
483
+ };
484
+ Object.defineProperty(exports, "__esModule", { value: true });
485
+ exports.FilesList = void 0;
486
+ const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
487
+ const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
488
+ function FilesList({ files, uploaded = false }) {
489
+ return (react_1.default.createElement(native_base_1.HStack, { space: 2, mt: 2 },
490
+ react_1.default.createElement(FilesList.FilesView, { files: files, uploaded: uploaded })));
491
+ }
492
+ exports.FilesList = FilesList;
493
+ FilesList.FilesView = function MessageItemFiles({ files = [], uploaded }) {
494
+ if (!files.length) {
495
+ return null;
496
+ }
497
+ return (react_1.default.createElement(native_base_1.Box, null, files.map((file) => {
498
+ const url = react_1.useMemo(() => (uploaded ? file.url : URL.createObjectURL(file)), [file, uploaded]);
499
+ return (react_1.default.createElement(native_base_1.Image, { alt: 'image', mr: 2, height: "16", width: "16", source: {
500
+ uri: url,
501
+ scale: 0.2,
502
+ } }));
503
+ })));
504
+ };
505
+
506
+
379
507
  /***/ }),
380
508
 
381
509
  /***/ "./src/screens/inbox/components/MessageInput.tsx":
@@ -412,18 +540,20 @@ const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
412
540
  const vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
413
541
  const ImagePicker = __importStar(__webpack_require__(/*! expo-image-picker */ "expo-image-picker"));
414
542
  const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
415
- exports.MessageInput = react_1.forwardRef(function MessageInput({ onSend }, ref) {
416
- const [text, setText] = react_1.useState('');
543
+ const FilesList_1 = __webpack_require__(/*! ./FilesList */ "./src/screens/inbox/components/FilesList.tsx");
544
+ exports.MessageInput = react_1.forwardRef(function MessageInput({ handleSend: handleSendProp }) {
545
+ const [message, setMessage] = react_1.useState('');
546
+ const [sending, setSending] = react_1.useState(false);
417
547
  const [files, setFiles] = react_1.useState([]);
418
- const reset = () => {
419
- setText('');
420
- setFiles([]);
421
- };
422
- react_1.useImperativeHandle(ref, () => ({ reset, text, files }));
423
- const onSendMessage = () => {
424
- onSend(text, files);
425
- };
426
- const onRemoveImage = (url) => setFiles((files) => files.filter((file) => file !== url));
548
+ const handleSend = react_1.useCallback(() => {
549
+ setSending(true);
550
+ handleSendProp(message, files)
551
+ .then(() => {
552
+ setMessage('');
553
+ setFiles([]);
554
+ })
555
+ .finally(() => setSending(false));
556
+ }, [files, handleSendProp, message]);
427
557
  const onSelectImages = async () => {
428
558
  // No permissions request is necessary for launching the image library
429
559
  await ImagePicker.requestMediaLibraryPermissionsAsync();
@@ -438,12 +568,12 @@ exports.MessageInput = react_1.forwardRef(function MessageInput({ onSend }, ref)
438
568
  };
439
569
  return (react_1.default.createElement(native_base_1.VStack, { marginTop: 3, alignContent: "center" },
440
570
  react_1.default.createElement(native_base_1.View, null,
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,
571
+ react_1.default.createElement(native_base_1.TextField, { placeholder: "Message...", borderColor: "gray.400", value: sending ? '' : message, onChange: (e) => setMessage(e.nativeEvent.text), fontSize: 14 })),
572
+ files.length ? (react_1.default.createElement(native_base_1.View, { mb: 4, flexDirection: "row" },
573
+ react_1.default.createElement(FilesList_1.FilesList, { files: files }))) : null,
444
574
  react_1.default.createElement(native_base_1.HStack, { alignContent: "center", justifyContent: "space-between" },
445
575
  react_1.default.createElement(vector_icons_1.FontAwesome, { onPress: onSelectImages, size: 20, style: { marginRight: 5 }, name: "file-image-o" }),
446
- react_1.default.createElement(vector_icons_1.FontAwesome, { onPress: onSendMessage, size: 20, name: "send" }))));
576
+ react_1.default.createElement(vector_icons_1.FontAwesome, { onPress: handleSend, size: 20, name: "send" }))));
447
577
  });
448
578
 
449
579
 
@@ -458,64 +588,95 @@ exports.MessageInput = react_1.forwardRef(function MessageInput({ onSend }, ref)
458
588
 
459
589
  "use strict";
460
590
 
461
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
462
- if (k2 === undefined) k2 = k;
463
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
464
- }) : (function(o, m, k, k2) {
465
- if (k2 === undefined) k2 = k;
466
- o[k2] = m[k];
467
- }));
468
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
469
- Object.defineProperty(o, "default", { enumerable: true, value: v });
470
- }) : function(o, v) {
471
- o["default"] = v;
472
- });
473
- var __importStar = (this && this.__importStar) || function (mod) {
474
- if (mod && mod.__esModule) return mod;
475
- var result = {};
476
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
477
- __setModuleDefault(result, mod);
478
- return result;
591
+ var __importDefault = (this && this.__importDefault) || function (mod) {
592
+ return (mod && mod.__esModule) ? mod : { "default": mod };
479
593
  };
480
594
  Object.defineProperty(exports, "__esModule", { value: true });
481
595
  exports.MessageItem = void 0;
482
- const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
596
+ const react_1 = __importDefault(__webpack_require__(/*! react */ "react"));
483
597
  const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
484
- const date_fns_1 = __webpack_require__(/*! date-fns */ "date-fns");
485
- const createdAtText = (value) => {
486
- if (!value)
487
- return '';
488
- let date = new Date(value);
489
- if (date_fns_1.isToday(date))
490
- return 'Today';
491
- if (date_fns_1.isYesterday(date))
492
- return 'Yesterday';
493
- return date_fns_1.format(new Date(value), 'MMM dd, yyyy');
494
- };
495
- function MessageItem({ message, userId }) {
598
+ const platform_client_1 = __webpack_require__(/*! @messenger-box/platform-client */ "@messenger-box/platform-client");
599
+ const PlainMessage_1 = __webpack_require__(/*! ./PlainMessage */ "./src/screens/inbox/components/PlainMessage.tsx");
600
+ const CommonMessage_1 = __webpack_require__(/*! ./CommonMessage */ "./src/screens/inbox/components/CommonMessage.tsx");
601
+ const components_pro_1 = __webpack_require__(/*! @common-stack/components-pro */ "@common-stack/components-pro");
602
+ function MessageItem({ message, channelId, currentUser, totalCount, }) {
496
603
  var _a;
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]);
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 },
503
- react_1.default.createElement(native_base_1.Text, { flexGrow: 1, fontWeight: "semibold" }, author),
504
- react_1.default.createElement(native_base_1.Text, { fontSize: "xs", color: "gray.500" }, createdAtText(message.createdAt))),
505
- react_1.default.createElement(native_base_1.Text, { flexGrow: 1 }, message.message),
506
- react_1.default.createElement(MessageItem.FilesView, { files: (_a = message.files) === null || _a === void 0 ? void 0 : _a.data })),
507
- !isOwnMessage ? react_1.default.createElement(native_base_1.Box, { flexGrow: 1 }) : null));
604
+ if (typeof message === 'string') {
605
+ return react_1.default.createElement(PlainMessage_1.PlainMessage, { message: message });
606
+ }
607
+ const { type } = message;
608
+ if (!type || type === platform_client_1.IPostTypeEnum.Simple) {
609
+ return react_1.default.createElement(CommonMessage_1.CommonMessage, { message: message, currentUser: currentUser });
610
+ }
611
+ return (react_1.default.createElement(components_pro_1.Slot, { name: (_a = type) === null || _a === void 0 ? void 0 : _a.toLowerCase(), fillProps: {
612
+ active: true,
613
+ message,
614
+ currentUser,
615
+ } }, (item) => react_1.default.createElement(native_base_1.Box, null, item)));
508
616
  }
509
617
  exports.MessageItem = MessageItem;
510
- MessageItem.FilesView = function MessageItemFiles({ files = [] }) {
511
- if (!files.length) {
512
- return null;
513
- }
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
- } })))));
618
+
619
+
620
+ /***/ }),
621
+
622
+ /***/ "./src/screens/inbox/components/PlainMessage.tsx":
623
+ /*!*******************************************************!*\
624
+ !*** ./src/screens/inbox/components/PlainMessage.tsx ***!
625
+ \*******************************************************/
626
+ /*! no static exports found */
627
+ /***/ (function(module, exports, __webpack_require__) {
628
+
629
+ "use strict";
630
+
631
+ var __importDefault = (this && this.__importDefault) || function (mod) {
632
+ return (mod && mod.__esModule) ? mod : { "default": mod };
633
+ };
634
+ Object.defineProperty(exports, "__esModule", { value: true });
635
+ exports.PlainMessage = void 0;
636
+ const react_1 = __importDefault(__webpack_require__(/*! react */ "react"));
637
+ const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
638
+ const PlainMessage = ({ message }) => {
639
+ return (react_1.default.createElement(native_base_1.Flex, { w: "full", justifyContent: 'center', mb: "7" },
640
+ react_1.default.createElement(native_base_1.Text, { fontSize: "14px", fontWeight: 'bold' }, message)));
518
641
  };
642
+ exports.PlainMessage = PlainMessage;
643
+
644
+
645
+ /***/ }),
646
+
647
+ /***/ "./src/screens/inbox/config/config.ts":
648
+ /*!********************************************!*\
649
+ !*** ./src/screens/inbox/config/config.ts ***!
650
+ \********************************************/
651
+ /*! no static exports found */
652
+ /***/ (function(module, exports, __webpack_require__) {
653
+
654
+ "use strict";
655
+
656
+ Object.defineProperty(exports, "__esModule", { value: true });
657
+ exports.config = void 0;
658
+ const envalid_1 = __webpack_require__(/*! envalid */ "envalid");
659
+ exports.config = envalid_1.cleanEnv(process.env, {
660
+ MESSAGES_PER_PAGE: envalid_1.num({ devDefault: 20, default: 50 }),
661
+ FILES_PER_MESSAGE: envalid_1.num({ default: 10 }),
662
+ });
663
+
664
+
665
+ /***/ }),
666
+
667
+ /***/ "./src/screens/inbox/config/index.ts":
668
+ /*!*******************************************!*\
669
+ !*** ./src/screens/inbox/config/index.ts ***!
670
+ \*******************************************/
671
+ /*! no static exports found */
672
+ /***/ (function(module, exports, __webpack_require__) {
673
+
674
+ "use strict";
675
+
676
+ Object.defineProperty(exports, "__esModule", { value: true });
677
+ exports.config = void 0;
678
+ var config_1 = __webpack_require__(/*! ./config */ "./src/screens/inbox/config/config.ts");
679
+ Object.defineProperty(exports, "config", { enumerable: true, get: function () { return config_1.config; } });
519
680
 
520
681
 
521
682
  /***/ }),
@@ -550,101 +711,153 @@ var __importStar = (this && this.__importStar) || function (mod) {
550
711
  };
551
712
  Object.defineProperty(exports, "__esModule", { value: true });
552
713
  exports.ConversationView = void 0;
553
- const platform_client_1 = __webpack_require__(/*! @messenger-box/platform-client */ "@messenger-box/platform-client");
554
714
  const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
715
+ const date_fns_1 = __webpack_require__(/*! date-fns */ "date-fns");
555
716
  const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
556
717
  const react_redux_1 = __webpack_require__(/*! react-redux */ "react-redux");
718
+ const lodash_1 = __webpack_require__(/*! lodash */ "lodash");
719
+ const platform_client_1 = __webpack_require__(/*! @messenger-box/platform-client */ "@messenger-box/platform-client");
557
720
  const MessageItem_1 = __webpack_require__(/*! ../components/MessageItem */ "./src/screens/inbox/components/MessageItem.tsx");
558
721
  const MessageInput_1 = __webpack_require__(/*! ../components/MessageInput */ "./src/screens/inbox/components/MessageInput.tsx");
559
- const MESSAGES_LIMIT = 5;
722
+ const config_1 = __webpack_require__(/*! ../config */ "./src/screens/inbox/config/index.ts");
723
+ const user_auth0_client_1 = __webpack_require__(/*! @adminide-stack/user-auth0-client */ "@adminide-stack/user-auth0-client");
724
+ const { MESSAGES_PER_PAGE } = config_1.config;
560
725
  function ConversationView({ channelId }) {
561
- const input$ = react_1.useRef();
562
- const [offset, setOffset] = react_1.useState(0);
563
- const [messages, setMessages] = react_1.useState([]);
564
- const userId = react_redux_1.useSelector((state) => state.user.auth0UserId);
565
- const [send, send$] = platform_client_1.useSendMessagesMutation({
566
- context: {},
567
- });
568
- const [edit, edit$] = platform_client_1.useEditMessageMutation({
569
- context: {},
570
- });
726
+ const messageListRef = react_1.useRef(null);
727
+ const [channelToTop, setChannelToTop] = react_1.useState(0);
728
+ const [channelMessages, setChannelMessages] = react_1.useState([]);
729
+ const auth = react_redux_1.useSelector(user_auth0_client_1.userSelector);
730
+ const [totalCount, setTotalCount] = react_1.useState(0);
731
+ const [loadingOldMessages, setLoadingOldMessages] = react_1.useState(false);
571
732
  const { startUpload } = platform_client_1.useUploadFiles();
572
- const messages$ = platform_client_1.useGetMessagesQuery({
733
+ const [sendMsg] = platform_client_1.useSendMessagesMutation();
734
+ const { data, loading: messageLoading, refetch, } = platform_client_1.useMessagesQuery({
735
+ variables: {
736
+ channelId: channelId === null || channelId === void 0 ? void 0 : channelId.toString(),
737
+ limit: MESSAGES_PER_PAGE,
738
+ },
739
+ skip: !channelId,
740
+ fetchPolicy: 'cache-and-network',
741
+ });
742
+ debugger;
743
+ const { data: users } = platform_client_1.useGetAllUsersQuery();
744
+ const currentUser = react_1.useMemo(() => { var _a; return (_a = users === null || users === void 0 ? void 0 : users.getUsers) === null || _a === void 0 ? void 0 : _a.find(({ alias }) => alias.includes(auth === null || auth === void 0 ? void 0 : auth.auth0UserId)); }, [users, auth]);
745
+ const { data: checkForMessages } = platform_client_1.useCheckForNewMessagesQuery({
573
746
  variables: {
574
- // skip: count,
575
- channelId,
576
- limit: MESSAGES_LIMIT,
747
+ channelId: channelId === null || channelId === void 0 ? void 0 : channelId.toString(),
577
748
  },
578
749
  skip: !channelId,
579
750
  fetchPolicy: 'network-only',
751
+ pollInterval: 5000,
580
752
  });
581
753
  react_1.useEffect(() => {
582
- messages$.refetch({ skip: offset });
583
- }, [offset]);
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]);
596
- react_1.useEffect(() => {
754
+ var _a;
755
+ if (((_a = data === null || data === void 0 ? void 0 : data.messages) === null || _a === void 0 ? void 0 : _a.data) && (loadingOldMessages || channelMessages.length === 0)) {
756
+ const { data: messages, totalCount } = data.messages;
757
+ setChannelMessages((oldMessages) => lodash_1.uniqBy([...[...messages].reverse(), ...oldMessages], ({ id }) => id));
758
+ setTotalCount(totalCount);
759
+ }
760
+ }, [data, loadingOldMessages, channelMessages]);
761
+ react_1.useLayoutEffect(() => {
597
762
  var _a, _b;
598
- if ((_b = (_a = messages$.data) === null || _a === void 0 ? void 0 : _a.messages.data) === null || _b === void 0 ? void 0 : _b.length) {
599
- setMessages((messages) => { var _a; return [...messages, ...(((_a = messages$.data) === null || _a === void 0 ? void 0 : _a.messages.data) || [])]; });
763
+ if (((_a = checkForMessages === null || checkForMessages === void 0 ? void 0 : checkForMessages.messages) === null || _a === void 0 ? void 0 : _a.totalCount) > totalCount) {
764
+ const numberOfNewMessages = ((_b = checkForMessages === null || checkForMessages === void 0 ? void 0 : checkForMessages.messages) === null || _b === void 0 ? void 0 : _b.totalCount) - totalCount;
765
+ refetch({
766
+ limit: numberOfNewMessages,
767
+ }).then(({ data }) => {
768
+ if (!(data === null || data === void 0 ? void 0 : data.messages)) {
769
+ return;
770
+ }
771
+ const { data: messages, totalCount } = data.messages;
772
+ setTotalCount(totalCount);
773
+ setChannelMessages((oldMessages) => lodash_1.uniqBy([...oldMessages, ...messages], ({ id }) => id));
774
+ });
775
+ }
776
+ }, [checkForMessages, totalCount, refetch]);
777
+ const onFetchOld = react_1.useCallback(() => {
778
+ var _a;
779
+ if (((_a = data === null || data === void 0 ? void 0 : data.messages) === null || _a === void 0 ? void 0 : _a.totalCount) > channelMessages.length) {
780
+ setLoadingOldMessages(true);
781
+ refetch({ skip: channelMessages.length });
782
+ }
783
+ }, [data, channelMessages]);
784
+ const onMessagesScroll = react_1.useCallback((e) => {
785
+ if (messageListRef.current) {
786
+ const { scrollTop, scrollHeight, clientHeight } = messageListRef.current;
787
+ if (clientHeight - scrollTop > scrollHeight - 50 && !messageLoading) {
788
+ onFetchOld();
789
+ }
600
790
  }
601
- }, [messages$.data]);
602
- const onLoadMore = () => setOffset(offset + MESSAGES_LIMIT);
603
- const onSendMessage = async (text, files) => {
791
+ }, [onFetchOld]);
792
+ const handleSend = react_1.useCallback(async (message, files) => {
604
793
  var _a;
605
- (_a = input$.current) === null || _a === void 0 ? void 0 : _a.reset();
606
- const { data } = await send({
794
+ if (!(message && channelId)) {
795
+ return;
796
+ }
797
+ const { data } = await sendMsg({
607
798
  variables: {
608
799
  channelId,
609
- content: text,
610
- // files: [], // files: uploadedFiles.map(i => i.data.id)
800
+ content: message,
611
801
  },
612
802
  update: (cache, { data, errors }) => {
613
803
  if (!data || errors) {
614
804
  return;
615
805
  }
616
- if (data.sendMessage) {
617
- setMessages([data.sendMessage, ...messages]);
618
- }
806
+ setChannelMessages((messages) => [...messages, data === null || data === void 0 ? void 0 : data.sendMessage]);
807
+ setTotalCount((t) => t + 1);
808
+ setChannelToTop(channelToTop + 1);
619
809
  },
620
810
  });
621
- if (files.length) {
622
- const { data: uploadedFiles } = await startUpload({
811
+ if (files && ((_a = data === null || data === void 0 ? void 0 : data.sendMessage) === null || _a === void 0 ? void 0 : _a.id)) {
812
+ const { id: postId } = data.sendMessage;
813
+ const uploadResponse = await startUpload({
623
814
  file: files,
624
815
  saveUploadedFile: {
625
816
  variables: {
626
- postId: data.sendMessage.id,
817
+ postId,
627
818
  },
628
819
  },
629
820
  createUploadLink: {
630
821
  variables: {
631
- postId: data.sendMessage.id,
822
+ postId,
632
823
  },
633
824
  },
634
825
  });
635
- await edit({
636
- variables: {
637
- channelId,
638
- content: text,
639
- messageId: data.sendMessage.id,
640
- files: uploadedFiles.map((i) => i.id),
641
- },
642
- });
826
+ const uploadedFiles = uploadResponse.data;
827
+ setChannelMessages((messages) => messages.map((message) => {
828
+ if (message.id === postId) {
829
+ return Object.assign(Object.assign({}, message), { files: {
830
+ totalCount: uploadedFiles.length,
831
+ data: uploadedFiles,
832
+ } });
833
+ }
834
+ return message;
835
+ }));
643
836
  }
644
- };
837
+ }, [setChannelMessages, currentUser, channelId]);
838
+ const messageList = react_1.useMemo(() => {
839
+ let currentDate = '';
840
+ let res = [];
841
+ lodash_1.orderBy(channelMessages, ['createdAt'], ['asc']).map((msg) => {
842
+ const date = new Date(msg.createdAt);
843
+ let msgDate;
844
+ if (date_fns_1.isToday(date))
845
+ msgDate = 'Today';
846
+ else if (date_fns_1.isYesterday(date))
847
+ msgDate = 'Yesterday';
848
+ else
849
+ msgDate = date_fns_1.format(new Date(msg.createdAt), 'eee, do MMMM');
850
+ if (msgDate !== currentDate) {
851
+ res.push(msgDate);
852
+ currentDate = msgDate;
853
+ }
854
+ res.push(msg);
855
+ });
856
+ return res;
857
+ }, [channelMessages]);
645
858
  return (react_1.default.createElement(react_1.default.Fragment, null,
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 }) }),
647
- react_1.default.createElement(MessageInput_1.MessageInput, { onSend: onSendMessage, ref: input$ })));
859
+ react_1.default.createElement(native_base_1.FlatList, { inverted: true, ref: messageListRef, data: messageList, onEndReached: onMessagesScroll, flex: 1, renderItem: ({ item }) => (react_1.default.createElement(MessageItem_1.MessageItem, { channelId: channelId, currentUser: currentUser, message: item, totalCount: totalCount })) }),
860
+ react_1.default.createElement(MessageInput_1.MessageInput, { channelId: channelId, handleSend: handleSend })));
648
861
  }
649
862
  exports.ConversationView = ConversationView;
650
863
 
@@ -681,44 +894,114 @@ var __importStar = (this && this.__importStar) || function (mod) {
681
894
  };
682
895
  Object.defineProperty(exports, "__esModule", { value: true });
683
896
  exports.Dialogs = void 0;
897
+ const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
684
898
  const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
685
- const platform_client_1 = __webpack_require__(/*! @messenger-box/platform-client */ "@messenger-box/platform-client");
899
+ const vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
686
900
  const react_redux_1 = __webpack_require__(/*! react-redux */ "react-redux");
687
- const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
688
- const lodash_1 = __webpack_require__(/*! lodash */ "lodash");
689
901
  const native_1 = __webpack_require__(/*! @react-navigation/native */ "@react-navigation/native");
690
902
  const DialogsListItem_1 = __webpack_require__(/*! ../components/DialogsListItem */ "./src/screens/inbox/components/DialogsListItem.tsx");
691
- function Dialogs() {
692
- var _a, _b, _c;
693
- const users$ = platform_client_1.useGetAllUsersQuery();
903
+ const platform_client_1 = __webpack_require__(/*! @messenger-box/platform-client */ "@messenger-box/platform-client");
904
+ const user_auth0_client_1 = __webpack_require__(/*! @adminide-stack/user-auth0-client */ "@adminide-stack/user-auth0-client");
905
+ const client_1 = __webpack_require__(/*! @admin-layout/client */ "@admin-layout/client");
906
+ function Dialogs(props) {
907
+ var _a;
908
+ const { channelFilters, channelRole } = props;
909
+ const { params } = native_1.useRoute();
910
+ const auth = react_redux_1.useSelector(user_auth0_client_1.userSelector);
911
+ const dispatch = react_redux_1.useDispatch();
694
912
  const navigation = native_1.useNavigation();
695
- const channels$ = platform_client_1.useGetAllChannelQuery();
696
- const [rk, setRk] = react_1.useState(Math.random());
697
- const userId = react_redux_1.useSelector((state) => state.user.auth0UserId);
698
- /**
699
- * TODO: add ability to check channel members
700
- * HostChannels: channel.members[0].user !== userId
701
- * GuestChannels: channel.members[0].user == userId
702
- */
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]);
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]);
705
- // Filter all channles
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]);
707
- // Assign users to channel item
708
- const channels = react_1.useMemo(() => list.map((channel) => { var _a; return (Object.assign(Object.assign({}, channel), { users: (_a = channel === null || channel === void 0 ? void 0 : channel.members) === null || _a === void 0 ? void 0 : _a.map((record) => users[record === null || record === void 0 ? void 0 : record.user.id]) })); }), [list, (_c = users$.data) === null || _c === void 0 ? void 0 : _c.getUsers, userId]);
709
- const onRefresh = async () => {
710
- await users$.refetch();
711
- await channels$.refetch();
712
- return setRk(Math.random());
713
- };
714
- const isRefreshing = channels$.loading || users$.loading;
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 })) })));
913
+ const { data: userChannels, loading: userChannelsLoading, refetch: getChannelsRefetch, } = platform_client_1.useGetChannelsByUserQuery({
914
+ variables: {
915
+ role: channelRole,
916
+ criteria: channelFilters,
917
+ },
918
+ });
919
+ const { data: users } = platform_client_1.useGetAllUsersQuery();
920
+ const currentUser = react_1.useMemo(() => { var _a; return (_a = users === null || users === void 0 ? void 0 : users.getUsers) === null || _a === void 0 ? void 0 : _a.find(({ alias }) => alias.includes(auth === null || auth === void 0 ? void 0 : auth.auth0UserId)); }, [users, auth]);
921
+ react_1.useEffect(() => {
922
+ setTimeout(() => {
923
+ dispatch({
924
+ type: client_1.CHANGE_SETTINGS_ACTION,
925
+ payload: {
926
+ footerRender: false,
927
+ },
928
+ });
929
+ }, 0);
930
+ return () => {
931
+ dispatch({
932
+ type: client_1.CHANGE_SETTINGS_ACTION,
933
+ payload: {
934
+ footerRender: true,
935
+ },
936
+ });
937
+ };
938
+ }, []);
939
+ const handleSelectChannel = react_1.useCallback((id) => {
940
+ if (params === null || params === void 0 ? void 0 : params.channelId) {
941
+ navigation.navigate('Inbox.DialogMessages', { channelId: params === null || params === void 0 ? void 0 : params.channelId, hideTabBar: true });
942
+ }
943
+ else {
944
+ navigation.navigate('Inbox.DialogMessages', { channelId: id, hideTabBar: true });
945
+ }
946
+ }, []);
947
+ return (react_1.default.createElement(native_base_1.Box, { p: 2 }, !((_a = userChannels === null || userChannels === void 0 ? void 0 : userChannels.channelsByUser) === null || _a === void 0 ? void 0 : _a.length) ? (react_1.default.createElement(native_base_1.Box, { p: 5 },
948
+ react_1.default.createElement(native_base_1.Heading, null, "Chat"),
949
+ react_1.default.createElement(native_base_1.Input, { height: 50, mt: 3, placeholder: "Search", borderRadius: 50, borderColor: 'gray.200', borderWidth: 2 }),
950
+ react_1.default.createElement(native_base_1.Center, { mt: 6 },
951
+ react_1.default.createElement(native_base_1.Icon, { as: vector_icons_1.Ionicons, name: "chatbubbles", size: 'xl' }),
952
+ react_1.default.createElement(native_base_1.Text, null, "You don't have any messages yet!")))) : (react_1.default.createElement(react_1.default.Fragment, null,
953
+ react_1.default.createElement(native_base_1.FlatList, { data: userChannels === null || userChannels === void 0 ? void 0 : userChannels.channelsByUser, onRefresh: getChannelsRefetch, refreshing: userChannelsLoading, 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, { users: users === null || users === void 0 ? void 0 : users.getUsers, onOpen: handleSelectChannel, currentUser: currentUser, channel: channel, selectedChannelId: params === null || params === void 0 ? void 0 : params.channelId })) })))));
718
954
  }
719
955
  exports.Dialogs = Dialogs;
720
956
 
721
957
 
958
+ /***/ }),
959
+
960
+ /***/ "./src/screens/index.ts":
961
+ /*!******************************!*\
962
+ !*** ./src/screens/index.ts ***!
963
+ \******************************/
964
+ /*! no static exports found */
965
+ /***/ (function(module, exports, __webpack_require__) {
966
+
967
+ "use strict";
968
+
969
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
970
+ if (k2 === undefined) k2 = k;
971
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
972
+ }) : (function(o, m, k, k2) {
973
+ if (k2 === undefined) k2 = k;
974
+ o[k2] = m[k];
975
+ }));
976
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
977
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
978
+ };
979
+ Object.defineProperty(exports, "__esModule", { value: true });
980
+ __exportStar(__webpack_require__(/*! ./inbox/Inbox */ "./src/screens/inbox/Inbox.tsx"), exports);
981
+
982
+
983
+ /***/ }),
984
+
985
+ /***/ "@admin-layout/client":
986
+ /*!***************************************!*\
987
+ !*** external "@admin-layout/client" ***!
988
+ \***************************************/
989
+ /*! no static exports found */
990
+ /***/ (function(module, exports) {
991
+
992
+ module.exports = require("@admin-layout/client");
993
+
994
+ /***/ }),
995
+
996
+ /***/ "@adminide-stack/user-auth0-client":
997
+ /*!****************************************************!*\
998
+ !*** external "@adminide-stack/user-auth0-client" ***!
999
+ \****************************************************/
1000
+ /*! no static exports found */
1001
+ /***/ (function(module, exports) {
1002
+
1003
+ module.exports = require("@adminide-stack/user-auth0-client");
1004
+
722
1005
  /***/ }),
723
1006
 
724
1007
  /***/ "@common-stack/client-react":
@@ -732,6 +1015,17 @@ module.exports = require("@common-stack/client-react");
732
1015
 
733
1016
  /***/ }),
734
1017
 
1018
+ /***/ "@common-stack/components-pro":
1019
+ /*!***********************************************!*\
1020
+ !*** external "@common-stack/components-pro" ***!
1021
+ \***********************************************/
1022
+ /*! no static exports found */
1023
+ /***/ (function(module, exports) {
1024
+
1025
+ module.exports = require("@common-stack/components-pro");
1026
+
1027
+ /***/ }),
1028
+
735
1029
  /***/ "@expo/vector-icons":
736
1030
  /*!*************************************!*\
737
1031
  !*** external "@expo/vector-icons" ***!
@@ -765,14 +1059,14 @@ module.exports = require("@react-navigation/native");
765
1059
 
766
1060
  /***/ }),
767
1061
 
768
- /***/ "@react-navigation/native-stack":
769
- /*!*************************************************!*\
770
- !*** external "@react-navigation/native-stack" ***!
771
- \*************************************************/
1062
+ /***/ "@react-navigation/stack":
1063
+ /*!******************************************!*\
1064
+ !*** external "@react-navigation/stack" ***!
1065
+ \******************************************/
772
1066
  /*! no static exports found */
773
1067
  /***/ (function(module, exports) {
774
1068
 
775
- module.exports = require("@react-navigation/native-stack");
1069
+ module.exports = require("@react-navigation/stack");
776
1070
 
777
1071
  /***/ }),
778
1072
 
@@ -787,6 +1081,17 @@ module.exports = require("date-fns");
787
1081
 
788
1082
  /***/ }),
789
1083
 
1084
+ /***/ "envalid":
1085
+ /*!**************************!*\
1086
+ !*** external "envalid" ***!
1087
+ \**************************/
1088
+ /*! no static exports found */
1089
+ /***/ (function(module, exports) {
1090
+
1091
+ module.exports = require("envalid");
1092
+
1093
+ /***/ }),
1094
+
790
1095
  /***/ "expo-image-picker":
791
1096
  /*!************************************!*\
792
1097
  !*** external "expo-image-picker" ***!