@messenger-box/platform-mobile 10.0.3-alpha.20 → 10.0.3-alpha.201

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 (112) hide show
  1. package/lib/components/messages-container-ui/BuildModeView.js +428 -0
  2. package/lib/components/messages-container-ui/BuildModeView.js.map +1 -0
  3. package/lib/components/messages-container-ui/MessagesContainerUI.js +55 -0
  4. package/lib/components/messages-container-ui/MessagesContainerUI.js.map +1 -0
  5. package/lib/components/messages-container-ui/PlanModeView.js +336 -0
  6. package/lib/components/messages-container-ui/PlanModeView.js.map +1 -0
  7. package/lib/compute.js +2 -3
  8. package/lib/compute.js.map +1 -1
  9. package/lib/index.js +1 -1
  10. package/lib/index.js.map +1 -1
  11. package/lib/module.js.map +1 -1
  12. package/lib/queries/inboxQueries.js +62 -0
  13. package/lib/queries/inboxQueries.js.map +1 -0
  14. package/lib/routes.json +2 -3
  15. package/lib/screens/inbox/DialogMessages.js +8 -3
  16. package/lib/screens/inbox/DialogMessages.js.map +1 -1
  17. package/lib/screens/inbox/DialogThreadMessages.js +6 -11
  18. package/lib/screens/inbox/DialogThreadMessages.js.map +1 -1
  19. package/lib/screens/inbox/DialogThreads.js +58 -20
  20. package/lib/screens/inbox/DialogThreads.js.map +1 -1
  21. package/lib/screens/inbox/Inbox.js.map +1 -1
  22. package/lib/screens/inbox/components/CachedImage/consts.js +1 -1
  23. package/lib/screens/inbox/components/CachedImage/consts.js.map +1 -1
  24. package/lib/screens/inbox/components/CachedImage/index.js +125 -115
  25. package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
  26. package/lib/screens/inbox/components/DialogItem.js +160 -0
  27. package/lib/screens/inbox/components/DialogItem.js.map +1 -0
  28. package/lib/screens/inbox/components/GiftedChatInboxComponent.js +315 -0
  29. package/lib/screens/inbox/components/GiftedChatInboxComponent.js.map +1 -0
  30. package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js +3 -1
  31. package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js.map +1 -1
  32. package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js +194 -0
  33. package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js.map +1 -0
  34. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +149 -36
  35. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
  36. package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js +4 -5
  37. package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js.map +1 -1
  38. package/lib/screens/inbox/components/SubscriptionHandler.js +22 -0
  39. package/lib/screens/inbox/components/SubscriptionHandler.js.map +1 -0
  40. package/lib/screens/inbox/components/ThreadsViewItem.js +67 -47
  41. package/lib/screens/inbox/components/ThreadsViewItem.js.map +1 -1
  42. package/lib/screens/inbox/config/config.js +4 -2
  43. package/lib/screens/inbox/config/config.js.map +1 -1
  44. package/lib/screens/inbox/containers/ConversationView.js +1099 -1094
  45. package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
  46. package/lib/screens/inbox/containers/Dialogs.js +132 -534
  47. package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
  48. package/lib/screens/inbox/containers/ThreadConversationView.js +876 -1357
  49. package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
  50. package/lib/screens/inbox/containers/ThreadsView.js +81 -54
  51. package/lib/screens/inbox/containers/ThreadsView.js.map +1 -1
  52. package/lib/screens/inbox/hooks/useInboxMessages.js +31 -0
  53. package/lib/screens/inbox/hooks/useInboxMessages.js.map +1 -0
  54. package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js +108 -0
  55. package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js.map +1 -0
  56. package/lib/screens/inbox/workflow/dialog-threads-xstate.js +151 -0
  57. package/lib/screens/inbox/workflow/dialog-threads-xstate.js.map +1 -0
  58. package/package.json +9 -7
  59. package/CHANGELOG.md +0 -164
  60. package/jest.config.js +0 -24
  61. package/lib/screens/inbox/components/DialogsListItem.js +0 -548
  62. package/lib/screens/inbox/components/DialogsListItem.js.map +0 -1
  63. package/lib/screens/inbox/components/ServiceDialogsListItem.js +0 -489
  64. package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +0 -1
  65. package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js +0 -175
  66. package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js.map +0 -1
  67. package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js +0 -191
  68. package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js.map +0 -1
  69. package/lib/screens/inbox/containers/workflow/conversation-xstate.js +0 -380
  70. package/lib/screens/inbox/containers/workflow/conversation-xstate.js.map +0 -1
  71. package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +0 -211
  72. package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +0 -1
  73. package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js +0 -438
  74. package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js.map +0 -1
  75. package/rollup.config.mjs +0 -45
  76. package/src/components/index.ts +0 -0
  77. package/src/compute.ts +0 -63
  78. package/src/index.ts +0 -7
  79. package/src/module.ts +0 -10
  80. package/src/navigation/InboxNavigation.tsx +0 -102
  81. package/src/navigation/index.ts +0 -1
  82. package/src/screens/inbox/DialogMessages.tsx +0 -21
  83. package/src/screens/inbox/DialogThreadMessages.tsx +0 -97
  84. package/src/screens/inbox/DialogThreads.tsx +0 -129
  85. package/src/screens/inbox/Inbox.tsx +0 -17
  86. package/src/screens/inbox/components/CachedImage/consts.ts +0 -6
  87. package/src/screens/inbox/components/CachedImage/index.tsx +0 -223
  88. package/src/screens/inbox/components/DialogsHeader.tsx +0 -30
  89. package/src/screens/inbox/components/DialogsListItem.tsx +0 -819
  90. package/src/screens/inbox/components/ServiceDialogsListItem.tsx +0 -679
  91. package/src/screens/inbox/components/SlackMessageContainer/ImageViewerModal.tsx +0 -113
  92. package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +0 -313
  93. package/src/screens/inbox/components/SlackMessageContainer/SlackMessage.tsx +0 -145
  94. package/src/screens/inbox/components/SlackMessageContainer/index.ts +0 -3
  95. package/src/screens/inbox/components/SupportServiceDialogsListItem.tsx +0 -301
  96. package/src/screens/inbox/components/ThreadsViewItem.tsx +0 -321
  97. package/src/screens/inbox/components/workflow/dialogs-list-item-xstate.ts +0 -145
  98. package/src/screens/inbox/components/workflow/service-dialogs-list-item-xstate.ts +0 -159
  99. package/src/screens/inbox/config/config.ts +0 -15
  100. package/src/screens/inbox/config/index.ts +0 -1
  101. package/src/screens/inbox/containers/ConversationView.tsx +0 -1782
  102. package/src/screens/inbox/containers/Dialogs.tsx +0 -794
  103. package/src/screens/inbox/containers/SupportServiceDialogs.tsx +0 -119
  104. package/src/screens/inbox/containers/ThreadConversationView.tsx +0 -2312
  105. package/src/screens/inbox/containers/ThreadsView.tsx +0 -305
  106. package/src/screens/inbox/containers/workflow/apollo/handleResult.ts +0 -20
  107. package/src/screens/inbox/containers/workflow/conversation-xstate.ts +0 -313
  108. package/src/screens/inbox/containers/workflow/dialogs-xstate.ts +0 -196
  109. package/src/screens/inbox/containers/workflow/thread-conversation-xstate.ts +0 -401
  110. package/src/screens/index.ts +0 -4
  111. package/tsconfig.json +0 -13
  112. package/webpack.config.js +0 -58
