@ethora/chat-component-rn 26.5.10 → 26.5.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -1
- package/README.md +30 -1
- package/lib/commonjs/assets/icons.js +7 -1
- package/lib/commonjs/assets/icons.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +31 -16
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatRoom.js +34 -4
- package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js +17 -14
- package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MediaMessage.js +298 -12
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/InteractionsOverlay.js +119 -0
- package/lib/commonjs/components/MessageBubble/InteractionsOverlay.js.map +1 -0
- package/lib/commonjs/components/MessageBubble/Message.js +39 -3
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +87 -39
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js +153 -62
- package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +20 -5
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/DocumentViewer.js +5 -44
- package/lib/commonjs/components/Modals/FilePreviewModal/DocumentViewer.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +40 -3
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/GViewWebView.js +149 -0
- package/lib/commonjs/components/Modals/FilePreviewModal/GViewWebView.js.map +1 -0
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +4 -17
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/commonjs/components/Modals/ModalHeaderComponent.js +10 -0
- package/lib/commonjs/components/Modals/ModalHeaderComponent.js.map +1 -1
- package/lib/commonjs/components/Modals/styledModalComponents.js +13 -4
- package/lib/commonjs/components/Modals/styledModalComponents.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js +19 -33
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/commonjs/components/styled/AudioMessage.js +643 -66
- package/lib/commonjs/components/styled/AudioMessage.js.map +1 -1
- package/lib/commonjs/components/styled/Button.js +9 -3
- package/lib/commonjs/components/styled/Button.js.map +1 -1
- package/lib/commonjs/components/styled/SendInput.js +239 -40
- package/lib/commonjs/components/styled/SendInput.js.map +1 -1
- package/lib/commonjs/components/styled/StyledComponents.js +6 -3
- package/lib/commonjs/components/styled/StyledComponents.js.map +1 -1
- package/lib/commonjs/components/styled/StyledInputComponents/MediaComponents.js +31 -18
- package/lib/commonjs/components/styled/StyledInputComponents/MediaComponents.js.map +1 -1
- package/lib/commonjs/components/styled/UnsupportedType.js +47 -5
- package/lib/commonjs/components/styled/UnsupportedType.js.map +1 -1
- package/lib/commonjs/components/styled/VideoMessage.js +44 -25
- package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
- package/lib/commonjs/context/xmppProvider.js +5 -2
- package/lib/commonjs/context/xmppProvider.js.map +1 -1
- package/lib/commonjs/helpers/keyboardLayout.js +5 -3
- package/lib/commonjs/helpers/keyboardLayout.js.map +1 -1
- package/lib/commonjs/helpers/mimeToExtension.js +123 -0
- package/lib/commonjs/helpers/mimeToExtension.js.map +1 -1
- package/lib/commonjs/hooks/useEventHandlers.js +1 -1
- package/lib/commonjs/hooks/useEventHandlers.js.map +1 -1
- package/lib/commonjs/hooks/useLogout.js +33 -8
- package/lib/commonjs/hooks/useLogout.js.map +1 -1
- package/lib/commonjs/hooks/useSendMessage.js +6 -3
- package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
- package/lib/commonjs/networking/api-requests/rooms.api.js +29 -4
- package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/commonjs/roomStore/roomsSlice.js +6 -0
- package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
- package/lib/module/assets/icons.js +7 -1
- package/lib/module/assets/icons.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +31 -16
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatRoom.js +36 -6
- package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/module/components/MainComponents/ChatWrapper.js +17 -14
- package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/MediaMessage.js +301 -15
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MessageBubble/InteractionsOverlay.js +112 -0
- package/lib/module/components/MessageBubble/InteractionsOverlay.js.map +1 -0
- package/lib/module/components/MessageBubble/Message.js +40 -4
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +89 -41
- package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/module/components/Modals/AttachSheet/AttachSheet.js +155 -64
- package/lib/module/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +20 -5
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/DocumentViewer.js +5 -45
- package/lib/module/components/Modals/FilePreviewModal/DocumentViewer.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +41 -4
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/GViewWebView.js +144 -0
- package/lib/module/components/Modals/FilePreviewModal/GViewWebView.js.map +1 -0
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js +3 -17
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/module/components/Modals/ModalHeaderComponent.js +10 -0
- package/lib/module/components/Modals/ModalHeaderComponent.js.map +1 -1
- package/lib/module/components/Modals/styledModalComponents.js +13 -4
- package/lib/module/components/Modals/styledModalComponents.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js +20 -34
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/module/components/styled/AudioMessage.js +644 -67
- package/lib/module/components/styled/AudioMessage.js.map +1 -1
- package/lib/module/components/styled/Button.js +9 -3
- package/lib/module/components/styled/Button.js.map +1 -1
- package/lib/module/components/styled/SendInput.js +240 -42
- package/lib/module/components/styled/SendInput.js.map +1 -1
- package/lib/module/components/styled/StyledComponents.js +6 -3
- package/lib/module/components/styled/StyledComponents.js.map +1 -1
- package/lib/module/components/styled/StyledInputComponents/MediaComponents.js +31 -18
- package/lib/module/components/styled/StyledInputComponents/MediaComponents.js.map +1 -1
- package/lib/module/components/styled/UnsupportedType.js +47 -5
- package/lib/module/components/styled/UnsupportedType.js.map +1 -1
- package/lib/module/components/styled/VideoMessage.js +45 -26
- package/lib/module/components/styled/VideoMessage.js.map +1 -1
- package/lib/module/context/xmppProvider.js +5 -2
- package/lib/module/context/xmppProvider.js.map +1 -1
- package/lib/module/helpers/keyboardLayout.js +4 -2
- package/lib/module/helpers/keyboardLayout.js.map +1 -1
- package/lib/module/helpers/mimeToExtension.js +119 -0
- package/lib/module/helpers/mimeToExtension.js.map +1 -1
- package/lib/module/hooks/useEventHandlers.js +1 -1
- package/lib/module/hooks/useEventHandlers.js.map +1 -1
- package/lib/module/hooks/useLogout.js +33 -8
- package/lib/module/hooks/useLogout.js.map +1 -1
- package/lib/module/hooks/useSendMessage.js +6 -3
- package/lib/module/hooks/useSendMessage.js.map +1 -1
- package/lib/module/networking/api-requests/rooms.api.js +29 -4
- package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/module/roomStore/roomsSlice.js +6 -0
- package/lib/module/roomStore/roomsSlice.js.map +1 -1
- package/lib/typescript/assets/icons.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/InteractionsOverlay.d.ts +13 -0
- package/lib/typescript/components/MessageBubble/InteractionsOverlay.d.ts.map +1 -0
- package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
- package/lib/typescript/components/Modals/AttachSheet/AttachSheet.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/DocumentViewer.d.ts +0 -7
- package/lib/typescript/components/Modals/FilePreviewModal/DocumentViewer.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/GViewWebView.d.ts +8 -0
- package/lib/typescript/components/Modals/FilePreviewModal/GViewWebView.d.ts.map +1 -0
- package/lib/typescript/components/Modals/FilePreviewModal/PdfView.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ModalHeaderComponent.d.ts.map +1 -1
- package/lib/typescript/components/Modals/styledModalComponents.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastAudioMessage.d.ts.map +1 -1
- package/lib/typescript/components/styled/AudioMessage.d.ts +8 -2
- package/lib/typescript/components/styled/AudioMessage.d.ts.map +1 -1
- package/lib/typescript/components/styled/Button.d.ts.map +1 -1
- package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
- package/lib/typescript/components/styled/StyledComponents.d.ts.map +1 -1
- package/lib/typescript/components/styled/StyledInputComponents/MediaComponents.d.ts +5 -1
- package/lib/typescript/components/styled/StyledInputComponents/MediaComponents.d.ts.map +1 -1
- package/lib/typescript/components/styled/UnsupportedType.d.ts +5 -0
- package/lib/typescript/components/styled/UnsupportedType.d.ts.map +1 -1
- package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
- package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
- package/lib/typescript/helpers/keyboardLayout.d.ts +3 -1
- package/lib/typescript/helpers/keyboardLayout.d.ts.map +1 -1
- package/lib/typescript/helpers/mimeToExtension.d.ts +38 -0
- package/lib/typescript/helpers/mimeToExtension.d.ts.map +1 -1
- package/lib/typescript/hooks/useLogout.d.ts +23 -1
- package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
- package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
- package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
- package/lib/typescript/types/models/modal.model.d.ts +3 -0
- package/lib/typescript/types/models/modal.model.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +29 -0
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/package.json +11 -4
- package/src/assets/icons.tsx +30 -25
- package/src/components/MainComponents/ChatHeader.tsx +46 -15
- package/src/components/MainComponents/ChatRoom.tsx +38 -3
- package/src/components/MainComponents/ChatWrapper.tsx +28 -21
- package/src/components/MainComponents/MediaMessage.tsx +304 -11
- package/src/components/MessageBubble/InteractionsOverlay.tsx +121 -0
- package/src/components/MessageBubble/Message.tsx +44 -3
- package/src/components/MessageBubble/MessageInteractions.tsx +103 -52
- package/src/components/Modals/AttachSheet/AttachSheet.tsx +144 -51
- package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +25 -3
- package/src/components/Modals/FilePreviewModal/DocumentViewer.tsx +3 -40
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +48 -4
- package/src/components/Modals/FilePreviewModal/GViewWebView.tsx +142 -0
- package/src/components/Modals/FilePreviewModal/PdfView.tsx +2 -18
- package/src/components/Modals/ModalHeaderComponent.tsx +8 -1
- package/src/components/Modals/styledModalComponents.tsx +13 -4
- package/src/components/RoomComponents/styled/LastAudioMessage.tsx +20 -35
- package/src/components/styled/AudioMessage.tsx +724 -59
- package/src/components/styled/Button.tsx +20 -11
- package/src/components/styled/SendInput.tsx +255 -46
- package/src/components/styled/StyledComponents.ts +6 -3
- package/src/components/styled/StyledInputComponents/MediaComponents.tsx +29 -18
- package/src/components/styled/UnsupportedType.tsx +60 -6
- package/src/components/styled/VideoMessage.tsx +21 -5
- package/src/context/xmppProvider.tsx +6 -2
- package/src/helpers/keyboardLayout.ts +5 -1
- package/src/helpers/mimeToExtension.ts +178 -0
- package/src/hooks/useEventHandlers.tsx +1 -1
- package/src/hooks/useLogout.tsx +33 -10
- package/src/hooks/useSendMessage.tsx +12 -6
- package/src/networking/api-requests/rooms.api.ts +31 -7
- package/src/roomStore/roomsSlice.ts +7 -0
- package/src/types/models/modal.model.ts +3 -0
- package/src/types/types.ts +29 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { useMemo, useState } from 'react';
|
|
3
|
+
import React, { useEffect, useId, useMemo, useState } from 'react';
|
|
4
4
|
import { Delimeter, MenuItem } from '../ContextMenu/ContextMenuComponents';
|
|
5
5
|
import { useSelector } from 'react-redux';
|
|
6
6
|
import { MESSAGE_INTERACTIONS, MESSAGE_INTERACTIONS_ICONS } from '../../helpers/constants/MESSAGE_INTERACTIONS';
|
|
7
|
-
import {
|
|
7
|
+
import { Text, StyleSheet, View, Pressable, Dimensions, Keyboard } from 'react-native';
|
|
8
8
|
import * as Clipboard from 'expo-clipboard';
|
|
9
9
|
import { useToast } from '../../context/ToastContext';
|
|
10
|
+
import { useInteractionsOverlay } from './InteractionsOverlay';
|
|
10
11
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
11
12
|
const MessageInteractions = ({
|
|
12
13
|
isReply,
|
|
@@ -21,11 +22,32 @@ const MessageInteractions = ({
|
|
|
21
22
|
const {
|
|
22
23
|
showToast
|
|
23
24
|
} = useToast();
|
|
25
|
+
const {
|
|
26
|
+
present,
|
|
27
|
+
dismiss,
|
|
28
|
+
originX,
|
|
29
|
+
originY
|
|
30
|
+
} = useInteractionsOverlay();
|
|
31
|
+
const overlayId = useId();
|
|
24
32
|
const config = useSelector(state => state.chatSettingStore.config);
|
|
25
33
|
const [menuSize, setMenuSize] = useState({
|
|
26
34
|
width: 0,
|
|
27
35
|
height: 0
|
|
28
36
|
});
|
|
37
|
+
|
|
38
|
+
// Live keyboard height so the menu knows the REAL space below the message.
|
|
39
|
+
// Without this the position math used the full screen height and happily
|
|
40
|
+
// opened the menu downward into the area the keyboard now covers, hiding
|
|
41
|
+
// it under the keyboard / behind the input. Seeded from current metrics so
|
|
42
|
+
// an already-open keyboard (the common case: menu opened while typing) is
|
|
43
|
+
// accounted for on first render, not only after the next show event.
|
|
44
|
+
const [keyboardHeight, setKeyboardHeight] = useState(() => Keyboard.metrics?.()?.height ?? 0);
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
const onShow = e => setKeyboardHeight(e?.endCoordinates?.height ?? 0);
|
|
47
|
+
const onHide = () => setKeyboardHeight(0);
|
|
48
|
+
const subs = [Keyboard.addListener('keyboardDidShow', onShow), Keyboard.addListener('keyboardDidChangeFrame', onShow), Keyboard.addListener('keyboardDidHide', onHide)];
|
|
49
|
+
return () => subs.forEach(s => s.remove());
|
|
50
|
+
}, []);
|
|
29
51
|
const handleMenuLayout = e => {
|
|
30
52
|
const {
|
|
31
53
|
width,
|
|
@@ -79,7 +101,13 @@ const MessageInteractions = ({
|
|
|
79
101
|
const bottomReserve = (config?.keyboardVerticalOffset ?? 0) + 24;
|
|
80
102
|
const topReserve = 16;
|
|
81
103
|
const sideMargin = 8;
|
|
82
|
-
|
|
104
|
+
|
|
105
|
+
// The keyboard occludes the bottom `keyboardHeight` px, so the real
|
|
106
|
+
// visible bottom edge is above it. Measuring space below against this
|
|
107
|
+
// (not the full screen) is what makes the menu flip ABOVE the message
|
|
108
|
+
// when the keyboard is open and the message sits near the input.
|
|
109
|
+
const visibleBottom = screenHeight - keyboardHeight;
|
|
110
|
+
const spaceBelow = visibleBottom - position.bottom - bottomReserve;
|
|
83
111
|
const spaceAbove = position.top - topReserve;
|
|
84
112
|
let top;
|
|
85
113
|
if (spaceBelow >= menuSize.height) {
|
|
@@ -87,7 +115,7 @@ const MessageInteractions = ({
|
|
|
87
115
|
} else if (spaceAbove >= menuSize.height) {
|
|
88
116
|
top = position.top - menuSize.height;
|
|
89
117
|
} else {
|
|
90
|
-
top = Math.max(topReserve,
|
|
118
|
+
top = Math.max(topReserve, visibleBottom - menuSize.height - bottomReserve);
|
|
91
119
|
}
|
|
92
120
|
const leftMargin = position.left;
|
|
93
121
|
const rightMargin = screenWidth - position.right;
|
|
@@ -98,49 +126,69 @@ const MessageInteractions = ({
|
|
|
98
126
|
top,
|
|
99
127
|
left
|
|
100
128
|
};
|
|
101
|
-
}, [position, menuSize, config?.keyboardVerticalOffset]);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}), /*#__PURE__*/_jsx(Delimeter, {}), /*#__PURE__*/_jsxs(MenuItem, {
|
|
134
|
-
onPress: handleDeleteMessage,
|
|
129
|
+
}, [position, menuSize, config?.keyboardVerticalOffset, keyboardHeight]);
|
|
130
|
+
|
|
131
|
+
// Window coords (memoPosition) → host-local coords. The overlay host
|
|
132
|
+
// sits below the status bar / header, so subtract its measured origin.
|
|
133
|
+
const localPosition = useMemo(() => {
|
|
134
|
+
if (!memoPosition) {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
...memoPosition,
|
|
139
|
+
top: memoPosition.top - originY,
|
|
140
|
+
left: memoPosition.left - originX
|
|
141
|
+
};
|
|
142
|
+
}, [memoPosition, originX, originY]);
|
|
143
|
+
const content = config?.disableInteractions || message.isDeleted ? null : /*#__PURE__*/_jsxs(View, {
|
|
144
|
+
style: styles.overlayFill,
|
|
145
|
+
children: [/*#__PURE__*/_jsx(Pressable, {
|
|
146
|
+
style: StyleSheet.absoluteFill,
|
|
147
|
+
onPress: closeMenu
|
|
148
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
149
|
+
style: [styles.contextMenu, localPosition],
|
|
150
|
+
onLayout: handleMenuLayout,
|
|
151
|
+
children: [/*#__PURE__*/_jsxs(MenuItem, {
|
|
152
|
+
onPress: () => handleCopyMessage(message.body),
|
|
153
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
154
|
+
style: styles.menuText,
|
|
155
|
+
children: MESSAGE_INTERACTIONS.COPY
|
|
156
|
+
}), /*#__PURE__*/_jsx(MESSAGE_INTERACTIONS_ICONS.COPY, {})]
|
|
157
|
+
}), isUser && /*#__PURE__*/_jsxs(_Fragment, {
|
|
158
|
+
children: [message?.isMediafile !== 'true' && /*#__PURE__*/_jsxs(_Fragment, {
|
|
159
|
+
children: [/*#__PURE__*/_jsx(Delimeter, {}), /*#__PURE__*/_jsxs(MenuItem, {
|
|
160
|
+
onPress: handleEditMessage,
|
|
135
161
|
children: [/*#__PURE__*/_jsx(Text, {
|
|
136
162
|
style: styles.menuText,
|
|
137
|
-
children: MESSAGE_INTERACTIONS.
|
|
138
|
-
}), /*#__PURE__*/_jsx(MESSAGE_INTERACTIONS_ICONS.
|
|
163
|
+
children: MESSAGE_INTERACTIONS.EDIT
|
|
164
|
+
}), /*#__PURE__*/_jsx(MESSAGE_INTERACTIONS_ICONS.EDIT, {})]
|
|
139
165
|
})]
|
|
166
|
+
}), /*#__PURE__*/_jsx(Delimeter, {}), /*#__PURE__*/_jsxs(MenuItem, {
|
|
167
|
+
onPress: handleDeleteMessage,
|
|
168
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
169
|
+
style: styles.menuText,
|
|
170
|
+
children: MESSAGE_INTERACTIONS.DELETE
|
|
171
|
+
}), /*#__PURE__*/_jsx(MESSAGE_INTERACTIONS_ICONS.DELETE, {})]
|
|
140
172
|
})]
|
|
141
173
|
})]
|
|
142
|
-
})
|
|
174
|
+
})]
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
// Render the menu in the in-tree overlay host instead of a React Native
|
|
178
|
+
// <Modal>. A Modal opens its own window on Android, which steals focus
|
|
179
|
+
// from the chat input and dismisses the keyboard when the menu opens;
|
|
180
|
+
// hosting it in the same view tree keeps the keyboard up. Re-run every
|
|
181
|
+
// render so menuSize/position updates refresh the hosted node.
|
|
182
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
183
|
+
useEffect(() => {
|
|
184
|
+
if (content) {
|
|
185
|
+
present(overlayId, content);
|
|
186
|
+
} else {
|
|
187
|
+
dismiss(overlayId);
|
|
188
|
+
}
|
|
143
189
|
});
|
|
190
|
+
useEffect(() => () => dismiss(overlayId), [dismiss, overlayId]);
|
|
191
|
+
return null;
|
|
144
192
|
};
|
|
145
193
|
export default MessageInteractions;
|
|
146
194
|
const styles = StyleSheet.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","useState","Delimeter","MenuItem","useSelector","MESSAGE_INTERACTIONS","MESSAGE_INTERACTIONS_ICONS","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useId","useMemo","useState","Delimeter","MenuItem","useSelector","MESSAGE_INTERACTIONS","MESSAGE_INTERACTIONS_ICONS","Text","StyleSheet","View","Pressable","Dimensions","Keyboard","Clipboard","useToast","useInteractionsOverlay","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","MessageInteractions","isReply","isUser","message","closeMenu","position","handleReplyMessage","replyMessage","handleDeleteMessage","handleEditMessage","showToast","present","dismiss","originX","originY","overlayId","config","state","chatSettingStore","menuSize","setMenuSize","width","height","keyboardHeight","setKeyboardHeight","metrics","onShow","e","endCoordinates","onHide","subs","addListener","forEach","s","remove","handleMenuLayout","nativeEvent","layout","handleCopyMessage","text","setStringAsync","id","Date","now","toString","title","type","err","console","log","memoPosition","undefined","top","bottom","left","opacity","screenWidth","screenHeight","get","bottomReserve","keyboardVerticalOffset","topReserve","sideMargin","visibleBottom","spaceBelow","spaceAbove","Math","max","leftMargin","rightMargin","right","rightAligned","min","localPosition","content","disableInteractions","isDeleted","style","styles","overlayFill","children","absoluteFill","onPress","contextMenu","onLayout","body","menuText","COPY","isMediafile","EDIT","DELETE","create","absoluteFillObject","backgroundColor","paddingVertical","paddingHorizontal","borderRadius","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","minWidth","overflow","fontSize","color","includeFontPadding","textAlignVertical","marginRight"],"sourceRoot":"../../../../src","sources":["components/MessageBubble/MessageInteractions.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
/** @format */
|
|
4
4
|
|
|
5
|
-
import React, { useRef } from 'react';
|
|
6
|
-
import { Modal, Platform, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
|
|
5
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
6
|
+
import { Animated, Easing, Modal, Platform, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
|
|
7
7
|
import { CameraIcon, DocumentIcon, MediaIcon } from '../../../assets/icons';
|
|
8
8
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
// Starting translateY for the sheet. Larger than any realistic sheet
|
|
10
|
+
// height so it sits fully below the viewport before opening; the exact
|
|
11
|
+
// number doesn't matter visually because it animates to 0.
|
|
12
|
+
const SHEET_OFFSCREEN = 600;
|
|
9
13
|
const AttachSheet = ({
|
|
10
14
|
visible,
|
|
11
15
|
onClose,
|
|
@@ -14,20 +18,91 @@ const AttachSheet = ({
|
|
|
14
18
|
onDocument,
|
|
15
19
|
primaryColor = '#0052CD'
|
|
16
20
|
}) => {
|
|
21
|
+
// Pending handler captured on row tap — runs once the EXIT animation
|
|
22
|
+
// finishes so iOS doesn't try to present an image picker over a
|
|
23
|
+
// still-dismissing modal (was the original reason for the
|
|
24
|
+
// platform-split + Modal.onDismiss dance). The animation completion
|
|
25
|
+
// callback now drives this on both platforms.
|
|
17
26
|
const pendingRef = useRef(null);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
|
|
28
|
+
// Local "modal stays mounted while animating out" state. The parent
|
|
29
|
+
// controls `visible`; we mirror it but delay unmount until the exit
|
|
30
|
+
// animation has played so the slide-down is actually seen.
|
|
31
|
+
const [mounted, setMounted] = useState(visible);
|
|
32
|
+
|
|
33
|
+
// Two separate Animated values — the whole point of the rewrite:
|
|
34
|
+
// • backdropOpacity: fades the dim layer in/out (no slide).
|
|
35
|
+
// • sheetTranslateY: slides ONLY the sheet up from below.
|
|
36
|
+
// RN Modal's built-in `animationType="slide"` slides the entire
|
|
37
|
+
// contents (backdrop included) so the dim shade entered from the
|
|
38
|
+
// bottom — what looked "awful". Splitting these gives the standard
|
|
39
|
+
// bottom-sheet feel.
|
|
40
|
+
const backdropOpacity = useRef(new Animated.Value(0)).current;
|
|
41
|
+
const sheetTranslateY = useRef(new Animated.Value(SHEET_OFFSCREEN)).current;
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (visible) {
|
|
44
|
+
setMounted(true);
|
|
45
|
+
// Reset to starting positions BEFORE the Modal becomes visible so
|
|
46
|
+
// the first animated frame is below-the-fold (not a flash of the
|
|
47
|
+
// settled sheet).
|
|
48
|
+
backdropOpacity.setValue(0);
|
|
49
|
+
sheetTranslateY.setValue(SHEET_OFFSCREEN);
|
|
50
|
+
// requestAnimationFrame lets the Modal commit its mount before the
|
|
51
|
+
// animation starts; without this the first frame can be skipped.
|
|
52
|
+
const raf = requestAnimationFrame(() => {
|
|
53
|
+
Animated.parallel([Animated.timing(backdropOpacity, {
|
|
54
|
+
toValue: 1,
|
|
55
|
+
duration: 220,
|
|
56
|
+
easing: Easing.out(Easing.cubic),
|
|
57
|
+
useNativeDriver: true
|
|
58
|
+
}), Animated.spring(sheetTranslateY, {
|
|
59
|
+
toValue: 0,
|
|
60
|
+
// Tuned for a quick-but-not-bouncy entry. tension is the
|
|
61
|
+
// "stiffness" knob, friction the "damping" knob in RN's
|
|
62
|
+
// spring config.
|
|
63
|
+
tension: 90,
|
|
64
|
+
friction: 14,
|
|
65
|
+
useNativeDriver: true
|
|
66
|
+
})]).start();
|
|
67
|
+
});
|
|
68
|
+
return () => cancelAnimationFrame(raf);
|
|
69
|
+
}
|
|
70
|
+
if (!mounted) {
|
|
71
|
+
return;
|
|
30
72
|
}
|
|
73
|
+
// Exit: fade the backdrop, slide the sheet down, then unmount and
|
|
74
|
+
// fire any pending picker handler.
|
|
75
|
+
Animated.parallel([Animated.timing(backdropOpacity, {
|
|
76
|
+
toValue: 0,
|
|
77
|
+
duration: 180,
|
|
78
|
+
easing: Easing.in(Easing.cubic),
|
|
79
|
+
useNativeDriver: true
|
|
80
|
+
}), Animated.timing(sheetTranslateY, {
|
|
81
|
+
toValue: SHEET_OFFSCREEN,
|
|
82
|
+
duration: 220,
|
|
83
|
+
easing: Easing.in(Easing.cubic),
|
|
84
|
+
useNativeDriver: true
|
|
85
|
+
})]).start(({
|
|
86
|
+
finished
|
|
87
|
+
}) => {
|
|
88
|
+
if (!finished) {
|
|
89
|
+
return;
|
|
90
|
+
} // interrupted (rapid re-open) → leave state alone
|
|
91
|
+
setMounted(false);
|
|
92
|
+
const fn = pendingRef.current;
|
|
93
|
+
pendingRef.current = null;
|
|
94
|
+
fn?.();
|
|
95
|
+
});
|
|
96
|
+
return undefined;
|
|
97
|
+
}, [visible]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
98
|
+
|
|
99
|
+
const trigger = handler => () => {
|
|
100
|
+
// Capture the handler and ask parent to close. The exit-animation
|
|
101
|
+
// completion above fires `handler` AFTER the sheet has slid away,
|
|
102
|
+
// so iOS no longer tries to present a picker over a dismissing
|
|
103
|
+
// modal — and Android no longer needs the ad-hoc 150ms setTimeout.
|
|
104
|
+
pendingRef.current = handler;
|
|
105
|
+
onClose();
|
|
31
106
|
};
|
|
32
107
|
const rows = [{
|
|
33
108
|
label: 'Take photo',
|
|
@@ -47,60 +122,76 @@ const AttachSheet = ({
|
|
|
47
122
|
}];
|
|
48
123
|
return /*#__PURE__*/_jsx(Modal, {
|
|
49
124
|
transparent: true,
|
|
50
|
-
visible:
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
125
|
+
visible: mounted
|
|
126
|
+
// We drive the animation ourselves — disable RN's built-in slide
|
|
127
|
+
// (which slid the backdrop too) so the fade + spring above are the
|
|
128
|
+
// only motion.
|
|
129
|
+
,
|
|
130
|
+
animationType: "none",
|
|
131
|
+
onRequestClose: onClose
|
|
132
|
+
// Hardware-back / iOS gesture also routes through onClose, which
|
|
133
|
+
// flips `visible` and triggers our exit animation above.
|
|
134
|
+
,
|
|
135
|
+
children: /*#__PURE__*/_jsxs(Animated.View, {
|
|
136
|
+
style: [styles.backdrop, {
|
|
137
|
+
opacity: backdropOpacity
|
|
138
|
+
}],
|
|
139
|
+
children: [/*#__PURE__*/_jsx(TouchableOpacity, {
|
|
140
|
+
style: StyleSheet.absoluteFill,
|
|
59
141
|
activeOpacity: 1,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
Icon,
|
|
70
|
-
handler
|
|
71
|
-
}, idx) => /*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
72
|
-
activeOpacity: 0.6,
|
|
73
|
-
style: [styles.row, idx < rows.length - 1 && styles.rowDivider],
|
|
74
|
-
onPress: trigger(handler),
|
|
142
|
+
onPress: onClose
|
|
143
|
+
}), /*#__PURE__*/_jsx(Animated.View, {
|
|
144
|
+
style: [styles.sheet, {
|
|
145
|
+
transform: [{
|
|
146
|
+
translateY: sheetTranslateY
|
|
147
|
+
}]
|
|
148
|
+
}],
|
|
149
|
+
children: /*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
150
|
+
activeOpacity: 1,
|
|
75
151
|
children: [/*#__PURE__*/_jsx(View, {
|
|
76
|
-
style:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
children:
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
style: styles.
|
|
91
|
-
|
|
152
|
+
style: styles.grabber
|
|
153
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
154
|
+
style: styles.title,
|
|
155
|
+
children: "Attach"
|
|
156
|
+
}), rows.map(({
|
|
157
|
+
label,
|
|
158
|
+
hint,
|
|
159
|
+
Icon,
|
|
160
|
+
handler
|
|
161
|
+
}, idx) => /*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
162
|
+
activeOpacity: 0.6,
|
|
163
|
+
style: [styles.row, idx < rows.length - 1 && styles.rowDivider],
|
|
164
|
+
onPress: trigger(handler),
|
|
165
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
166
|
+
style: [styles.iconBubble, {
|
|
167
|
+
backgroundColor: primaryColor + '14'
|
|
168
|
+
}],
|
|
169
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
170
|
+
color: primaryColor,
|
|
171
|
+
width: 20,
|
|
172
|
+
height: 20
|
|
173
|
+
})
|
|
174
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
175
|
+
style: styles.rowText,
|
|
176
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
177
|
+
style: styles.rowLabel,
|
|
178
|
+
children: label
|
|
179
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
180
|
+
style: styles.rowHint,
|
|
181
|
+
children: hint
|
|
182
|
+
})]
|
|
92
183
|
})]
|
|
184
|
+
}, label)), /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
185
|
+
activeOpacity: 0.6,
|
|
186
|
+
style: styles.cancelRow,
|
|
187
|
+
onPress: onClose,
|
|
188
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
189
|
+
style: styles.cancelLabel,
|
|
190
|
+
children: "Cancel"
|
|
191
|
+
})
|
|
93
192
|
})]
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
style: styles.cancelRow,
|
|
97
|
-
onPress: onClose,
|
|
98
|
-
children: /*#__PURE__*/_jsx(Text, {
|
|
99
|
-
style: styles.cancelLabel,
|
|
100
|
-
children: "Cancel"
|
|
101
|
-
})
|
|
102
|
-
})]
|
|
103
|
-
})
|
|
193
|
+
})
|
|
194
|
+
})]
|
|
104
195
|
})
|
|
105
196
|
});
|
|
106
197
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useRef","Modal","Platform","StyleSheet","Text","TouchableOpacity","View","CameraIcon","DocumentIcon","MediaIcon","jsx","_jsx","jsxs","_jsxs","AttachSheet","visible","onClose","onCamera","onGallery","onDocument","primaryColor","pendingRef","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","useState","Animated","Easing","Modal","Platform","StyleSheet","Text","TouchableOpacity","View","CameraIcon","DocumentIcon","MediaIcon","jsx","_jsx","jsxs","_jsxs","SHEET_OFFSCREEN","AttachSheet","visible","onClose","onCamera","onGallery","onDocument","primaryColor","pendingRef","mounted","setMounted","backdropOpacity","Value","current","sheetTranslateY","setValue","raf","requestAnimationFrame","parallel","timing","toValue","duration","easing","out","cubic","useNativeDriver","spring","tension","friction","start","cancelAnimationFrame","in","finished","fn","undefined","trigger","handler","rows","label","hint","Icon","transparent","animationType","onRequestClose","children","style","styles","backdrop","opacity","absoluteFill","activeOpacity","onPress","sheet","transform","translateY","grabber","title","map","idx","row","length","rowDivider","iconBubble","backgroundColor","color","width","height","rowText","rowLabel","rowHint","cancelRow","cancelLabel","create","flex","justifyContent","borderTopLeftRadius","borderTopRightRadius","paddingTop","paddingBottom","OS","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","alignSelf","borderRadius","marginBottom","fontSize","fontWeight","letterSpacing","textTransform","paddingHorizontal","flexDirection","alignItems","paddingVertical","borderBottomWidth","hairlineWidth","borderBottomColor","marginRight","marginTop","marginHorizontal"],"sourceRoot":"../../../../../src","sources":["components/Modals/AttachSheet/AttachSheet.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -245,13 +245,20 @@ const ChatProfileModal = ({
|
|
|
245
245
|
}), /*#__PURE__*/_jsxs(CenterContainer, {
|
|
246
246
|
children: [/*#__PURE__*/_jsx(ProfileImagePlaceholder, {
|
|
247
247
|
name: activeRoom.title || activeRoom.name,
|
|
248
|
-
icon: activeRoom.icon
|
|
248
|
+
icon: activeRoom.icon
|
|
249
|
+
// Two gates control whether the icon is editable:
|
|
250
|
+
// 1. role — only non-participants could edit before.
|
|
251
|
+
// 2. NEW: `disableChatInfo.disableIconEdit` — hard kill from
|
|
252
|
+
// config so a consumer can make the icon read-only for
|
|
253
|
+
// everyone (e.g. branded rooms, patient-facing apps).
|
|
254
|
+
// Both must allow it for the picker/remove affordances to show.
|
|
255
|
+
,
|
|
249
256
|
upload: {
|
|
250
257
|
onUpload,
|
|
251
|
-
active: activeRoom?.role !== 'participant'
|
|
258
|
+
active: !config?.disableChatInfo?.disableIconEdit && activeRoom?.role !== 'participant'
|
|
252
259
|
},
|
|
253
260
|
remove: {
|
|
254
|
-
enabled:
|
|
261
|
+
enabled: !config?.disableChatInfo?.disableIconEdit,
|
|
255
262
|
onRemoveClick
|
|
256
263
|
},
|
|
257
264
|
role: activeRoom?.role,
|
|
@@ -314,8 +321,16 @@ const ChatProfileModal = ({
|
|
|
314
321
|
alignItems: 'center',
|
|
315
322
|
justifyContent: 'flex-start',
|
|
316
323
|
gap: 16
|
|
317
|
-
}
|
|
318
|
-
|
|
324
|
+
}
|
|
325
|
+
// `disableChatInfo.disableMemberTap` blocks the
|
|
326
|
+
// tap entirely so the user-profile popup never
|
|
327
|
+
// opens. `disableMemberProfileActions` only hid
|
|
328
|
+
// the action buttons INSIDE that popup, leaving
|
|
329
|
+
// the popup itself to open on tap — this gate
|
|
330
|
+
// closes the door. Customer-reported #16.
|
|
331
|
+
,
|
|
332
|
+
onPress: config?.disableChatInfo?.disableMemberTap ? undefined : () => handleUserAvatarClick(user),
|
|
333
|
+
disabled: !!config?.disableChatInfo?.disableMemberTap,
|
|
319
334
|
children: [/*#__PURE__*/_jsx(ProfileImagePlaceholder, {
|
|
320
335
|
name: `${user.firstName} ${user.lastName}`,
|
|
321
336
|
size: 40
|