@messenger-box/platform-mobile 10.0.3-alpha.165 → 10.0.3-alpha.171

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/lib/compute.js.map +1 -1
  2. package/lib/screens/inbox/DialogMessages.js +4 -1
  3. package/lib/screens/inbox/DialogMessages.js.map +1 -1
  4. package/lib/screens/inbox/DialogThreadMessages.js +3 -4
  5. package/lib/screens/inbox/DialogThreadMessages.js.map +1 -1
  6. package/lib/screens/inbox/DialogThreads.js +1 -2
  7. package/lib/screens/inbox/DialogThreads.js.map +1 -1
  8. package/lib/screens/inbox/components/CachedImage/consts.js.map +1 -1
  9. package/lib/screens/inbox/components/CachedImage/index.js +4 -7
  10. package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
  11. package/lib/screens/inbox/components/DialogItem.js +9 -18
  12. package/lib/screens/inbox/components/DialogItem.js.map +1 -1
  13. package/lib/screens/inbox/components/GiftedChatInboxComponent.js +4 -4
  14. package/lib/screens/inbox/components/GiftedChatInboxComponent.js.map +1 -1
  15. package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js +2 -0
  16. package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js.map +1 -1
  17. package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js +1 -4
  18. package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js.map +1 -1
  19. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +91 -78
  20. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
  21. package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js +3 -4
  22. package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js.map +1 -1
  23. package/lib/screens/inbox/components/SubscriptionHandler.js +2 -4
  24. package/lib/screens/inbox/components/SubscriptionHandler.js.map +1 -1
  25. package/lib/screens/inbox/components/ThreadsViewItem.js +2 -4
  26. package/lib/screens/inbox/components/ThreadsViewItem.js.map +1 -1
  27. package/lib/screens/inbox/config/config.js +2 -0
  28. package/lib/screens/inbox/config/config.js.map +1 -1
  29. package/lib/screens/inbox/containers/ConversationView.js +60 -53
  30. package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
  31. package/lib/screens/inbox/containers/Dialogs.js +17 -15
  32. package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
  33. package/lib/screens/inbox/containers/ThreadConversationView.js +39 -42
  34. package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
  35. package/lib/screens/inbox/containers/ThreadsView.js +6 -12
  36. package/lib/screens/inbox/containers/ThreadsView.js.map +1 -1
  37. package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js.map +1 -1
  38. package/lib/screens/inbox/workflow/dialog-threads-xstate.js.map +1 -1
  39. package/package.json +3 -3
  40. package/CHANGELOG.md +0 -404
  41. package/jest.config.js +0 -24
  42. package/rollup.config.mjs +0 -45
  43. package/src/components/index.ts +0 -0
  44. package/src/compute.ts +0 -63
  45. package/src/index.ts +0 -9
  46. package/src/module.ts +0 -10
  47. package/src/navigation/InboxNavigation.tsx +0 -102
  48. package/src/navigation/index.ts +0 -1
  49. package/src/queries/inboxQueries.ts +0 -299
  50. package/src/queries/index.d.ts +0 -2
  51. package/src/queries/index.ts +0 -1
  52. package/src/screens/inbox/DialogMessages.tsx +0 -22
  53. package/src/screens/inbox/DialogThreadMessages.tsx +0 -89
  54. package/src/screens/inbox/DialogThreads.tsx +0 -122
  55. package/src/screens/inbox/Inbox.tsx +0 -17
  56. package/src/screens/inbox/components/Actionsheet.tsx +0 -30
  57. package/src/screens/inbox/components/CachedImage/consts.ts +0 -6
  58. package/src/screens/inbox/components/CachedImage/index.tsx +0 -274
  59. package/src/screens/inbox/components/DialogItem.tsx +0 -306
  60. package/src/screens/inbox/components/DialogsHeader.tsx +0 -30
  61. package/src/screens/inbox/components/DialogsListItem.tsx +0 -362
  62. package/src/screens/inbox/components/ExpandableInput.tsx +0 -460
  63. package/src/screens/inbox/components/ExpandableInputActionSheet.tsx +0 -518
  64. package/src/screens/inbox/components/GiftedChatInboxComponent.tsx +0 -411
  65. package/src/screens/inbox/components/ServiceDialogsListItem.tsx +0 -446
  66. package/src/screens/inbox/components/SlackInput.tsx +0 -23
  67. package/src/screens/inbox/components/SlackMessageContainer/ImageViewerModal.tsx +0 -113
  68. package/src/screens/inbox/components/SlackMessageContainer/PaymentMessage.tsx +0 -199
  69. package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +0 -497
  70. package/src/screens/inbox/components/SlackMessageContainer/SlackMessage.tsx +0 -145
  71. package/src/screens/inbox/components/SlackMessageContainer/index.ts +0 -3
  72. package/src/screens/inbox/components/SmartLoader.tsx +0 -61
  73. package/src/screens/inbox/components/SubscriptionHandler.tsx +0 -41
  74. package/src/screens/inbox/components/SupportServiceDialogsListItem.tsx +0 -300
  75. package/src/screens/inbox/components/ThreadsViewItem.tsx +0 -233
  76. package/src/screens/inbox/components/workflow/dialogs-list-item-xstate.ts +0 -145
  77. package/src/screens/inbox/components/workflow/service-dialogs-list-item-xstate.ts +0 -159
  78. package/src/screens/inbox/config/config.ts +0 -15
  79. package/src/screens/inbox/config/index.ts +0 -1
  80. package/src/screens/inbox/containers/ConversationView.tsx +0 -2219
  81. package/src/screens/inbox/containers/ConversationView.tsx.bk +0 -1467
  82. package/src/screens/inbox/containers/Dialogs.tsx +0 -458
  83. package/src/screens/inbox/containers/SupportServiceDialogs.tsx +0 -119
  84. package/src/screens/inbox/containers/ThreadConversationView.tsx +0 -1808
  85. package/src/screens/inbox/containers/ThreadsView.tsx +0 -224
  86. package/src/screens/inbox/containers/workflow/apollo/handleResult.ts +0 -20
  87. package/src/screens/inbox/containers/workflow/conversation-xstate.ts +0 -313
  88. package/src/screens/inbox/containers/workflow/dialogs-xstate.ts +0 -196
  89. package/src/screens/inbox/containers/workflow/thread-conversation-xstate.ts +0 -401
  90. package/src/screens/inbox/hooks/useInboxMessages.ts +0 -34
  91. package/src/screens/inbox/hooks/useSafeDialogThreadsMachine.ts +0 -136
  92. package/src/screens/inbox/index.ts +0 -37
  93. package/src/screens/inbox/machines/threadsMachine.ts +0 -147
  94. package/src/screens/inbox/workflow/dialog-threads-xstate.ts +0 -163
  95. package/src/screens/index.ts +0 -4
  96. package/tsconfig.json +0 -13
  97. package/webpack.config.js +0 -58
