@messenger-box/platform-mobile 0.0.1-alpha.206 → 0.0.1-alpha.218

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,36 @@
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.218](https://github.com/cdmbase/messenger-box/compare/v0.0.1-alpha.217...v0.0.1-alpha.218) (2022-09-09)
7
+
8
+
9
+ ### Features
10
+
11
+ * add inbox right side bar slot ([a90e137](https://github.com/cdmbase/messenger-box/commit/a90e1370c010218c27b057526605e105f049cc5c))
12
+
13
+
14
+
15
+
16
+
17
+ ## [0.0.1-alpha.217](https://github.com/cdmbase/messenger-box/compare/v0.0.1-alpha.216...v0.0.1-alpha.217) (2022-08-27)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **platform-mobile:** fix image preview on selection in chat ([33bedbb](https://github.com/cdmbase/messenger-box/commit/33bedbb13f72f9359f44d8c69f6f4517d477a582))
23
+
24
+
25
+
26
+
27
+
28
+ ## [0.0.1-alpha.208](https://github.com/cdmbase/messenger-box/compare/v0.0.1-alpha.207...v0.0.1-alpha.208) (2022-08-13)
29
+
30
+ **Note:** Version bump only for package @messenger-box/platform-mobile
31
+
32
+
33
+
34
+
35
+
6
36
  ## [0.0.1-alpha.206](https://github.com/cdmbase/messenger-box/compare/v0.0.1-alpha.205...v0.0.1-alpha.206) (2022-08-13)
7
37
 
8
38
  **Note:** Version bump only for package @messenger-box/platform-mobile
package/lib/index.js CHANGED
@@ -163,7 +163,7 @@ const React = __importStar(__webpack_require__(/*! react */ "react"));
163
163
  const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
164
164
  const ConversationView_1 = __webpack_require__(/*! ./containers/ConversationView */ "./src/screens/inbox/containers/ConversationView.tsx");
165
165
  function DialogMessages({ channelId }) {
166
- return (React.createElement(native_base_1.Box, { bg: 'white', flex: 1, p: 6 },
166
+ return (React.createElement(native_base_1.Box, { bg: 'white', flex: 1 },
167
167
  React.createElement(ConversationView_1.ConversationView, { channelId: channelId })));
168
168
  }
169
169
  exports.DialogMessages = DialogMessages;
@@ -413,6 +413,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
413
413
  Object.defineProperty(exports, "__esModule", ({ value: true }));
414
414
  exports.FilesList = void 0;
415
415
  const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
416
+ const react_native_1 = __webpack_require__(/*! react-native */ "react-native");
416
417
  const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
417
418
  function FilesList({ files, uploaded = false }) {
418
419
  return (react_1.default.createElement(native_base_1.HStack, { space: 2, mt: 2 },
@@ -424,7 +425,7 @@ FilesList.FilesView = function MessageItemFiles({ files = [], uploaded }) {
424
425
  return null;
425
426
  }
426
427
  return (react_1.default.createElement(native_base_1.Box, null, files.map((file) => {
427
- const url = (0, react_1.useMemo)(() => (uploaded ? file.url : URL.createObjectURL(file)), [file, uploaded]);
428
+ const url = (0, react_1.useMemo)(() => (uploaded ? file.url : react_native_1.Image.resolveAssetSource(file).uri), [file, uploaded]);
428
429
  return (react_1.default.createElement(native_base_1.Image, { alt: 'image', mr: 2, height: "16", width: "16", source: {
429
430
  uri: url,
430
431
  scale: 0.2,
@@ -465,13 +466,18 @@ var __importStar = (this && this.__importStar) || function (mod) {
465
466
  __setModuleDefault(result, mod);
466
467
  return result;
467
468
  };
469
+ var __importDefault = (this && this.__importDefault) || function (mod) {
470
+ return (mod && mod.__esModule) ? mod : { "default": mod };
471
+ };
468
472
  Object.defineProperty(exports, "__esModule", ({ value: true }));
469
473
  exports.MessageInput = void 0;
470
474
  const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
471
475
  const vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
472
476
  const ImagePicker = __importStar(__webpack_require__(/*! expo-image-picker */ "expo-image-picker"));
477
+ const react_native_keyboard_aware_scroll_view_1 = __webpack_require__(/*! react-native-keyboard-aware-scroll-view */ "react-native-keyboard-aware-scroll-view");
473
478
  const react_1 = __importStar(__webpack_require__(/*! react */ "react"));
474
479
  const FilesList_1 = __webpack_require__(/*! ./FilesList */ "./src/screens/inbox/components/FilesList.tsx");
480
+ const axios_1 = __importDefault(__webpack_require__(/*! axios */ "axios"));
475
481
  exports.MessageInput = (0, react_1.forwardRef)(function MessageInput({ handleSend: handleSendProp }) {
476
482
  const [message, setMessage] = (0, react_1.useState)('');
477
483
  const [sending, setSending] = (0, react_1.useState)(false);
@@ -489,22 +495,32 @@ exports.MessageInput = (0, react_1.forwardRef)(function MessageInput({ handleSen
489
495
  // No permissions request is necessary for launching the image library
490
496
  await ImagePicker.requestMediaLibraryPermissionsAsync();
491
497
  let result = await ImagePicker.launchImageLibraryAsync({
492
- // base64: true,
493
- // aspect: [4, 3],
494
498
  mediaTypes: ImagePicker.MediaTypeOptions.Images,
499
+ allowsEditing: true,
500
+ aspect: [4, 3],
501
+ quality: 1,
495
502
  });
496
503
  if (!result.cancelled) {
497
- setFiles(files.concat(result.uri)); // @igor need ot check this
504
+ axios_1.default
505
+ .get(result.uri, {
506
+ responseType: 'blob',
507
+ })
508
+ .then((res) => {
509
+ let file = res.data._data;
510
+ file.uri = result.uri;
511
+ setFiles(files.concat(file));
512
+ });
498
513
  }
499
514
  };
500
- return (react_1.default.createElement(native_base_1.VStack, { marginTop: 3, alignContent: "center" },
501
- react_1.default.createElement(native_base_1.View, null,
502
- react_1.default.createElement(native_base_1.TextField, { placeholder: "Message...", borderColor: "gray.400", value: sending ? '' : message, onChange: (e) => setMessage(e.nativeEvent.text), fontSize: 14 })),
503
- files.length ? (react_1.default.createElement(native_base_1.View, { mb: 4, flexDirection: "row" },
504
- react_1.default.createElement(FilesList_1.FilesList, { files: files }))) : null,
505
- react_1.default.createElement(native_base_1.HStack, { alignContent: "center", justifyContent: "space-between" },
506
- react_1.default.createElement(vector_icons_1.FontAwesome, { onPress: onSelectImages, size: 20, style: { marginRight: 5 }, name: "file-image-o" }),
507
- react_1.default.createElement(vector_icons_1.FontAwesome, { onPress: handleSend, size: 20, name: "send" }))));
515
+ return (react_1.default.createElement(native_base_1.VStack, { position: 'absolute', bottom: 0, left: 0, right: 0, bg: 'white', marginTop: 3, alignContent: "center", p: 5 },
516
+ react_1.default.createElement(react_native_keyboard_aware_scroll_view_1.KeyboardAwareScrollView, { contentContainerStyle: { flex: 1 } },
517
+ react_1.default.createElement(native_base_1.View, null,
518
+ react_1.default.createElement(native_base_1.TextField, { placeholder: "Message...", borderColor: "gray.400", value: sending ? '' : message, onChange: (e) => setMessage(e.nativeEvent.text), fontSize: 14 })),
519
+ files.length ? (react_1.default.createElement(native_base_1.View, { mb: 4, flexDirection: "row" },
520
+ react_1.default.createElement(FilesList_1.FilesList, { files: files }))) : null,
521
+ react_1.default.createElement(native_base_1.HStack, { alignContent: "center", justifyContent: "space-between" },
522
+ react_1.default.createElement(vector_icons_1.FontAwesome, { onPress: onSelectImages, size: 20, style: { marginRight: 5 }, name: "file-image-o" }),
523
+ react_1.default.createElement(vector_icons_1.FontAwesome, { onPress: handleSend, size: 20, name: "send" })))));
508
524
  });
509
525
 
510
526
 
@@ -524,10 +540,12 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
524
540
  exports.MessageItem = void 0;
525
541
  const react_1 = __importDefault(__webpack_require__(/*! react */ "react"));
526
542
  const native_base_1 = __webpack_require__(/*! native-base */ "native-base");
543
+ const vector_icons_1 = __webpack_require__(/*! @expo/vector-icons */ "@expo/vector-icons");
544
+ const native_1 = __webpack_require__(/*! @react-navigation/native */ "@react-navigation/native");
527
545
  const PlainMessage_1 = __webpack_require__(/*! ./PlainMessage */ "./src/screens/inbox/components/PlainMessage.tsx");
528
546
  const CommonMessage_1 = __webpack_require__(/*! ./CommonMessage */ "./src/screens/inbox/components/CommonMessage.tsx");
529
- const components_pro_1 = __webpack_require__(/*! @common-stack/components-pro */ "@common-stack/components-pro");
530
- function MessageItem({ message, channelId, currentUser, totalCount, }) {
547
+ function MessageItem({ message, channelId, currentUser, totalCount, onOpen, }) {
548
+ var _a, _b;
531
549
  if (typeof message === 'string') {
532
550
  return react_1.default.createElement(PlainMessage_1.PlainMessage, { message: message });
533
551
  }
@@ -535,11 +553,26 @@ function MessageItem({ message, channelId, currentUser, totalCount, }) {
535
553
  if (!type || type === "Simple" /* IPostTypeEnum.Simple */) {
536
554
  return react_1.default.createElement(CommonMessage_1.CommonMessage, { message: message, currentUser: currentUser });
537
555
  }
538
- return (react_1.default.createElement(components_pro_1.Slot, { name: type === null || type === void 0 ? void 0 : type.toLowerCase(), fillProps: {
539
- active: true,
540
- message,
541
- currentUser,
542
- } }, (item) => react_1.default.createElement(native_base_1.Box, null, item)));
556
+ if (type === "ALERT" /* IPostTypeEnum.ALERT */) {
557
+ const { attachment } = (_a = message === null || message === void 0 ? void 0 : message.propsConfiguration) === null || _a === void 0 ? void 0 : _a.contents;
558
+ let action = '';
559
+ let actionId = '';
560
+ const icon = 'information-circle';
561
+ if (attachment.callToAction.link.includes('my-reservation-details')) {
562
+ action = 'm-reservation-detail';
563
+ actionId = (_b = attachment === null || attachment === void 0 ? void 0 : attachment.callToAction) === null || _b === void 0 ? void 0 : _b.link.split('/').pop();
564
+ }
565
+ const color = (0, native_base_1.useColorModeValue)('white', 'gray.800');
566
+ const bgColor = (0, native_base_1.useColorModeValue)('gray.800', 'white');
567
+ const navigation = (0, native_1.useNavigation)();
568
+ return (react_1.default.createElement(native_base_1.Box, { borderWidth: 1, borderRadius: 20, backgroundColor: bgColor, my: 2, p: 3, opacity: 0.7 },
569
+ react_1.default.createElement(native_base_1.HStack, { space: 2, alignItems: 'center' },
570
+ react_1.default.createElement(native_base_1.Icon, { as: vector_icons_1.Ionicons, name: icon, color: 'white' }),
571
+ react_1.default.createElement(native_base_1.Text, { color: color, width: '45%', numberOfLines: 3 }, attachment === null || attachment === void 0 ? void 0 : attachment.title),
572
+ attachment.callToAction ? (react_1.default.createElement(native_base_1.Button, { variant: 'outline', size: 'sm', borderColor: color, onPress: () => navigation.navigate(action, { reservationId: actionId }) },
573
+ react_1.default.createElement(native_base_1.Text, { color: color }, attachment.callToAction.title))) : null)));
574
+ }
575
+ return null;
543
576
  }
544
577
  exports.MessageItem = MessageItem;
545
578
 
@@ -646,6 +679,7 @@ const config_1 = __webpack_require__(/*! ../config */ "./src/screens/inbox/confi
646
679
  const user_auth0_client_1 = __webpack_require__(/*! @adminide-stack/user-auth0-client */ "@adminide-stack/user-auth0-client");
647
680
  const { MESSAGES_PER_PAGE } = config_1.config;
648
681
  function ConversationView({ channelId }) {
682
+ const { onOpen } = (0, native_base_1.useDisclose)();
649
683
  const messageListRef = (0, react_1.useRef)(null);
650
684
  const [channelToTop, setChannelToTop] = (0, react_1.useState)(0);
651
685
  const [channelMessages, setChannelMessages] = (0, react_1.useState)([]);
@@ -662,7 +696,6 @@ function ConversationView({ channelId }) {
662
696
  skip: !channelId,
663
697
  fetchPolicy: 'cache-and-network',
664
698
  });
665
- debugger;
666
699
  const { data: users } = (0, platform_client_1.useGetAllUsersQuery)();
667
700
  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]);
668
701
  const { data: checkForMessages } = (0, platform_client_1.useCheckForNewMessagesQuery)({
@@ -704,7 +737,7 @@ function ConversationView({ channelId }) {
704
737
  refetch({ skip: channelMessages.length });
705
738
  }
706
739
  }, [data, channelMessages]);
707
- const onMessagesScroll = (0, react_1.useCallback)((e) => {
740
+ const onMessagesScroll = (0, react_1.useCallback)(() => {
708
741
  if (messageListRef.current) {
709
742
  const { scrollTop, scrollHeight, clientHeight } = messageListRef.current;
710
743
  if (clientHeight - scrollTop > scrollHeight - 50 && !messageLoading) {
@@ -778,8 +811,9 @@ function ConversationView({ channelId }) {
778
811
  });
779
812
  return res;
780
813
  }, [channelMessages]);
781
- return (react_1.default.createElement(react_1.default.Fragment, null,
782
- react_1.default.createElement(native_base_1.FlatList, { inverted: true, ref: messageListRef, data: messageList, onEndReached: onMessagesScroll, flex: 1, renderItem: ({ item }) => (react_1.default.createElement(MessageItem_1.MessageItem, { channelId: channelId, currentUser: currentUser, message: item, totalCount: totalCount })) }),
814
+ return (react_1.default.createElement(native_base_1.Box, { flex: 1, position: 'relative' },
815
+ 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 },
816
+ react_1.default.createElement(MessageItem_1.MessageItem, { channelId: channelId, currentUser: currentUser, message: message, totalCount: totalCount, onOpen: onOpen }))))),
783
817
  react_1.default.createElement(MessageInput_1.MessageInput, { channelId: channelId, handleSend: handleSend })));
784
818
  }
785
819
  exports.ConversationView = ConversationView;
@@ -939,16 +973,6 @@ module.exports = require("@common-stack/client-react");
939
973
 
940
974
  /***/ }),
941
975
 
942
- /***/ "@common-stack/components-pro":
943
- /*!***********************************************!*\
944
- !*** external "@common-stack/components-pro" ***!
945
- \***********************************************/
946
- /***/ ((module) => {
947
-
948
- module.exports = require("@common-stack/components-pro");
949
-
950
- /***/ }),
951
-
952
976
  /***/ "@expo/vector-icons":
953
977
  /*!*************************************!*\
954
978
  !*** external "@expo/vector-icons" ***!
@@ -989,6 +1013,16 @@ module.exports = require("@react-navigation/stack");
989
1013
 
990
1014
  /***/ }),
991
1015
 
1016
+ /***/ "axios":
1017
+ /*!************************!*\
1018
+ !*** external "axios" ***!
1019
+ \************************/
1020
+ /***/ ((module) => {
1021
+
1022
+ module.exports = require("axios");
1023
+
1024
+ /***/ }),
1025
+
992
1026
  /***/ "date-fns":
993
1027
  /*!***************************!*\
994
1028
  !*** external "date-fns" ***!
@@ -1049,6 +1083,26 @@ module.exports = require("react");
1049
1083
 
1050
1084
  /***/ }),
1051
1085
 
1086
+ /***/ "react-native":
1087
+ /*!*******************************!*\
1088
+ !*** external "react-native" ***!
1089
+ \*******************************/
1090
+ /***/ ((module) => {
1091
+
1092
+ module.exports = require("react-native");
1093
+
1094
+ /***/ }),
1095
+
1096
+ /***/ "react-native-keyboard-aware-scroll-view":
1097
+ /*!**********************************************************!*\
1098
+ !*** external "react-native-keyboard-aware-scroll-view" ***!
1099
+ \**********************************************************/
1100
+ /***/ ((module) => {
1101
+
1102
+ module.exports = require("react-native-keyboard-aware-scroll-view");
1103
+
1104
+ /***/ }),
1105
+
1052
1106
  /***/ "react-redux":
1053
1107
  /*!******************************!*\
1054
1108
  !*** external "react-redux" ***!
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack://@messenger-box/platform-mobile/./src/index.ts","webpack://@messenger-box/platform-mobile/./src/module.ts","webpack://@messenger-box/platform-mobile/./src/navigation/InboxNavigation.tsx","webpack://@messenger-box/platform-mobile/./src/navigation/index.ts","webpack://@messenger-box/platform-mobile/./src/screens/inbox/DialogMessages.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/Inbox.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/CommonMessage.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/DialogsListItem.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/FilesList.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/MessageInput.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/MessageItem.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/PlainMessage.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/config/config.ts","webpack://@messenger-box/platform-mobile/./src/screens/inbox/config/index.ts","webpack://@messenger-box/platform-mobile/./src/screens/inbox/containers/ConversationView.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/containers/Dialogs.tsx","webpack://@messenger-box/platform-mobile/./src/screens/index.ts","webpack://@messenger-box/platform-mobile/external commonjs \"@admin-layout/client\"","webpack://@messenger-box/platform-mobile/external commonjs \"@adminide-stack/user-auth0-client\"","webpack://@messenger-box/platform-mobile/external commonjs \"@common-stack/client-react\"","webpack://@messenger-box/platform-mobile/external commonjs \"@common-stack/components-pro\"","webpack://@messenger-box/platform-mobile/external commonjs \"@expo/vector-icons\"","webpack://@messenger-box/platform-mobile/external commonjs \"@messenger-box/platform-client\"","webpack://@messenger-box/platform-mobile/external commonjs \"@react-navigation/native\"","webpack://@messenger-box/platform-mobile/external commonjs \"@react-navigation/stack\"","webpack://@messenger-box/platform-mobile/external commonjs \"date-fns\"","webpack://@messenger-box/platform-mobile/external commonjs \"envalid\"","webpack://@messenger-box/platform-mobile/external commonjs \"expo-image-picker\"","webpack://@messenger-box/platform-mobile/external commonjs \"lodash\"","webpack://@messenger-box/platform-mobile/external commonjs \"native-base\"","webpack://@messenger-box/platform-mobile/external commonjs \"react\"","webpack://@messenger-box/platform-mobile/external commonjs \"react-redux\"","webpack://@messenger-box/platform-mobile/webpack/bootstrap","webpack://@messenger-box/platform-mobile/webpack/before-startup","webpack://@messenger-box/platform-mobile/webpack/startup","webpack://@messenger-box/platform-mobile/webpack/after-startup"],"sourcesContent":["import PlatformModule from './module';\n\nimport { Feature } from '@common-stack/client-react';\n\nexport default new Feature(PlatformModule);\nexport * from './navigation';\nexport * from './screens';\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 { createStackNavigator } from '@react-navigation/stack';\nimport { DialogMessages } from '../screens/inbox/DialogMessages';\n\nconst InboxStack = createStackNavigator();\n\nexport function InboxNavigation({ route }) {\n return (\n <InboxStack.Navigator initialRouteName=\"DialogMessages\">\n <InboxStack.Screen name=\"DialogMessages\" options={{ header: () => null }}>\n {(props) => <DialogMessages channelId={route?.params?.channelId} />}\n </InboxStack.Screen>\n </InboxStack.Navigator>\n );\n}\n","export * from './InboxNavigation';\n","import * as React from 'react';\nimport { Box } from 'native-base';\nimport { ConversationView } from './containers/ConversationView';\n\nexport function DialogMessages({ channelId }) {\n return (\n <Box bg={'white'} flex={1} p={6}>\n <ConversationView channelId={channelId} />\n </Box>\n );\n}\n","import * as React from 'react';\nimport { Box } from 'native-base';\n\nimport { Dialogs } from './containers/Dialogs';\n\nexport const Inbox = (props) => {\n const { channelFilters, channelRole } = props;\n return (\n <Box bg={'white'} flex={1}>\n <Dialogs channelFilters={channelFilters} channelRole={channelRole} />\n </Box>\n );\n};\n","import * as React from 'react';\nimport { Avatar, Box, Flex, Icon, Text, HStack } from 'native-base';\nimport { Ionicons } from '@expo/vector-icons';\nimport { formatDistance } from 'date-fns';\nimport { FilesList } from './FilesList';\nimport { IPost } from '@messenger-box/core';\nimport { IAuthUser } from '@pubngo-stack/core';\nimport { startCase } from 'lodash';\n\ninterface ICommonMessageProps {\n message: IPost;\n currentUser: IAuthUser;\n}\n\nexport const CommonMessage = (props: ICommonMessageProps) => {\n const { message, currentUser } = props;\n return (\n <Box mb=\"7\">\n <HStack space={2}>\n <Avatar backgroundColor=\"grey\" source={{ uri: message?.author?.picture || undefined }}>\n {startCase(message?.author?.username?.charAt(0))}\n </Avatar>\n <Box>\n <HStack width={'80%'} justifyContent={'space-between'} alignItems={'center'}>\n <HStack space={2}>\n <Text fontSize=\"14px\" color=\"gray.600\" fontWeight={'bold'}>\n {message?.author?.familyName && message?.author?.givenName\n ? message?.author?.givenName + ' ' + message?.author?.familyName\n : message?.author?.username}\n </Text>\n <Text fontSize=\"14px\" color=\"gray.500\" ml=\"10px\">\n {formatDistance(new Date(message?.createdAt), new Date(), {\n includeSeconds: true,\n addSuffix: true,\n })}\n </Text>\n </HStack>\n {currentUser?.id !== message?.author?.id && (\n <Box ml=\"8px\">\n <Icon as={Ionicons} name={'flag'} color=\"gray.600\" size=\"sm\" />\n </Box>\n )}\n </HStack>\n <Text fontSize=\"14px\" mt=\"5px\">\n {message?.message}\n </Text>\n {message.files?.totalCount ? <FilesList uploaded files={message?.files?.data} /> : null}\n </Box>\n </HStack>\n </Box>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Text, Image, Pressable, HStack, Box } from 'native-base';\nimport { format, isToday, isYesterday } from 'date-fns';\n\nimport { IChannel, IUserAccount, useMessagesQuery, useUserAccountQuery } 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 currentUser?: any;\n users?: any;\n selectedChannelId?: any;\n channel?: any;\n onOpen: (id: 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 currentUser,\n users,\n selectedChannelId,\n channel,\n onOpen,\n}) {\n const { data: messagesQuery, loading: messageLoading } = useMessagesQuery({\n variables: {\n channelId: channel?.id?.toString(),\n limit: 1,\n },\n fetchPolicy: 'cache-and-network',\n });\n\n const chatUser = useMemo(\n () =>\n users?.find(({ id }) => {\n const isNotCurrentUser = id !== currentUser?.id;\n if (isNotCurrentUser) {\n return channel?.members?.find(({ user }: any) => user.id === id);\n }\n return isNotCurrentUser;\n }),\n [users, currentUser, channel],\n );\n\n const { data: userQuery } = useUserAccountQuery({\n variables: {\n userId: chatUser?.id,\n },\n skip: !chatUser?.id,\n });\n\n const lastMessage = useMemo(() => {\n if (!messagesQuery?.messages?.data?.length) {\n return null;\n }\n const { data } = messagesQuery.messages;\n return data[data.length - 1];\n }, [messagesQuery]);\n\n const channelType = useMemo(() => {\n return channel?.type;\n }, [channel]);\n\n return (\n <Pressable\n onPress={() => channel?.id !== selectedChannelId && onOpen(channel?.id)}\n borderWidth={'1'}\n borderRadius={10}\n borderColor={'gray.200'}\n shadow={'6'}\n >\n <HStack m={3} space={2}>\n <Image\n alt={'image'}\n width={16}\n borderRadius={10}\n height={16}\n source={{ uri: userQuery?.getUserAccount?.picture || 'https://picsum.photos/220' }}\n />\n <Box width={'80%'}>\n <HStack alignItems=\"center\" justifyContent=\"space-between\">\n <Text fontSize=\"xs\" color=\"red.500\">\n {channelType}\n </Text>\n <Text color=\"gray.500\">{lastMessage ? createdAtText(lastMessage?.createdAt) : ''}</Text>\n </HStack>\n <Text color=\"gray.600\" fontSize=\"lg\" fontWeight=\"semibold\">\n {chatUser?.givenName + ' ' + chatUser?.familyName}\n </Text>\n <Text color=\"gray.600\">{lastMessage?.message}</Text>\n </Box>\n </HStack>\n </Pressable>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Image, HStack, Box } from 'native-base';\n\ninterface FilesListProps {\n files: any;\n uploaded?: boolean;\n}\n\nexport function FilesList({ files, uploaded = false }: FilesListProps) {\n return (\n <HStack space={2} mt={2}>\n <FilesList.FilesView files={files} uploaded={uploaded} />\n </HStack>\n );\n}\n\nFilesList.FilesView = function MessageItemFiles({ files = [], uploaded }: { files: any[]; uploaded?: boolean }) {\n if (!files.length) {\n return null;\n }\n\n return (\n <Box>\n {files.map((file) => {\n const url = useMemo(() => (uploaded ? file.url : URL.createObjectURL(file)), [file, uploaded]);\n return (\n <Image\n alt={'image'}\n mr={2}\n height=\"16\"\n width=\"16\"\n source={{\n uri: url,\n scale: 0.2,\n }}\n />\n );\n })}\n </Box>\n );\n};\n","import { TextField, View, Image, Pressable, HStack, VStack, Toast } from 'native-base';\nimport { FontAwesome } from '@expo/vector-icons';\nimport * as ImagePicker from 'expo-image-picker';\nimport React, { forwardRef, useImperativeHandle, useState, useCallback } from 'react';\nimport { FilesList } from './FilesList';\n\ntype MessageInputProps = {\n channelId?: string;\n handleSend: (message: string, files: any) => Promise<void>;\n};\n\nexport const MessageInput = forwardRef(function MessageInput({ handleSend: handleSendProp }: MessageInputProps) {\n const [message, setMessage] = useState('');\n const [sending, setSending] = useState(false);\n const [files, setFiles] = useState<File[]>([]);\n\n const handleSend = useCallback(() => {\n setSending(true);\n handleSendProp(message, files)\n .then(() => {\n setMessage('');\n setFiles([]);\n })\n .finally(() => setSending(false));\n }, [files, handleSendProp, message]);\n\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={sending ? '' : message}\n onChange={(e) => setMessage(e.nativeEvent.text)}\n fontSize={14}\n />\n </View>\n {files.length ? (\n <View mb={4} flexDirection=\"row\">\n <FilesList files={files} />\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={handleSend} size={20} name=\"send\" />\n </HStack>\n </VStack>\n );\n});\n","import React from 'react';\nimport { Box } from 'native-base';\nimport { IPost, IPostTypeEnum } from '@messenger-box/core';\nimport { PlainMessage } from './PlainMessage';\nimport { CommonMessage } from './CommonMessage';\nimport { Slot } from '@common-stack/components-pro';\n\nexport function MessageItem({\n message,\n channelId,\n currentUser,\n totalCount,\n}: {\n message: IPost;\n channelId: number;\n currentUser: any;\n totalCount: number;\n}) {\n if (typeof message === 'string') {\n return <PlainMessage message={message} />;\n }\n\n const { type } = message;\n\n if (!type || type === IPostTypeEnum.Simple) {\n return <CommonMessage message={message} currentUser={currentUser} />;\n }\n\n return (\n <Slot\n name={(type as string)?.toLowerCase()}\n fillProps={{\n active: true,\n message,\n currentUser,\n }}\n >\n {(item) => <Box>{item}</Box>}\n </Slot>\n );\n}\n","import React from 'react';\nimport { Flex, Text } from 'native-base';\n\ninterface IPlainMessageProps {\n message: string;\n}\n\nexport const PlainMessage = ({ message }: IPlainMessageProps) => {\n return (\n <Flex w=\"full\" justifyContent={'center'} mb=\"7\">\n <Text fontSize=\"14px\" fontWeight={'bold'}>\n {message}\n </Text>\n </Flex>\n );\n};\n","import { cleanEnv, num } from 'envalid';\n\nexport const config = cleanEnv(process.env, {\n MESSAGES_PER_PAGE: num({ devDefault: 20, default: 50 }),\n FILES_PER_MESSAGE: num({ default: 10 }),\n});\n","export { config } from './config';\n","import React, { useEffect, useRef, useState, useLayoutEffect, useCallback, useMemo } from 'react';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { FlatList } from 'native-base';\nimport { useSelector } from 'react-redux';\nimport { orderBy, uniqBy } from 'lodash';\n\nimport {\n IPost,\n useSendMessagesMutation,\n useUploadFiles,\n useMessagesQuery,\n useCheckForNewMessagesQuery,\n useGetAllUsersQuery,\n} from '@messenger-box/platform-client';\nimport { MessageItem } from '../components/MessageItem';\nimport { MessageInput } from '../components/MessageInput';\nimport { IFileInfo } from '@messenger-box/core';\nimport { config } from '../config';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\n\nconst { MESSAGES_PER_PAGE } = config;\n\nexport function ConversationView({ channelId }: any) {\n const messageListRef = useRef(null);\n const [channelToTop, setChannelToTop] = useState(0);\n const [channelMessages, setChannelMessages] = useState<any>([]);\n const auth = useSelector(userSelector);\n const [totalCount, setTotalCount] = useState<any>(0);\n const [loadingOldMessages, setLoadingOldMessages] = useState(false);\n\n const { startUpload } = useUploadFiles();\n\n const [sendMsg] = useSendMessagesMutation();\n\n const {\n data,\n loading: messageLoading,\n refetch,\n } = useMessagesQuery({\n variables: {\n channelId: channelId?.toString(),\n limit: MESSAGES_PER_PAGE,\n },\n skip: !channelId,\n fetchPolicy: 'cache-and-network',\n });\n debugger;\n\n const { data: users } = useGetAllUsersQuery();\n\n const currentUser = useMemo(\n () => users?.getUsers?.find(({ alias }: any) => alias.includes(auth?.auth0UserId)),\n [users, auth],\n );\n\n const { data: checkForMessages } = useCheckForNewMessagesQuery({\n variables: {\n channelId: channelId?.toString(),\n },\n skip: !channelId,\n fetchPolicy: 'network-only',\n pollInterval: 5000,\n });\n\n useEffect(() => {\n if (data?.messages?.data && (loadingOldMessages || channelMessages.length === 0)) {\n const { data: messages, totalCount } = data.messages;\n setChannelMessages((oldMessages) => uniqBy([...[...messages].reverse(), ...oldMessages], ({ id }) => id));\n setTotalCount(totalCount);\n }\n }, [data, loadingOldMessages, channelMessages]);\n\n useLayoutEffect(() => {\n if (checkForMessages?.messages?.totalCount > totalCount) {\n const numberOfNewMessages = checkForMessages?.messages?.totalCount - totalCount;\n refetch({\n limit: numberOfNewMessages,\n }).then(({ data }) => {\n if (!data?.messages) {\n return;\n }\n const { data: messages, totalCount } = data.messages;\n setTotalCount(totalCount);\n setChannelMessages((oldMessages) => uniqBy([...oldMessages, ...messages], ({ id }) => id));\n });\n }\n }, [checkForMessages, totalCount, refetch]);\n\n const onFetchOld = useCallback(() => {\n if (data?.messages?.totalCount > channelMessages.length) {\n setLoadingOldMessages(true);\n refetch({ skip: channelMessages.length });\n }\n }, [data, channelMessages]);\n\n const onMessagesScroll = useCallback(\n (e) => {\n if (messageListRef.current) {\n const { scrollTop, scrollHeight, clientHeight } = messageListRef.current;\n if (clientHeight - scrollTop > scrollHeight - 50 && !messageLoading) {\n onFetchOld();\n }\n }\n },\n [onFetchOld],\n );\n\n const handleSend = useCallback(\n async (message: string, files: []) => {\n if (!(message && channelId)) {\n return;\n }\n const { data } = await sendMsg({\n variables: {\n channelId,\n content: message,\n },\n update: (cache, { data, errors }) => {\n if (!data || errors) {\n return;\n }\n setChannelMessages((messages) => [...messages, data?.sendMessage]);\n setTotalCount((t) => t + 1);\n setChannelToTop(channelToTop + 1);\n },\n });\n if (files && data?.sendMessage?.id) {\n const { id: postId } = data.sendMessage;\n const uploadResponse = await startUpload({\n file: files,\n saveUploadedFile: {\n variables: {\n postId,\n },\n },\n createUploadLink: {\n variables: {\n postId,\n },\n },\n });\n const uploadedFiles = uploadResponse.data as unknown as IFileInfo[];\n setChannelMessages((messages) =>\n messages.map((message) => {\n if (message.id === postId) {\n return {\n ...message,\n files: {\n totalCount: uploadedFiles.length,\n data: uploadedFiles,\n },\n };\n }\n return message;\n }),\n );\n }\n },\n [setChannelMessages, currentUser, channelId],\n );\n\n const messageList = useMemo(() => {\n let currentDate = '';\n let res: any = [];\n orderBy(channelMessages, ['createdAt'], ['asc']).map((msg) => {\n const date = new Date(msg.createdAt);\n let msgDate;\n if (isToday(date)) msgDate = 'Today';\n else if (isYesterday(date)) msgDate = 'Yesterday';\n else msgDate = format(new Date(msg.createdAt), 'eee, do MMMM');\n\n if (msgDate !== currentDate) {\n res.push(msgDate);\n currentDate = msgDate;\n }\n res.push(msg);\n });\n return res;\n }, [channelMessages]);\n\n return (\n <>\n <FlatList\n inverted\n ref={messageListRef}\n data={messageList}\n onEndReached={onMessagesScroll}\n flex={1}\n renderItem={({ item }) => (\n <MessageItem\n channelId={channelId}\n currentUser={currentUser}\n message={item}\n totalCount={totalCount}\n />\n )}\n />\n\n <MessageInput channelId={channelId} handleSend={handleSend} />\n </>\n );\n}\n","import React, { useCallback, useMemo, useEffect } from 'react';\nimport { FlatList, Box, Heading, Input, Text, Icon, Center } from 'native-base';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useNavigation, useRoute } from '@react-navigation/native';\n\nimport { DialogsListItem } from '../components/DialogsListItem';\nimport { useGetAllUsersQuery, useGetChannelsByUserQuery } from '@messenger-box/platform-client';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { CHANGE_SETTINGS_ACTION } from '@admin-layout/client';\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n}\n\nexport function Dialogs(props: InboxProps) {\n const { channelFilters, channelRole } = props;\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector);\n const dispatch = useDispatch();\n const navigation = useNavigation<any>();\n\n const {\n data: userChannels,\n loading: userChannelsLoading,\n refetch: getChannelsRefetch,\n } = useGetChannelsByUserQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n },\n });\n\n const { data: users } = useGetAllUsersQuery();\n\n const currentUser = useMemo(\n () => users?.getUsers?.find(({ alias }: any) => alias.includes(auth?.auth0UserId)),\n [users, auth],\n );\n\n useEffect(() => {\n setTimeout(() => {\n dispatch({\n type: CHANGE_SETTINGS_ACTION,\n payload: {\n footerRender: false,\n },\n } as any);\n }, 0);\n return () => {\n dispatch({\n type: CHANGE_SETTINGS_ACTION,\n payload: {\n footerRender: true,\n },\n } as any);\n };\n }, []);\n\n const handleSelectChannel = useCallback((id: any) => {\n if (params?.channelId) {\n navigation.navigate('Inbox.DialogMessages' as any, { channelId: params?.channelId, hideTabBar: true });\n } else {\n navigation.navigate('Inbox.DialogMessages' as any, { channelId: id, hideTabBar: true });\n }\n }, []);\n\n return (\n <Box p={2}>\n {!userChannels?.channelsByUser?.length ? (\n <Box p={5}>\n <Heading>Chat</Heading>\n <Input\n height={50}\n mt={3}\n placeholder=\"Search\"\n borderRadius={50}\n borderColor={'gray.200'}\n borderWidth={2}\n />\n <Center mt={6}>\n <Icon as={Ionicons} name=\"chatbubbles\" size={'xl'} />\n <Text>You don't have any messages yet!</Text>\n </Center>\n </Box>\n ) : (\n <>\n <FlatList\n data={userChannels?.channelsByUser}\n onRefresh={getChannelsRefetch}\n refreshing={userChannelsLoading}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={() => <Box height=\"0.5\" backgroundColor=\"gray.200\" />}\n renderItem={({ item: channel }) => (\n <DialogsListItem\n users={users?.getUsers}\n onOpen={handleSelectChannel}\n currentUser={currentUser}\n channel={channel}\n selectedChannelId={params?.channelId}\n />\n )}\n />\n </>\n )}\n </Box>\n );\n}\n","export * from './inbox/Inbox';\n","module.exports = require(\"@admin-layout/client\");","module.exports = require(\"@adminide-stack/user-auth0-client\");","module.exports = require(\"@common-stack/client-react\");","module.exports = require(\"@common-stack/components-pro\");","module.exports = require(\"@expo/vector-icons\");","module.exports = require(\"@messenger-box/platform-client\");","module.exports = require(\"@react-navigation/native\");","module.exports = require(\"@react-navigation/stack\");","module.exports = require(\"date-fns\");","module.exports = require(\"envalid\");","module.exports = require(\"expo-image-picker\");","module.exports = require(\"lodash\");","module.exports = require(\"native-base\");","module.exports = require(\"react\");","module.exports = require(\"react-redux\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/index.ts\");\n",""],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://@messenger-box/platform-mobile/./src/index.ts","webpack://@messenger-box/platform-mobile/./src/module.ts","webpack://@messenger-box/platform-mobile/./src/navigation/InboxNavigation.tsx","webpack://@messenger-box/platform-mobile/./src/navigation/index.ts","webpack://@messenger-box/platform-mobile/./src/screens/inbox/DialogMessages.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/Inbox.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/CommonMessage.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/DialogsListItem.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/FilesList.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/MessageInput.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/MessageItem.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/components/PlainMessage.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/config/config.ts","webpack://@messenger-box/platform-mobile/./src/screens/inbox/config/index.ts","webpack://@messenger-box/platform-mobile/./src/screens/inbox/containers/ConversationView.tsx","webpack://@messenger-box/platform-mobile/./src/screens/inbox/containers/Dialogs.tsx","webpack://@messenger-box/platform-mobile/./src/screens/index.ts","webpack://@messenger-box/platform-mobile/external commonjs \"@admin-layout/client\"","webpack://@messenger-box/platform-mobile/external commonjs \"@adminide-stack/user-auth0-client\"","webpack://@messenger-box/platform-mobile/external commonjs \"@common-stack/client-react\"","webpack://@messenger-box/platform-mobile/external commonjs \"@expo/vector-icons\"","webpack://@messenger-box/platform-mobile/external commonjs \"@messenger-box/platform-client\"","webpack://@messenger-box/platform-mobile/external commonjs \"@react-navigation/native\"","webpack://@messenger-box/platform-mobile/external commonjs \"@react-navigation/stack\"","webpack://@messenger-box/platform-mobile/external commonjs \"axios\"","webpack://@messenger-box/platform-mobile/external commonjs \"date-fns\"","webpack://@messenger-box/platform-mobile/external commonjs \"envalid\"","webpack://@messenger-box/platform-mobile/external commonjs \"expo-image-picker\"","webpack://@messenger-box/platform-mobile/external commonjs \"lodash\"","webpack://@messenger-box/platform-mobile/external commonjs \"native-base\"","webpack://@messenger-box/platform-mobile/external commonjs \"react\"","webpack://@messenger-box/platform-mobile/external commonjs \"react-native\"","webpack://@messenger-box/platform-mobile/external commonjs \"react-native-keyboard-aware-scroll-view\"","webpack://@messenger-box/platform-mobile/external commonjs \"react-redux\"","webpack://@messenger-box/platform-mobile/webpack/bootstrap","webpack://@messenger-box/platform-mobile/webpack/before-startup","webpack://@messenger-box/platform-mobile/webpack/startup","webpack://@messenger-box/platform-mobile/webpack/after-startup"],"sourcesContent":["import PlatformModule from './module';\n\nimport { Feature } from '@common-stack/client-react';\n\nexport default new Feature(PlatformModule);\nexport * from './navigation';\nexport * from './screens';\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 { createStackNavigator } from '@react-navigation/stack';\nimport { DialogMessages } from '../screens/inbox/DialogMessages';\n\nconst InboxStack = createStackNavigator();\n\nexport function InboxNavigation({ route }) {\n return (\n <InboxStack.Navigator initialRouteName=\"DialogMessages\">\n <InboxStack.Screen name=\"DialogMessages\" options={{ header: () => null }}>\n {(props) => <DialogMessages channelId={route?.params?.channelId} />}\n </InboxStack.Screen>\n </InboxStack.Navigator>\n );\n}\n","export * from './InboxNavigation';\n","import * as React from 'react';\nimport { Box } from 'native-base';\nimport { ConversationView } from './containers/ConversationView';\n\nexport function DialogMessages({ channelId }) {\n return (\n <Box bg={'white'} flex={1}>\n <ConversationView channelId={channelId} />\n </Box>\n );\n}\n","import * as React from 'react';\nimport { Box } from 'native-base';\n\nimport { Dialogs } from './containers/Dialogs';\n\nexport const Inbox = (props) => {\n const { channelFilters, channelRole } = props;\n return (\n <Box bg={'white'} flex={1}>\n <Dialogs channelFilters={channelFilters} channelRole={channelRole} />\n </Box>\n );\n};\n","import * as React from 'react';\nimport { Avatar, Box, Flex, Icon, Text, HStack } from 'native-base';\nimport { Ionicons } from '@expo/vector-icons';\nimport { formatDistance } from 'date-fns';\nimport { FilesList } from './FilesList';\nimport { IPost } from '@messenger-box/core';\nimport { IAuthUser } from '@pubngo-stack/core';\nimport { startCase } from 'lodash';\n\ninterface ICommonMessageProps {\n message: IPost;\n currentUser: IAuthUser;\n}\n\nexport const CommonMessage = (props: ICommonMessageProps) => {\n const { message, currentUser } = props;\n return (\n <Box mb=\"7\">\n <HStack space={2}>\n <Avatar backgroundColor=\"grey\" source={{ uri: message?.author?.picture || undefined }}>\n {startCase(message?.author?.username?.charAt(0))}\n </Avatar>\n <Box>\n <HStack width={'80%'} justifyContent={'space-between'} alignItems={'center'}>\n <HStack space={2}>\n <Text fontSize=\"14px\" color=\"gray.600\" fontWeight={'bold'}>\n {message?.author?.familyName && message?.author?.givenName\n ? message?.author?.givenName + ' ' + message?.author?.familyName\n : message?.author?.username}\n </Text>\n <Text fontSize=\"14px\" color=\"gray.500\" ml=\"10px\">\n {formatDistance(new Date(message?.createdAt), new Date(), {\n includeSeconds: true,\n addSuffix: true,\n })}\n </Text>\n </HStack>\n {currentUser?.id !== message?.author?.id && (\n <Box ml=\"8px\">\n <Icon as={Ionicons} name={'flag'} color=\"gray.600\" size=\"sm\" />\n </Box>\n )}\n </HStack>\n <Text fontSize=\"14px\" mt=\"5px\">\n {message?.message}\n </Text>\n {message.files?.totalCount ? <FilesList uploaded files={message?.files?.data} /> : null}\n </Box>\n </HStack>\n </Box>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Text, Image, Pressable, HStack, Box } from 'native-base';\nimport { format, isToday, isYesterday } from 'date-fns';\n\nimport { IChannel, IUserAccount, useMessagesQuery, useUserAccountQuery } 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 currentUser?: any;\n users?: any;\n selectedChannelId?: any;\n channel?: any;\n onOpen: (id: 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 currentUser,\n users,\n selectedChannelId,\n channel,\n onOpen,\n}) {\n const { data: messagesQuery, loading: messageLoading } = useMessagesQuery({\n variables: {\n channelId: channel?.id?.toString(),\n limit: 1,\n },\n fetchPolicy: 'cache-and-network',\n });\n\n const chatUser = useMemo(\n () =>\n users?.find(({ id }) => {\n const isNotCurrentUser = id !== currentUser?.id;\n if (isNotCurrentUser) {\n return channel?.members?.find(({ user }: any) => user.id === id);\n }\n return isNotCurrentUser;\n }),\n [users, currentUser, channel],\n );\n\n const { data: userQuery } = useUserAccountQuery({\n variables: {\n userId: chatUser?.id,\n },\n skip: !chatUser?.id,\n });\n\n const lastMessage = useMemo(() => {\n if (!messagesQuery?.messages?.data?.length) {\n return null;\n }\n const { data } = messagesQuery.messages;\n return data[data.length - 1];\n }, [messagesQuery]);\n\n const channelType = useMemo(() => {\n return channel?.type;\n }, [channel]);\n\n return (\n <Pressable\n onPress={() => channel?.id !== selectedChannelId && onOpen(channel?.id)}\n borderWidth={'1'}\n borderRadius={10}\n borderColor={'gray.200'}\n shadow={'6'}\n >\n <HStack m={3} space={2}>\n <Image\n alt={'image'}\n width={16}\n borderRadius={10}\n height={16}\n source={{ uri: userQuery?.getUserAccount?.picture || 'https://picsum.photos/220' }}\n />\n <Box width={'80%'}>\n <HStack alignItems=\"center\" justifyContent=\"space-between\">\n <Text fontSize=\"xs\" color=\"red.500\">\n {channelType}\n </Text>\n <Text color=\"gray.500\">{lastMessage ? createdAtText(lastMessage?.createdAt) : ''}</Text>\n </HStack>\n <Text color=\"gray.600\" fontSize=\"lg\" fontWeight=\"semibold\">\n {chatUser?.givenName + ' ' + chatUser?.familyName}\n </Text>\n <Text color=\"gray.600\">{lastMessage?.message}</Text>\n </Box>\n </HStack>\n </Pressable>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Image as ReactNativeImage } from 'react-native';\nimport { Box, HStack, Image } from 'native-base';\n\ninterface FilesListProps {\n files: any;\n uploaded?: boolean;\n}\n\nexport function FilesList({ files, uploaded = false }: FilesListProps) {\n return (\n <HStack space={2} mt={2}>\n <FilesList.FilesView files={files} uploaded={uploaded}/>\n </HStack>\n );\n}\n\nFilesList.FilesView = function MessageItemFiles({ files = [], uploaded }: { files: any[]; uploaded?: boolean }) {\n if (!files.length) {\n return null;\n }\n return (\n <Box>\n {files.map((file) => {\n const url = useMemo(() => (uploaded ? file.url : ReactNativeImage.resolveAssetSource(file).uri), [file, uploaded]);\n return (\n <Image\n alt={'image'}\n mr={2}\n height=\"16\"\n width=\"16\"\n source={{\n uri: url,\n scale: 0.2,\n }}\n />\n );\n })}\n </Box>\n );\n};\n","import { TextField, View, Image, Pressable, HStack, VStack, Toast } from 'native-base';\nimport { FontAwesome } from '@expo/vector-icons';\nimport * as ImagePicker from 'expo-image-picker';\nimport { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';\nimport React, { forwardRef, useImperativeHandle, useState, useCallback } from 'react';\nimport { FilesList } from './FilesList';\nimport axios from 'axios';\n\ntype MessageInputProps = {\n channelId?: string;\n handleSend: (message: string, files: any) => Promise<void>;\n};\n\nexport const MessageInput = forwardRef(function MessageInput({ handleSend: handleSendProp }: MessageInputProps) {\n const [message, setMessage] = useState('');\n const [sending, setSending] = useState(false);\n const [files, setFiles] = useState<File[]>([]);\n\n const handleSend = useCallback(() => {\n setSending(true);\n handleSendProp(message, files)\n .then(() => {\n setMessage('');\n setFiles([]);\n })\n .finally(() => setSending(false));\n }, [files, handleSendProp, message]);\n\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 mediaTypes: ImagePicker.MediaTypeOptions.Images,\n allowsEditing: true,\n aspect: [4, 3],\n quality: 1,\n });\n\n if (!result.cancelled) {\n axios\n .get((result as any).uri, {\n responseType: 'blob',\n })\n .then((res: any) => {\n let file = res.data._data;\n file.uri = (result as any).uri;\n setFiles(files.concat(file));\n });\n }\n };\n\n return (\n <VStack\n position={'absolute'}\n bottom={0}\n left={0}\n right={0}\n bg={'white'}\n marginTop={3}\n alignContent=\"center\"\n p={5}\n >\n <KeyboardAwareScrollView contentContainerStyle={{ flex: 1 }}>\n <View>\n <TextField\n placeholder=\"Message...\"\n borderColor=\"gray.400\"\n value={sending ? '' : message}\n onChange={(e) => setMessage(e.nativeEvent.text)}\n fontSize={14}\n />\n </View>\n {files.length ? (\n <View mb={4} flexDirection=\"row\">\n <FilesList files={files} />\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={handleSend} size={20} name=\"send\" />\n </HStack>\n </KeyboardAwareScrollView>\n </VStack>\n );\n});\n","import React from 'react';\nimport { Box, Button, HStack, Icon, Text, useColorModeValue } from 'native-base';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useNavigation } from '@react-navigation/native';\nimport { IPost, IPostTypeEnum } from '@messenger-box/core';\nimport { PlainMessage } from './PlainMessage';\nimport { CommonMessage } from './CommonMessage';\n\nexport interface AlertMessageAttachmentsInterface {\n title: string;\n isTitleHtml: boolean;\n icon: string;\n callToAction: {\n title: string;\n link: string;\n };\n}\n\nexport function MessageItem({\n message,\n channelId,\n currentUser,\n totalCount,\n onOpen,\n}: {\n message: IPost;\n channelId: number;\n currentUser: any;\n totalCount: number;\n onOpen: () => void;\n}) {\n if (typeof message === 'string') {\n return <PlainMessage message={message} />;\n }\n\n const { type } = message;\n\n if (!type || type === IPostTypeEnum.Simple) {\n return <CommonMessage message={message} currentUser={currentUser} />;\n }\n\n if (type === IPostTypeEnum.ALERT) {\n const { attachment } = message?.propsConfiguration?.contents as {\n attachment: AlertMessageAttachmentsInterface;\n };\n let action: string = '';\n let actionId: any = '';\n const icon = 'information-circle';\n if (attachment.callToAction.link.includes('my-reservation-details')) {\n action = 'm-reservation-detail';\n actionId = attachment?.callToAction?.link.split('/').pop();\n }\n const color = useColorModeValue('white', 'gray.800');\n const bgColor = useColorModeValue('gray.800', 'white');\n const navigation = useNavigation<any>();\n\n return (\n <Box borderWidth={1} borderRadius={20} backgroundColor={bgColor} my={2} p={3} opacity={0.7}>\n <HStack space={2} alignItems={'center'}>\n <Icon as={Ionicons} name={icon} color={'white'} />\n <Text color={color} width={'45%'} numberOfLines={3}>\n {attachment?.title}\n </Text>\n {attachment.callToAction ? (\n <Button\n variant={'outline'}\n size={'sm'}\n borderColor={color}\n onPress={() => navigation.navigate(action, { reservationId: actionId })}\n >\n <Text color={color}>{attachment.callToAction.title}</Text>\n </Button>\n ) : null}\n </HStack>\n </Box>\n );\n }\n\n return null;\n}\n","import React from 'react';\nimport { Flex, Text } from 'native-base';\n\ninterface IPlainMessageProps {\n message: string;\n}\n\nexport const PlainMessage = ({ message }: IPlainMessageProps) => {\n return (\n <Flex w=\"full\" justifyContent={'center'} mb=\"7\">\n <Text fontSize=\"14px\" fontWeight={'bold'}>\n {message}\n </Text>\n </Flex>\n );\n};\n","import { cleanEnv, num } from 'envalid';\n\nexport const config = cleanEnv(process.env, {\n MESSAGES_PER_PAGE: num({ devDefault: 20, default: 50 }),\n FILES_PER_MESSAGE: num({ default: 10 }),\n});\n","export { config } from './config';\n","import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { ScrollView, useDisclose, Box } from 'native-base';\nimport { useSelector } from 'react-redux';\nimport { orderBy, uniqBy } from 'lodash';\nimport {\n useCheckForNewMessagesQuery,\n useGetAllUsersQuery,\n useMessagesQuery,\n useSendMessagesMutation,\n useUploadFiles,\n} from '@messenger-box/platform-client';\nimport { MessageItem } from '../components/MessageItem';\nimport { MessageInput } from '../components/MessageInput';\nimport { IFileInfo } from '@messenger-box/core';\nimport { config } from '../config';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\n\nconst { MESSAGES_PER_PAGE } = config;\n\nexport function ConversationView({ channelId }: any) {\n const { onOpen } = useDisclose();\n const messageListRef = useRef(null);\n const [channelToTop, setChannelToTop] = useState(0);\n const [channelMessages, setChannelMessages] = useState<any>([]);\n const auth = useSelector(userSelector);\n const [totalCount, setTotalCount] = useState<any>(0);\n const [loadingOldMessages, setLoadingOldMessages] = useState(false);\n\n const { startUpload } = useUploadFiles();\n\n const [sendMsg] = useSendMessagesMutation();\n\n const {\n data,\n loading: messageLoading,\n refetch,\n } = useMessagesQuery({\n variables: {\n channelId: channelId?.toString(),\n limit: MESSAGES_PER_PAGE,\n },\n skip: !channelId,\n fetchPolicy: 'cache-and-network',\n });\n\n const { data: users } = useGetAllUsersQuery();\n\n const currentUser = useMemo(\n () => users?.getUsers?.find(({ alias }: any) => alias.includes(auth?.auth0UserId)),\n [users, auth],\n );\n\n const { data: checkForMessages } = useCheckForNewMessagesQuery({\n variables: {\n channelId: channelId?.toString(),\n },\n skip: !channelId,\n fetchPolicy: 'network-only',\n pollInterval: 5000,\n });\n\n useEffect(() => {\n if (data?.messages?.data && (loadingOldMessages || channelMessages.length === 0)) {\n const { data: messages, totalCount } = data.messages;\n setChannelMessages((oldMessages) => uniqBy([...[...messages].reverse(), ...oldMessages], ({ id }) => id));\n setTotalCount(totalCount);\n }\n }, [data, loadingOldMessages, channelMessages]);\n\n useLayoutEffect(() => {\n if (checkForMessages?.messages?.totalCount > totalCount) {\n const numberOfNewMessages = checkForMessages?.messages?.totalCount - totalCount;\n refetch({\n limit: numberOfNewMessages,\n }).then(({ data }) => {\n if (!data?.messages) {\n return;\n }\n const { data: messages, totalCount } = data.messages;\n setTotalCount(totalCount);\n setChannelMessages((oldMessages) => uniqBy([...oldMessages, ...messages], ({ id }) => id));\n });\n }\n }, [checkForMessages, totalCount, refetch]);\n\n const onFetchOld = useCallback(() => {\n if (data?.messages?.totalCount > channelMessages.length) {\n setLoadingOldMessages(true);\n refetch({ skip: channelMessages.length });\n }\n }, [data, channelMessages]);\n\n const onMessagesScroll = useCallback(\n () => {\n if (messageListRef.current) {\n const { scrollTop, scrollHeight, clientHeight } = messageListRef.current;\n if (clientHeight - scrollTop > scrollHeight - 50 && !messageLoading) {\n onFetchOld();\n }\n }\n },\n [onFetchOld],\n );\n\n const handleSend = useCallback(\n async (message: string, files: []) => {\n if (!(message && channelId)) {\n return;\n }\n const { data } = await sendMsg({\n variables: {\n channelId,\n content: message,\n },\n update: (cache, { data, errors }) => {\n if (!data || errors) {\n return;\n }\n setChannelMessages((messages) => [...messages, data?.sendMessage]);\n setTotalCount((t) => t + 1);\n setChannelToTop(channelToTop + 1);\n },\n });\n if (files && data?.sendMessage?.id) {\n const { id: postId } = data.sendMessage;\n const uploadResponse = await startUpload({\n file: files,\n saveUploadedFile: {\n variables: {\n postId,\n },\n },\n createUploadLink: {\n variables: {\n postId,\n },\n },\n });\n const uploadedFiles = uploadResponse.data as unknown as IFileInfo[];\n setChannelMessages((messages) =>\n messages.map((message) => {\n if (message.id === postId) {\n return {\n ...message,\n files: {\n totalCount: uploadedFiles.length,\n data: uploadedFiles,\n },\n };\n }\n return message;\n }),\n );\n }\n },\n [setChannelMessages, currentUser, channelId],\n );\n\n const messageList = useMemo(() => {\n let currentDate = '';\n let res: any = [];\n orderBy(channelMessages, ['createdAt'], ['asc']).map((msg) => {\n const date = new Date(msg.createdAt);\n let msgDate;\n if (isToday(date)) msgDate = 'Today';\n else if (isYesterday(date)) msgDate = 'Yesterday';\n else msgDate = format(new Date(msg.createdAt), 'eee, do MMMM');\n\n if (msgDate !== currentDate) {\n res.push(msgDate);\n currentDate = msgDate;\n }\n res.push(msg);\n });\n return res;\n }, [channelMessages]);\n\n return (\n <Box flex={1} position={'relative'}>\n <ScrollView ref={messageListRef} mb={'32'} contentContainerStyle={{ flexGrow: 1 }} p={5}>\n {messageList.map((message, index) => (\n <Box key={index}>\n <MessageItem\n channelId={channelId}\n currentUser={currentUser}\n message={message}\n totalCount={totalCount}\n onOpen={onOpen}\n />\n </Box>\n ))}\n </ScrollView>\n <MessageInput channelId={channelId} handleSend={handleSend} />\n </Box>\n );\n}\n","import React, { useCallback, useMemo, useEffect } from 'react';\nimport { FlatList, Box, Heading, Input, Text, Icon, Center } from 'native-base';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useNavigation, useRoute } from '@react-navigation/native';\n\nimport { DialogsListItem } from '../components/DialogsListItem';\nimport { useGetAllUsersQuery, useGetChannelsByUserQuery } from '@messenger-box/platform-client';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { CHANGE_SETTINGS_ACTION } from '@admin-layout/client';\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n}\n\nexport function Dialogs(props: InboxProps) {\n const { channelFilters, channelRole } = props;\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector);\n const dispatch = useDispatch();\n const navigation = useNavigation<any>();\n\n const {\n data: userChannels,\n loading: userChannelsLoading,\n refetch: getChannelsRefetch,\n } = useGetChannelsByUserQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n },\n });\n\n const { data: users } = useGetAllUsersQuery();\n\n const currentUser = useMemo(\n () => users?.getUsers?.find(({ alias }: any) => alias.includes(auth?.auth0UserId)),\n [users, auth],\n );\n\n useEffect(() => {\n setTimeout(() => {\n dispatch({\n type: CHANGE_SETTINGS_ACTION,\n payload: {\n footerRender: false,\n },\n } as any);\n }, 0);\n return () => {\n dispatch({\n type: CHANGE_SETTINGS_ACTION,\n payload: {\n footerRender: true,\n },\n } as any);\n };\n }, []);\n\n const handleSelectChannel = useCallback((id: any) => {\n if (params?.channelId) {\n navigation.navigate('Inbox.DialogMessages' as any, { channelId: params?.channelId, hideTabBar: true });\n } else {\n navigation.navigate('Inbox.DialogMessages' as any, { channelId: id, hideTabBar: true });\n }\n }, []);\n\n return (\n <Box p={2}>\n {!userChannels?.channelsByUser?.length ? (\n <Box p={5}>\n <Heading>Chat</Heading>\n <Input\n height={50}\n mt={3}\n placeholder=\"Search\"\n borderRadius={50}\n borderColor={'gray.200'}\n borderWidth={2}\n />\n <Center mt={6}>\n <Icon as={Ionicons} name=\"chatbubbles\" size={'xl'} />\n <Text>You don't have any messages yet!</Text>\n </Center>\n </Box>\n ) : (\n <>\n <FlatList\n data={userChannels?.channelsByUser}\n onRefresh={getChannelsRefetch}\n refreshing={userChannelsLoading}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={() => <Box height=\"0.5\" backgroundColor=\"gray.200\" />}\n renderItem={({ item: channel }) => (\n <DialogsListItem\n users={users?.getUsers}\n onOpen={handleSelectChannel}\n currentUser={currentUser}\n channel={channel}\n selectedChannelId={params?.channelId}\n />\n )}\n />\n </>\n )}\n </Box>\n );\n}\n","export * from './inbox/Inbox';\n","module.exports = require(\"@admin-layout/client\");","module.exports = require(\"@adminide-stack/user-auth0-client\");","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/stack\");","module.exports = require(\"axios\");","module.exports = require(\"date-fns\");","module.exports = require(\"envalid\");","module.exports = require(\"expo-image-picker\");","module.exports = require(\"lodash\");","module.exports = require(\"native-base\");","module.exports = require(\"react\");","module.exports = require(\"react-native\");","module.exports = require(\"react-native-keyboard-aware-scroll-view\");","module.exports = require(\"react-redux\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/index.ts\");\n",""],"names":[],"sourceRoot":""}
@@ -1,8 +1,18 @@
1
1
  /// <reference types="react" />
2
2
  import { IPost } from '@messenger-box/core';
3
- export declare function MessageItem({ message, channelId, currentUser, totalCount, }: {
3
+ export interface AlertMessageAttachmentsInterface {
4
+ title: string;
5
+ isTitleHtml: boolean;
6
+ icon: string;
7
+ callToAction: {
8
+ title: string;
9
+ link: string;
10
+ };
11
+ }
12
+ export declare function MessageItem({ message, channelId, currentUser, totalCount, onOpen, }: {
4
13
  message: IPost;
5
14
  channelId: number;
6
15
  currentUser: any;
7
16
  totalCount: number;
17
+ onOpen: () => void;
8
18
  }): JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@messenger-box/platform-mobile",
3
- "version": "0.0.1-alpha.206",
3
+ "version": "0.0.1-alpha.218",
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.206",
23
- "@messenger-box/platform-client": "0.0.1-alpha.206"
22
+ "@messenger-box/core": "0.0.1-alpha.208",
23
+ "@messenger-box/platform-client": "0.0.1-alpha.208"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/bootstrap": "4.5.0",
@@ -38,5 +38,5 @@
38
38
  "typescript": {
39
39
  "definition": "lib/index.d.ts"
40
40
  },
41
- "gitHead": "0a5bf43086c85b1dc3df89d4dde42b9164e6b2c4"
41
+ "gitHead": "521fbb0573e3454dbe30a3db93fd6a5d97ae1600"
42
42
  }
@@ -4,7 +4,7 @@ import { ConversationView } from './containers/ConversationView';
4
4
 
5
5
  export function DialogMessages({ channelId }) {
6
6
  return (
7
- <Box bg={'white'} flex={1} p={6}>
7
+ <Box bg={'white'} flex={1}>
8
8
  <ConversationView channelId={channelId} />
9
9
  </Box>
10
10
  );
@@ -1,5 +1,6 @@
1
1
  import React, { useMemo } from 'react';
2
- import { Image, HStack, Box } from 'native-base';
2
+ import { Image as ReactNativeImage } from 'react-native';
3
+ import { Box, HStack, Image } from 'native-base';
3
4
 
4
5
  interface FilesListProps {
5
6
  files: any;
@@ -9,7 +10,7 @@ interface FilesListProps {
9
10
  export function FilesList({ files, uploaded = false }: FilesListProps) {
10
11
  return (
11
12
  <HStack space={2} mt={2}>
12
- <FilesList.FilesView files={files} uploaded={uploaded} />
13
+ <FilesList.FilesView files={files} uploaded={uploaded}/>
13
14
  </HStack>
14
15
  );
15
16
  }
@@ -18,11 +19,10 @@ FilesList.FilesView = function MessageItemFiles({ files = [], uploaded }: { file
18
19
  if (!files.length) {
19
20
  return null;
20
21
  }
21
-
22
22
  return (
23
23
  <Box>
24
24
  {files.map((file) => {
25
- const url = useMemo(() => (uploaded ? file.url : URL.createObjectURL(file)), [file, uploaded]);
25
+ const url = useMemo(() => (uploaded ? file.url : ReactNativeImage.resolveAssetSource(file).uri), [file, uploaded]);
26
26
  return (
27
27
  <Image
28
28
  alt={'image'}
@@ -1,8 +1,10 @@
1
1
  import { TextField, View, Image, Pressable, HStack, VStack, Toast } from 'native-base';
2
2
  import { FontAwesome } from '@expo/vector-icons';
3
3
  import * as ImagePicker from 'expo-image-picker';
4
+ import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';
4
5
  import React, { forwardRef, useImperativeHandle, useState, useCallback } from 'react';
5
6
  import { FilesList } from './FilesList';
7
+ import axios from 'axios';
6
8
 
7
9
  type MessageInputProps = {
8
10
  channelId?: string;
@@ -28,36 +30,56 @@ export const MessageInput = forwardRef(function MessageInput({ handleSend: handl
28
30
  // No permissions request is necessary for launching the image library
29
31
  await ImagePicker.requestMediaLibraryPermissionsAsync();
30
32
  let result = await ImagePicker.launchImageLibraryAsync({
31
- // base64: true,
32
- // aspect: [4, 3],
33
33
  mediaTypes: ImagePicker.MediaTypeOptions.Images,
34
+ allowsEditing: true,
35
+ aspect: [4, 3],
36
+ quality: 1,
34
37
  });
35
38
 
36
39
  if (!result.cancelled) {
37
- setFiles(files.concat((result as any).uri)); // @igor need ot check this
40
+ axios
41
+ .get((result as any).uri, {
42
+ responseType: 'blob',
43
+ })
44
+ .then((res: any) => {
45
+ let file = res.data._data;
46
+ file.uri = (result as any).uri;
47
+ setFiles(files.concat(file));
48
+ });
38
49
  }
39
50
  };
40
51
 
41
52
  return (
42
- <VStack marginTop={3} alignContent="center">
43
- <View>
44
- <TextField
45
- placeholder="Message..."
46
- borderColor="gray.400"
47
- value={sending ? '' : message}
48
- onChange={(e) => setMessage(e.nativeEvent.text)}
49
- fontSize={14}
50
- />
51
- </View>
52
- {files.length ? (
53
- <View mb={4} flexDirection="row">
54
- <FilesList files={files} />
53
+ <VStack
54
+ position={'absolute'}
55
+ bottom={0}
56
+ left={0}
57
+ right={0}
58
+ bg={'white'}
59
+ marginTop={3}
60
+ alignContent="center"
61
+ p={5}
62
+ >
63
+ <KeyboardAwareScrollView contentContainerStyle={{ flex: 1 }}>
64
+ <View>
65
+ <TextField
66
+ placeholder="Message..."
67
+ borderColor="gray.400"
68
+ value={sending ? '' : message}
69
+ onChange={(e) => setMessage(e.nativeEvent.text)}
70
+ fontSize={14}
71
+ />
55
72
  </View>
56
- ) : null}
57
- <HStack alignContent="center" justifyContent="space-between">
58
- <FontAwesome onPress={onSelectImages} size={20} style={{ marginRight: 5 }} name="file-image-o" />
59
- <FontAwesome onPress={handleSend} size={20} name="send" />
60
- </HStack>
73
+ {files.length ? (
74
+ <View mb={4} flexDirection="row">
75
+ <FilesList files={files} />
76
+ </View>
77
+ ) : null}
78
+ <HStack alignContent="center" justifyContent="space-between">
79
+ <FontAwesome onPress={onSelectImages} size={20} style={{ marginRight: 5 }} name="file-image-o" />
80
+ <FontAwesome onPress={handleSend} size={20} name="send" />
81
+ </HStack>
82
+ </KeyboardAwareScrollView>
61
83
  </VStack>
62
84
  );
63
85
  });
@@ -1,20 +1,33 @@
1
1
  import React from 'react';
2
- import { Box } from 'native-base';
2
+ import { Box, Button, HStack, Icon, Text, useColorModeValue } from 'native-base';
3
+ import { Ionicons } from '@expo/vector-icons';
4
+ import { useNavigation } from '@react-navigation/native';
3
5
  import { IPost, IPostTypeEnum } from '@messenger-box/core';
4
6
  import { PlainMessage } from './PlainMessage';
5
7
  import { CommonMessage } from './CommonMessage';
6
- import { Slot } from '@common-stack/components-pro';
8
+
9
+ export interface AlertMessageAttachmentsInterface {
10
+ title: string;
11
+ isTitleHtml: boolean;
12
+ icon: string;
13
+ callToAction: {
14
+ title: string;
15
+ link: string;
16
+ };
17
+ }
7
18
 
8
19
  export function MessageItem({
9
20
  message,
10
21
  channelId,
11
22
  currentUser,
12
23
  totalCount,
24
+ onOpen,
13
25
  }: {
14
26
  message: IPost;
15
27
  channelId: number;
16
28
  currentUser: any;
17
29
  totalCount: number;
30
+ onOpen: () => void;
18
31
  }) {
19
32
  if (typeof message === 'string') {
20
33
  return <PlainMessage message={message} />;
@@ -26,16 +39,42 @@ export function MessageItem({
26
39
  return <CommonMessage message={message} currentUser={currentUser} />;
27
40
  }
28
41
 
29
- return (
30
- <Slot
31
- name={(type as string)?.toLowerCase()}
32
- fillProps={{
33
- active: true,
34
- message,
35
- currentUser,
36
- }}
37
- >
38
- {(item) => <Box>{item}</Box>}
39
- </Slot>
40
- );
42
+ if (type === IPostTypeEnum.ALERT) {
43
+ const { attachment } = message?.propsConfiguration?.contents as {
44
+ attachment: AlertMessageAttachmentsInterface;
45
+ };
46
+ let action: string = '';
47
+ let actionId: any = '';
48
+ const icon = 'information-circle';
49
+ if (attachment.callToAction.link.includes('my-reservation-details')) {
50
+ action = 'm-reservation-detail';
51
+ actionId = attachment?.callToAction?.link.split('/').pop();
52
+ }
53
+ const color = useColorModeValue('white', 'gray.800');
54
+ const bgColor = useColorModeValue('gray.800', 'white');
55
+ const navigation = useNavigation<any>();
56
+
57
+ return (
58
+ <Box borderWidth={1} borderRadius={20} backgroundColor={bgColor} my={2} p={3} opacity={0.7}>
59
+ <HStack space={2} alignItems={'center'}>
60
+ <Icon as={Ionicons} name={icon} color={'white'} />
61
+ <Text color={color} width={'45%'} numberOfLines={3}>
62
+ {attachment?.title}
63
+ </Text>
64
+ {attachment.callToAction ? (
65
+ <Button
66
+ variant={'outline'}
67
+ size={'sm'}
68
+ borderColor={color}
69
+ onPress={() => navigation.navigate(action, { reservationId: actionId })}
70
+ >
71
+ <Text color={color}>{attachment.callToAction.title}</Text>
72
+ </Button>
73
+ ) : null}
74
+ </HStack>
75
+ </Box>
76
+ );
77
+ }
78
+
79
+ return null;
41
80
  }
@@ -1,16 +1,14 @@
1
- import React, { useEffect, useRef, useState, useLayoutEffect, useCallback, useMemo } from 'react';
1
+ import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
2
2
  import { format, isToday, isYesterday } from 'date-fns';
3
- import { FlatList } from 'native-base';
3
+ import { ScrollView, useDisclose, Box } from 'native-base';
4
4
  import { useSelector } from 'react-redux';
5
5
  import { orderBy, uniqBy } from 'lodash';
6
-
7
6
  import {
8
- IPost,
9
- useSendMessagesMutation,
10
- useUploadFiles,
11
- useMessagesQuery,
12
7
  useCheckForNewMessagesQuery,
13
8
  useGetAllUsersQuery,
9
+ useMessagesQuery,
10
+ useSendMessagesMutation,
11
+ useUploadFiles,
14
12
  } from '@messenger-box/platform-client';
15
13
  import { MessageItem } from '../components/MessageItem';
16
14
  import { MessageInput } from '../components/MessageInput';
@@ -21,6 +19,7 @@ import { userSelector } from '@adminide-stack/user-auth0-client';
21
19
  const { MESSAGES_PER_PAGE } = config;
22
20
 
23
21
  export function ConversationView({ channelId }: any) {
22
+ const { onOpen } = useDisclose();
24
23
  const messageListRef = useRef(null);
25
24
  const [channelToTop, setChannelToTop] = useState(0);
26
25
  const [channelMessages, setChannelMessages] = useState<any>([]);
@@ -44,7 +43,6 @@ export function ConversationView({ channelId }: any) {
44
43
  skip: !channelId,
45
44
  fetchPolicy: 'cache-and-network',
46
45
  });
47
- debugger;
48
46
 
49
47
  const { data: users } = useGetAllUsersQuery();
50
48
 
@@ -94,7 +92,7 @@ export function ConversationView({ channelId }: any) {
94
92
  }, [data, channelMessages]);
95
93
 
96
94
  const onMessagesScroll = useCallback(
97
- (e) => {
95
+ () => {
98
96
  if (messageListRef.current) {
99
97
  const { scrollTop, scrollHeight, clientHeight } = messageListRef.current;
100
98
  if (clientHeight - scrollTop > scrollHeight - 50 && !messageLoading) {
@@ -179,24 +177,21 @@ export function ConversationView({ channelId }: any) {
179
177
  }, [channelMessages]);
180
178
 
181
179
  return (
182
- <>
183
- <FlatList
184
- inverted
185
- ref={messageListRef}
186
- data={messageList}
187
- onEndReached={onMessagesScroll}
188
- flex={1}
189
- renderItem={({ item }) => (
190
- <MessageItem
191
- channelId={channelId}
192
- currentUser={currentUser}
193
- message={item}
194
- totalCount={totalCount}
195
- />
196
- )}
197
- />
198
-
180
+ <Box flex={1} position={'relative'}>
181
+ <ScrollView ref={messageListRef} mb={'32'} contentContainerStyle={{ flexGrow: 1 }} p={5}>
182
+ {messageList.map((message, index) => (
183
+ <Box key={index}>
184
+ <MessageItem
185
+ channelId={channelId}
186
+ currentUser={currentUser}
187
+ message={message}
188
+ totalCount={totalCount}
189
+ onOpen={onOpen}
190
+ />
191
+ </Box>
192
+ ))}
193
+ </ScrollView>
199
194
  <MessageInput channelId={channelId} handleSend={handleSend} />
200
- </>
195
+ </Box>
201
196
  );
202
197
  }