@@ -0,0 +1,160 @@
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) return null;
3
+ try {
4
+ const date = new Date(dateValue);
5
+ if (isNaN(date.getTime())) {
6
+ console.warn("Invalid date value detected:", dateValue);
7
+ return null;
8
+ }
9
+ return date;
10
+ } catch (error) {
11
+ console.warn("Error creating date from value:", dateValue, error);
12
+ return null;
13
+ }
14
+ };
15
+ const createdAtText = (value) => {
16
+ if (!value) return "";
17
+ const date = safeDate(value);
18
+ if (!date) return "";
19
+ if (isToday(date)) return "Today";
20
+ if (isYesterday(date)) return "Yesterday";
21
+ return format(date, "MMM dd, yyyy");
22
+ };
23
+ const LastMessageComponent = ({
24
+ title,
25
+ lastMessage,
26
+ isServiceChannel = false
27
+ }) => {
28
+ var _a, _b, _c, _d, _e;
29
+ const count = 30;
30
+ const channelTitle = (title == null ? void 0 : title.slice(0, count)) + ((title == null ? void 0 : title.length) > count ? "..." : "") || "";
31
+ let displayMessage = "No messages yet";
32
+ if (lastMessage) {
33
+ const hasFileAttachments = ((_b = (_a = lastMessage.files) == null ? void 0 : _a.data) == null ? void 0 : _b.length) > 0;
34
+ const isImageMessage = ((_c = lastMessage.message) == null ? void 0 : _c.includes("<img")) || ((_d = lastMessage.message) == null ? void 0 : _d.includes("[Image]")) || ((_e = lastMessage.message) == null ? void 0 : _e.includes("![")) || /\.(jpeg|jpg|gif|png|bmp|webp)/i.test(lastMessage.message || "") && ((lastMessage.message || "").includes("http") || (lastMessage.message || "").includes("/images/"));
35
+ if (hasFileAttachments) {
36
+ displayMessage = "\u{1F4CE} File attachment";
37
+ } else if (isImageMessage) {
38
+ displayMessage = "[Image]";
39
+ } else if (lastMessage.message && lastMessage.message.trim() !== "") {
40
+ displayMessage = lastMessage.message;
41
+ } else {
42
+ displayMessage = "(Empty message)";
43
+ }
44
+ }
45
+ const displayDate = (lastMessage == null ? void 0 : lastMessage.createdAt) ? createdAtText(lastMessage.createdAt) : (lastMessage == null ? void 0 : lastMessage.updatedAt) ? createdAtText(lastMessage.updatedAt) : "";
46
+ return /* @__PURE__ */ React__default.createElement(HStack, { space: "sm", className: "flex-1 justify-between" }, /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.8]" }, /* @__PURE__ */ React__default.createElement(Text, { color: colors.gray[600], className: "text-base text-wrap flex-wrap font-semibold" }, channelTitle), /* @__PURE__ */ React__default.createElement(Text, { color: colors.gray[600], numberOfLines: 1 }, displayMessage)), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.2]" }, /* @__PURE__ */ React__default.createElement(Text, { color: colors.gray[500] }, displayDate)));
47
+ };
48
+ const DialogItemComponent = function DialogItem2({
49
+ currentUser,
50
+ channel,
51
+ onOpen
52
+ }) {
53
+ const isMountedRef = useRef(true);
54
+ const [title, setTitle] = useState("");
55
+ const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());
56
+ const isServiceChannel = (channel == null ? void 0 : channel.type) === RoomType.Service;
57
+ const lastMessage = channel == null ? void 0 : channel.lastMessage;
58
+ const creatorAndMembersId = useMemo(() => {
59
+ var _a, _b, _c, _d, _e, _f;
60
+ if (!isServiceChannel || !(channel == null ? void 0 : channel.members)) return null;
61
+ const membersIds = (_c = (_b = (_a = channel == null ? void 0 : channel.members) == null ? void 0 : _a.filter((m) => {
62
+ var _a2;
63
+ return m !== null && ((_a2 = m == null ? void 0 : m.user) == null ? void 0 : _a2.id) !== (currentUser == null ? void 0 : currentUser.id);
64
+ })) == null ? void 0 : _b.map((mu) => {
65
+ var _a2;
66
+ return (_a2 = mu == null ? void 0 : mu.user) == null ? void 0 : _a2.id;
67
+ })) != null ? _c : [];
68
+ const creatorId = (_d = channel == null ? void 0 : channel.creator) == null ? void 0 : _d.id;
69
+ const mergedIds = (_e = [].concat(membersIds, creatorId)) != null ? _e : [];
70
+ return (_f = mergedIds == null ? void 0 : mergedIds.filter((m, pos) => (mergedIds == null ? void 0 : mergedIds.indexOf(m)) === pos)) != null ? _f : [];
71
+ }, [isServiceChannel, channel, currentUser]);
72
+ const postParentId = useMemo(() => {
73
+ var _a;
74
+ if (!isServiceChannel || !(creatorAndMembersId == null ? void 0 : creatorAndMembersId.length)) return null;
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;
76
+ }, [isServiceChannel, creatorAndMembersId, lastMessage, currentUser]);
77
+ const channelMembers = useMemo(() => {
78
+ var _a, _b, _c;
79
+ if (isServiceChannel) return [];
80
+ return (_c = (_b = (_a = channel == null ? void 0 : channel.members) == null ? void 0 : _a.filter((ch) => {
81
+ var _a2, _b2;
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";
83
+ })) == null ? void 0 : _b.map((m) => m == null ? void 0 : m.user)) != null ? _c : [];
84
+ }, [isServiceChannel, currentUser == null ? void 0 : currentUser.id, channel == null ? void 0 : channel.members]);
85
+ useEffect(() => {
86
+ var _a, _b;
87
+ if (!isServiceChannel && channelMembers.length > 0 && isMountedRef.current) {
88
+ const titleString = ((_b = (_a = channelMembers == null ? void 0 : channelMembers.map((u) => `${(u == null ? void 0 : u.givenName) || ""} ${(u == null ? void 0 : u.familyName) || ""}`.trim())) == null ? void 0 : _a.filter(Boolean)) == null ? void 0 : _b.join(", ")) || "";
89
+ setTitle(titleString);
90
+ } else if (isServiceChannel && (channel == null ? void 0 : channel.title)) {
91
+ setTitle(channel.title);
92
+ }
93
+ }, [isServiceChannel, channelMembers, channel == null ? void 0 : channel.title]);
94
+ const displayTitle = useMemo(() => {
95
+ const length = 30;
96
+ const titleToUse = isServiceChannel ? (channel == null ? void 0 : channel.title) || "" : title;
97
+ return titleToUse.length > length ? titleToUse.substring(0, length - 3) + "..." : titleToUse;
98
+ }, [isServiceChannel, channel == null ? void 0 : channel.title, title]);
99
+ useEffect(() => {
100
+ isMountedRef.current = true;
101
+ return () => {
102
+ isMountedRef.current = false;
103
+ };
104
+ }, []);
105
+ useFocusEffect(useCallback(() => {
106
+ if (!(channel == null ? void 0 : channel.id)) return;
107
+ console.log(`DialogItem focused for ${isServiceChannel ? "service" : "direct"} channel:`, channel == null ? void 0 : channel.id);
108
+ if (isServiceChannel) {
109
+ setSubscriptionsTimestamp(Date.now());
110
+ }
111
+ }, [channel == null ? void 0 : channel.id, isServiceChannel]));
112
+ const handlePress = useCallback(() => {
113
+ if (isServiceChannel) {
114
+ onOpen(channel == null ? void 0 : channel.id, displayTitle, postParentId);
115
+ } else {
116
+ onOpen(channel == null ? void 0 : channel.id, displayTitle);
117
+ }
118
+ }, [isServiceChannel, channel == null ? void 0 : channel.id, displayTitle, postParentId, onOpen]);
119
+ const renderAvatar = () => {
120
+ var _a, _b, _c, _d;
121
+ if (isServiceChannel) {
122
+ return /* @__PURE__ */ React__default.createElement(Avatar, { key: "service-channels-key-" + (channel == null ? void 0 : channel.id), size: "sm", className: "bg-transparent top-0 right-0 z-[1]" }, /* @__PURE__ */ React__default.createElement(AvatarFallbackText, null, startCase((_b = (_a = channel == null ? void 0 : channel.creator) == null ? void 0 : _a.username) == null ? void 0 : _b.charAt(0))), /* @__PURE__ */ React__default.createElement(AvatarImage, { alt: "user image", style: {
123
+ borderRadius: 6,
124
+ borderWidth: 2,
125
+ borderColor: "#fff"
126
+ }, source: {
127
+ uri: (_c = channel == null ? void 0 : channel.creator) == null ? void 0 : _c.picture
128
+ } }));
129
+ }
130
+ return /* @__PURE__ */ React__default.createElement(AvatarGroup, null, channelMembers && (channelMembers == null ? void 0 : channelMembers.length) > 0 && ((_d = channelMembers == null ? void 0 : channelMembers.slice(0, 1)) == null ? void 0 : _d.map((ch, i) => {
131
+ var _a2;
132
+ return /* @__PURE__ */ React__default.createElement(Avatar, { key: "dialogs-list-" + i, size: "sm", className: `bg-transparent top-[${i === 1 ? "4" : "0"}] right-[${i === 1 ? "-2" : "0"}] z-[${i === 1 ? 5 : 1}]` }, /* @__PURE__ */ React__default.createElement(AvatarFallbackText, null, startCase((_a2 = ch == null ? void 0 : ch.username) == null ? void 0 : _a2.charAt(0))), (channelMembers == null ? void 0 : channelMembers.length) > 1 && /* @__PURE__ */ React__default.createElement(AvatarBadge, { style: {
133
+ width: "100%",
134
+ height: "100%",
135
+ backgroundColor: "#e5e7eb",
136
+ borderRadius: 5
137
+ }, className: "items-center justify-center bg-gray-200 rounded-md" }, /* @__PURE__ */ React__default.createElement(Text, { style: {
138
+ fontSize: 12,
139
+ fontWeight: "bold",
140
+ color: "#000"
141
+ } }, channelMembers == null ? void 0 : channelMembers.length)), (channelMembers == null ? void 0 : channelMembers.length) === 1 && /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(AvatarImage, { alt: "user image", style: {
142
+ borderRadius: 6,
143
+ borderWidth: 2,
144
+ borderColor: "#fff"
145
+ }, source: {
146
+ uri: ch == null ? void 0 : ch.picture
147
+ } }), /* @__PURE__ */ React__default.createElement(AvatarBadge, { style: {
148
+ width: 10,
149
+ height: 10
150
+ } })));
151
+ })));
152
+ };
153
+ return /* @__PURE__ */ React__default.createElement(Pressable, { onPress: handlePress, className: "flex-1 border-gray-200 rounded-md dark:border-gray-600 dark:bg-gray-700", style: {
154
+ borderBottomWidth: 1,
155
+ borderColor: "#e5e7eb",
156
+ marginVertical: 0,
157
+ paddingHorizontal: isServiceChannel ? 2 : 10
158
+ } }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "flex-1 w-[100%] py-3 items-center" }, /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.1] items-start pl-3" }, renderAvatar()), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1" }, /* @__PURE__ */ React__default.createElement(LastMessageComponent, { key: isServiceChannel ? `service-channel-${channel == null ? void 0 : channel.id}-${subscriptionsTimestamp}` : `last-msg-${(lastMessage == null ? void 0 : lastMessage.id) || "none"}-${channelMembers.length}`, title: displayTitle, lastMessage, isServiceChannel }))));
159
+ };
160
+ const DialogItem = React__default.memo(DialogItemComponent);export{DialogItem,DialogItemComponent};//# sourceMappingURL=DialogItem.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,315 @@
1
+ import React__default,{forwardRef,useCallback}from'react';import {Platform,View,TouchableOpacity,TextInput,ScrollView,KeyboardAvoidingView,Animated}from'react-native';import {useSafeAreaInsets}from'react-native-safe-area-context';import {Image,Box,Spinner,Text}from'@admin-layout/gluestack-ui-mobile';import {GiftedChat}from'react-native-gifted-chat';import {MaterialIcons,MaterialCommunityIcons,Ionicons}from'@expo/vector-icons';import colors from'tailwindcss/colors';var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ var __objRest = (source, exclude) => {
18
+ var target = {};
19
+ for (var prop in source)
20
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
21
+ target[prop] = source[prop];
22
+ if (source != null && __getOwnPropSymbols)
23
+ for (var prop of __getOwnPropSymbols(source)) {
24
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
25
+ target[prop] = source[prop];
26
+ }
27
+ return target;
28
+ };
29
+ function getRefCurrent(ref) {
30
+ if (ref && typeof ref === "object" && "current" in ref) {
31
+ return ref.current;
32
+ }
33
+ return null;
34
+ }
35
+ const GiftedChatInboxComponent = forwardRef((props, ref) => {
36
+ const insets = useSafeAreaInsets();
37
+ const bottomSafeArea = Platform.OS === "ios" ? insets.bottom : 0;
38
+ const _a = props, {
39
+ messages,
40
+ onSend,
41
+ text,
42
+ onInputTextChanged,
43
+ user,
44
+ images,
45
+ setImages,
46
+ onSelectImages,
47
+ onRemoveImage,
48
+ selectedImage,
49
+ setSelectedImage,
50
+ isUploadingImage,
51
+ loading,
52
+ errorMessage,
53
+ notificationType = "error",
54
+ onCloseError,
55
+ inputToolbarHeight = 56,
56
+ bottomMargin = 0,
57
+ renderMessageText,
58
+ renderActions,
59
+ renderAccessory,
60
+ renderMessage,
61
+ renderInputToolbar,
62
+ renderChatFooter,
63
+ renderLoadEarlier,
64
+ loadEarlier,
65
+ isLoadingEarlier,
66
+ keyboardVerticalOffset = Platform.OS === "ios" ? 64 : 0,
67
+ placeholder = "Jot something down",
68
+ listViewProps,
69
+ wrapInSafeArea = true,
70
+ minComposerHeight = 36,
71
+ maxComposerHeight = 100,
72
+ renderFooter,
73
+ lightboxProps = {
74
+ underlayColor: "transparent",
75
+ springConfig: {
76
+ tension: 9e4,
77
+ friction: 9e4
78
+ },
79
+ disabled: true
80
+ },
81
+ infiniteScroll = false,
82
+ alwaysShowSend = true,
83
+ minInputToolbarHeight = 30,
84
+ textInputProps = {
85
+ multiline: true,
86
+ returnKeyType: "default",
87
+ enablesReturnKeyAutomatically: true,
88
+ placeholderTextColor: colors.gray[400]
89
+ },
90
+ messagesContainerStyle = {
91
+ paddingTop: 8
92
+ },
93
+ renderHeader
94
+ } = _a, rest = __objRest(_a, [
95
+ "messages",
96
+ "onSend",
97
+ "text",
98
+ "onInputTextChanged",
99
+ "user",
100
+ "images",
101
+ "setImages",
102
+ "onSelectImages",
103
+ "onRemoveImage",
104
+ "selectedImage",
105
+ "setSelectedImage",
106
+ "isUploadingImage",
107
+ "loading",
108
+ "errorMessage",
109
+ "notificationType",
110
+ "onCloseError",
111
+ "inputToolbarHeight",
112
+ "bottomMargin",
113
+ "renderMessageText",
114
+ "renderActions",
115
+ "renderAccessory",
116
+ "renderMessage",
117
+ "renderInputToolbar",
118
+ "renderChatFooter",
119
+ "renderLoadEarlier",
120
+ "loadEarlier",
121
+ "isLoadingEarlier",
122
+ "keyboardVerticalOffset",
123
+ "placeholder",
124
+ "listViewProps",
125
+ "wrapInSafeArea",
126
+ "minComposerHeight",
127
+ "maxComposerHeight",
128
+ "renderFooter",
129
+ "lightboxProps",
130
+ "infiniteScroll",
131
+ "alwaysShowSend",
132
+ "minInputToolbarHeight",
133
+ "textInputProps",
134
+ "messagesContainerStyle",
135
+ "renderHeader"
136
+ ]);
137
+ const renderErrorNotification = () => {
138
+ if (!errorMessage) return null;
139
+ return /* @__PURE__ */ React__default.createElement(Animated.View, { style: {
140
+ position: "absolute",
141
+ top: 10,
142
+ left: 10,
143
+ right: 10,
144
+ backgroundColor: notificationType === "error" ? "#f44336" : "#ff9800",
145
+ padding: 15,
146
+ borderRadius: 8,
147
+ shadowColor: "#000",
148
+ shadowOffset: {
149
+ width: 0,
150
+ height: 2
151
+ },
152
+ shadowOpacity: 0.25,
153
+ shadowRadius: 3.84,
154
+ elevation: 5,
155
+ zIndex: 1e3
156
+ } }, /* @__PURE__ */ React__default.createElement(View, { style: {
157
+ flexDirection: "row",
158
+ justifyContent: "space-between",
159
+ alignItems: "center"
160
+ } }, /* @__PURE__ */ React__default.createElement(View, null, /* @__PURE__ */ React__default.createElement(Text, { style: {
161
+ color: "white",
162
+ fontWeight: "bold"
163
+ } }, notificationType === "error" ? "Error" : "Warning")), /* @__PURE__ */ React__default.createElement(View, null, /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: onCloseError }, /* @__PURE__ */ React__default.createElement(Ionicons, { name: "close", size: 20, color: "white" })))), /* @__PURE__ */ React__default.createElement(Text, { style: {
164
+ color: "white",
165
+ marginTop: 5
166
+ } }, errorMessage));
167
+ };
168
+ const renderInputToolbarDefault = useCallback((props2) => /* @__PURE__ */ React__default.createElement(View, { style: {
169
+ backgroundColor: "#fff",
170
+ paddingBottom: Math.max(4, bottomSafeArea),
171
+ paddingTop: 4
172
+ } }, /* @__PURE__ */ React__default.createElement(View, { style: {
173
+ flexDirection: "row",
174
+ alignItems: "center",
175
+ minHeight: 44,
176
+ maxHeight: 56,
177
+ backgroundColor: "#fff",
178
+ borderRadius: 22,
179
+ marginHorizontal: 8,
180
+ paddingHorizontal: 8,
181
+ borderTopWidth: 1,
182
+ borderTopColor: "#e0e0e0"
183
+ } }, /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: onSelectImages, style: {
184
+ width: 32,
185
+ height: 32,
186
+ borderRadius: 16,
187
+ backgroundColor: "#fff",
188
+ alignItems: "center",
189
+ justifyContent: "center",
190
+ marginRight: 8
191
+ } }, /* @__PURE__ */ React__default.createElement(MaterialIcons, { name: "add", size: 24, color: "#888" })), /* @__PURE__ */ React__default.createElement(TextInput, { ref, style: {
192
+ flex: 1,
193
+ //minHeight: 36,
194
+ maxHeight: 44,
195
+ backgroundColor: "transparent",
196
+ color: "#444",
197
+ paddingHorizontal: 8,
198
+ paddingVertical: 0,
199
+ alignSelf: "center",
200
+ textAlignVertical: "center"
201
+ }, placeholder: placeholder || "Jot something down", placeholderTextColor: colors.gray[400], multiline: true, value: text, onChangeText: onInputTextChanged }), /* @__PURE__ */ React__default.createElement(
202
+ TouchableOpacity,
203
+ {
204
+ onPress: () => onSend([{
205
+ text
206
+ }]),
207
+ disabled: false,
208
+ style: {
209
+ marginLeft: 8,
210
+ // opacity: (!messageText.trim() && images.length === 0) || isUploadingImage || loading ? 0.5 : 1,
211
+ opacity: !text.trim() && images.length === 0 ? 0.5 : 1
212
+ }
213
+ },
214
+ /* @__PURE__ */ React__default.createElement(
215
+ MaterialCommunityIcons,
216
+ {
217
+ name: "send-circle",
218
+ size: 32,
219
+ color: !text.trim() && images.length === 0 ? colors.gray[400] : colors.blue[500]
220
+ }
221
+ )
222
+ )), images && images.length > 0 && /* @__PURE__ */ React__default.createElement(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: {
223
+ marginTop: 4,
224
+ marginLeft: 8
225
+ } }, images.map((img, index) => /* @__PURE__ */ React__default.createElement(View, { key: `image-preview-${index}`, style: {
226
+ width: 48,
227
+ height: 48,
228
+ marginRight: 8,
229
+ borderRadius: 6,
230
+ overflow: "hidden",
231
+ position: "relative",
232
+ backgroundColor: colors.gray[200]
233
+ } }, /* @__PURE__ */ React__default.createElement(Image, { source: {
234
+ uri: img.uri || img.url
235
+ }, style: {
236
+ width: "100%",
237
+ height: "100%"
238
+ }, alt: `selected image ${index + 1}` }), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => {
239
+ onRemoveImage(index);
240
+ }, style: {
241
+ position: "absolute",
242
+ top: 2,
243
+ right: 2,
244
+ backgroundColor: "rgba(0,0,0,0.6)",
245
+ borderRadius: 10,
246
+ width: 20,
247
+ height: 20,
248
+ alignItems: "center",
249
+ justifyContent: "center"
250
+ } }, /* @__PURE__ */ React__default.createElement(Ionicons, { name: "close", size: 14, color: "white" })))))), [onSelectImages, text, images, isUploadingImage, loading, onSend, onRemoveImage, placeholder, ref, bottomSafeArea, onInputTextChanged]);
251
+ const renderAccessoryDefault = useCallback(() => {
252
+ if (!images.length) return null;
253
+ return /* @__PURE__ */ React__default.createElement(Box, { style: {
254
+ position: "relative",
255
+ height: 70,
256
+ backgroundColor: "transparent",
257
+ justifyContent: "center"
258
+ } }, /* @__PURE__ */ React__default.createElement(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: {
259
+ flexDirection: "row",
260
+ paddingLeft: 15,
261
+ paddingRight: 5
262
+ }, contentContainerStyle: {
263
+ alignItems: "center",
264
+ height: "100%"
265
+ } }, images.map((img, index) => /* @__PURE__ */ React__default.createElement(View, { key: `image-preview-${index}`, style: {
266
+ width: 40,
267
+ height: 40,
268
+ marginRight: 15,
269
+ borderRadius: 4,
270
+ backgroundColor: colors.gray[200],
271
+ overflow: "hidden",
272
+ borderWidth: 1,
273
+ borderColor: "#e0e0e0",
274
+ position: "relative",
275
+ zIndex: 10
276
+ } }, /* @__PURE__ */ React__default.createElement(Image, { source: {
277
+ uri: img.uri || img.url
278
+ }, style: {
279
+ width: "100%",
280
+ height: "100%"
281
+ }, alt: `selected image ${index + 1}` }), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => {
282
+ const newImages = [...images];
283
+ newImages.splice(index, 1);
284
+ setImages(newImages);
285
+ if (newImages.length === 0) {
286
+ setSelectedImage("");
287
+ const inputRef = getRefCurrent(ref);
288
+ if (inputRef && typeof inputRef.focus === "function") {
289
+ inputRef.focus();
290
+ }
291
+ }
292
+ }, style: {
293
+ position: "absolute",
294
+ top: -1,
295
+ right: -1,
296
+ backgroundColor: "rgba(0,0,0,0.6)",
297
+ borderRadius: 12,
298
+ width: 20,
299
+ height: 20,
300
+ alignItems: "center",
301
+ justifyContent: "center",
302
+ zIndex: 9999
303
+ } }, /* @__PURE__ */ React__default.createElement(Ionicons, { name: "close", size: 16, color: "white" }))))));
304
+ }, [images, setImages, setSelectedImage, ref]);
305
+ return /* @__PURE__ */ React__default.createElement(KeyboardAvoidingView, { style: {
306
+ flex: 1,
307
+ justifyContent: "flex-end",
308
+ backgroundColor: "#fff"
309
+ }, behavior: Platform.OS === "ios" ? "padding" : "height", keyboardVerticalOffset }, /* @__PURE__ */ React__default.createElement(View, { style: {
310
+ flex: 1,
311
+ backgroundColor: "#fff",
312
+ position: "relative",
313
+ marginBottom: bottomMargin
314
+ } }, renderErrorNotification(), loading && /* @__PURE__ */ React__default.createElement(Spinner, { color: colors.blue[500] }), /* @__PURE__ */ React__default.createElement(GiftedChat, __spreadValues({ ref, wrapInSafeArea, messages, onSend, text, onInputTextChanged, user, renderMessageText, renderActions: renderActions || null, renderAccessory: renderAccessory || renderAccessoryDefault, renderMessage, renderInputToolbar: renderInputToolbar || renderInputToolbarDefault, renderLoading: props.renderLoading || null, renderChatFooter, renderLoadEarlier, listViewProps, loadEarlier, isLoadingEarlier, bottomOffset: (props.bottomOffset || 0) + bottomSafeArea, isKeyboardInternallyHandled: props.isKeyboardInternallyHandled || false, renderFooter: () => renderFooter ? renderFooter() : null, minComposerHeight, maxComposerHeight, placeholder: placeholder || "Jot something down", lightboxProps, infiniteScroll, alwaysShowSend, minInputToolbarHeight, textInputProps, messagesContainerStyle, isTyping: props.isTyping || false, renderChatEmpty: props.renderChatEmpty || null }, rest))));
315
+ });export{GiftedChatInboxComponent,GiftedChatInboxComponent as default};//# sourceMappingURL=GiftedChatInboxComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GiftedChatInboxComponent.js","sources":["../../../../src/screens/inbox/components/GiftedChatInboxComponent.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useMemo } from 'react';\nimport { Platform, View, KeyboardAvoidingView, TouchableOpacity, TextInput, ScrollView, Animated } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { Spinner, Box, Image, HStack, Text } from '@admin-layout/gluestack-ui-mobile';\nimport { GiftedChat, Send } from 'react-native-gifted-chat';\nimport { Ionicons, MaterialCommunityIcons, MaterialIcons } from '@expo/vector-icons';\nimport colors from 'tailwindcss/colors';\n// If you have a SlackMessage component, import it:\n// import SlackMessage from './SlackMessage';\n\nexport interface GiftedChatInboxComponentProps {\n messages: any[];\n onSend: (messages: any[]) => void;\n text: string;\n onInputTextChanged: (text: string) => void;\n user: any;\n images: any[];\n onSelectImages: () => void;\n onRemoveImage: (index: number) => void;\n selectedImage: string;\n setSelectedImage: (img: string) => void;\n isUploadingImage: boolean;\n loading: boolean;\n errorMessage: string;\n notificationType?: string;\n onCloseError?: () => void;\n inputToolbarHeight?: number;\n bottomMargin?: number;\n renderMessageText?: any;\n renderActions?: any;\n renderAccessory?: any;\n renderMessage?: any;\n renderInputToolbar?: any;\n renderChatFooter?: any;\n renderLoadEarlier?: any;\n loadEarlier?: boolean;\n isLoadingEarlier?: boolean;\n totalCount?: number;\n channelMessagesLength?: number;\n keyboardVerticalOffset?: number;\n placeholder?: string;\n listViewProps?: any;\n wrapInSafeArea?: boolean;\n minComposerHeight?: number;\n maxComposerHeight?: number;\n renderFooter?: any;\n lightboxProps?: any;\n infiniteScroll?: boolean;\n alwaysShowSend?: boolean;\n minInputToolbarHeight?: number;\n textInputProps?: any;\n messagesContainerStyle?: any;\n renderHeader?: any;\n [key: string]: any;\n}\n\n// Helper to get the current ref if it's an object\nfunction getRefCurrent(ref: React.ForwardedRef<any>) {\n if (ref && typeof ref === 'object' && 'current' in ref) {\n return ref.current;\n }\n return null;\n}\n\nexport const GiftedChatInboxComponent = forwardRef<any, GiftedChatInboxComponentProps>((props, ref) => {\n // Get safe area insets for proper bottom padding on iOS\n const insets = useSafeAreaInsets();\n const bottomSafeArea = Platform.OS === 'ios' ? insets.bottom : 0;\n\n const {\n messages,\n onSend,\n text,\n onInputTextChanged,\n user,\n images,\n setImages,\n onSelectImages,\n onRemoveImage,\n selectedImage,\n setSelectedImage,\n isUploadingImage,\n loading,\n errorMessage,\n notificationType = 'error',\n onCloseError,\n inputToolbarHeight = 56,\n bottomMargin = 0,\n renderMessageText,\n renderActions,\n renderAccessory,\n renderMessage,\n renderInputToolbar,\n renderChatFooter,\n renderLoadEarlier,\n loadEarlier,\n isLoadingEarlier,\n keyboardVerticalOffset = Platform.OS === 'ios' ? 64 : 0,\n placeholder = 'Jot something down',\n listViewProps,\n wrapInSafeArea = true,\n minComposerHeight = 36,\n maxComposerHeight = 100,\n renderFooter,\n lightboxProps = {\n underlayColor: 'transparent',\n springConfig: { tension: 90000, friction: 90000 },\n disabled: true,\n },\n infiniteScroll = false,\n alwaysShowSend = true,\n minInputToolbarHeight = 30,\n textInputProps = {\n multiline: true,\n returnKeyType: 'default',\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: colors.gray[400],\n },\n messagesContainerStyle = { paddingTop: 8 },\n renderHeader,\n ...rest\n } = props;\n\n // Error Notification\n const renderErrorNotification = () => {\n if (!errorMessage) return null;\n return (\n <Animated.View\n style={{\n position: 'absolute',\n top: 10,\n left: 10,\n right: 10,\n backgroundColor: notificationType === 'error' ? '#f44336' : '#ff9800',\n padding: 15,\n borderRadius: 8,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.25,\n shadowRadius: 3.84,\n elevation: 5,\n zIndex: 1000,\n }}\n >\n <View style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n <View>\n <Text style={{ color: 'white', fontWeight: 'bold' }}>\n {notificationType === 'error' ? 'Error' : 'Warning'}\n </Text>\n </View>\n <View>\n <TouchableOpacity onPress={onCloseError}>\n <Ionicons name=\"close\" size={20} color=\"white\" />\n </TouchableOpacity>\n </View>\n </View>\n <Text style={{ color: 'white', marginTop: 5 }}>{errorMessage}</Text>\n </Animated.View>\n );\n };\n\n const renderInputToolbarDefault = useCallback(\n (props) => (\n <View style={{ backgroundColor: '#fff', paddingBottom: Math.max(4, bottomSafeArea), paddingTop: 4 }}>\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n minHeight: 44,\n maxHeight: 56,\n backgroundColor: '#fff',\n borderRadius: 22,\n marginHorizontal: 8,\n paddingHorizontal: 8,\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n }}\n >\n <TouchableOpacity\n onPress={onSelectImages}\n style={{\n width: 32,\n height: 32,\n borderRadius: 16,\n backgroundColor: '#fff',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 8,\n }}\n >\n <MaterialIcons name=\"add\" size={24} color=\"#888\" />\n </TouchableOpacity>\n <TextInput\n ref={ref}\n style={{\n flex: 1,\n //minHeight: 36,\n maxHeight: 44,\n backgroundColor: 'transparent',\n color: '#444',\n paddingHorizontal: 8,\n paddingVertical: 0,\n alignSelf: 'center',\n textAlignVertical: 'center',\n }}\n placeholder={placeholder || 'Jot something down'}\n placeholderTextColor={colors.gray[400]}\n multiline\n value={text}\n onChangeText={onInputTextChanged}\n />\n <TouchableOpacity\n onPress={() => onSend([{ text: text }])}\n // disabled={(!messageText.trim() && images.length === 0) || isUploadingImage || loading}\n disabled={false}\n style={{\n marginLeft: 8,\n // opacity: (!messageText.trim() && images.length === 0) || isUploadingImage || loading ? 0.5 : 1,\n opacity: !text.trim() && images.length === 0 ? 0.5 : 1,\n }}\n >\n <MaterialCommunityIcons\n name=\"send-circle\"\n size={32}\n color={!text.trim() && images.length === 0 ? colors.gray[400] : colors.blue[500]}\n // color={\n // (!messageText.trim() && images.length === 0) || isUploadingImage || loading\n // ? colors.gray[400]\n // : colors.blue[500]\n // }\n />\n </TouchableOpacity>\n </View>\n {/* Selected Images Row */}\n {images && images.length > 0 && (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={{ marginTop: 4, marginLeft: 8 }}\n >\n {images.map((img, index) => (\n <View\n key={`image-preview-${index}`}\n style={{\n width: 48,\n height: 48,\n marginRight: 8,\n borderRadius: 6,\n overflow: 'hidden',\n position: 'relative',\n backgroundColor: colors.gray[200],\n }}\n >\n <Image\n source={{ uri: img.uri || img.url }}\n style={{ width: '100%', height: '100%' }}\n alt={`selected image ${index + 1}`}\n />\n <TouchableOpacity\n onPress={() => {\n onRemoveImage(index);\n }}\n style={{\n position: 'absolute',\n top: 2,\n right: 2,\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 10,\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Ionicons name=\"close\" size={14} color=\"white\" />\n </TouchableOpacity>\n </View>\n ))}\n </ScrollView>\n )}\n </View>\n ),\n [\n onSelectImages,\n text,\n images,\n isUploadingImage,\n loading,\n onSend,\n onRemoveImage,\n placeholder,\n ref,\n bottomSafeArea,\n onInputTextChanged,\n ],\n );\n\n const renderAccessoryDefault = useCallback(() => {\n if (!images.length) return null;\n return (\n <Box style={{ position: 'relative', height: 70, backgroundColor: 'transparent', justifyContent: 'center' }}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={{\n flexDirection: 'row',\n paddingLeft: 15,\n paddingRight: 5,\n }}\n contentContainerStyle={{\n alignItems: 'center',\n height: '100%',\n }}\n >\n {images.map((img, index) => (\n <View\n key={`image-preview-${index}`}\n style={{\n width: 40,\n height: 40,\n marginRight: 15,\n borderRadius: 4,\n backgroundColor: colors.gray[200],\n overflow: 'hidden',\n borderWidth: 1,\n borderColor: '#e0e0e0',\n position: 'relative',\n zIndex: 10,\n }}\n >\n <Image\n source={{ uri: img.uri || img.url }}\n style={{ width: '100%', height: '100%' }}\n alt={`selected image ${index + 1}`}\n />\n {/* Cross button at top right */}\n <TouchableOpacity\n onPress={() => {\n const newImages = [...images];\n newImages.splice(index, 1);\n setImages(newImages);\n if (newImages.length === 0) {\n setSelectedImage('');\n const inputRef = getRefCurrent(ref);\n if (inputRef && typeof inputRef.focus === 'function') {\n inputRef.focus();\n }\n }\n }}\n style={{\n position: 'absolute',\n top: -1,\n right: -1,\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 12,\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n }}\n >\n <Ionicons name=\"close\" size={16} color=\"white\" />\n </TouchableOpacity>\n </View>\n ))}\n </ScrollView>\n </Box>\n );\n }, [images, setImages, setSelectedImage, ref]);\n\n return (\n <KeyboardAvoidingView\n style={{ flex: 1, justifyContent: 'flex-end', backgroundColor: '#fff' }}\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n keyboardVerticalOffset={keyboardVerticalOffset}\n >\n <View\n style={{\n flex: 1,\n backgroundColor: '#fff',\n position: 'relative',\n marginBottom: bottomMargin,\n }}\n >\n {renderErrorNotification()}\n {loading && <Spinner color={colors.blue[500]} />}\n <GiftedChat\n ref={ref}\n wrapInSafeArea={wrapInSafeArea}\n messages={messages}\n onSend={onSend}\n text={text}\n onInputTextChanged={onInputTextChanged}\n user={user}\n renderMessageText={renderMessageText}\n renderActions={renderActions || null}\n renderAccessory={renderAccessory || renderAccessoryDefault}\n renderMessage={renderMessage}\n renderInputToolbar={renderInputToolbar || renderInputToolbarDefault}\n renderLoading={props.renderLoading || null}\n renderChatFooter={renderChatFooter}\n renderLoadEarlier={renderLoadEarlier}\n listViewProps={listViewProps}\n loadEarlier={loadEarlier}\n isLoadingEarlier={isLoadingEarlier}\n bottomOffset={(props.bottomOffset || 0) + bottomSafeArea}\n isKeyboardInternallyHandled={props.isKeyboardInternallyHandled || false}\n renderFooter={() => (renderFooter ? renderFooter() : null)}\n minComposerHeight={minComposerHeight}\n maxComposerHeight={maxComposerHeight}\n placeholder={placeholder || 'Jot something down'}\n lightboxProps={lightboxProps}\n infiniteScroll={infiniteScroll}\n alwaysShowSend={alwaysShowSend}\n minInputToolbarHeight={minInputToolbarHeight}\n textInputProps={textInputProps}\n messagesContainerStyle={messagesContainerStyle}\n isTyping={props.isTyping || false}\n renderChatEmpty={props.renderChatEmpty || null}\n {...rest}\n />\n </View>\n </KeyboardAvoidingView>\n );\n});\n\nexport default GiftedChatInboxComponent;\n"],"names":["React","props"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React__default from'react';import {Modal,View,StyleSheet,Pressable,Text}from'react-native';const ImageViewerModal = ({
1
+ import React__default from'react';import {Modal,View,Pressable,Text,StyleSheet}from'react-native';const ImageViewerModal = ({
2
2
  children,
3
3
  isVisible = false,
4
4
  setVisible,
@@ -31,6 +31,7 @@ const styles = StyleSheet.create({
31
31
  width: "100%",
32
32
  alignItems: "center",
33
33
  justifyContent: "space-between",
34
+ // backgroundColor:'rgba(r, g, b, a)',
34
35
  backgroundColor: "#000",
35
36
  paddingTop: 50,
36
37
  paddingBottom: 10
@@ -86,6 +87,7 @@ const styles = StyleSheet.create({
86
87
  },
87
88
  headerTextStyle: {
88
89
  color: "#fff",
90
+ // fontWeight: 'bold',
89
91
  textAlign: "center",
90
92
  fontSize: 20
91
93
  },