@messenger-box/platform-mobile 0.0.1-alpha.219 → 0.0.1-alpha.222

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,22 @@
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.222](https://github.com/cdmbase/messenger-box/compare/v0.0.1-alpha.221...v0.0.1-alpha.222) (2022-10-11)
7
+
8
+ **Note:** Version bump only for package @messenger-box/platform-mobile
9
+
10
+
11
+
12
+
13
+
14
+ ## [0.0.1-alpha.221](https://github.com/cdmbase/messenger-box/compare/v0.0.1-alpha.220...v0.0.1-alpha.221) (2022-10-06)
15
+
16
+ **Note:** Version bump only for package @messenger-box/platform-mobile
17
+
18
+
19
+
20
+
21
+
6
22
  ## [0.0.1-alpha.219](https://github.com/cdmbase/messenger-box/compare/v0.0.1-alpha.218...v0.0.1-alpha.219) (2022-09-24)
7
23
 
8
24
  **Note:** Version bump only for package @messenger-box/platform-mobile
package/lib/index.js CHANGED
@@ -214,70 +214,6 @@ const Inbox = (props) => {
214
214
  exports.Inbox = Inbox;
215
215
 
216
216
 
217
- /***/ }),
218
-
219
- /***/ "./src/screens/inbox/components/CommonMessage.tsx":
220
- /*!********************************************************!*\
221
- !*** ./src/screens/inbox/components/CommonMessage.tsx ***!
222
- \********************************************************/
223
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
224
-
225
-
226
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
227
- if (k2 === undefined) k2 = k;
228
- var desc = Object.getOwnPropertyDescriptor(m, k);
229
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
230
- desc = { enumerable: true, get: function() { return m[k]; } };
231
- }
232
- Object.defineProperty(o, k2, desc);
233
- }) : (function(o, m, k, k2) {
234
- if (k2 === undefined) k2 = k;
235
- o[k2] = m[k];
236
- }));
237
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
238
- Object.defineProperty(o, "default", { enumerable: true, value: v });
239
- }) : function(o, v) {
240
- o["default"] = v;
241
- });
242
- var __importStar = (this && this.__importStar) || function (mod) {
243
- if (mod && mod.__esModule) return mod;
244
- var result = {};
245
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
246
- __setModuleDefault(result, mod);
247
- return result;
248
- };
249
- Object.defineProperty(exports, "__esModule", ({ value: true }));
250
- exports.CommonMessage = void 0;
251
- const React = __importStar(__webpack_require__(/*! react */ "react"));
252
- const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
253
- const vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
254
- const date_fns_1 = __webpack_require__(/*! date-fns */ "date-fns");
255
- const FilesList_1 = __webpack_require__(/*! ./FilesList */ "./src/screens/inbox/components/FilesList.tsx");
256
- const lodash_1 = __webpack_require__(/*! lodash */ "lodash");
257
- const CommonMessage = (props) => {
258
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
259
- const { message, currentUser } = props;
260
- return (React.createElement(native_base_1.Box, { mb: "7" },
261
- React.createElement(native_base_1.HStack, { space: 2 },
262
- 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 } }, (0, 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))),
263
- React.createElement(native_base_1.Box, null,
264
- React.createElement(native_base_1.HStack, { width: '80%', justifyContent: 'space-between', alignItems: 'center' },
265
- React.createElement(native_base_1.HStack, { space: 2 },
266
- 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)
267
- ? ((_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)
268
- : (_h = message === null || message === void 0 ? void 0 : message.author) === null || _h === void 0 ? void 0 : _h.username),
269
- React.createElement(native_base_1.Text, { fontSize: "14px", color: "gray.500", ml: "10px" }, (0, date_fns_1.formatDistance)(new Date(message === null || message === void 0 ? void 0 : message.createdAt), new Date(), {
270
- includeSeconds: true,
271
- addSuffix: true,
272
- }))),
273
- (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" },
274
- React.createElement(native_base_1.Icon, { as: vector_icons_1.Ionicons, name: 'flag', color: "gray.600", size: "sm" })))),
275
- React.createElement(native_base_1.Text, { fontSize: "14px", mt: "5px" }, message === null || message === void 0 ? void 0 : message.message),
276
- ((_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))));
277
- };
278
- exports.CommonMessage = CommonMessage;
279
-
280
-
281
217
  /***/ }),