@@ -1 +1 @@
1
- {"version":3,"file":"compute.js","sources":["../src/compute.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { getFilteredRoutes } from '@common-stack/client-react/lib/utils/filteredRoutes.js';\nimport type { IRouteModule } from '@common-stack/core';\n\nexport const inboxPageStore: IRouteModule[] = [\n {\n key: 'message',\n path: '/message',\n name: 'Message',\n exact: true,\n component: () => import('./screens/inbox/DialogMessages'),\n props: {\n initialParams: { channelId: null, role: null, isShowThreadMessage: true },\n options: {\n headerShown: true,\n title: 'Inbox',\n headerBackTitleVisible: false,\n gestureEnabled: false,\n swipeEnabled: false,\n },\n },\n },\n {\n key: 'thread',\n path: '/thread',\n name: 'Thread',\n exact: true,\n component: () => import('./screens/inbox/DialogThreads'),\n props: {\n initialParams: { channelId: null, postParentId: null, role: null },\n options: {\n headerShown: true,\n title: 'Thread',\n headerBackTitleVisible: false,\n gestureEnabled: false,\n swipeEnabled: false,\n },\n },\n },\n {\n key: 'threadmessage',\n path: '/threadmessage',\n name: 'ThreadMessage',\n exact: true,\n component: () => import('./screens/inbox/DialogThreadMessages'),\n props: {\n initialParams: { channelId: null, postParentId: null, isPostParentIdThread: null, role: null },\n options: {\n headerShown: true,\n title: 'Inbox',\n headerBackTitleVisible: false,\n gestureEnabled: false,\n swipeEnabled: false,\n },\n },\n },\n];\n\nconst selectedRoutes = ['message', 'thread', 'threadmessage'];\n\nconst filteredRoutes = getFilteredRoutes(inboxPageStore, selectedRoutes);\n\nexport { filteredRoutes };\n"],"names":[],"mappings":"uFAGO,MAAM,iBAAiC,CAAC;AAAA,EAC7C,GAAA,EAAK,SAAA;AAAA,EACL,IAAA,EAAM,UAAA;AAAA,EACN,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,MAAM,OAAO,mCAAA,CAAA;AAAA,EACxB,KAAA,EAAO;AAAA,IACL,aAAA,EAAe;AAAA,MACb,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM,IAAA;AAAA,MACN,mBAAA,EAAqB;AAAA,KACvB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,IAAA;AAAA,MACb,KAAA,EAAO,OAAA;AAAA,MACP,sBAAA,EAAwB,KAAA;AAAA,MACxB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc;AAAA;AAChB;AAEJ,CAAA,EAAG;AAAA,EACD,GAAA,EAAK,QAAA;AAAA,EACL,IAAA,EAAM,SAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,MAAM,OAAO,kCAAA,CAAA;AAAA,EACxB,KAAA,EAAO;AAAA,IACL,aAAA,EAAe;AAAA,MACb,SAAA,EAAW,IAAA;AAAA,MACX,YAAA,EAAc,IAAA;AAAA,MACd,IAAA,EAAM;AAAA,KACR;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,IAAA;AAAA,MACb,KAAA,EAAO,QAAA;AAAA,MACP,sBAAA,EAAwB,KAAA;AAAA,MACxB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc;AAAA;AAChB;AAEJ,CAAA,EAAG;AAAA,EACD,GAAA,EAAK,eAAA;AAAA,EACL,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,eAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,MAAM,OAAO,yCAAA,CAAA;AAAA,EACxB,KAAA,EAAO;AAAA,IACL,aAAA,EAAe;AAAA,MACb,SAAA,EAAW,IAAA;AAAA,MACX,YAAA,EAAc,IAAA;AAAA,MACd,oBAAA,EAAsB,IAAA;AAAA,MACtB,IAAA,EAAM;AAAA,KACR;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,IAAA;AAAA,MACb,KAAA,EAAO,OAAA;AAAA,MACP,sBAAA,EAAwB,KAAA;AAAA,MACxB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc;AAAA;AAChB;AAEJ,CAAC;AACD,MAAM,cAAA,GAAiB,CAAC,SAAA,EAAW,QAAA,EAAU,eAAe,CAAA;AAC5D,MAAM,cAAA,GAAiB,iBAAA,CAAkB,cAAA,EAAgB,cAAc"}
1
+ {"version":3,"file":"compute.js","sources":["../src/compute.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { getFilteredRoutes } from '@common-stack/client-react/lib/utils/filteredRoutes.js';\nimport type { IRouteModule } from '@common-stack/core';\n\nexport const inboxPageStore: IRouteModule[] = [\n {\n key: 'message',\n path: '/message',\n name: 'Message',\n exact: true,\n component: () => import('./screens/inbox/DialogMessages'),\n props: {\n initialParams: { channelId: null, role: null, isShowThreadMessage: true },\n options: {\n headerShown: true,\n title: 'Inbox',\n headerBackTitleVisible: false,\n gestureEnabled: false,\n swipeEnabled: false,\n },\n },\n },\n {\n key: 'thread',\n path: '/thread',\n name: 'Thread',\n exact: true,\n component: () => import('./screens/inbox/DialogThreads'),\n props: {\n initialParams: { channelId: null, postParentId: null, role: null },\n options: {\n headerShown: true,\n title: 'Thread',\n headerBackTitleVisible: false,\n gestureEnabled: false,\n swipeEnabled: false,\n },\n },\n },\n {\n key: 'threadmessage',\n path: '/threadmessage',\n name: 'ThreadMessage',\n exact: true,\n component: () => import('./screens/inbox/DialogThreadMessages'),\n props: {\n initialParams: { channelId: null, postParentId: null, isPostParentIdThread: null, role: null },\n options: {\n headerShown: true,\n title: 'Inbox',\n headerBackTitleVisible: false,\n gestureEnabled: false,\n swipeEnabled: false,\n },\n },\n },\n];\n\nconst selectedRoutes = ['message', 'thread', 'threadmessage'];\n\nconst filteredRoutes = getFilteredRoutes(inboxPageStore, selectedRoutes);\n\nexport { filteredRoutes };\n"],"names":[],"mappings":"uFAGO,MAAM,iBAAiC,CAAC;AAAA,EAC7C,GAAA,EAAK,SAAA;AAAA,EACL,IAAA,EAAM,UAAA;AAAA,EACN,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,MAAM,OAAO,mCAAgC,CAAA;AAAA,EACxD,KAAA,EAAO;AAAA,IACL,aAAA,EAAe;AAAA,MACb,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM,IAAA;AAAA,MACN,mBAAA,EAAqB;AAAA,KACvB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,IAAA;AAAA,MACb,KAAA,EAAO,OAAA;AAAA,MACP,sBAAA,EAAwB,KAAA;AAAA,MACxB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc;AAAA;AAChB;AAEJ,CAAA,EAAG;AAAA,EACD,GAAA,EAAK,QAAA;AAAA,EACL,IAAA,EAAM,SAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,MAAM,OAAO,kCAA+B,CAAA;AAAA,EACvD,KAAA,EAAO;AAAA,IACL,aAAA,EAAe;AAAA,MACb,SAAA,EAAW,IAAA;AAAA,MACX,YAAA,EAAc,IAAA;AAAA,MACd,IAAA,EAAM;AAAA,KACR;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,IAAA;AAAA,MACb,KAAA,EAAO,QAAA;AAAA,MACP,sBAAA,EAAwB,KAAA;AAAA,MACxB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc;AAAA;AAChB;AAEJ,CAAA,EAAG;AAAA,EACD,GAAA,EAAK,eAAA;AAAA,EACL,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,eAAA;AAAA,EACN,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,MAAM,OAAO,yCAAsC,CAAA;AAAA,EAC9D,KAAA,EAAO;AAAA,IACL,aAAA,EAAe;AAAA,MACb,SAAA,EAAW,IAAA;AAAA,MACX,YAAA,EAAc,IAAA;AAAA,MACd,oBAAA,EAAsB,IAAA;AAAA,MACtB,IAAA,EAAM;AAAA,KACR;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,IAAA;AAAA,MACb,KAAA,EAAO,OAAA;AAAA,MACP,sBAAA,EAAwB,KAAA;AAAA,MACxB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc;AAAA;AAChB;AAEJ,CAAC;AACD,MAAM,cAAA,GAAiB,CAAC,SAAA,EAAW,QAAA,EAAU,eAAe,CAAA;AAC5D,MAAM,cAAA,GAAiB,iBAAA,CAAkB,cAAA,EAAgB,cAAc"}
@@ -43,5 +43,8 @@ function DialogMessages(_a) {
43
43
  ]);
44
44
  var _a2, _b2, _c;
45
45
  const currentRoute = navigationRef.isReady() ? (_a2 = navigationRef) == null ? void 0 : _a2.getCurrentRoute() : null;
46
- return /* @__PURE__ */ React.createElement(Box, { className: "bg-white flex-1" }, /* @__PURE__ */ React.createElement(ConversationView, __spreadProps(__spreadValues({}, rest), { channelId: (_c = (_b2 = currentRoute == null ? void 0 : currentRoute.params) == null ? void 0 : _b2.channelId) != null ? _c : channelId, role, isShowThreadMessage, isPaymentChatUI })));
46
+ return (
47
+ // <Box bg={'white'} flex={1} pt={5}>
48
+ /* @__PURE__ */ React.createElement(Box, { className: "bg-white flex-1" }, /* @__PURE__ */ React.createElement(ConversationView, __spreadProps(__spreadValues({}, rest), { channelId: (_c = (_b2 = currentRoute == null ? void 0 : currentRoute.params) == null ? void 0 : _b2.channelId) != null ? _c : channelId, role, isShowThreadMessage, isPaymentChatUI })))
49
+ );
47
50
  }export{DialogMessages,DialogMessages as default};//# sourceMappingURL=DialogMessages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DialogMessages.js","sources":["../../../src/screens/inbox/DialogMessages.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Box } from '@admin-layout/gluestack-ui-mobile';\nimport { ConversationView } from './containers/ConversationView';\nimport { navigationRef } from '@common-stack/client-react';\n\nexport function DialogMessages({ channelId, role, isShowThreadMessage = true, isPaymentChatUI = false, ...rest }) {\n const currentRoute = navigationRef.isReady() ? navigationRef?.getCurrentRoute() : null;\n return (\n // <Box bg={'white'} flex={1} pt={5}>\n <Box className=\"bg-white flex-1\">\n <ConversationView\n {...rest}\n channelId={currentRoute?.params?.channelId ?? channelId}\n role={role}\n isShowThreadMessage={isShowThreadMessage}\n isPaymentChatUI={isPaymentChatUI}\n />\n </Box>\n );\n}\n\nexport default DialogMessages;\n"],"names":["_a","_b"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,SAAS,eAAe,EAAA,EAM5B;AAN4B,EAAA,IAAA,EAAA,GAAA,EAAA,EAC7B;AAAA,IAAA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,mBAAA,GAAsB,IAAA;AAAA,IACtB,eAAA,GAAkB;AAAA,GARpB,GAI+B,EAAA,EAK1B,IAAA,GAAA,SAAA,CAL0B,EAAA,EAK1B;AAAA,IAJH,WAAA;AAAA,IACA,MAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GAAA,CAAA;AARF,EAAA,IAAAA,KAAAC,GAAAA,EAAA,EAAA;AAWE,EAAA,MAAM,eAAe,aAAA,CAAc,OAAA,MAAYD,GAAAA,GAAA,aAAA,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAe,eAAA,EAAA,GAAoB,IAAA;AAClF,EAAA,uBAEE,KAAA,CAAA,aAAA,CAAC,OAAI,SAAA,EAAU,iBAAA,EAAA,sCACN,gBAAA,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAqB,IAAA,CAAA,EAArB,EAA2B,SAAA,EAAA,CAAW,EAAA,GAAA,CAAAC,MAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,MAAA,KAAd,gBAAAA,GAAAA,CAAsB,SAAA,KAAtB,YAAmC,SAAA,EAAW,IAAA,EAAY,mBAAA,EAA0C,eAAA,EAAA,CAAkC,CACjL,CAAA;AAER"}
1
+ {"version":3,"file":"DialogMessages.js","sources":["../../../src/screens/inbox/DialogMessages.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Box } from '@admin-layout/gluestack-ui-mobile';\nimport { ConversationView } from './containers/ConversationView';\nimport { navigationRef } from '@common-stack/client-react';\n\nexport function DialogMessages({ channelId, role, isShowThreadMessage = true, isPaymentChatUI = false, ...rest }) {\n const currentRoute = navigationRef.isReady() ? navigationRef?.getCurrentRoute() : null;\n return (\n // <Box bg={'white'} flex={1} pt={5}>\n <Box className=\"bg-white flex-1\">\n <ConversationView\n {...rest}\n channelId={currentRoute?.params?.channelId ?? channelId}\n role={role}\n isShowThreadMessage={isShowThreadMessage}\n isPaymentChatUI={isPaymentChatUI}\n />\n </Box>\n );\n}\n\nexport default DialogMessages;\n"],"names":["_a","_b"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,SAAS,eAAe,EAAA,EAM5B;AAN4B,EAAA,IAAA,EAAA,GAAA,EAAA,EAC7B;AAAA,IAAA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,mBAAA,GAAsB,IAAA;AAAA,IACtB,eAAA,GAAkB;AAAA,GARpB,GAI+B,EAAA,EAK1B,IAAA,GAAA,SAAA,CAL0B,EAAA,EAK1B;AAAA,IAJH,WAAA;AAAA,IACA,MAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GAAA,CAAA;AARF,EAAA,IAAAA,KAAAC,GAAAA,EAAA,EAAA;AAWE,EAAA,MAAM,eAAe,aAAA,CAAc,OAAA,MAAYD,GAAAA,GAAA,aAAA,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAe,eAAA,EAAA,GAAoB,IAAA;AAClF,EAAA;AAAA;AAAA,oBAEE,KAAA,CAAA,aAAA,CAAC,OAAI,SAAA,EAAU,iBAAA,EAAA,sCACN,gBAAA,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAqB,IAAA,CAAA,EAArB,EAA2B,SAAA,EAAA,CAAW,EAAA,GAAA,CAAAC,MAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,MAAA,KAAd,gBAAAA,GAAAA,CAAsB,SAAA,KAAtB,YAAmC,SAAA,EAAW,IAAA,EAAY,mBAAA,EAA0C,eAAA,EAAA,CAAkC,CACjL;AAAA;AAER"}
@@ -19,10 +19,9 @@ import*as React from'react';import {Box,Spinner}from'@admin-layout/gluestack-ui-
19
19
  });
