@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 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 react_native_safe_area_context_1 = __webpack_require__(/*! react-native-safe-area-context */ "react-native-safe-area-context");
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(react_native_safe_area_context_1.SafeAreaView, { style: { flex: 1, flexGrow: 1 } },
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 vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
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
- const { goBack } = native_1.useNavigation();
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(react_native_gesture_handler_1.TouchableOpacity, { onPress: onOpenChannel },
420
- react_1.default.createElement(native_base_1.View, { paddingX: 5, paddingY: 2, flexDirection: "row", alignItems: "center" },
421
- react_1.default.createElement(native_base_1.View, null,
422
- react_1.default.createElement(native_base_1.Image, { width: 16, borderRadius: "full", height: 16, marginRight: 3, source: { uri: "https://picsum.photos/220" } })),
423
- react_1.default.createElement(native_base_1.View, { flexGrow: 1 },
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, { marginBottom: 1, color: "gray.600", fontSize: "lg", fontWeight: "semibold" }, title),
428
- react_1.default.createElement(native_base_1.Text, { marginBottom: 1, color: "gray.600" }, 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.View, { paddingX: 3, marginTop: 3, flexDirection: "column", alignContent: "center" },
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: 'Message...', borderColor: "gray.400", value: text, onChange: (e) => setText(e.nativeEvent.text), fontSize: 14 })),
498
- files.length ? react_1.default.createElement(native_base_1.View, { mb: 4, flexDirection: "row" }, files.map((file, index) => (react_1.default.createElement(react_native_gesture_handler_1.TouchableOpacity, { onPress: () => onRemoveImage(file), key: index },
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.View, { flexDirection: "row", paddingX: "3", alignContent: "center", justifyContent: "space-between" },
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.View, { mb: 4, flexDirection: "row", alignItems: "center", paddingX: 3 },
556
- isOwnMessage ? react_1.default.createElement(native_base_1.View, { flexGrow: 1 }) : null,
557
- react_1.default.createElement(native_base_1.View, { borderRadius: "md", backgroundColor: "gray.200", paddingX: 3, paddingY: "1.5", flexGrow: 3 },
558
- react_1.default.createElement(native_base_1.View, { flexDirection: "row", alignContent: "flex-start", mb: 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.View, { flexGrow: 1 }) : null));
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.View, { mt: 2, flexDirection: "row" }, files.map(file => react_1.default.createElement(native_base_1.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 } }))));
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
- react_1.useEffect(() => {
638
- messages$.subscribeToMore({
639
- variables: { channelId },
640
- document: platform_client_1.onChatMessageAddedDocument,
641
- updateQuery: (prev, { subscriptionData }) => {
642
- const list = (subscriptionData.data.messages.data || []);
643
- const added = list.filter(data => !data.author.alias.includes(userId));
644
- messages.concat(...added);
645
- return prev;
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(react_native_gesture_handler_1.FlatList, { inverted: true, data: messages, onEndReached: onLoadMore, style: { flex: 1, flexGrow: 1 }, renderItem: ({ item }) => react_1.default.createElement(MessageItem_1.MessageItem, { userId: userId, message: item }) }),
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("Inbox.DialogMessages", Object.assign(Object.assign({}, options), { channel, hideTabBar: true }));
771
- return (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.View, { height: "0.5", backgroundColor: "gray.200", marginY: "0.5" }), renderItem: ({ item: channel }) => react_1.default.createElement(DialogsListItem_1.DialogsListItem, { refreshKey: rk, onOpen: onOpen, currentUserId: userId, channel: channel }) }));
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.178",
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.178",
23
- "@messenger-box/platform-client": "0.0.1-alpha.178"
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": "5f2bbd9c3a88ddbb9969b0c69b4e9dc31c128f36"
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 { SafeAreaView } from 'react-native-safe-area-context';
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
- <SafeAreaView style={{ flex: 1, flexGrow: 1 }}>
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
- </SafeAreaView>
14
+ </Box>
19
15
  );
20
- }
16
+ }
@@ -1,25 +1,13 @@
1
1
  import * as React from 'react';