282
218
 
283
219
  /***/ "./src/screens/inbox/components/DialogsListItem.tsx":
@@ -389,233 +325,6 @@ const DialogsListItem = function DialogsListItem({ currentUser, users, selectedC
389
325
  exports.DialogsListItem = DialogsListItem;
390
326
 
391
327
 
392
- /***/ }),
393
-
394
- /***/ "./src/screens/inbox/components/FilesList.tsx":
395
- /*!****************************************************!*\
396
- !*** ./src/screens/inbox/components/FilesList.tsx ***!
397
- \****************************************************/
398
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
399
-
400
-
401
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
402
- if (k2 === undefined) k2 = k;
403
- var desc = Object.getOwnPropertyDescriptor(m, k);
404
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
405
- desc = { enumerable: true, get: function() { return m[k]; } };
406
- }
407
- Object.defineProperty(o, k2, desc);
408
- }) : (function(o, m, k, k2) {
409
- if (k2 === undefined) k2 = k;
410
- o[k2] = m[k];
411
- }));
412
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
413
- Object.defineProperty(o, "default", { enumerable: true, value: v });
414
- }) : function(o, v) {
415
- o["default"] = v;
416
- });
417
- var __importStar = (this && this.__importStar) || function (mod) {
418
- if (mod && mod.__esModule) return mod;
419
- var result = {};
420
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
421
- __setModuleDefault(result, mod);
422
- return result;
423
- };
424
- Object.defineProperty(exports, "__esModule", ({ value: true }));
425
- exports.FilesList = void 0;
426
- const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
427
- const react_native_1 = __webpack_require__(/*! react-native */ "react-native");
428
- const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
429
- function FilesList({ files, uploaded = false }) {
430
- return (react_1.default.createElement(native_base_1.HStack, { space: 2, mt: 2 },
431
- react_1.default.createElement(FilesList.FilesView, { files: files, uploaded: uploaded })));
432
- }
433
- exports.FilesList = FilesList;
434
- FilesList.FilesView = function MessageItemFiles({ files = [], uploaded }) {
435
- if (!files.length) {
436
- return null;
437
- }
438
- return (react_1.default.createElement(native_base_1.Box, null, files.map((file) => {
439
- const url = (0, react_1.useMemo)(() => (uploaded ? file.url : react_native_1.Image.resolveAssetSource(file).uri), [file, uploaded]);
440
- return (react_1.default.createElement(native_base_1.Image, { alt: 'image', mr: 2, height: "16", width: "16", source: {
441
- uri: url,
442
- scale: 0.2,
443
- } }));
444
- })));
445
- };
446
-
447
-
448
- /***/ }),
449
-
450
- /***/ "./src/screens/inbox/components/MessageInput.tsx":
451
- /*!*******************************************************!*\
452
- !*** ./src/screens/inbox/components/MessageInput.tsx ***!
453
- \*******************************************************/
454
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
455
-
456
-
457
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
458
- if (k2 === undefined) k2 = k;
459
- var desc = Object.getOwnPropertyDescriptor(m, k);
460
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
461
- desc = { enumerable: true, get: function() { return m[k]; } };
462
- }
463
- Object.defineProperty(o, k2, desc);
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;
479
- };
480
- var __importDefault = (this && this.__importDefault) || function (mod) {
481
- return (mod && mod.__esModule) ? mod : { "default": mod };
482
- };
483
- Object.defineProperty(exports, "__esModule", ({ value: true }));
484
- exports.MessageInput = void 0;
485
- const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
486
- const vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
487
- const ImagePicker = __importStar(__webpack_require__(/*! expo-image-picker */ "expo-image-picker"));
488
- const react_native_keyboard_aware_scroll_view_1 = __webpack_require__(/*! react-native-keyboard-aware-scroll-view */ "react-native-keyboard-aware-scroll-view");
489
- const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
490
- const FilesList_1 = __webpack_require__(/*! ./FilesList */ "./src/screens/inbox/components/FilesList.tsx");
491
- const axios_1 = __importDefault(__webpack_require__(/*! axios */ "axios"));
492
- exports.MessageInput = (0, react_1.forwardRef)(function MessageInput({ handleSend: handleSendProp }) {
493
- const [message, setMessage] = (0, react_1.useState)('');
494
- const [sending, setSending] = (0, react_1.useState)(false);
495
- const [files, setFiles] = (0, react_1.useState)([]);
496
- const [showKeyboard, setShowKeyboard] = (0, react_1.useState)(false);
497
- const handleSend = (0, react_1.useCallback)(() => {
498
- setSending(true);
499
- handleSendProp(message, files)
500
- .then(() => {
501
- setMessage('');
502
- setFiles([]);
503
- })
504
- .finally(() => setSending(false));
505
- }, [files, handleSendProp, message]);
506
- const onSelectImages = async () => {
507
- // No permissions request is necessary for launching the image library
508
- await ImagePicker.requestMediaLibraryPermissionsAsync();
509
- let result = await ImagePicker.launchImageLibraryAsync({
510
- mediaTypes: ImagePicker.MediaTypeOptions.Images,
511
- allowsEditing: true,
512
- aspect: [4, 3],
513
- quality: 1,
514
- });
515
- if (!result.cancelled) {
516
- axios_1.default
517
- .get(result.uri, {
518
- responseType: 'blob',
519
- })
520
- .then((res) => {
521
- let file = res.data._data;
522
- file.uri = result.uri;
523
- setFiles(files.concat(file));
524
- });
525
- }
526
- };
527
- return (react_1.default.createElement(react_native_keyboard_aware_scroll_view_1.KeyboardAwareScrollView, { keyboardDismissMode: "on-drag", keyboardShouldPersistTaps: 'always', onKeyboardWillShow: (frames) => {
528
- setShowKeyboard(true);
529
- }, onKeyboardWillHide: (frames) => {
530
- setShowKeyboard(false);
531
- }, scrollEnabled: !showKeyboard, style: { position: 'absolute', left: 0, right: 0, bottom: showKeyboard ? 300 : 0 } },
532
- react_1.default.createElement(native_base_1.VStack, { bg: 'white', alignContent: "center", p: 5 },
533
- react_1.default.createElement(native_base_1.View, null,
534
- react_1.default.createElement(native_base_1.TextField, { placeholder: "Message...", borderColor: "gray.400", value: sending ? '' : message, onChange: (e) => setMessage(e.nativeEvent.text), fontSize: 14 })),
535
- files.length ? (react_1.default.createElement(native_base_1.View, { mb: 4, flexDirection: "row" },
536
- react_1.default.createElement(FilesList_1.FilesList, { files: files }))) : null,
537
- react_1.default.createElement(native_base_1.HStack, { alignContent: "center", justifyContent: "space-between" },
538
- react_1.default.createElement(vector_icons_1.FontAwesome, { onPress: onSelectImages, size: 20, style: { marginRight: 5 }, name: "file-image-o" }),
539
- react_1.default.createElement(vector_icons_1.FontAwesome, { onPress: handleSend, size: 20, name: "send" })))));
540
- });
541
-
542
-
543
- /***/ }),
544
-
545
- /***/ "./src/screens/inbox/components/MessageItem.tsx":
546
- /*!******************************************************!*\
547
- !*** ./src/screens/inbox/components/MessageItem.tsx ***!
548
- \******************************************************/
549
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
550
-
551
-
552
- var __importDefault = (this && this.__importDefault) || function (mod) {
553
- return (mod && mod.__esModule) ? mod : { "default": mod };
554
- };
555
- Object.defineProperty(exports, "__esModule", ({ value: true }));
556
- exports.MessageItem = void 0;
557
- const react_1 = __importDefault(__webpack_require__(/*! react */ "react"));
558
- const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
559
- const vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
560
- const native_1 = __webpack_require__(/*! @react-navigation/native */ "@react-navigation/native");
561
- const PlainMessage_1 = __webpack_require__(/*! ./PlainMessage */ "./src/screens/inbox/components/PlainMessage.tsx");
562
- const CommonMessage_1 = __webpack_require__(/*! ./CommonMessage */ "./src/screens/inbox/components/CommonMessage.tsx");
563
- function MessageItem({ message, channelId, currentUser, totalCount, onOpen, }) {
564
- var _a, _b;
565
- if (typeof message === 'string') {
566
- return react_1.default.createElement(PlainMessage_1.PlainMessage, { message: message });
567
- }
568
- const { type } = message;
569
- if (!type || type === "Simple" /* IPostTypeEnum.Simple */) {
570
- return react_1.default.createElement(CommonMessage_1.CommonMessage, { message: message, currentUser: currentUser });
571
- }
572
- if (type === "ALERT" /* IPostTypeEnum.ALERT */) {
573
- const { attachment } = (_a = message === null || message === void 0 ? void 0 : message.propsConfiguration) === null || _a === void 0 ? void 0 : _a.contents;
574
- let action = '';
575
- let actionId = '';
576
- const icon = 'information-circle';
577
- if (attachment.callToAction.link.includes('my-reservation-details')) {
578
- action = 'm-reservation-detail';
579
- actionId = (_b = attachment === null || attachment === void 0 ? void 0 : attachment.callToAction) === null || _b === void 0 ? void 0 : _b.link.split('/').pop();
580
- }
581
- const color = (0, native_base_1.useColorModeValue)('white', 'gray.800');
582
- const bgColor = (0, native_base_1.useColorModeValue)('gray.800', 'white');
583
- const navigation = (0, native_1.useNavigation)();
584
- return (react_1.default.createElement(native_base_1.Box, { borderWidth: 1, borderRadius: 20, backgroundColor: bgColor, my: 2, p: 3, opacity: 0.7 },
585
- react_1.default.createElement(native_base_1.HStack, { space: 2, alignItems: 'center' },
586
- react_1.default.createElement(native_base_1.Icon, { as: vector_icons_1.Ionicons, name: icon, color: 'white' }),
587
- react_1.default.createElement(native_base_1.Text, { color: color, width: '45%', numberOfLines: 3 }, attachment === null || attachment === void 0 ? void 0 : attachment.title),
588
- attachment.callToAction ? (react_1.default.createElement(native_base_1.Button, { variant: 'outline', size: 'sm', borderColor: color, onPress: () => navigation.navigate(action, { reservationId: actionId }) },
589
- react_1.default.createElement(native_base_1.Text, { color: color }, attachment.callToAction.title))) : null)));
590
- }
591
- return null;
592
- }
593
- exports.MessageItem = MessageItem;
594
-
595
-
596
- /***/ }),
597
-
598
- /***/ "./src/screens/inbox/components/PlainMessage.tsx":
599
- /*!*******************************************************!*\
600
- !*** ./src/screens/inbox/components/PlainMessage.tsx ***!
601
- \*******************************************************/
602
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
603
-
604
-
605
- var __importDefault = (this && this.__importDefault) || function (mod) {
606
- return (mod && mod.__esModule) ? mod : { "default": mod };
607
- };
608
- Object.defineProperty(exports, "__esModule", ({ value: true }));
609
- exports.PlainMessage = void 0;
610
- const react_1 = __importDefault(__webpack_require__(/*! react */ "react"));
611
- const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
612
- const PlainMessage = ({ message }) => {
613
- return (react_1.default.createElement(native_base_1.Flex, { w: "full", justifyContent: 'center', mb: "7" },
614
- react_1.default.createElement(native_base_1.Text, { fontSize: "14px", fontWeight: 'bold' }, message)));
615
- };
616
- exports.PlainMessage = PlainMessage;
617
-
618
-
619
328
  /***/ }),