20
20
  }, [channelId]);
21
21
  useFocusEffect(React.useCallback(() => {
22
- if (channelId)
23
- refetch({
24
- id: channelId == null ? void 0 : channelId.toString()
25
- });
22
+ if (channelId) refetch({
23
+ id: channelId == null ? void 0 : channelId.toString()
24
+ });
26
25
  return () => {
27
26
  };
28
27
  }, [channelId]));
@@ -1 +1 @@
1
- {"version":3,"file":"DialogThreadMessages.js","sources":["../../../src/screens/inbox/DialogThreadMessages.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Box, Spinner, Text } from '@admin-layout/gluestack-ui-mobile';\nimport { ThreadConversationView } from './containers/ThreadConversationView';\nimport { ThreadsView } from './containers/ThreadsView';\nimport { useChannelDetailQuery, useSendThreadMessage } from '../../queries/inboxQueries';\nimport { useFocusEffect } from '@react-navigation/native';\n// import { useSelector } from 'react-redux';\nimport colors from 'tailwindcss/colors';\n\nexport function DialogThreadMessages({ channelId, postParentId, isPostParentIdThread, role }) {\n const { data, loading: channelLoading, refetch } = useChannelDetailQuery(channelId?.toString(), {});\n\n const [sendThreadMessage] = useSendThreadMessage();\n const [loading, setLoading] = React.useState<boolean>(true);\n const [channel, setChannel] = React.useState<any>(null);\n const [parentId, setParentId] = React.useState<any>(postParentId);\n\n const refetchChannelDetail = React.useCallback(\n (id: string) => {\n return refetch({ id: id?.toString() });\n },\n [channelId],\n );\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n if (channelId) refetch({ id: channelId?.toString() });\n return () => {};\n }, [channelId]),\n );\n\n React.useEffect(() => {\n setParentId(postParentId);\n }, [postParentId]);\n\n React.useEffect(() => {\n if (data?.viewChannelDetail) {\n setChannel(data?.viewChannelDetail);\n setLoading(false);\n }\n }, [data]);\n\n // React.useEffect(() => {\n // async function sendInitialMessage(channel: any) {\n // const content = `Welcome to ${channel?.title}`;\n // const createdBy = channel?.creator?.id;\n // await sendThreadMessage({\n // variables: {\n // channelId,\n // threadMessageInput: {\n // content,\n // role,\n // },\n // responderId: createdBy,\n // },\n // update: (cache, { data, errors }: any) => {\n // if (!data) {\n // return;\n // }\n // setParentId(data?.sendThreadMessage?.lastMessage?.id);\n // },\n // });\n // }\n // if ((!parentId || parentId == 0) && channel) {\n // sendInitialMessage(channel);\n // }\n\n // if (parentId) setLoading(false);\n // }, [parentId, channel]);\n\n return (\n <Box className=\"bg-white flex-1\">\n {/* {loading && !parentId ? ( */}\n {loading ? (\n <Spinner color={colors.blue[500]} />\n ) : (\n <ThreadConversationView\n channelId={channelId}\n postParentId={parentId}\n isPostParentIdThread={isPostParentIdThread}\n role={role}\n />\n )}\n </Box>\n );\n}\n\nexport default DialogThreadMessages;\n"],"names":[],"mappings":"wVAQO,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA,EAAG;AACD,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,OAAA,EAAS,cAAA;AAAA,IACT;AAAA,GACF,GAAI,qBAAA,CAAsB,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,QAAA,EAAA,EAAY,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,iBAAiB,CAAA,GAAI,oBAAA,EAAqB;AACjD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,KAAA,CAAM,SAAkB,IAAI,CAAA;AAC1D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,KAAA,CAAM,SAAc,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,KAAA,CAAM,SAAc,YAAY,CAAA;AAChE,EAA6B,KAAA,CAAM,WAAA,CAAY,CAAC,EAAA,KAAe;AAC7D,IAAA,OAAO,OAAA,CAAQ;AAAA,MACb,IAAI,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAI,QAAA;AAAA,KACT,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,SAAS,CAAC;AACd,EAAA,cAAA,CAAe,KAAA,CAAM,YAAY,MAAM;AAErC,IAAA,IAAI,SAAA;AAAW,MAAA,OAAA,CAAQ;AAAA,QACrB,IAAI,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,QAAA;AAAA,OAChB,CAAA;AACD,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB,CAAA,EAAG,CAAC,SAAS,CAAC,CAAC,CAAA;AACf,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,WAAA,CAAY,YAAY,CAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AACjB,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,6BAAM,iBAAA,EAAmB;AAC3B,MAAA,UAAA,CAAW,6BAAM,iBAAiB,CAAA;AAClC,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AA8BT,EAAA,2CAAQ,GAAA,EAAA,EAAI,SAAA,EAAU,qBAEX,OAAA,mBAAU,KAAA,CAAA,aAAA,CAAC,WAAQ,KAAA,EAAO,MAAA,CAAO,KAAK,GAAA,CAAA,EAAM,CAAA,uCAAM,sBAAA,EAAA,EAAuB,SAAA,EAAsB,cAAc,QAAA,EAAU,oBAAA,EAA4C,MAAY,CACpL,CAAA;AACR"}
1
+ {"version":3,"file":"DialogThreadMessages.js","sources":["../../../src/screens/inbox/DialogThreadMessages.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Box, Spinner, Text } from '@admin-layout/gluestack-ui-mobile';\nimport { ThreadConversationView } from './containers/ThreadConversationView';\nimport { ThreadsView } from './containers/ThreadsView';\nimport { useChannelDetailQuery, useSendThreadMessage } from '../../queries/inboxQueries';\nimport { useFocusEffect } from '@react-navigation/native';\n// import { useSelector } from 'react-redux';\nimport colors from 'tailwindcss/colors';\n\nexport function DialogThreadMessages({ channelId, postParentId, isPostParentIdThread, role }) {\n const { data, loading: channelLoading, refetch } = useChannelDetailQuery(channelId?.toString(), {});\n\n const [sendThreadMessage] = useSendThreadMessage();\n const [loading, setLoading] = React.useState<boolean>(true);\n const [channel, setChannel] = React.useState<any>(null);\n const [parentId, setParentId] = React.useState<any>(postParentId);\n\n const refetchChannelDetail = React.useCallback(\n (id: string) => {\n return refetch({ id: id?.toString() });\n },\n [channelId],\n );\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n if (channelId) refetch({ id: channelId?.toString() });\n return () => {};\n }, [channelId]),\n );\n\n React.useEffect(() => {\n setParentId(postParentId);\n }, [postParentId]);\n\n React.useEffect(() => {\n if (data?.viewChannelDetail) {\n setChannel(data?.viewChannelDetail);\n setLoading(false);\n }\n }, [data]);\n\n // React.useEffect(() => {\n // async function sendInitialMessage(channel: any) {\n // const content = `Welcome to ${channel?.title}`;\n // const createdBy = channel?.creator?.id;\n // await sendThreadMessage({\n // variables: {\n // channelId,\n // threadMessageInput: {\n // content,\n // role,\n // },\n // responderId: createdBy,\n // },\n // update: (cache, { data, errors }: any) => {\n // if (!data) {\n // return;\n // }\n // setParentId(data?.sendThreadMessage?.lastMessage?.id);\n // },\n // });\n // }\n // if ((!parentId || parentId == 0) && channel) {\n // sendInitialMessage(channel);\n // }\n\n // if (parentId) setLoading(false);\n // }, [parentId, channel]);\n\n return (\n <Box className=\"bg-white flex-1\">\n {/* {loading && !parentId ? ( */}\n {loading ? (\n <Spinner color={colors.blue[500]} />\n ) : (\n <ThreadConversationView\n channelId={channelId}\n postParentId={parentId}\n isPostParentIdThread={isPostParentIdThread}\n role={role}\n />\n )}\n </Box>\n );\n}\n\nexport default DialogThreadMessages;\n"],"names":[],"mappings":"wVAQO,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA,EAAG;AACD,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,OAAA,EAAS,cAAA;AAAA,IACT;AAAA,GACF,GAAI,qBAAA,CAAsB,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,QAAA,EAAA,EAAY,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,iBAAiB,CAAA,GAAI,oBAAA,EAAqB;AACjD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,KAAA,CAAM,SAAkB,IAAI,CAAA;AAC1D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,KAAA,CAAM,SAAc,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,KAAA,CAAM,SAAc,YAAY,CAAA;AAChE,EAA6B,KAAA,CAAM,WAAA,CAAY,CAAC,EAAA,KAAe;AAC7D,IAAA,OAAO,OAAA,CAAQ;AAAA,MACb,IAAI,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAI,QAAA;AAAA,KACT,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,SAAS,CAAC;AACd,EAAA,cAAA,CAAe,KAAA,CAAM,YAAY,MAAM;AAErC,IAAA,IAAI,WAAW,OAAA,CAAQ;AAAA,MACrB,IAAI,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,QAAA;AAAA,KAChB,CAAA;AACD,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB,CAAA,EAAG,CAAC,SAAS,CAAC,CAAC,CAAA;AACf,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,WAAA,CAAY,YAAY,CAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AACjB,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,6BAAM,iBAAA,EAAmB;AAC3B,MAAA,UAAA,CAAW,6BAAM,iBAAiB,CAAA;AAClC,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AA8BT,EAAA,uBAAO,KAAA,CAAA,aAAA,CAAC,OAAI,SAAA,EAAU,iBAAA,EAAA,EAEX,0BAAU,KAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAQ,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAG,CAAA,uCAAM,sBAAA,EAAA,EAAuB,SAAA,EAAsB,cAAc,QAAA,EAAU,oBAAA,EAA4C,MAAY,CACpL,CAAA;AACR"}
@@ -85,8 +85,7 @@ function DialogThreads({
85
85
  });