2
- import { AntDesign } from '@expo/vector-icons';
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
- <SafeAreaView>
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
- </SafeAreaView>
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, View, Image } from 'native-base';
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({ refreshKey, channel, currentUserId, onOpen }) {
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(() => users.map(({ givenName, familyName }) => `${givenName} ${familyName}`).join(','), [users]);
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
- <TouchableOpacity onPress={onOpenChannel}>
55
- <View paddingX={5} paddingY={2} flexDirection="row" alignItems="center">
56
- <View>
57
- <Image width={16} borderRadius="full" height={16} marginRight={3} source={{ uri: "https://picsum.photos/220" }} />
58
- </View>
59
- <View flexGrow={1}>
60
- <View flexDirection="row" alignItems="center" justifyContent="space-between">
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">Request withdrawal</Text>
73
+ <Text fontSize="xs" color="red.500">
74
+ Request withdrawal
75
+ </Text>
63
76
  <Text color="gray.500">{date}</Text>
64
- </View>
65
- <Text marginBottom={1} color="gray.600" fontSize="lg" fontWeight="semibold">{title}</Text>
66
- <Text marginBottom={1} color="gray.600">{text}</Text>
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
- </View>
70
- </View>
71
- </TouchableOpacity>
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
- <View paddingX={3} marginTop={3} flexDirection="column" alignContent="center">
36
+ <VStack marginTop={3} alignContent="center">
38
37
  <View>
39
- <TextField placeholder='Message...' borderColor="gray.400" value={text} onChange={(e) => setText(e.nativeEvent.text)} fontSize={14} />
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 ? <View mb={4} flexDirection="row">
42
- {files.map((file, index) => (
43
- <TouchableOpacity onPress={() => onRemoveImage(file)} key={index}>
44
- <Image mr={2} height={10} width={10} source={{ uri: file }} />
45
- </TouchableOpacity>
46
- ))}
47
- </View> : null}
48
- <View flexDirection="row" paddingX="3" alignContent="center" justifyContent="space-between">
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
- </View>
52
- </View>
58
+ </HStack>
59
+ </VStack>
53
60
  );
54
61
  });
@@ -1,5 +1,5 @@
1
1
  import React, { useMemo } from 'react';
2
- import { Text, View, Image } from "native-base";
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, userId: string }) {
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(() => message.author ? `${message.author?.givenName} ${message.author?.familyName}` : null, [message.author]);
16
+ const author = useMemo(
17
+ () => (message.author ? `${message.author?.givenName} ${message.author?.familyName}` : null),
18
+ [message.author],
19
+ );
17
20
 
18
21
  return (
19
- <View mb={4} flexDirection="row" alignItems="center" paddingX={3}>
20
- {isOwnMessage ? <View flexGrow={1} /> : null}
21
- <View borderRadius="md" backgroundColor="gray.200" paddingX={3} paddingY="1.5" flexGrow={3}>
22
- <View flexDirection="row" alignContent="flex-start" mb={1}>
23
- <Text flexGrow={1} fontWeight="semibold">{author}</Text>
24
- <Text fontSize="xs" color="gray.500">{createdAtText(message.createdAt)}</Text>
25
- </View>
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
- </View>
29
- {!isOwnMessage ? <View flexGrow={1} /> : null}
30
- </View>
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
- <View mt={2} flexDirection="row">
41
- {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 }} />)}
42
- </View>
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 { FlatList } from 'react-native-gesture-handler';
2
-
3
- import { IPost, useEditMessageMutation, useGetMessagesQuery, useSendMessagesMutation, useUploadFiles, onChatMessageAddedDocument } from '@messenger-box/platform-client';
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
- messages$.subscribeToMore({
44
- variables: { channelId },
45
- document: onChatMessageAddedDocument,
46
- updateQuery: (prev, { subscriptionData }) => {
47
- const list = (subscriptionData.data.messages.data || []) as IPost[];
48
- const added = list.filter(data => !data.author.alias.includes(userId));
49
-
50
- messages.concat(...added);
51
- return prev;
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([ data.sendMessage as IPost, ...messages ]);
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
- style={{ flex: 1, flexGrow: 1 }}
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, View } from 'native-base';
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
- , [list, users$.data?.getUsers, userId]);
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("Inbox.DialogMessages" as any, { ...options, channel, hideTabBar: true });
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
- <FlatList
54
- data={channels}
55
- onRefresh={onRefresh}
56
- refreshing={isRefreshing}
57
- contentContainerStyle={{ minHeight: '100%' }}
58
- ItemSeparatorComponent={() => <View height="0.5" backgroundColor="gray.200" marginY="0.5" />}
59
- renderItem={({ item: channel }) => <DialogsListItem refreshKey={rk} onOpen={onOpen} currentUserId={userId} channel={channel} />}
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
  }
@@ -1 +0,0 @@
1
- export * from './inbox';