620
329
 
621
330
  /***/ "./src/screens/inbox/config/config.ts":
@@ -629,7 +338,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
629
338
  exports.config = void 0;
630
339
  const envalid_1 = __webpack_require__(/*! envalid */ "envalid");
631
340
  exports.config = (0, envalid_1.cleanEnv)(process.env, {
632
- MESSAGES_PER_PAGE: (0, envalid_1.num)({ devDefault: 20, default: 50 }),
341
+ MESSAGES_PER_PAGE: (0, envalid_1.num)({ devDefault: 10, default: 20 }),
633
342
  FILES_PER_MESSAGE: (0, envalid_1.num)({ default: 10 }),
634
343
  });
635
344
 
@@ -684,24 +393,29 @@ var __importStar = (this && this.__importStar) || function (mod) {
684
393
  Object.defineProperty(exports, "__esModule", ({ value: true }));
685
394
  exports.ConversationView = void 0;
686
395
  const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
687
- const date_fns_1 = __webpack_require__(/*! date-fns */ "date-fns");
688
396
  const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
397
+ const native_1 = __webpack_require__(/*! @react-navigation/native */ "@react-navigation/native");
689
398
  const react_redux_1 = __webpack_require__(/*! react-redux */ "react-redux");
690
399
  const lodash_1 = __webpack_require__(/*! lodash */ "lodash");
400
+ const ImagePicker = __importStar(__webpack_require__(/*! expo-image-picker */ "expo-image-picker"));
401
+ const base_64_1 = __webpack_require__(/*! base-64 */ "base-64");
402
+ const vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
403
+ const react_native_gifted_chat_1 = __webpack_require__(/*! react-native-gifted-chat */ "react-native-gifted-chat");
691
404
  const platform_client_1 = __webpack_require__(/*! @messenger-box/platform-client */ "@messenger-box/platform-client");
692
- const MessageItem_1 = __webpack_require__(/*! ../components/MessageItem */ "./src/screens/inbox/components/MessageItem.tsx");
693
- const MessageInput_1 = __webpack_require__(/*! ../components/MessageInput */ "./src/screens/inbox/components/MessageInput.tsx");
694
405
  const config_1 = __webpack_require__(/*! ../config */ "./src/screens/inbox/config/index.ts");
695
406
  const user_auth0_client_1 = __webpack_require__(/*! @adminide-stack/user-auth0-client */ "@adminide-stack/user-auth0-client");
696
407
  const { MESSAGES_PER_PAGE } = config_1.config;
697
408
  function ConversationView({ channelId }) {
698
- const { onOpen } = (0, native_base_1.useDisclose)();
699
- const messageListRef = (0, react_1.useRef)(null);
409
+ var _a;
700
410
  const [channelToTop, setChannelToTop] = (0, react_1.useState)(0);
701
411
  const [channelMessages, setChannelMessages] = (0, react_1.useState)([]);
702
412
  const auth = (0, react_redux_1.useSelector)(user_auth0_client_1.userSelector);
703
413
  const [totalCount, setTotalCount] = (0, react_1.useState)(0);
414
+ const [selectedImage, setImage] = (0, react_1.useState)('');
704
415
  const [loadingOldMessages, setLoadingOldMessages] = (0, react_1.useState)(false);
416
+ const color = (0, native_base_1.useColorModeValue)('white', 'black');
417
+ const navigation = (0, native_1.useNavigation)();
418
+ const [files, setFiles] = (0, react_1.useState)([]);
705
419
  const { startUpload } = (0, platform_client_1.useUploadFiles)();
706
420
  const [sendMsg] = (0, platform_client_1.useSendMessagesMutation)();
707
421
  const { data, loading: messageLoading, refetch, } = (0, platform_client_1.useMessagesQuery)({
@@ -726,7 +440,7 @@ function ConversationView({ channelId }) {
726
440
  var _a;
727
441
  if (((_a = data === null || data === void 0 ? void 0 : data.messages) === null || _a === void 0 ? void 0 : _a.data) && (loadingOldMessages || channelMessages.length === 0)) {
728
442
  const { data: messages, totalCount } = data.messages;
729
- setChannelMessages((oldMessages) => (0, lodash_1.uniqBy)([...[...messages].reverse(), ...oldMessages], ({ id }) => id));
443
+ setChannelMessages((oldMessages) => (0, lodash_1.uniqBy)([...messages, ...oldMessages], ({ id }) => id));
730
444
  setTotalCount(totalCount);
731
445
  }
732
446
  }, [data, loadingOldMessages, channelMessages]);
@@ -753,14 +467,31 @@ function ConversationView({ channelId }) {
753
467
  refetch({ skip: channelMessages.length });
754
468
  }
755
469
  }, [data, channelMessages]);
756
- const onMessagesScroll = (0, react_1.useCallback)(() => {
757
- if (messageListRef.current) {
758
- const { scrollTop, scrollHeight, clientHeight } = messageListRef.current;
759
- if (clientHeight - scrollTop > scrollHeight - 50 && !messageLoading) {
760
- onFetchOld();
761
- }
470
+ const isCloseToTop = ({ layoutMeasurement, contentOffset, contentSize }) => {
471
+ return contentOffset.y <= 100; // 100px from top
472
+ };
473
+ const dataURLtoFile = (dataurl, filename) => {
474
+ var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = (0, base_64_1.encode)(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
475
+ while (n--) {
476
+ u8arr[n] = bstr.charCodeAt(n);
477
+ }
478
+ return new File([u8arr], filename, { type: mime });
479
+ };
480
+ const onSelectImages = async () => {
481
+ let imageSource = await ImagePicker.launchImageLibraryAsync({
482
+ mediaTypes: ImagePicker.MediaTypeOptions.Images,
483
+ allowsEditing: true,
484
+ aspect: [4, 3],
485
+ quality: 1,
486
+ base64: true,
487
+ });
488
+ if (!imageSource.cancelled) {
489
+ const image = 'data:image/jpeg;base64,' + (imageSource === null || imageSource === void 0 ? void 0 : imageSource.base64);
490
+ setImage(image);
491
+ const file = dataURLtoFile(image, 'inputImage.jpg');
492
+ setFiles(files.concat(file));
762
493
  }
763
- }, [onFetchOld]);
494
+ };
764
495
  const handleSend = (0, react_1.useCallback)(async (message, files) => {
765
496
  var _a;
766
497
  if (!(message && channelId)) {
@@ -796,6 +527,10 @@ function ConversationView({ channelId }) {
796
527
  },
797
528
  });
798
529
  const uploadedFiles = uploadResponse.data;
530
+ if (uploadResponse.data) {
531
+ setFiles([]);
532
+ setImage('');
533
+ }
799
534
  setChannelMessages((messages) => messages.map((message) => {
800
535
  if (message.id === postId) {
801
536
  return Object.assign(Object.assign({}, message), { files: {
@@ -810,27 +545,80 @@ function ConversationView({ channelId }) {
810
545
  const messageList = (0, react_1.useMemo)(() => {
811
546
  let currentDate = '';
812
547
  let res = [];
813
- (0, lodash_1.orderBy)(channelMessages, ['createdAt'], ['asc']).map((msg) => {
814
- const date = new Date(msg.createdAt);
815
- let msgDate;
816
- if ((0, date_fns_1.isToday)(date))
817
- msgDate = 'Today';
818
- else if ((0, date_fns_1.isYesterday)(date))
819
- msgDate = 'Yesterday';
820
- else
821
- msgDate = (0, date_fns_1.format)(new Date(msg.createdAt), 'eee, do MMMM');
822
- if (msgDate !== currentDate) {
823
- res.push(msgDate);
824
- currentDate = msgDate;
825
- }
826
- res.push(msg);
827
- });
548
+ if (channelMessages.length) {
549
+ (0, lodash_1.orderBy)(channelMessages, ['createdAt'], ['desc']).map((msg) => {
550
+ var _a, _b, _c;
551
+ let message = {
552
+ _id: '',
553
+ text: '',
554
+ createdAt: 0,
555
+ user: {
556
+ _id: '',
557
+ name: '',
558
+ avatar: '',
559
+ },
560
+ type: '',
561
+ };
562
+ const date = new Date(msg.createdAt);
563
+ message._id = msg.id;
564
+ message.text = msg.message;
565
+ message.createdAt = date;
566
+ (message.user = {
567
+ _id: msg.author.id,
568
+ name: msg.author.givenName + msg.author.familyName,
569
+ avatar: (_a = msg.author) === null || _a === void 0 ? void 0 : _a.picture,
570
+ }),
571
+ (message.image = (_c = (_b = msg.files) === null || _b === void 0 ? void 0 : _b.data[0]) === null || _c === void 0 ? void 0 : _c.url),
572
+ (message.sent = msg === null || msg === void 0 ? void 0 : msg.isDelivered),
573
+ (message.received = msg === null || msg === void 0 ? void 0 : msg.isRead);
574
+ message.type = msg === null || msg === void 0 ? void 0 : msg.type;
575
+ message.propsConfiguration = msg === null || msg === void 0 ? void 0 : msg.propsConfiguration;
576
+ res.push(message);
577
+ });
578
+ }
828
579
  return res;
829
580
  }, [channelMessages]);
830
- return (react_1.default.createElement(native_base_1.Box, { flex: 1, position: 'relative' },
831
- react_1.default.createElement(native_base_1.ScrollView, { ref: messageListRef, mb: '32', contentContainerStyle: { flexGrow: 1 }, p: 5 }, messageList.map((message, index) => (react_1.default.createElement(native_base_1.Box, { key: index },
832
- react_1.default.createElement(MessageItem_1.MessageItem, { channelId: channelId, currentUser: currentUser, message: message, totalCount: totalCount, onOpen: onOpen }))))),
833
- react_1.default.createElement(MessageInput_1.MessageInput, { channelId: channelId, handleSend: handleSend })));
581
+ const renderSend = (props) => {
582
+ return (react_1.default.createElement(react_native_gifted_chat_1.Send, Object.assign({}, props),
583
+ react_1.default.createElement(native_base_1.Box, null,
584
+ react_1.default.createElement(vector_icons_1.MaterialCommunityIcons, { name: "send-circle", style: { marginBottom: 5, marginRight: 5 }, size: 32, color: "#2e64e5" }))));
585
+ };
586
+ const renderMessageText = (props) => {
587
+ var _a, _b;
588
+ const { currentMessage } = props;
589
+ if (currentMessage.type !== 'ALERT') {
590
+ return react_1.default.createElement(react_native_gifted_chat_1.MessageText, Object.assign({}, props));
591
+ }
592
+ else {
593
+ const { attachment } = (_a = currentMessage === null || currentMessage === void 0 ? void 0 : currentMessage.propsConfiguration) === null || _a === void 0 ? void 0 : _a.contents;
594
+ let action = '';
595
+ let actionId = '';
596
+ if (attachment.callToAction.link.includes('my-reservation-details')) {
597
+ action = 'm-reservation-detail';
598
+ actionId = (_b = attachment === null || attachment === void 0 ? void 0 : attachment.callToAction) === null || _b === void 0 ? void 0 : _b.link.split('/').pop();
599
+ }
600
+ return (react_1.default.createElement(native_base_1.Box, null,
601
+ attachment.callToAction ? (react_1.default.createElement(native_base_1.Button, { variant: 'outline', size: 'sm', borderColor: color, onPress: () => navigation.navigate(action, { reservationId: actionId }) },
602
+ react_1.default.createElement(native_base_1.Text, { color: color }, attachment.callToAction.title))) : null,
603
+ react_1.default.createElement(react_native_gifted_chat_1.MessageText, Object.assign({}, props))));
604
+ }
605
+ };
606
+ const renderActions = (props) => {
607
+ return (react_1.default.createElement(react_native_gifted_chat_1.Actions, Object.assign({}, props, { icon: () => react_1.default.createElement(native_base_1.Icon, { as: vector_icons_1.Ionicons, name: 'image', size: 'sm', onPress: onSelectImages }) })));
608
+ };
609
+ const renderAccessory = (props) => {
610
+ return (react_1.default.createElement(native_base_1.Box, null, selectedImage !== '' ? (react_1.default.createElement(native_base_1.HStack, { alignItems: 'center' },
611
+ react_1.default.createElement(native_base_1.Image, { ml: 3, key: selectedImage, alt: 'image', source: { uri: selectedImage }, size: 'xs' }),
612
+ react_1.default.createElement(native_base_1.Button, { variant: 'ghost', colorScheme: 'secondary', onPress: () => {
613
+ setFiles([]);
614
+ setImage('');
615
+ } }, "Cancel"))) : null));
616
+ };
617
+ return (react_1.default.createElement(react_native_gifted_chat_1.GiftedChat, { wrapInSafeArea: false, renderLoading: () => react_1.default.createElement(native_base_1.Spinner, null), messages: messageList, onSend: (messages) => {
618
+ handleSend(messages[0].text, files);
619
+ }, scrollToBottom: true, user: {
620
+ _id: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.id) || '',
621
+ }, isTyping: true, alwaysShowSend: true, onLoadEarlier: onFetchOld, infiniteScroll: true, renderSend: renderSend, loadEarlier: channelMessages.length !== ((_a = data === null || data === void 0 ? void 0 : data.messages) === null || _a === void 0 ? void 0 : _a.totalCount), renderMessageText: renderMessageText, minInputToolbarHeight: 50, renderActions: renderActions, renderAccessory: renderAccessory }));
834
622
  }
835
623
  exports.ConversationView = ConversationView;
836
624
 
@@ -893,6 +681,9 @@ function Dialogs(props) {
893
681
  });
894
682
  const { data: users } = (0, platform_client_1.useGetAllUsersQuery)();
895
683
  const currentUser = (0, 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]);
684
+ (0, react_1.useEffect)(() => {
685
+ getChannelsRefetch();
686
+ }, []);
896
687
  (0, react_1.useEffect)(() => {
897
688
  setTimeout(() => {
898
689
  dispatch({
@@ -1029,13 +820,13 @@ module.exports = require("@react-navigation/stack");
1029
820
 
1030
821
  /***/ }),
1031
822
 
1032
- /***/ "axios":
1033
- /*!************************!*\
1034
- !*** external "axios" ***!
1035
- \************************/
823
+ /***/ "base-64":
824
+ /*!**************************!*\
825
+ !*** external "base-64" ***!
826
+ \**************************/
1036
827
  /***/ ((module) => {
1037
828
 
1038
- module.exports = require("axios");
829
+ module.exports = require("base-64");
1039
830
 
1040
831
  /***/ }),
1041
832
 
@@ -1099,23 +890,13 @@ module.exports = require("react");
1099
890
 
1100
891
  /***/ }),
1101
892
 
1102
- /***/ "react-native":
1103
- /*!*******************************!*\
1104
- !*** external "react-native" ***!
1105
- \*******************************/
1106
- /***/ ((module) => {
1107
-
1108
- module.exports = require("react-native");
1109
-
1110
- /***/ }),
1111
-
1112
- /***/ "react-native-keyboard-aware-scroll-view":
1113
- /*!**********************************************************!*\
1114
- !*** external "react-native-keyboard-aware-scroll-view" ***!
1115
- \**********************************************************/
893
+ /***/ "react-native-gifted-chat":
894
+ /*!*******************************************!*\
895
+ !*** external "react-native-gifted-chat" ***!
896
+ \*******************************************/
1116
897
  /***/ ((module) => {
1117
898
 
1118
- module.exports = require("react-native-keyboard-aware-scroll-view");
899
+ module.exports = require("react-native-gifted-chat");
1119
900
 
1120
901
  /***/ }),
1121
902