86
86
  }, [channelId]);
87
87
  useFocusEffect(React.useCallback(() => {
88
- if (channelId)
89
- refetchChannelDetail(channelId);
88
+ if (channelId) refetchChannelDetail(channelId);
90
89
  return () => {
91
90
  };
92
91
  }, []));
@@ -1 +1 @@
1
- {"version":3,"file":"DialogThreads.js","sources":["../../../src/screens/inbox/DialogThreads.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Box, Spinner, Text } from '@admin-layout/gluestack-ui-mobile';\nimport { ThreadConversationView } from './containers/ThreadConversationView';\nimport { ThreadsView } from './containers/ThreadsView';\nimport { useChannelDetailQuery, useThreadMessagesQueryWithOptions } from '../../queries/inboxQueries';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { useSelector } from 'react-redux';\nimport { config } from './config';\nimport colors from 'tailwindcss/colors';\nimport { useSafeDialogThreadsMachine } from './hooks/useSafeDialogThreadsMachine';\nimport { Actions, BaseState } from './workflow/dialog-threads-xstate';\nconst { MESSAGES_PER_PAGE } = config;\n\nexport function DialogThreads({ channelId, postParentId, role }) {\n // Use the XState machine for state management\n const [state, send] = useSafeDialogThreadsMachine();\n const { context, value } = state;\n const { channelsDetail, loading, error } = context;\n\n // Fetch channel details\n const {\n data: channelData,\n loading: channelLoading,\n refetch: channelRefetch,\n } = useChannelDetailQuery(channelId?.toString(), {});\n\n // Fetch thread messages\n const {\n data: threadsData,\n loading: threadLoading,\n error: threadsError,\n refetch: threadsRefetch,\n subscribeToMore: threadsSubscribeToMore,\n } = useThreadMessagesQueryWithOptions({\n variables: {\n channelId: channelId?.toString(),\n role: role?.toString(),\n limit: MESSAGES_PER_PAGE,\n repliesLimit2: 5,\n },\n });\n console.log('threadsData', threadsData?.threadMessages?.totalCount);\n console.log('channelid', channelId);\n // Initialize the machine with props\n React.useEffect(() => {\n send({\n type: Actions.INITIALIZE,\n data: { channelId, postParentId, role },\n });\n }, [channelId, postParentId, role]);\n\n // Update channel detail in state when data changes\n React.useEffect(() => {\n if (channelData?.viewChannelDetail) {\n send({\n type: Actions.SET_CHANNEL_DETAIL,\n data: { channelsDetail: channelData.viewChannelDetail },\n });\n }\n }, [channelData]);\n\n // Update thread data in state when data changes\n React.useEffect(() => {\n if (threadsData) {\n send({\n type: Actions.SET_THREADS,\n data: { threadData: threadsData?.threadMessages?.data || [] },\n });\n }\n }, [threadsData]);\n\n // Handle errors\n React.useEffect(() => {\n if (threadsError) {\n send({\n type: Actions.ERROR,\n data: { error: threadsError },\n });\n }\n }, [threadsError]);\n\n const refetchChannelDetail = React.useCallback(\n (id: string) => {\n return channelRefetch({ id: id?.toString() });\n },\n [channelId],\n );\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n if (channelId) refetchChannelDetail(channelId);\n return () => {};\n }, []),\n );\n\n return (\n <>\n {state.matches(BaseState.LoadingChannel) || channelLoading ? (\n <Spinner color={colors.blue[500]} />\n ) : (\n <>\n <Box className=\"flex-1 bg-gray-200 dark:border-gray-500 dark:bg-gray-500\">\n <ThreadsView\n data={threadsData}\n loading={threadLoading || state.matches(BaseState.LoadingThreads)}\n refetch={threadsRefetch}\n subscribeToMore={threadsSubscribeToMore}\n error={error || threadsError}\n channelId={channelId}\n role={role}\n channelsDetail={channelsDetail}\n refetchChannelDetail={refetchChannelDetail}\n />\n </Box>\n </>\n )}\n </>\n );\n}\n\nexport default DialogThreads;\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"DialogThreads.js","sources":["../../../src/screens/inbox/DialogThreads.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Box, Spinner, Text } from '@admin-layout/gluestack-ui-mobile';\nimport { ThreadConversationView } from './containers/ThreadConversationView';\nimport { ThreadsView } from './containers/ThreadsView';\nimport { useChannelDetailQuery, useThreadMessagesQueryWithOptions } from '../../queries/inboxQueries';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { useSelector } from 'react-redux';\nimport { config } from './config';\nimport colors from 'tailwindcss/colors';\nimport { useSafeDialogThreadsMachine } from './hooks/useSafeDialogThreadsMachine';\nimport { Actions, BaseState } from './workflow/dialog-threads-xstate';\nconst { MESSAGES_PER_PAGE } = config;\n\nexport function DialogThreads({ channelId, postParentId, role }) {\n // Use the XState machine for state management\n const [state, send] = useSafeDialogThreadsMachine();\n const { context, value } = state;\n const { channelsDetail, loading, error } = context;\n\n // Fetch channel details\n const {\n data: channelData,\n loading: channelLoading,\n refetch: channelRefetch,\n } = useChannelDetailQuery(channelId?.toString(), {});\n\n // Fetch thread messages\n const {\n data: threadsData,\n loading: threadLoading,\n error: threadsError,\n refetch: threadsRefetch,\n subscribeToMore: threadsSubscribeToMore,\n } = useThreadMessagesQueryWithOptions({\n variables: {\n channelId: channelId?.toString(),\n role: role?.toString(),\n limit: MESSAGES_PER_PAGE,\n repliesLimit2: 5,\n },\n });\n console.log('threadsData', threadsData?.threadMessages?.totalCount);\n console.log('channelid', channelId);\n // Initialize the machine with props\n React.useEffect(() => {\n send({\n type: Actions.INITIALIZE,\n data: { channelId, postParentId, role },\n });\n }, [channelId, postParentId, role]);\n\n // Update channel detail in state when data changes\n React.useEffect(() => {\n if (channelData?.viewChannelDetail) {\n send({\n type: Actions.SET_CHANNEL_DETAIL,\n data: { channelsDetail: channelData.viewChannelDetail },\n });\n }\n }, [channelData]);\n\n // Update thread data in state when data changes\n React.useEffect(() => {\n if (threadsData) {\n send({\n type: Actions.SET_THREADS,\n data: { threadData: threadsData?.threadMessages?.data || [] },\n });\n }\n }, [threadsData]);\n\n // Handle errors\n React.useEffect(() => {\n if (threadsError) {\n send({\n type: Actions.ERROR,\n data: { error: threadsError },\n });\n }\n }, [threadsError]);\n\n const refetchChannelDetail = React.useCallback(\n (id: string) => {\n return channelRefetch({ id: id?.toString() });\n },\n [channelId],\n );\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n if (channelId) refetchChannelDetail(channelId);\n return () => {};\n }, []),\n );\n\n return (\n <>\n {state.matches(BaseState.LoadingChannel) || channelLoading ? (\n <Spinner color={colors.blue[500]} />\n ) : (\n <>\n <Box className=\"flex-1 bg-gray-200 dark:border-gray-500 dark:bg-gray-500\">\n <ThreadsView\n data={threadsData}\n loading={threadLoading || state.matches(BaseState.LoadingThreads)}\n refetch={threadsRefetch}\n subscribeToMore={threadsSubscribeToMore}\n error={error || threadsError}\n channelId={channelId}\n role={role}\n channelsDetail={channelsDetail}\n refetchChannelDetail={refetchChannelDetail}\n />\n </Box>\n </>\n )}\n </>\n );\n}\n\nexport default DialogThreads;\n"],"names":["_a"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"consts.js","sources":["../../../../../src/screens/inbox/components/CachedImage/consts.ts"],"sourcesContent":["import * as FileSystem from 'expo-file-system';\n\n// Make sure cache directory path ends with a slash\nexport const IMAGE_CACHE_FOLDER = `${FileSystem.cacheDirectory}/image-cache/`;\n// export const IMAGE_CACHE_FOLDER = `${FileSystem.documentDirectory}images/`\nexport default IMAGE_CACHE_FOLDER;\n"],"names":[],"mappings":"4CAGO,MAAM,kBAAA,GAAqB,GAAG,UAAA,CAAW,cAAA,CAAA,aAAA"}
1
+ {"version":3,"file":"consts.js","sources":["../../../../../src/screens/inbox/components/CachedImage/consts.ts"],"sourcesContent":["import * as FileSystem from 'expo-file-system';\n\n// Make sure cache directory path ends with a slash\nexport const IMAGE_CACHE_FOLDER = `${FileSystem.cacheDirectory}/image-cache/`;\n// export const IMAGE_CACHE_FOLDER = `${FileSystem.documentDirectory}images/`\nexport default IMAGE_CACHE_FOLDER;\n"],"names":[],"mappings":"4CAGO,MAAM,kBAAA,GAAqB,CAAA,EAAG,UAAA,CAAW,cAAc,CAAA,aAAA"}
@@ -44,8 +44,7 @@ const ensureCacheDirectory = async () => {
44
44
  }
45
45
  };
46
46
  const validateImageUri = (uri) => {
47
- if (!uri)
48
- return null;
47
+ if (!uri) return null;
49
48
  uri = uri.trim();
50
49
  try {
51
50
  new URL(uri);
@@ -98,8 +97,7 @@ const CachedImage = React__default.memo((props) => {
98
97
  }, [fileURI, cacheKey]);
99
98
  const downloadResumableRef = useRef(uri ? FileSystem.createDownloadResumable(uri, fileURI, requestOption, downloadCallback) : null);
100
99
  const loadImage = useCallback(async () => {
101
- if (!uri || hasAttemptedLoad.current)
102
- return;
100
+ if (!uri || hasAttemptedLoad.current) return;
103
101
  hasAttemptedLoad.current = true;
104
102
  setIsLoading(true);
105
103
  try {
@@ -112,10 +110,9 @@ const CachedImage = React__default.memo((props) => {
112
110
  return;
113
111
  }
114
112
  const metadata = await FileSystem.getInfoAsync(fileURI);
115
- const expired = expiresIn && new Date().getTime() / 1e3 - (metadata == null ? void 0 : metadata.modificationTime) > expiresIn;
113
+ const expired = expiresIn && (/* @__PURE__ */ new Date()).getTime() / 1e3 - (metadata == null ? void 0 : metadata.modificationTime) > expiresIn;
116
114
  if (!metadata.exists || (metadata == null ? void 0 : metadata.size) === 0 || expired) {
117
- if (!componentIsMounted.current)
118
- return;
115
+ if (!componentIsMounted.current) return;
119
116
  if (expired && metadata.exists) {
120
117
  await FileSystem.deleteAsync(fileURI, {
121
118
  idempotent: true
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/screens/inbox/components/CachedImage/index.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef, useMemo, useCallback } from 'react';\nimport { Image, View, Text } from 'react-native';\n// import { Image } from \"react-native\"\nimport * as FileSystem from 'expo-file-system';\n\nimport * as CONST from './consts';\n\n// Global download tracking to prevent duplicate downloads\nconst downloadTracker = new Map();\n\n// Ensure the cache directory exists\nconst ensureCacheDirectory = async () => {\n try {\n const dirInfo = await FileSystem.getInfoAsync(CONST.IMAGE_CACHE_FOLDER);\n if (!dirInfo.exists) {\n // console.log('Creating cache directory:', CONST.IMAGE_CACHE_FOLDER);\n await FileSystem.makeDirectoryAsync(CONST.IMAGE_CACHE_FOLDER, { intermediates: true });\n }\n return true;\n } catch (error) {\n // console.error('Failed to create cache directory:', error);\n return false;\n }\n};\n\n// Validate and sanitize the image URL\nconst validateImageUri = (uri: string): string | null => {\n if (!uri) return null;\n\n // Trim whitespace\n uri = uri.trim();\n\n // Check if it's a valid URL format\n try {\n new URL(uri);\n } catch (e) {\n // console.log('Invalid URL format:', uri);\n return null;\n }\n\n // Add more validation as needed for your specific case\n return uri;\n};\n\nconst CachedImage = React.memo(\n (props: any) => {\n const { source, cacheKey, placeholderContent, style, resizeMode, alt, ...restProps } = props;\n const { uri: originalUri, headers, expiresIn = 86400 } = source;\n\n // Validate and sanitize the URI\n const uri = validateImageUri(originalUri);\n const fileURI = `${CONST.IMAGE_CACHE_FOLDER}${cacheKey}`;\n\n const [imgUri, setImgUri] = useState<string | null>(null);\n const [loadError, setLoadError] = useState<boolean>(false);\n const [useFallbackUri, setUseFallbackUri] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n\n const componentIsMounted = useRef(true);\n const hasAttemptedLoad = useRef(false);\n const requestOption = headers ? { headers } : {};\n\n // Create a memoized download callback\n const downloadCallback = useCallback(\n (downloadProgress: any) => {\n if (componentIsMounted.current === false) {\n downloadTracker.delete(cacheKey);\n downloadResumableRef.current?.pauseAsync();\n FileSystem.deleteAsync(fileURI, { idempotent: true });\n }\n },\n [fileURI, cacheKey],\n );\n\n // Create a memoized download resumable\n const downloadResumableRef = useRef(\n uri ? FileSystem.createDownloadResumable(uri, fileURI, requestOption, downloadCallback) : null,\n );\n\n // Memoized load image function to avoid recreating on every render\n const loadImage = useCallback(async () => {\n if (!uri || hasAttemptedLoad.current) return;\n\n hasAttemptedLoad.current = true;\n setIsLoading(true);\n\n try {\n // Check if this image is already being downloaded\n if (downloadTracker.has(cacheKey)) {\n // Wait for the existing download to complete\n await downloadTracker.get(cacheKey);\n if (componentIsMounted.current) {\n setImgUri(fileURI);\n setIsLoading(false);\n }\n return;\n }\n\n // Use the cached image if it exists\n const metadata: any = await FileSystem.getInfoAsync(fileURI);\n const expired = expiresIn && new Date().getTime() / 1000 - metadata?.modificationTime > expiresIn;\n\n if (!metadata.exists || metadata?.size === 0 || expired) {\n if (!componentIsMounted.current) return;\n\n if (expired && metadata.exists) {\n await FileSystem.deleteAsync(fileURI, { idempotent: true });\n }\n\n if (!uri) {\n setLoadError(true);\n setIsLoading(false);\n return;\n }\n\n if (!downloadResumableRef.current) {\n setUseFallbackUri(true);\n setImgUri(uri);\n setIsLoading(false);\n return;\n }\n\n try {\n // Record this download in the global tracker\n const downloadPromise = downloadResumableRef.current.downloadAsync();\n downloadTracker.set(cacheKey, downloadPromise);\n\n const response: any = await downloadPromise;\n\n // Remove from tracker when done\n downloadTracker.delete(cacheKey);\n\n if (componentIsMounted.current) {\n if (response && response.status === 200) {\n setImgUri(fileURI);\n } else {\n setUseFallbackUri(true);\n setImgUri(uri);\n FileSystem.deleteAsync(fileURI, { idempotent: true });\n }\n setIsLoading(false);\n }\n } catch (downloadError) {\n downloadTracker.delete(cacheKey);\n if (componentIsMounted.current) {\n setUseFallbackUri(true);\n setImgUri(uri);\n setIsLoading(false);\n }\n }\n } else {\n // Use cached version\n setImgUri(fileURI);\n setIsLoading(false);\n }\n } catch (err) {\n if (componentIsMounted.current) {\n setUseFallbackUri(true);\n setImgUri(uri);\n setIsLoading(false);\n }\n }\n }, [uri, fileURI, cacheKey, expiresIn]);\n\n // Setup effect\n useEffect(() => {\n const setup = async () => {\n const directoryExists = await ensureCacheDirectory();\n if (directoryExists && uri) {\n loadImage();\n } else {\n setLoadError(true);\n setIsLoading(false);\n }\n };\n\n setup();\n\n return () => {\n componentIsMounted.current = false;\n };\n }, [uri, loadImage]);\n\n // Default placeholder\n const defaultPlaceholder = useMemo(\n () => (\n <View\n style={[\n {\n width: '100%',\n height: '100%',\n backgroundColor: '#e1e1e1',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: 3,\n },\n style,\n ]}\n >\n <Text>Image not available</Text>\n </View>\n ),\n [style],\n );\n\n // Show placeholder while loading or if there's an error\n if (isLoading || loadError || !imgUri) {\n return placeholderContent || defaultPlaceholder;\n }\n\n // Actual image component\n return (\n <Image\n {...restProps}\n style={style}\n source={{\n ...source,\n uri: useFallbackUri ? uri : imgUri,\n }}\n resizeMode={resizeMode}\n onError={(e) => {\n if (useFallbackUri) {\n setLoadError(true);\n setImgUri(null);\n } else {\n setUseFallbackUri(true);\n setImgUri(uri);\n }\n }}\n />\n );\n },\n (prevProps, nextProps) => {\n // Custom comparison function for memoization\n return (\n prevProps.cacheKey === nextProps.cacheKey &&\n prevProps.source.uri === nextProps.source.uri &&\n prevProps.style === nextProps.style\n );\n },\n);\n\nexport const CacheManager = {\n addToCache: async ({ file, key }: any) => {\n await ensureCacheDirectory();\n await FileSystem.copyAsync({\n from: file,\n to: `${CONST.IMAGE_CACHE_FOLDER}${key}`,\n });\n const uri = await CacheManager.getCachedUri({ key });\n return uri;\n },\n\n getCachedUri: async ({ key }: any) => {\n const uri = await FileSystem.getContentUriAsync(`${CONST.IMAGE_CACHE_FOLDER}${key}`);\n return uri;\n },\n\n downloadAsync: async ({ uri, key, options }: any) => {\n await ensureCacheDirectory();\n return await FileSystem.downloadAsync(uri, `${CONST.IMAGE_CACHE_FOLDER}${key}`, options);\n },\n\n clearCache: async () => {\n try {\n await FileSystem.deleteAsync(CONST.IMAGE_CACHE_FOLDER, { idempotent: true });\n await ensureCacheDirectory();\n } catch (error) {\n console.error('Error clearing cache:', error);\n }\n },\n};\n\nexport default CachedImage;\n"],"names":["CONST.IMAGE_CACHE_FOLDER","React","_a"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/screens/inbox/components/CachedImage/index.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef, useMemo, useCallback } from 'react';\nimport { Image, View, Text } from 'react-native';\n// import { Image } from \"react-native\"\nimport * as FileSystem from 'expo-file-system';\n\nimport * as CONST from './consts';\n\n// Global download tracking to prevent duplicate downloads\nconst downloadTracker = new Map();\n\n// Ensure the cache directory exists\nconst ensureCacheDirectory = async () => {\n try {\n const dirInfo = await FileSystem.getInfoAsync(CONST.IMAGE_CACHE_FOLDER);\n if (!dirInfo.exists) {\n // console.log('Creating cache directory:', CONST.IMAGE_CACHE_FOLDER);\n await FileSystem.makeDirectoryAsync(CONST.IMAGE_CACHE_FOLDER, { intermediates: true });\n }\n return true;\n } catch (error) {\n // console.error('Failed to create cache directory:', error);\n return false;\n }\n};\n\n// Validate and sanitize the image URL\nconst validateImageUri = (uri: string): string | null => {\n if (!uri) return null;\n\n // Trim whitespace\n uri = uri.trim();\n\n // Check if it's a valid URL format\n try {\n new URL(uri);\n } catch (e) {\n // console.log('Invalid URL format:', uri);\n return null;\n }\n\n // Add more validation as needed for your specific case\n return uri;\n};\n\nconst CachedImage = React.memo(\n (props: any) => {\n const { source, cacheKey, placeholderContent, style, resizeMode, alt, ...restProps } = props;\n const { uri: originalUri, headers, expiresIn = 86400 } = source;\n\n // Validate and sanitize the URI\n const uri = validateImageUri(originalUri);\n const fileURI = `${CONST.IMAGE_CACHE_FOLDER}${cacheKey}`;\n\n const [imgUri, setImgUri] = useState<string | null>(null);\n const [loadError, setLoadError] = useState<boolean>(false);\n const [useFallbackUri, setUseFallbackUri] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n\n const componentIsMounted = useRef(true);\n const hasAttemptedLoad = useRef(false);\n const requestOption = headers ? { headers } : {};\n\n // Create a memoized download callback\n const downloadCallback = useCallback(\n (downloadProgress: any) => {\n if (componentIsMounted.current === false) {\n downloadTracker.delete(cacheKey);\n downloadResumableRef.current?.pauseAsync();\n FileSystem.deleteAsync(fileURI, { idempotent: true });\n }\n },\n [fileURI, cacheKey],\n );\n\n // Create a memoized download resumable\n const downloadResumableRef = useRef(\n uri ? FileSystem.createDownloadResumable(uri, fileURI, requestOption, downloadCallback) : null,\n );\n\n // Memoized load image function to avoid recreating on every render\n const loadImage = useCallback(async () => {\n if (!uri || hasAttemptedLoad.current) return;\n\n hasAttemptedLoad.current = true;\n setIsLoading(true);\n\n try {\n // Check if this image is already being downloaded\n if (downloadTracker.has(cacheKey)) {\n // Wait for the existing download to complete\n await downloadTracker.get(cacheKey);\n if (componentIsMounted.current) {\n setImgUri(fileURI);\n setIsLoading(false);\n }\n return;\n }\n\n // Use the cached image if it exists\n const metadata: any = await FileSystem.getInfoAsync(fileURI);\n const expired = expiresIn && new Date().getTime() / 1000 - metadata?.modificationTime > expiresIn;\n\n if (!metadata.exists || metadata?.size === 0 || expired) {\n if (!componentIsMounted.current) return;\n\n if (expired && metadata.exists) {\n await FileSystem.deleteAsync(fileURI, { idempotent: true });\n }\n\n if (!uri) {\n setLoadError(true);\n setIsLoading(false);\n return;\n }\n\n if (!downloadResumableRef.current) {\n setUseFallbackUri(true);\n setImgUri(uri);\n setIsLoading(false);\n return;\n }\n\n try {\n // Record this download in the global tracker\n const downloadPromise = downloadResumableRef.current.downloadAsync();\n downloadTracker.set(cacheKey, downloadPromise);\n\n const response: any = await downloadPromise;\n\n // Remove from tracker when done\n downloadTracker.delete(cacheKey);\n\n if (componentIsMounted.current) {\n if (response && response.status === 200) {\n setImgUri(fileURI);\n } else {\n setUseFallbackUri(true);\n setImgUri(uri);\n FileSystem.deleteAsync(fileURI, { idempotent: true });\n }\n setIsLoading(false);\n }\n } catch (downloadError) {\n downloadTracker.delete(cacheKey);\n if (componentIsMounted.current) {\n setUseFallbackUri(true);\n setImgUri(uri);\n setIsLoading(false);\n }\n }\n } else {\n // Use cached version\n setImgUri(fileURI);\n setIsLoading(false);\n }\n } catch (err) {\n if (componentIsMounted.current) {\n setUseFallbackUri(true);\n setImgUri(uri);\n setIsLoading(false);\n }\n }\n }, [uri, fileURI, cacheKey, expiresIn]);\n\n // Setup effect\n useEffect(() => {\n const setup = async () => {\n const directoryExists = await ensureCacheDirectory();\n if (directoryExists && uri) {\n loadImage();\n } else {\n setLoadError(true);\n setIsLoading(false);\n }\n };\n\n setup();\n\n return () => {\n componentIsMounted.current = false;\n };\n }, [uri, loadImage]);\n\n // Default placeholder\n const defaultPlaceholder = useMemo(\n () => (\n <View\n style={[\n {\n width: '100%',\n height: '100%',\n backgroundColor: '#e1e1e1',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: 3,\n },\n style,\n ]}\n >\n <Text>Image not available</Text>\n </View>\n ),\n [style],\n );\n\n // Show placeholder while loading or if there's an error\n if (isLoading || loadError || !imgUri) {\n return placeholderContent || defaultPlaceholder;\n }\n\n // Actual image component\n return (\n <Image\n {...restProps}\n style={style}\n source={{\n ...source,\n uri: useFallbackUri ? uri : imgUri,\n }}\n resizeMode={resizeMode}\n onError={(e) => {\n if (useFallbackUri) {\n setLoadError(true);\n setImgUri(null);\n } else {\n setUseFallbackUri(true);\n setImgUri(uri);\n }\n }}\n />\n );\n },\n (prevProps, nextProps) => {\n // Custom comparison function for memoization\n return (\n prevProps.cacheKey === nextProps.cacheKey &&\n prevProps.source.uri === nextProps.source.uri &&\n prevProps.style === nextProps.style\n );\n },\n);\n\nexport const CacheManager = {\n addToCache: async ({ file, key }: any) => {\n await ensureCacheDirectory();\n await FileSystem.copyAsync({\n from: file,\n to: `${CONST.IMAGE_CACHE_FOLDER}${key}`,\n });\n const uri = await CacheManager.getCachedUri({ key });\n return uri;\n },\n\n getCachedUri: async ({ key }: any) => {\n const uri = await FileSystem.getContentUriAsync(`${CONST.IMAGE_CACHE_FOLDER}${key}`);\n return uri;\n },\n\n downloadAsync: async ({ uri, key, options }: any) => {\n await ensureCacheDirectory();\n return await FileSystem.downloadAsync(uri, `${CONST.IMAGE_CACHE_FOLDER}${key}`, options);\n },\n\n clearCache: async () => {\n try {\n await FileSystem.deleteAsync(CONST.IMAGE_CACHE_FOLDER, { idempotent: true });\n await ensureCacheDirectory();\n } catch (error) {\n console.error('Error clearing cache:', error);\n }\n },\n};\n\nexport default CachedImage;\n"],"names":["CONST.IMAGE_CACHE_FOLDER","React","_a"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import React__default,{useRef,useState,useMemo,useEffect,useCallback}from'react';import {Pressable,HStack,Box,Avatar,AvatarFallbackText,AvatarImage,AvatarGroup,AvatarBadge,Text}from'@admin-layout/gluestack-ui-mobile';import {isToday,isYesterday,format}from'date-fns';import {useFocusEffect}from'@react-navigation/native';import {RoomType}from'common';import {startCase}from'lodash-es';import colors from'tailwindcss/colors';const safeDate = (dateValue) => {
2
- if (!dateValue)
3
- return null;
2
+ if (!dateValue) return null;
4
3
  try {
5
4
  const date = new Date(dateValue);
6
5
  if (isNaN(date.getTime())) {
@@ -14,15 +13,11 @@ import React__default,{useRef,useState,useMemo,useEffect,useCallback}from'react'
14
13
  }
15
14
  };
16
15
  const createdAtText = (value) => {
17
- if (!value)
18
- return "";
16
+ if (!value) return "";
19
17
  const date = safeDate(value);
20
- if (!date)
21
- return "";
22
- if (isToday(date))
23
- return "Today";
24
- if (isYesterday(date))
25
- return "Yesterday";
18
+ if (!date) return "";
19
+ if (isToday(date)) return "Today";
20
+ if (isYesterday(date)) return "Yesterday";
26
21
  return format(date, "MMM dd, yyyy");
27
22
  };
28
23
  const LastMessageComponent = ({
@@ -62,8 +57,7 @@ const DialogItemComponent = function DialogItem2({
62
57
  const lastMessage = channel == null ? void 0 : channel.lastMessage;
63
58
  const creatorAndMembersId = useMemo(() => {
64
59
  var _a, _b, _c, _d, _e, _f;
65
- if (!isServiceChannel || !(channel == null ? void 0 : channel.members))
66
- return null;
60
+ if (!isServiceChannel || !(channel == null ? void 0 : channel.members)) return null;
67
61
  const membersIds = (_c = (_b = (_a = channel == null ? void 0 : channel.members) == null ? void 0 : _a.filter((m) => {
68
62
  var _a2;
69
63
  return m !== null && ((_a2 = m == null ? void 0 : m.user) == null ? void 0 : _a2.id) !== (currentUser == null ? void 0 : currentUser.id);
@@ -77,14 +71,12 @@ const DialogItemComponent = function DialogItem2({
77
71
  }, [isServiceChannel, channel, currentUser]);
78
72
  const postParentId = useMemo(() => {
79
73
  var _a;
80
- if (!isServiceChannel || !(creatorAndMembersId == null ? void 0 : creatorAndMembersId.length))
81
- return null;
74
+ if (!isServiceChannel || !(creatorAndMembersId == null ? void 0 : creatorAndMembersId.length)) return null;
82
75
  return (creatorAndMembersId == null ? void 0 : creatorAndMembersId.length) && (creatorAndMembersId == null ? void 0 : creatorAndMembersId.includes(currentUser == null ? void 0 : currentUser.id)) ? null : (lastMessage == null ? void 0 : lastMessage.parentId) ? lastMessage == null ? void 0 : lastMessage.parentId : (_a = lastMessage == null ? void 0 : lastMessage.id) != null ? _a : 0;
83
76
  }, [isServiceChannel, creatorAndMembersId, lastMessage, currentUser]);
84
77
  const channelMembers = useMemo(() => {
85
78
  var _a, _b, _c;
86
- if (isServiceChannel)
87
- return [];
79
+ if (isServiceChannel) return [];
88
80
  return (_c = (_b = (_a = channel == null ? void 0 : channel.members) == null ? void 0 : _a.filter((ch) => {
89
81
  var _a2, _b2;
90
82
  return ((_a2 = ch == null ? void 0 : ch.user) == null ? void 0 : _a2.id) !== (currentUser == null ? void 0 : currentUser.id) && ((_b2 = ch == null ? void 0 : ch.user) == null ? void 0 : _b2.__typename) === "UserAccount";
@@ -111,8 +103,7 @@ const DialogItemComponent = function DialogItem2({
111
103
  };
112
104
  }, []);
113
105
  useFocusEffect(useCallback(() => {
114
- if (!(channel == null ? void 0 : channel.id))
115
- return;
106
+ if (!(channel == null ? void 0 : channel.id)) return;
116
107
  console.log(`DialogItem focused for ${isServiceChannel ? "service" : "direct"} channel:`, channel == null ? void 0 : channel.id);
117
108
  if (isServiceChannel) {
118
109
  setSubscriptionsTimestamp(Date.now());
@@ -1 +1 @@
1
- {"version":3,"file":"DialogItem.js","sources":["../../../../src/screens/inbox/components/DialogItem.tsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useRef, useEffect } from 'react';\nimport {\n Text,\n Pressable,\n HStack,\n Box,\n AvatarGroup,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n AvatarBadge,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { IChannel, IUserAccount, RoomType } from 'common';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\n\n// Helper function to safely create a Date object\nconst safeDate = (dateValue: any): Date | null => {\n if (!dateValue) return null;\n\n try {\n const date = new Date(dateValue);\n if (isNaN(date.getTime())) {\n console.warn('Invalid date value detected:', dateValue);\n return null;\n }\n return date;\n } catch (error) {\n console.warn('Error creating date from value:', dateValue, error);\n return null;\n }\n};\n\nconst createdAtText = (value: string): string => {\n if (!value) return '';\n const date = safeDate(value);\n if (!date) return '';\n\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(date, 'MMM dd, yyyy');\n};\n\nexport interface IDialogListChannel extends IChannel {\n users: IUserAccount[];\n}\n\nexport interface IDialogItemProps {\n currentUser?: any;\n channel?: any;\n onOpen: (id: any, title: any, postParentId?: any) => void;\n}\n\ninterface LastMessageComponentProps {\n title: string;\n lastMessage: any;\n isServiceChannel?: boolean;\n}\n\n// LastMessage component that works for both direct and service channels\nconst LastMessageComponent: React.FC<LastMessageComponentProps> = ({\n title,\n lastMessage,\n isServiceChannel = false,\n}) => {\n const count = 30;\n const channelTitle = title?.slice(0, count) + (title?.length > count ? '...' : '') || '';\n\n let displayMessage = 'No messages yet';\n\n if (lastMessage) {\n const hasFileAttachments = lastMessage.files?.data?.length > 0;\n const isImageMessage =\n lastMessage.message?.includes('<img') ||\n lastMessage.message?.includes('[Image]') ||\n lastMessage.message?.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(lastMessage.message || '') &&\n ((lastMessage.message || '').includes('http') || (lastMessage.message || '').includes('/images/')));\n\n if (hasFileAttachments) {\n displayMessage = '📎 File attachment';\n } else if (isImageMessage) {\n displayMessage = '[Image]';\n } else if (lastMessage.message && lastMessage.message.trim() !== '') {\n displayMessage = lastMessage.message;\n } else {\n displayMessage = '(Empty message)';\n }\n }\n\n const displayDate = lastMessage?.createdAt\n ? createdAtText(lastMessage.createdAt)\n : lastMessage?.updatedAt\n ? createdAtText(lastMessage.updatedAt)\n : '';\n\n return (\n <HStack space={'sm'} className=\"flex-1 justify-between\">\n <Box className=\"flex-[0.8]\">\n <Text color={colors.gray[600]} className=\"text-base text-wrap flex-wrap font-semibold\">\n {channelTitle}\n </Text>\n <Text color={colors.gray[600]} numberOfLines={1}>\n {displayMessage}\n </Text>\n </Box>\n\n <Box className=\"flex-[0.2]\">\n <Text color={colors.gray[500]}>{displayDate}</Text>\n </Box>\n </HStack>\n );\n};\n\nexport const DialogItemComponent: React.FC<IDialogItemProps> = function DialogItem({ currentUser, channel, onOpen }) {\n const isMountedRef = useRef(true);\n const [title, setTitle] = useState('');\n const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());\n\n const isServiceChannel = channel?.type === RoomType.Service;\n\n // Use channel.lastMessage instead of computing it\n const lastMessage = channel?.lastMessage;\n\n // Service channel specific calculations\n const creatorAndMembersId = useMemo(() => {\n if (!isServiceChannel || !channel?.members) return null;\n const membersIds: any =\n channel?.members\n ?.filter((m: any) => m !== null && m?.user?.id !== currentUser?.id)\n ?.map((mu: any) => mu?.user?.id) ?? [];\n const creatorId: any = channel?.creator?.id;\n const mergedIds: any = [].concat(membersIds, creatorId) ?? [];\n return mergedIds?.filter((m: any, pos: any) => mergedIds?.indexOf(m) === pos) ?? [];\n }, [isServiceChannel, channel, currentUser]);\n\n const postParentId = useMemo(() => {\n if (!isServiceChannel || !creatorAndMembersId?.length) return null;\n return creatorAndMembersId?.length && creatorAndMembersId?.includes(currentUser?.id)\n ? null\n : lastMessage?.parentId\n ? lastMessage?.parentId\n : lastMessage?.id ?? 0;\n }, [isServiceChannel, creatorAndMembersId, lastMessage, currentUser]);\n\n // Channel members computation for direct channels\n const channelMembers = useMemo(() => {\n if (isServiceChannel) return [];\n return (\n channel?.members\n ?.filter((ch: any) => ch?.user?.id !== currentUser?.id && ch?.user?.__typename === 'UserAccount')\n ?.map((m: any) => m?.user) ?? []\n );\n }, [isServiceChannel, currentUser?.id, channel?.members]);\n\n // Set title when channel members change (for direct channels)\n useEffect(() => {\n if (!isServiceChannel && channelMembers.length > 0 && isMountedRef.current) {\n const titleString =\n channelMembers\n ?.map((u: any) => `${u?.givenName || ''} ${u?.familyName || ''}`.trim())\n ?.filter(Boolean)\n ?.join(', ') || '';\n setTitle(titleString);\n } else if (isServiceChannel && channel?.title) {\n setTitle(channel.title);\n }\n }, [isServiceChannel, channelMembers, channel?.title]);\n\n // Compute display title\n const displayTitle = useMemo(() => {\n const length = 30;\n const titleToUse = isServiceChannel ? channel?.title || '' : title;\n return titleToUse.length > length ? titleToUse.substring(0, length - 3) + '...' : titleToUse;\n }, [isServiceChannel, channel?.title, title]);\n\n // Set mounted state on mount/unmount\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n // Focus effect handling\n useFocusEffect(\n useCallback(() => {\n if (!channel?.id) return;\n\n console.log(`DialogItem focused for ${isServiceChannel ? 'service' : 'direct'} channel:`, channel?.id);\n\n if (isServiceChannel) {\n setSubscriptionsTimestamp(Date.now());\n }\n }, [channel?.id, isServiceChannel]),\n );\n\n // Handle press based on channel type\n const handlePress = useCallback(() => {\n if (isServiceChannel) {\n onOpen(channel?.id, displayTitle, postParentId);\n } else {\n onOpen(channel?.id, displayTitle);\n }\n }, [isServiceChannel, channel?.id, displayTitle, postParentId, onOpen]);\n\n // Render avatar based on channel type\n const renderAvatar = () => {\n if (isServiceChannel) {\n return (\n <Avatar\n key={'service-channels-key-' + channel?.id}\n size={'sm'}\n className=\"bg-transparent top-0 right-0 z-[1]\"\n >\n <AvatarFallbackText>{startCase(channel?.creator?.username?.charAt(0))}</AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: channel?.creator?.picture,\n }}\n />\n </Avatar>\n );\n }\n\n return (\n <AvatarGroup>\n {channelMembers &&\n channelMembers?.length > 0 &&\n channelMembers?.slice(0, 1)?.map((ch: any, i: number) => (\n <Avatar\n key={'dialogs-list-' + i}\n size={'sm'}\n className={`bg-transparent top-[${i === 1 ? '4' : '0'}] right-[${\n i === 1 ? '-2' : '0'\n }] z-[${i === 1 ? 5 : 1}]`}\n >\n <AvatarFallbackText>{startCase(ch?.username?.charAt(0))}</AvatarFallbackText>\n {channelMembers?.length > 1 && (\n <AvatarBadge\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#e5e7eb',\n borderRadius: 5,\n }}\n className=\"items-center justify-center bg-gray-200 rounded-md\"\n >\n <Text style={{ fontSize: 12, fontWeight: 'bold', color: '#000' }}>\n {channelMembers?.length}\n </Text>\n </AvatarBadge>\n )}\n {channelMembers?.length === 1 && (\n <>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: ch?.picture,\n }}\n />\n <AvatarBadge style={{ width: 10, height: 10 }} />\n </>\n )}\n </Avatar>\n ))}\n </AvatarGroup>\n );\n };\n\n return (\n <Pressable\n onPress={handlePress}\n className=\"flex-1 border-gray-200 rounded-md dark:border-gray-600 dark:bg-gray-700\"\n style={{\n borderBottomWidth: 1,\n borderColor: '#e5e7eb',\n marginVertical: 0,\n paddingHorizontal: isServiceChannel ? 2 : 10,\n }}\n >\n <HStack space={'md'} className=\"flex-1 w-[100%] py-3 items-center\">\n <Box className=\"flex-[0.1] items-start pl-3\">{renderAvatar()}</Box>\n <Box className=\"flex-1\">\n <LastMessageComponent\n key={\n isServiceChannel\n ? `service-channel-${channel?.id}-${subscriptionsTimestamp}`\n : `last-msg-${lastMessage?.id || 'none'}-${channelMembers.length}`\n }\n title={displayTitle}\n lastMessage={lastMessage}\n isServiceChannel={isServiceChannel}\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const DialogItem = React.memo(DialogItemComponent);\n"],"names":["React","DialogItem","_a","_b"],"mappings":"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"}
1
+ {"version":3,"file":"DialogItem.js","sources":["../../../../src/screens/inbox/components/DialogItem.tsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useRef, useEffect } from 'react';\nimport {\n Text,\n Pressable,\n HStack,\n Box,\n AvatarGroup,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n AvatarBadge,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { IChannel, IUserAccount, RoomType } from 'common';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\n\n// Helper function to safely create a Date object\nconst safeDate = (dateValue: any): Date | null => {\n if (!dateValue) return null;\n\n try {\n const date = new Date(dateValue);\n if (isNaN(date.getTime())) {\n console.warn('Invalid date value detected:', dateValue);\n return null;\n }\n return date;\n } catch (error) {\n console.warn('Error creating date from value:', dateValue, error);\n return null;\n }\n};\n\nconst createdAtText = (value: string): string => {\n if (!value) return '';\n const date = safeDate(value);\n if (!date) return '';\n\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(date, 'MMM dd, yyyy');\n};\n\nexport interface IDialogListChannel extends IChannel {\n users: IUserAccount[];\n}\n\nexport interface IDialogItemProps {\n currentUser?: any;\n channel?: any;\n onOpen: (id: any, title: any, postParentId?: any) => void;\n}\n\ninterface LastMessageComponentProps {\n title: string;\n lastMessage: any;\n isServiceChannel?: boolean;\n}\n\n// LastMessage component that works for both direct and service channels\nconst LastMessageComponent: React.FC<LastMessageComponentProps> = ({\n title,\n lastMessage,\n isServiceChannel = false,\n}) => {\n const count = 30;\n const channelTitle = title?.slice(0, count) + (title?.length > count ? '...' : '') || '';\n\n let displayMessage = 'No messages yet';\n\n if (lastMessage) {\n const hasFileAttachments = lastMessage.files?.data?.length > 0;\n const isImageMessage =\n lastMessage.message?.includes('<img') ||\n lastMessage.message?.includes('[Image]') ||\n lastMessage.message?.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(lastMessage.message || '') &&\n ((lastMessage.message || '').includes('http') || (lastMessage.message || '').includes('/images/')));\n\n if (hasFileAttachments) {\n displayMessage = '📎 File attachment';\n } else if (isImageMessage) {\n displayMessage = '[Image]';\n } else if (lastMessage.message && lastMessage.message.trim() !== '') {\n displayMessage = lastMessage.message;\n } else {\n displayMessage = '(Empty message)';\n }\n }\n\n const displayDate = lastMessage?.createdAt\n ? createdAtText(lastMessage.createdAt)\n : lastMessage?.updatedAt\n ? createdAtText(lastMessage.updatedAt)\n : '';\n\n return (\n <HStack space={'sm'} className=\"flex-1 justify-between\">\n <Box className=\"flex-[0.8]\">\n <Text color={colors.gray[600]} className=\"text-base text-wrap flex-wrap font-semibold\">\n {channelTitle}\n </Text>\n <Text color={colors.gray[600]} numberOfLines={1}>\n {displayMessage}\n </Text>\n </Box>\n\n <Box className=\"flex-[0.2]\">\n <Text color={colors.gray[500]}>{displayDate}</Text>\n </Box>\n </HStack>\n );\n};\n\nexport const DialogItemComponent: React.FC<IDialogItemProps> = function DialogItem({ currentUser, channel, onOpen }) {\n const isMountedRef = useRef(true);\n const [title, setTitle] = useState('');\n const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());\n\n const isServiceChannel = channel?.type === RoomType.Service;\n\n // Use channel.lastMessage instead of computing it\n const lastMessage = channel?.lastMessage;\n\n // Service channel specific calculations\n const creatorAndMembersId = useMemo(() => {\n if (!isServiceChannel || !channel?.members) return null;\n const membersIds: any =\n channel?.members\n ?.filter((m: any) => m !== null && m?.user?.id !== currentUser?.id)\n ?.map((mu: any) => mu?.user?.id) ?? [];\n const creatorId: any = channel?.creator?.id;\n const mergedIds: any = [].concat(membersIds, creatorId) ?? [];\n return mergedIds?.filter((m: any, pos: any) => mergedIds?.indexOf(m) === pos) ?? [];\n }, [isServiceChannel, channel, currentUser]);\n\n const postParentId = useMemo(() => {\n if (!isServiceChannel || !creatorAndMembersId?.length) return null;\n return creatorAndMembersId?.length && creatorAndMembersId?.includes(currentUser?.id)\n ? null\n : lastMessage?.parentId\n ? lastMessage?.parentId\n : lastMessage?.id ?? 0;\n }, [isServiceChannel, creatorAndMembersId, lastMessage, currentUser]);\n\n // Channel members computation for direct channels\n const channelMembers = useMemo(() => {\n if (isServiceChannel) return [];\n return (\n channel?.members\n ?.filter((ch: any) => ch?.user?.id !== currentUser?.id && ch?.user?.__typename === 'UserAccount')\n ?.map((m: any) => m?.user) ?? []\n );\n }, [isServiceChannel, currentUser?.id, channel?.members]);\n\n // Set title when channel members change (for direct channels)\n useEffect(() => {\n if (!isServiceChannel && channelMembers.length > 0 && isMountedRef.current) {\n const titleString =\n channelMembers\n ?.map((u: any) => `${u?.givenName || ''} ${u?.familyName || ''}`.trim())\n ?.filter(Boolean)\n ?.join(', ') || '';\n setTitle(titleString);\n } else if (isServiceChannel && channel?.title) {\n setTitle(channel.title);\n }\n }, [isServiceChannel, channelMembers, channel?.title]);\n\n // Compute display title\n const displayTitle = useMemo(() => {\n const length = 30;\n const titleToUse = isServiceChannel ? channel?.title || '' : title;\n return titleToUse.length > length ? titleToUse.substring(0, length - 3) + '...' : titleToUse;\n }, [isServiceChannel, channel?.title, title]);\n\n // Set mounted state on mount/unmount\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n // Focus effect handling\n useFocusEffect(\n useCallback(() => {\n if (!channel?.id) return;\n\n console.log(`DialogItem focused for ${isServiceChannel ? 'service' : 'direct'} channel:`, channel?.id);\n\n if (isServiceChannel) {\n setSubscriptionsTimestamp(Date.now());\n }\n }, [channel?.id, isServiceChannel]),\n );\n\n // Handle press based on channel type\n const handlePress = useCallback(() => {\n if (isServiceChannel) {\n onOpen(channel?.id, displayTitle, postParentId);\n } else {\n onOpen(channel?.id, displayTitle);\n }\n }, [isServiceChannel, channel?.id, displayTitle, postParentId, onOpen]);\n\n // Render avatar based on channel type\n const renderAvatar = () => {\n if (isServiceChannel) {\n return (\n <Avatar\n key={'service-channels-key-' + channel?.id}\n size={'sm'}\n className=\"bg-transparent top-0 right-0 z-[1]\"\n >\n <AvatarFallbackText>{startCase(channel?.creator?.username?.charAt(0))}</AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: channel?.creator?.picture,\n }}\n />\n </Avatar>\n );\n }\n\n return (\n <AvatarGroup>\n {channelMembers &&\n channelMembers?.length > 0 &&\n channelMembers?.slice(0, 1)?.map((ch: any, i: number) => (\n <Avatar\n key={'dialogs-list-' + i}\n size={'sm'}\n className={`bg-transparent top-[${i === 1 ? '4' : '0'}] right-[${\n i === 1 ? '-2' : '0'\n }] z-[${i === 1 ? 5 : 1}]`}\n >\n <AvatarFallbackText>{startCase(ch?.username?.charAt(0))}</AvatarFallbackText>\n {channelMembers?.length > 1 && (\n <AvatarBadge\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#e5e7eb',\n borderRadius: 5,\n }}\n className=\"items-center justify-center bg-gray-200 rounded-md\"\n >\n <Text style={{ fontSize: 12, fontWeight: 'bold', color: '#000' }}>\n {channelMembers?.length}\n </Text>\n </AvatarBadge>\n )}\n {channelMembers?.length === 1 && (\n <>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: ch?.picture,\n }}\n />\n <AvatarBadge style={{ width: 10, height: 10 }} />\n </>\n )}\n </Avatar>\n ))}\n </AvatarGroup>\n );\n };\n\n return (\n <Pressable\n onPress={handlePress}\n className=\"flex-1 border-gray-200 rounded-md dark:border-gray-600 dark:bg-gray-700\"\n style={{\n borderBottomWidth: 1,\n borderColor: '#e5e7eb',\n marginVertical: 0,\n paddingHorizontal: isServiceChannel ? 2 : 10,\n }}\n >\n <HStack space={'md'} className=\"flex-1 w-[100%] py-3 items-center\">\n <Box className=\"flex-[0.1] items-start pl-3\">{renderAvatar()}</Box>\n <Box className=\"flex-1\">\n <LastMessageComponent\n key={\n isServiceChannel\n ? `service-channel-${channel?.id}-${subscriptionsTimestamp}`\n : `last-msg-${lastMessage?.id || 'none'}-${channelMembers.length}`\n }\n title={displayTitle}\n lastMessage={lastMessage}\n isServiceChannel={isServiceChannel}\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const DialogItem = React.memo(DialogItemComponent);\n"],"names":["React","DialogItem","_a","_b"],"mappings":"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"}
@@ -133,8 +133,7 @@ const GiftedChatInboxComponent = forwardRef((props, ref) => {
133
133
  "renderHeader"
134
134
  ]);
135
135
  const renderErrorNotification = () => {
136
- if (!errorMessage)
137
- return null;
136
+ if (!errorMessage) return null;
138
137
  return /* @__PURE__ */ React__default.createElement(Animated.View, { style: {
139
138
  position: "absolute",
140
139
  top: 10,
@@ -189,6 +188,7 @@ const GiftedChatInboxComponent = forwardRef((props, ref) => {
189
188
  marginRight: 8
190
189
  } }, /* @__PURE__ */ React__default.createElement(MaterialIcons, { name: "add", size: 24, color: "#888" })), /* @__PURE__ */ React__default.createElement(TextInput, { ref, style: {
191
190
  flex: 1,
191
+ //minHeight: 36,
192
192
  maxHeight: 44,
193
193
  backgroundColor: "transparent",
194
194
  color: "#444",
@@ -205,6 +205,7 @@ const GiftedChatInboxComponent = forwardRef((props, ref) => {
205
205
  disabled: false,
206
206
  style: {
207
207
  marginLeft: 8,
208
+ // opacity: (!messageText.trim() && images.length === 0) || isUploadingImage || loading ? 0.5 : 1,
208
209
  opacity: !text.trim() && images.length === 0 ? 0.5 : 1
209
210
  }
210
211
  },
@@ -246,8 +247,7 @@ const GiftedChatInboxComponent = forwardRef((props, ref) => {
246
247
  justifyContent: "center"
247
248
  } }, /* @__PURE__ */ React__default.createElement(Ionicons, { name: "close", size: 14, color: "white" })))))), [onSelectImages, text, images, isUploadingImage, loading, onSend, onRemoveImage, placeholder, ref]);
248
249
  const renderAccessoryDefault = useCallback(() => {
249
- if (!images.length)
250
- return null;
250
+ if (!images.length) return null;
251
251
  return /* @__PURE__ */ React__default.createElement(Box, { style: {
252
252
  position: "relative",
253
253
  height: 70,