stream-chat-react-native-core 9.0.1-beta.1 → 9.0.1-beta.3
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/lib/commonjs/components/Channel/Channel.js +2 -0
- package/lib/commonjs/components/Channel/Channel.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +3 -1
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/commonjs/components/Message/Message.js +99 -74
- package/lib/commonjs/components/Message/Message.js.map +1 -1
- package/lib/commonjs/components/Message/MessageOverlayWrapper.js +64 -0
- package/lib/commonjs/components/Message/MessageOverlayWrapper.js.map +1 -0
- package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js +5 -1
- package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js.map +1 -1
- package/lib/commonjs/components/Message/hooks/useShouldUseOverlayStyles.js +8 -1
- package/lib/commonjs/components/Message/hooks/useShouldUseOverlayStyles.js.map +1 -1
- package/lib/commonjs/components/Message/messageOverlayConstants.js +6 -0
- package/lib/commonjs/components/Message/messageOverlayConstants.js.map +1 -0
- package/lib/commonjs/components/index.js +11 -11
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/contexts/componentsContext/defaultComponents.js +0 -2
- package/lib/commonjs/contexts/componentsContext/defaultComponents.js.map +1 -1
- package/lib/commonjs/contexts/messageContext/MessageContext.js +32 -1
- package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
- package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/commonjs/hooks/index.js +4 -4
- package/lib/commonjs/hooks/index.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Channel/Channel.js +2 -0
- package/lib/module/components/Channel/Channel.js.map +1 -1
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +3 -1
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/module/components/Message/Message.js +99 -74
- package/lib/module/components/Message/Message.js.map +1 -1
- package/lib/module/components/Message/MessageOverlayWrapper.js +64 -0
- package/lib/module/components/Message/MessageOverlayWrapper.js.map +1 -0
- package/lib/module/components/Message/hooks/useCreateMessageContext.js +5 -1
- package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
- package/lib/module/components/Message/hooks/useShouldUseOverlayStyles.js +8 -1
- package/lib/module/components/Message/hooks/useShouldUseOverlayStyles.js.map +1 -1
- package/lib/module/components/Message/messageOverlayConstants.js +6 -0
- package/lib/module/components/Message/messageOverlayConstants.js.map +1 -0
- package/lib/module/components/index.js +11 -11
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/contexts/componentsContext/defaultComponents.js +0 -2
- package/lib/module/contexts/componentsContext/defaultComponents.js.map +1 -1
- package/lib/module/contexts/messageContext/MessageContext.js +32 -1
- package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
- package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/module/hooks/index.js +4 -4
- package/lib/module/hooks/index.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Channel/Channel.d.ts +1 -1
- package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts.map +1 -1
- package/lib/typescript/components/Message/Message.d.ts +1 -1
- package/lib/typescript/components/Message/Message.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageOverlayWrapper.d.ts +18 -0
- package/lib/typescript/components/Message/MessageOverlayWrapper.d.ts.map +1 -0
- package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts +1 -1
- package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts.map +1 -1
- package/lib/typescript/components/Message/hooks/useShouldUseOverlayStyles.d.ts.map +1 -1
- package/lib/typescript/components/Message/messageOverlayConstants.d.ts +2 -0
- package/lib/typescript/components/Message/messageOverlayConstants.d.ts.map +1 -0
- package/lib/typescript/components/index.d.ts +1 -1
- package/lib/typescript/components/index.d.ts.map +1 -1
- package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts +0 -1
- package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts.map +1 -1
- package/lib/typescript/contexts/messageContext/MessageContext.d.ts +26 -0
- package/lib/typescript/contexts/messageContext/MessageContext.d.ts.map +1 -1
- package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +5 -0
- package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts.map +1 -1
- package/lib/typescript/hooks/index.d.ts +1 -1
- package/lib/typescript/hooks/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Channel/Channel.tsx +3 -0
- package/src/components/Channel/hooks/useCreateMessagesContext.ts +3 -0
- package/src/components/Message/Message.tsx +109 -77
- package/src/components/Message/MessageItemView/__tests__/Message.test.js +87 -7
- package/src/components/Message/MessageOverlayWrapper.tsx +81 -0
- package/src/components/Message/hooks/__tests__/useShouldUseOverlayStyles.test.tsx +17 -2
- package/src/components/Message/hooks/useCreateMessageContext.ts +5 -0
- package/src/components/Message/hooks/useShouldUseOverlayStyles.ts +15 -2
- package/src/components/Message/messageOverlayConstants.ts +1 -0
- package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +12 -4
- package/src/components/index.ts +1 -1
- package/src/contexts/componentsContext/defaultComponents.ts +0 -2
- package/src/contexts/messageContext/MessageContext.tsx +44 -0
- package/src/contexts/messagesContext/MessagesContext.tsx +5 -0
- package/src/hooks/index.ts +1 -1
- package/src/version.json +1 -1
- package/lib/commonjs/components/MessageMenu/MessageMenu.js +0 -29
- package/lib/commonjs/components/MessageMenu/MessageMenu.js.map +0 -1
- package/lib/commonjs/hooks/useAudioPlayerControl.js +0 -43
- package/lib/commonjs/hooks/useAudioPlayerControl.js.map +0 -1
- package/lib/module/components/MessageMenu/MessageMenu.js +0 -29
- package/lib/module/components/MessageMenu/MessageMenu.js.map +0 -1
- package/lib/module/hooks/useAudioPlayerControl.js +0 -43
- package/lib/module/hooks/useAudioPlayerControl.js.map +0 -1
- package/lib/typescript/components/MessageMenu/MessageMenu.d.ts +0 -40
- package/lib/typescript/components/MessageMenu/MessageMenu.d.ts.map +0 -1
- package/lib/typescript/hooks/useAudioPlayerControl.d.ts +0 -18
- package/lib/typescript/hooks/useAudioPlayerControl.d.ts.map +0 -1
- package/src/components/MessageMenu/MessageMenu.tsx +0 -107
- package/src/hooks/useAudioPlayerControl.ts +0 -59
|
@@ -9,11 +9,13 @@ import type {
|
|
|
9
9
|
MessagePressableHandlerPayload,
|
|
10
10
|
PressableHandlerPayload,
|
|
11
11
|
} from '../../components/Message/Message';
|
|
12
|
+
import { DEFAULT_MESSAGE_OVERLAY_TARGET_ID } from '../../components/Message/messageOverlayConstants';
|
|
12
13
|
import type { GroupType } from '../../components/MessageList/hooks/useMessageList';
|
|
13
14
|
import type { ChannelContextValue } from '../../contexts/channelContext/ChannelContext';
|
|
14
15
|
import type { MessageContentType } from '../../contexts/messagesContext/MessagesContext';
|
|
15
16
|
import type { DeepPartial } from '../../contexts/themeContext/ThemeContext';
|
|
16
17
|
import type { Theme } from '../../contexts/themeContext/utils/theme';
|
|
18
|
+
import type { Rect } from '../../state-store/message-overlay-store';
|
|
17
19
|
|
|
18
20
|
import type { MessageComposerAPIContextValue } from '../messageComposerContext/MessageComposerAPIContext';
|
|
19
21
|
import { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';
|
|
@@ -100,6 +102,12 @@ export type MessageContextValue = {
|
|
|
100
102
|
onPressIn: ((payload: PressableHandlerPayload) => void) | null;
|
|
101
103
|
/** The images attached to a message */
|
|
102
104
|
otherAttachments: Attachment[];
|
|
105
|
+
/**
|
|
106
|
+
* Registers the subtree that should be measured and portaled into the message overlay.
|
|
107
|
+
* Custom message renderers typically interact with this via `MessageOverlayWrapper`.
|
|
108
|
+
*/
|
|
109
|
+
registerMessageOverlayTarget: (params: { id: string; view: View | null }) => void;
|
|
110
|
+
unregisterMessageOverlayTarget: (id: string) => void;
|
|
103
111
|
reactions: ReactionSummary[];
|
|
104
112
|
/** Read count of the message */
|
|
105
113
|
readBy: number | boolean;
|
|
@@ -164,3 +172,39 @@ export const useMessageContext = () => {
|
|
|
164
172
|
|
|
165
173
|
return contextValue;
|
|
166
174
|
};
|
|
175
|
+
|
|
176
|
+
type MessageOverlayRuntimeContextValue = {
|
|
177
|
+
overlayTargetRectRef: { current: Rect };
|
|
178
|
+
messageOverlayTargetId: string;
|
|
179
|
+
overlayActive: boolean;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const MessageOverlayRuntimeContext = React.createContext<MessageOverlayRuntimeContextValue>({
|
|
183
|
+
overlayTargetRectRef: { current: undefined },
|
|
184
|
+
messageOverlayTargetId: DEFAULT_MESSAGE_OVERLAY_TARGET_ID,
|
|
185
|
+
overlayActive: false,
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
export const MessageOverlayRuntimeProvider = ({
|
|
189
|
+
children,
|
|
190
|
+
value,
|
|
191
|
+
}: PropsWithChildren<{ value: MessageOverlayRuntimeContextValue }>) => (
|
|
192
|
+
<MessageOverlayRuntimeContext.Provider value={value}>
|
|
193
|
+
{children}
|
|
194
|
+
</MessageOverlayRuntimeContext.Provider>
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
export const useMessageOverlayRuntimeContext = () => useContext(MessageOverlayRuntimeContext);
|
|
198
|
+
|
|
199
|
+
const MessageOverlayTargetContext = React.createContext(false);
|
|
200
|
+
|
|
201
|
+
export const MessageOverlayTargetProvider = ({
|
|
202
|
+
children,
|
|
203
|
+
value,
|
|
204
|
+
}: PropsWithChildren<{ value: boolean }>) => (
|
|
205
|
+
<MessageOverlayTargetContext.Provider value={value}>
|
|
206
|
+
{children}
|
|
207
|
+
</MessageOverlayTargetContext.Provider>
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
export const useMessageOverlayTargetContext = () => useContext(MessageOverlayTargetContext);
|
|
@@ -75,6 +75,11 @@ export type MessagesContextValue = Pick<MessageContextValue, 'isMessageAIGenerat
|
|
|
75
75
|
initialScrollToFirstUnreadMessage: boolean;
|
|
76
76
|
/** Order to render the message content */
|
|
77
77
|
messageContentOrder: MessageContentType[];
|
|
78
|
+
/**
|
|
79
|
+
* Overlay target id that should be teleported when a message overlay opens.
|
|
80
|
+
* Custom `MessageOverlayWrapper` usages should pass a matching `targetId`.
|
|
81
|
+
*/
|
|
82
|
+
messageOverlayTargetId?: string;
|
|
78
83
|
removeMessage: (message: { id: string; parent_id?: string }) => Promise<void>;
|
|
79
84
|
/**
|
|
80
85
|
* Override the api request for retry message functionality.
|
package/src/hooks/index.ts
CHANGED
|
@@ -12,7 +12,7 @@ export * from './useClientNotifications';
|
|
|
12
12
|
export * from './useInAppNotificationsState';
|
|
13
13
|
export * from './usePortalSettledCallback';
|
|
14
14
|
export * from './useRAFCoalescedValue';
|
|
15
|
-
export * from './
|
|
15
|
+
export * from './useAudioPlayer';
|
|
16
16
|
export * from './useAttachmentPickerState';
|
|
17
17
|
export * from './messagePreview/useMessageDeliveryStatus';
|
|
18
18
|
export * from './messagePreview/useGroupedAttachments';
|
package/src/version.json
CHANGED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
exports.MessageMenu = void 0;
|
|
6
|
-
var _react = _interopRequireDefault(require("react"));
|
|
7
|
-
var _reactNative = require("react-native");
|
|
8
|
-
var _ThemeContext = require("../../contexts/themeContext/ThemeContext");
|
|
9
|
-
var _BottomSheetModal = require("../UIComponents/BottomSheetModal");
|
|
10
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
-
var _this = this,
|
|
12
|
-
_jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/MessageMenu/MessageMenu.tsx";
|
|
13
|
-
var MessageMenu = exports.MessageMenu = function MessageMenu(props) {
|
|
14
|
-
var dismissOverlay = props.dismissOverlay,
|
|
15
|
-
showMessageReactions = props.showMessageReactions,
|
|
16
|
-
visible = props.visible,
|
|
17
|
-
children = props.children;
|
|
18
|
-
var _useWindowDimensions = (0, _reactNative.useWindowDimensions)(),
|
|
19
|
-
height = _useWindowDimensions.height;
|
|
20
|
-
var _useTheme = (0, _ThemeContext.useTheme)(),
|
|
21
|
-
bottomSheetHeight = _useTheme.theme.messageMenu.bottomSheet.height;
|
|
22
|
-
return (0, _jsxRuntime.jsx)(_BottomSheetModal.BottomSheetModal, {
|
|
23
|
-
height: bottomSheetHeight ? bottomSheetHeight : !showMessageReactions ? height / 5 : height / 2,
|
|
24
|
-
onClose: dismissOverlay,
|
|
25
|
-
visible: visible,
|
|
26
|
-
children: children
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=MessageMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_ThemeContext","_BottomSheetModal","_jsxRuntime","_this","_jsxFileName","MessageMenu","exports","props","dismissOverlay","showMessageReactions","visible","children","_useWindowDimensions","useWindowDimensions","height","_useTheme","useTheme","bottomSheetHeight","theme","messageMenu","bottomSheet","jsx","BottomSheetModal","onClose"],"sourceRoot":"../../../../src","sources":["components/MessageMenu/MessageMenu.tsx"],"mappings":";;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AAKA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AAAoE,IAAAI,WAAA,GAAAJ,OAAA;AAAA,IAAAK,KAAA;EAAAC,YAAA;AA2C7D,IAAMC,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,SAAdA,WAAWA,CAAIE,KAAuB,EAAK;EACtD,IACEC,cAAc,GAeZD,KAAK,CAfPC,cAAc;IAWdC,oBAAoB,GAIlBF,KAAK,CAJPE,oBAAoB;IACpBC,OAAO,GAGLH,KAAK,CAHPG,OAAO;IAEPC,QAAQ,GACNJ,KAAK,CADPI,QAAQ;EAEV,IAAAC,oBAAA,GAAmB,IAAAC,gCAAmB,EAAC,CAAC;IAAhCC,MAAM,GAAAF,oBAAA,CAANE,MAAM;EAkBd,IAAAC,SAAA,GAMI,IAAAC,sBAAQ,EAAC,CAAC;IAHeC,iBAAiB,GAAAF,SAAA,CAF5CG,KAAK,CACHC,WAAW,CACTC,WAAW,CAAIN,MAAM;EAK3B,OACE,IAAAZ,WAAA,CAAAmB,GAAA,EAACpB,iBAAA,CAAAqB,gBAAgB;IACfR,MAAM,EACJG,iBAAiB,GAAGA,iBAAiB,GAAG,CAACR,oBAAoB,GAAGK,MAAM,GAAG,CAAC,GAAGA,MAAM,GAAG,CACvF;IACDS,OAAO,EAAEf,cAAe;IACxBE,OAAO,EAAEA,OAAQ;IAAAC,QAAA,EAEhBA;EAAQ,CACO,CAAC;AAEvB,CAAC","ignoreList":[]}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2
|
-
value: true
|
|
3
|
-
});
|
|
4
|
-
exports.useAudioPlayerControl = void 0;
|
|
5
|
-
var _react = require("react");
|
|
6
|
-
var _AudioPlayerContext = require("../contexts/audioPlayerContext/AudioPlayerContext");
|
|
7
|
-
var makeAudioPlayerId = function makeAudioPlayerId(_ref) {
|
|
8
|
-
var requester = _ref.requester,
|
|
9
|
-
src = _ref.src,
|
|
10
|
-
id = _ref.id;
|
|
11
|
-
return `${requester != null ? requester : 'requester-unknown'}:${src}:${id != null ? id : ''}`;
|
|
12
|
-
};
|
|
13
|
-
var useAudioPlayerControl = exports.useAudioPlayerControl = function useAudioPlayerControl(_ref2) {
|
|
14
|
-
var duration = _ref2.duration,
|
|
15
|
-
mimeType = _ref2.mimeType,
|
|
16
|
-
playbackRates = _ref2.playbackRates,
|
|
17
|
-
previewVoiceRecording = _ref2.previewVoiceRecording,
|
|
18
|
-
_ref2$requester = _ref2.requester,
|
|
19
|
-
requester = _ref2$requester === void 0 ? '' : _ref2$requester,
|
|
20
|
-
type = _ref2.type,
|
|
21
|
-
uri = _ref2.uri,
|
|
22
|
-
fileId = _ref2.id;
|
|
23
|
-
var _useAudioPlayerContex = (0, _AudioPlayerContext.useAudioPlayerContext)(),
|
|
24
|
-
audioPlayerPool = _useAudioPlayerContex.audioPlayerPool;
|
|
25
|
-
var id = makeAudioPlayerId({
|
|
26
|
-
id: fileId,
|
|
27
|
-
requester: requester,
|
|
28
|
-
src: uri != null ? uri : ''
|
|
29
|
-
});
|
|
30
|
-
var audioPlayer = (0, _react.useMemo)(function () {
|
|
31
|
-
return audioPlayerPool == null ? void 0 : audioPlayerPool.getOrAddPlayer({
|
|
32
|
-
duration: duration != null ? duration : 0,
|
|
33
|
-
id: id,
|
|
34
|
-
mimeType: mimeType != null ? mimeType : '',
|
|
35
|
-
playbackRates: playbackRates,
|
|
36
|
-
previewVoiceRecording: previewVoiceRecording,
|
|
37
|
-
type: type != null ? type : 'audio',
|
|
38
|
-
uri: uri != null ? uri : ''
|
|
39
|
-
});
|
|
40
|
-
}, [audioPlayerPool, duration, id, mimeType, playbackRates, previewVoiceRecording, type, uri]);
|
|
41
|
-
return audioPlayer;
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=useAudioPlayerControl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_AudioPlayerContext","makeAudioPlayerId","_ref","requester","src","id","useAudioPlayerControl","exports","_ref2","duration","mimeType","playbackRates","previewVoiceRecording","_ref2$requester","type","uri","fileId","_useAudioPlayerContex","useAudioPlayerContext","audioPlayerPool","audioPlayer","useMemo","getOrAddPlayer"],"sourceRoot":"../../../src","sources":["hooks/useAudioPlayerControl.ts"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,mBAAA,GAAAD,OAAA;AAmBA,IAAME,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAAC,IAAA;EAAA,IACrBC,SAAS,GAAAD,IAAA,CAATC,SAAS;IACTC,GAAG,GAAAF,IAAA,CAAHE,GAAG;IACHC,EAAE,GAAAH,IAAA,CAAFG,EAAE;EAAA,OAKE,GAAGF,SAAS,WAATA,SAAS,GAAI,mBAAmB,IAAIC,GAAG,IAAIC,EAAE,WAAFA,EAAE,GAAI,EAAE,EAAE;AAAA;AAEvD,IAAMC,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG,SAAxBA,qBAAqBA,CAAAE,KAAA,EASA;EAAA,IARhCC,QAAQ,GAAAD,KAAA,CAARC,QAAQ;IACRC,QAAQ,GAAAF,KAAA,CAARE,QAAQ;IACRC,aAAa,GAAAH,KAAA,CAAbG,aAAa;IACbC,qBAAqB,GAAAJ,KAAA,CAArBI,qBAAqB;IAAAC,eAAA,GAAAL,KAAA,CACrBL,SAAS;IAATA,SAAS,GAAAU,eAAA,cAAG,EAAE,GAAAA,eAAA;IACdC,IAAI,GAAAN,KAAA,CAAJM,IAAI;IACJC,GAAG,GAAAP,KAAA,CAAHO,GAAG;IACCC,MAAM,GAAAR,KAAA,CAAVH,EAAE;EAEF,IAAAY,qBAAA,GAA4B,IAAAC,yCAAqB,EAAC,CAAC;IAA3CC,eAAe,GAAAF,qBAAA,CAAfE,eAAe;EACvB,IAAMd,EAAE,GAAGJ,iBAAiB,CAAC;IAAEI,EAAE,EAAEW,MAAM;IAAEb,SAAS,EAATA,SAAS;IAAEC,GAAG,EAAEW,GAAG,WAAHA,GAAG,GAAI;EAAG,CAAC,CAAC;EACvE,IAAMK,WAAW,GAAG,IAAAC,cAAO,EACzB;IAAA,OACEF,eAAe,oBAAfA,eAAe,CAAEG,cAAc,CAAC;MAC9Bb,QAAQ,EAAEA,QAAQ,WAARA,QAAQ,GAAI,CAAC;MACvBJ,EAAE,EAAFA,EAAE;MACFK,QAAQ,EAAEA,QAAQ,WAARA,QAAQ,GAAI,EAAE;MACxBC,aAAa,EAAbA,aAAa;MACbC,qBAAqB,EAArBA,qBAAqB;MACrBE,IAAI,EAAEA,IAAI,WAAJA,IAAI,GAAI,OAAO;MACrBC,GAAG,EAAEA,GAAG,WAAHA,GAAG,GAAI;IACd,CAAC,CAAC;EAAA,GACJ,CAACI,eAAe,EAAEV,QAAQ,EAAEJ,EAAE,EAAEK,QAAQ,EAAEC,aAAa,EAAEC,qBAAqB,EAAEE,IAAI,EAAEC,GAAG,CAC3F,CAAC;EAED,OAAOK,WAAW;AACpB,CAAC","ignoreList":[]}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
exports.MessageMenu = void 0;
|
|
6
|
-
var _react = _interopRequireDefault(require("react"));
|
|
7
|
-
var _reactNative = require("react-native");
|
|
8
|
-
var _ThemeContext = require("../../contexts/themeContext/ThemeContext");
|
|
9
|
-
var _BottomSheetModal = require("../UIComponents/BottomSheetModal");
|
|
10
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
-
var _this = this,
|
|
12
|
-
_jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/MessageMenu/MessageMenu.tsx";
|
|
13
|
-
var MessageMenu = exports.MessageMenu = function MessageMenu(props) {
|
|
14
|
-
var dismissOverlay = props.dismissOverlay,
|
|
15
|
-
showMessageReactions = props.showMessageReactions,
|
|
16
|
-
visible = props.visible,
|
|
17
|
-
children = props.children;
|
|
18
|
-
var _useWindowDimensions = (0, _reactNative.useWindowDimensions)(),
|
|
19
|
-
height = _useWindowDimensions.height;
|
|
20
|
-
var _useTheme = (0, _ThemeContext.useTheme)(),
|
|
21
|
-
bottomSheetHeight = _useTheme.theme.messageMenu.bottomSheet.height;
|
|
22
|
-
return (0, _jsxRuntime.jsx)(_BottomSheetModal.BottomSheetModal, {
|
|
23
|
-
height: bottomSheetHeight ? bottomSheetHeight : !showMessageReactions ? height / 5 : height / 2,
|
|
24
|
-
onClose: dismissOverlay,
|
|
25
|
-
visible: visible,
|
|
26
|
-
children: children
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=MessageMenu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_ThemeContext","_BottomSheetModal","_jsxRuntime","_this","_jsxFileName","MessageMenu","exports","props","dismissOverlay","showMessageReactions","visible","children","_useWindowDimensions","useWindowDimensions","height","_useTheme","useTheme","bottomSheetHeight","theme","messageMenu","bottomSheet","jsx","BottomSheetModal","onClose"],"sourceRoot":"../../../../src","sources":["components/MessageMenu/MessageMenu.tsx"],"mappings":";;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AAKA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AAAoE,IAAAI,WAAA,GAAAJ,OAAA;AAAA,IAAAK,KAAA;EAAAC,YAAA;AA2C7D,IAAMC,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,SAAdA,WAAWA,CAAIE,KAAuB,EAAK;EACtD,IACEC,cAAc,GAeZD,KAAK,CAfPC,cAAc;IAWdC,oBAAoB,GAIlBF,KAAK,CAJPE,oBAAoB;IACpBC,OAAO,GAGLH,KAAK,CAHPG,OAAO;IAEPC,QAAQ,GACNJ,KAAK,CADPI,QAAQ;EAEV,IAAAC,oBAAA,GAAmB,IAAAC,gCAAmB,EAAC,CAAC;IAAhCC,MAAM,GAAAF,oBAAA,CAANE,MAAM;EAkBd,IAAAC,SAAA,GAMI,IAAAC,sBAAQ,EAAC,CAAC;IAHeC,iBAAiB,GAAAF,SAAA,CAF5CG,KAAK,CACHC,WAAW,CACTC,WAAW,CAAIN,MAAM;EAK3B,OACE,IAAAZ,WAAA,CAAAmB,GAAA,EAACpB,iBAAA,CAAAqB,gBAAgB;IACfR,MAAM,EACJG,iBAAiB,GAAGA,iBAAiB,GAAG,CAACR,oBAAoB,GAAGK,MAAM,GAAG,CAAC,GAAGA,MAAM,GAAG,CACvF;IACDS,OAAO,EAAEf,cAAe;IACxBE,OAAO,EAAEA,OAAQ;IAAAC,QAAA,EAEhBA;EAAQ,CACO,CAAC;AAEvB,CAAC","ignoreList":[]}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, "__esModule", {
|
|
2
|
-
value: true
|
|
3
|
-
});
|
|
4
|
-
exports.useAudioPlayerControl = void 0;
|
|
5
|
-
var _react = require("react");
|
|
6
|
-
var _AudioPlayerContext = require("../contexts/audioPlayerContext/AudioPlayerContext");
|
|
7
|
-
var makeAudioPlayerId = function makeAudioPlayerId(_ref) {
|
|
8
|
-
var requester = _ref.requester,
|
|
9
|
-
src = _ref.src,
|
|
10
|
-
id = _ref.id;
|
|
11
|
-
return `${requester != null ? requester : 'requester-unknown'}:${src}:${id != null ? id : ''}`;
|
|
12
|
-
};
|
|
13
|
-
var useAudioPlayerControl = exports.useAudioPlayerControl = function useAudioPlayerControl(_ref2) {
|
|
14
|
-
var duration = _ref2.duration,
|
|
15
|
-
mimeType = _ref2.mimeType,
|
|
16
|
-
playbackRates = _ref2.playbackRates,
|
|
17
|
-
previewVoiceRecording = _ref2.previewVoiceRecording,
|
|
18
|
-
_ref2$requester = _ref2.requester,
|
|
19
|
-
requester = _ref2$requester === void 0 ? '' : _ref2$requester,
|
|
20
|
-
type = _ref2.type,
|
|
21
|
-
uri = _ref2.uri,
|
|
22
|
-
fileId = _ref2.id;
|
|
23
|
-
var _useAudioPlayerContex = (0, _AudioPlayerContext.useAudioPlayerContext)(),
|
|
24
|
-
audioPlayerPool = _useAudioPlayerContex.audioPlayerPool;
|
|
25
|
-
var id = makeAudioPlayerId({
|
|
26
|
-
id: fileId,
|
|
27
|
-
requester: requester,
|
|
28
|
-
src: uri != null ? uri : ''
|
|
29
|
-
});
|
|
30
|
-
var audioPlayer = (0, _react.useMemo)(function () {
|
|
31
|
-
return audioPlayerPool == null ? void 0 : audioPlayerPool.getOrAddPlayer({
|
|
32
|
-
duration: duration != null ? duration : 0,
|
|
33
|
-
id: id,
|
|
34
|
-
mimeType: mimeType != null ? mimeType : '',
|
|
35
|
-
playbackRates: playbackRates,
|
|
36
|
-
previewVoiceRecording: previewVoiceRecording,
|
|
37
|
-
type: type != null ? type : 'audio',
|
|
38
|
-
uri: uri != null ? uri : ''
|
|
39
|
-
});
|
|
40
|
-
}, [audioPlayerPool, duration, id, mimeType, playbackRates, previewVoiceRecording, type, uri]);
|
|
41
|
-
return audioPlayer;
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=useAudioPlayerControl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_AudioPlayerContext","makeAudioPlayerId","_ref","requester","src","id","useAudioPlayerControl","exports","_ref2","duration","mimeType","playbackRates","previewVoiceRecording","_ref2$requester","type","uri","fileId","_useAudioPlayerContex","useAudioPlayerContext","audioPlayerPool","audioPlayer","useMemo","getOrAddPlayer"],"sourceRoot":"../../../src","sources":["hooks/useAudioPlayerControl.ts"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,mBAAA,GAAAD,OAAA;AAmBA,IAAME,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAAC,IAAA;EAAA,IACrBC,SAAS,GAAAD,IAAA,CAATC,SAAS;IACTC,GAAG,GAAAF,IAAA,CAAHE,GAAG;IACHC,EAAE,GAAAH,IAAA,CAAFG,EAAE;EAAA,OAKE,GAAGF,SAAS,WAATA,SAAS,GAAI,mBAAmB,IAAIC,GAAG,IAAIC,EAAE,WAAFA,EAAE,GAAI,EAAE,EAAE;AAAA;AAEvD,IAAMC,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG,SAAxBA,qBAAqBA,CAAAE,KAAA,EASA;EAAA,IARhCC,QAAQ,GAAAD,KAAA,CAARC,QAAQ;IACRC,QAAQ,GAAAF,KAAA,CAARE,QAAQ;IACRC,aAAa,GAAAH,KAAA,CAAbG,aAAa;IACbC,qBAAqB,GAAAJ,KAAA,CAArBI,qBAAqB;IAAAC,eAAA,GAAAL,KAAA,CACrBL,SAAS;IAATA,SAAS,GAAAU,eAAA,cAAG,EAAE,GAAAA,eAAA;IACdC,IAAI,GAAAN,KAAA,CAAJM,IAAI;IACJC,GAAG,GAAAP,KAAA,CAAHO,GAAG;IACCC,MAAM,GAAAR,KAAA,CAAVH,EAAE;EAEF,IAAAY,qBAAA,GAA4B,IAAAC,yCAAqB,EAAC,CAAC;IAA3CC,eAAe,GAAAF,qBAAA,CAAfE,eAAe;EACvB,IAAMd,EAAE,GAAGJ,iBAAiB,CAAC;IAAEI,EAAE,EAAEW,MAAM;IAAEb,SAAS,EAATA,SAAS;IAAEC,GAAG,EAAEW,GAAG,WAAHA,GAAG,GAAI;EAAG,CAAC,CAAC;EACvE,IAAMK,WAAW,GAAG,IAAAC,cAAO,EACzB;IAAA,OACEF,eAAe,oBAAfA,eAAe,CAAEG,cAAc,CAAC;MAC9Bb,QAAQ,EAAEA,QAAQ,WAARA,QAAQ,GAAI,CAAC;MACvBJ,EAAE,EAAFA,EAAE;MACFK,QAAQ,EAAEA,QAAQ,WAARA,QAAQ,GAAI,EAAE;MACxBC,aAAa,EAAbA,aAAa;MACbC,qBAAqB,EAArBA,qBAAqB;MACrBE,IAAI,EAAEA,IAAI,WAAJA,IAAI,GAAI,OAAO;MACrBC,GAAG,EAAEA,GAAG,WAAHA,GAAG,GAAI;IACd,CAAC,CAAC;EAAA,GACJ,CAACI,eAAe,EAAEV,QAAQ,EAAEJ,EAAE,EAAEK,QAAQ,EAAEC,aAAa,EAAEC,qBAAqB,EAAEE,IAAI,EAAEC,GAAG,CAC3F,CAAC;EAED,OAAOK,WAAW;AACpB,CAAC","ignoreList":[]}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import React, { PropsWithChildren } from 'react';
|
|
2
|
-
import { MessageActionType } from './MessageActionListItem';
|
|
3
|
-
import { MessageContextValue } from '../../contexts/messageContext/MessageContext';
|
|
4
|
-
export type MessageMenuProps = PropsWithChildren<Partial<Pick<MessageContextValue, 'message'>> & {
|
|
5
|
-
/**
|
|
6
|
-
* Function to close the message actions bottom sheet
|
|
7
|
-
* @returns void
|
|
8
|
-
*/
|
|
9
|
-
dismissOverlay: () => void;
|
|
10
|
-
/**
|
|
11
|
-
* An array of message actions to render
|
|
12
|
-
*/
|
|
13
|
-
messageActions: MessageActionType[];
|
|
14
|
-
/**
|
|
15
|
-
* Boolean to determine if there are message actions
|
|
16
|
-
*/
|
|
17
|
-
showMessageReactions: boolean;
|
|
18
|
-
/**
|
|
19
|
-
* Boolean to determine if the overlay is visible.
|
|
20
|
-
*/
|
|
21
|
-
visible: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* Function to handle reaction on press
|
|
24
|
-
* @param reactionType
|
|
25
|
-
* @returns
|
|
26
|
-
*/
|
|
27
|
-
handleReaction?: (reactionType: string) => Promise<void>;
|
|
28
|
-
/**
|
|
29
|
-
* The selected reaction
|
|
30
|
-
*/
|
|
31
|
-
selectedReaction?: string;
|
|
32
|
-
layout: {
|
|
33
|
-
x: number;
|
|
34
|
-
y: number;
|
|
35
|
-
w: number;
|
|
36
|
-
h: number;
|
|
37
|
-
};
|
|
38
|
-
}>;
|
|
39
|
-
export declare const MessageMenu: (props: MessageMenuProps) => React.JSX.Element;
|
|
40
|
-
//# sourceMappingURL=MessageMenu.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MessageMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageMenu/MessageMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAIjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAInF,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAC9C,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,GAAG;IAC9C;;;OAGG;IACH,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B;;OAEG;IACH,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC;;OAEG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,MAAM,EAAE;QACN,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;CACH,CACF,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB,sBAuDlD,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { AudioPlayerOptions } from '../state-store/audio-player';
|
|
2
|
-
export type UseAudioPlayerControlProps = {
|
|
3
|
-
/**
|
|
4
|
-
* Identifier of the entity that requested the audio playback, e.g. message ID.
|
|
5
|
-
* Asset to specific audio player is a many-to-many relationship
|
|
6
|
-
* - one URL can be associated with multiple UI elements,
|
|
7
|
-
* - one UI element can display multiple audio sources.
|
|
8
|
-
* Therefore, the AudioPlayer ID is a combination of request:src.
|
|
9
|
-
*
|
|
10
|
-
* The requester string can take into consideration whether there are multiple instances of
|
|
11
|
-
* the same URL requested by the same requester (message has multiple attachments with the same asset URL).
|
|
12
|
-
* In reality the fact that one message has multiple attachments with the same asset URL
|
|
13
|
-
* could be considered a bad practice or a bug.
|
|
14
|
-
*/
|
|
15
|
-
requester?: string;
|
|
16
|
-
} & Partial<AudioPlayerOptions>;
|
|
17
|
-
export declare const useAudioPlayerControl: ({ duration, mimeType, playbackRates, previewVoiceRecording, requester, type, uri, id: fileId, }: UseAudioPlayerControlProps) => import("../state-store/audio-player").AudioPlayer;
|
|
18
|
-
//# sourceMappingURL=useAudioPlayerControl.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAudioPlayerControl.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAudioPlayerControl.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAYhC,eAAO,MAAM,qBAAqB,GAAI,iGASnC,0BAA0B,sDAkB5B,CAAC"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import React, { PropsWithChildren } from 'react';
|
|
2
|
-
|
|
3
|
-
import { useWindowDimensions } from 'react-native';
|
|
4
|
-
|
|
5
|
-
import { MessageActionType } from './MessageActionListItem';
|
|
6
|
-
|
|
7
|
-
import { MessageContextValue } from '../../contexts/messageContext/MessageContext';
|
|
8
|
-
import { useTheme } from '../../contexts/themeContext/ThemeContext';
|
|
9
|
-
import { BottomSheetModal } from '../UIComponents/BottomSheetModal';
|
|
10
|
-
|
|
11
|
-
export type MessageMenuProps = PropsWithChildren<
|
|
12
|
-
Partial<Pick<MessageContextValue, 'message'>> & {
|
|
13
|
-
/**
|
|
14
|
-
* Function to close the message actions bottom sheet
|
|
15
|
-
* @returns void
|
|
16
|
-
*/
|
|
17
|
-
dismissOverlay: () => void;
|
|
18
|
-
/**
|
|
19
|
-
* An array of message actions to render
|
|
20
|
-
*/
|
|
21
|
-
messageActions: MessageActionType[];
|
|
22
|
-
/**
|
|
23
|
-
* Boolean to determine if there are message actions
|
|
24
|
-
*/
|
|
25
|
-
showMessageReactions: boolean;
|
|
26
|
-
/**
|
|
27
|
-
* Boolean to determine if the overlay is visible.
|
|
28
|
-
*/
|
|
29
|
-
visible: boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Function to handle reaction on press
|
|
32
|
-
* @param reactionType
|
|
33
|
-
* @returns
|
|
34
|
-
*/
|
|
35
|
-
handleReaction?: (reactionType: string) => Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* The selected reaction
|
|
38
|
-
*/
|
|
39
|
-
selectedReaction?: string;
|
|
40
|
-
|
|
41
|
-
layout: {
|
|
42
|
-
x: number;
|
|
43
|
-
y: number;
|
|
44
|
-
w: number;
|
|
45
|
-
h: number;
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
>;
|
|
49
|
-
|
|
50
|
-
// TODO: V9: Either remove this or refactor it so that it's useful again, as its logic
|
|
51
|
-
// is offloaded to other components now.
|
|
52
|
-
export const MessageMenu = (props: MessageMenuProps) => {
|
|
53
|
-
const {
|
|
54
|
-
dismissOverlay,
|
|
55
|
-
// handleReaction,
|
|
56
|
-
// message: propMessage,
|
|
57
|
-
// MessageActionList: propMessageActionList,
|
|
58
|
-
// MessageActionListItem: propMessageActionListItem,
|
|
59
|
-
// messageActions,
|
|
60
|
-
// MessageReactionPicker: propMessageReactionPicker,
|
|
61
|
-
// MessageUserReactions: propMessageUserReactions,
|
|
62
|
-
// MessageUserReactionsAvatar: propMessageUserReactionsAvatar,
|
|
63
|
-
// MessageUserReactionsItem: propMessageUserReactionsItem,
|
|
64
|
-
// selectedReaction,
|
|
65
|
-
showMessageReactions,
|
|
66
|
-
visible,
|
|
67
|
-
// layout,
|
|
68
|
-
children,
|
|
69
|
-
} = props;
|
|
70
|
-
const { height } = useWindowDimensions();
|
|
71
|
-
// const {
|
|
72
|
-
// MessageActionList: contextMessageActionList,
|
|
73
|
-
// MessageActionListItem: contextMessageActionListItem,
|
|
74
|
-
// MessageReactionPicker: contextMessageReactionPicker,
|
|
75
|
-
// MessageUserReactions: contextMessageUserReactions,
|
|
76
|
-
// MessageUserReactionsAvatar: contextMessageUserReactionsAvatar,
|
|
77
|
-
// MessageUserReactionsItem: contextMessageUserReactionsItem,
|
|
78
|
-
// } = useMessagesContext();
|
|
79
|
-
// const { message: contextMessage } = useMessageContext();
|
|
80
|
-
// const MessageActionList = propMessageActionList ?? contextMessageActionList;
|
|
81
|
-
// const MessageActionListItem = propMessageActionListItem ?? contextMessageActionListItem;
|
|
82
|
-
// const MessageReactionPicker = propMessageReactionPicker ?? contextMessageReactionPicker;
|
|
83
|
-
// const MessageUserReactions = propMessageUserReactions ?? contextMessageUserReactions;
|
|
84
|
-
// const MessageUserReactionsAvatar =
|
|
85
|
-
// propMessageUserReactionsAvatar ?? contextMessageUserReactionsAvatar;
|
|
86
|
-
// const MessageUserReactionsItem = propMessageUserReactionsItem ?? contextMessageUserReactionsItem;
|
|
87
|
-
// const message = propMessage ?? contextMessage;
|
|
88
|
-
const {
|
|
89
|
-
theme: {
|
|
90
|
-
messageMenu: {
|
|
91
|
-
bottomSheet: { height: bottomSheetHeight },
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
} = useTheme();
|
|
95
|
-
|
|
96
|
-
return (
|
|
97
|
-
<BottomSheetModal
|
|
98
|
-
height={
|
|
99
|
-
bottomSheetHeight ? bottomSheetHeight : !showMessageReactions ? height / 5 : height / 2
|
|
100
|
-
}
|
|
101
|
-
onClose={dismissOverlay}
|
|
102
|
-
visible={visible}
|
|
103
|
-
>
|
|
104
|
-
{children}
|
|
105
|
-
</BottomSheetModal>
|
|
106
|
-
);
|
|
107
|
-
};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { useMemo } from 'react';
|
|
2
|
-
|
|
3
|
-
import { useAudioPlayerContext } from '../contexts/audioPlayerContext/AudioPlayerContext';
|
|
4
|
-
import { AudioPlayerOptions } from '../state-store/audio-player';
|
|
5
|
-
|
|
6
|
-
export type UseAudioPlayerControlProps = {
|
|
7
|
-
/**
|
|
8
|
-
* Identifier of the entity that requested the audio playback, e.g. message ID.
|
|
9
|
-
* Asset to specific audio player is a many-to-many relationship
|
|
10
|
-
* - one URL can be associated with multiple UI elements,
|
|
11
|
-
* - one UI element can display multiple audio sources.
|
|
12
|
-
* Therefore, the AudioPlayer ID is a combination of request:src.
|
|
13
|
-
*
|
|
14
|
-
* The requester string can take into consideration whether there are multiple instances of
|
|
15
|
-
* the same URL requested by the same requester (message has multiple attachments with the same asset URL).
|
|
16
|
-
* In reality the fact that one message has multiple attachments with the same asset URL
|
|
17
|
-
* could be considered a bad practice or a bug.
|
|
18
|
-
*/
|
|
19
|
-
requester?: string;
|
|
20
|
-
} & Partial<AudioPlayerOptions>;
|
|
21
|
-
|
|
22
|
-
const makeAudioPlayerId = ({
|
|
23
|
-
requester,
|
|
24
|
-
src,
|
|
25
|
-
id,
|
|
26
|
-
}: {
|
|
27
|
-
src: string;
|
|
28
|
-
requester?: string;
|
|
29
|
-
id?: string;
|
|
30
|
-
}) => `${requester ?? 'requester-unknown'}:${src}:${id ?? ''}`;
|
|
31
|
-
|
|
32
|
-
export const useAudioPlayerControl = ({
|
|
33
|
-
duration,
|
|
34
|
-
mimeType,
|
|
35
|
-
playbackRates,
|
|
36
|
-
previewVoiceRecording,
|
|
37
|
-
requester = '',
|
|
38
|
-
type,
|
|
39
|
-
uri,
|
|
40
|
-
id: fileId,
|
|
41
|
-
}: UseAudioPlayerControlProps) => {
|
|
42
|
-
const { audioPlayerPool } = useAudioPlayerContext();
|
|
43
|
-
const id = makeAudioPlayerId({ id: fileId, requester, src: uri ?? '' });
|
|
44
|
-
const audioPlayer = useMemo(
|
|
45
|
-
() =>
|
|
46
|
-
audioPlayerPool?.getOrAddPlayer({
|
|
47
|
-
duration: duration ?? 0,
|
|
48
|
-
id,
|
|
49
|
-
mimeType: mimeType ?? '',
|
|
50
|
-
playbackRates,
|
|
51
|
-
previewVoiceRecording,
|
|
52
|
-
type: type ?? 'audio',
|
|
53
|
-
uri: uri ?? '',
|
|
54
|
-
}),
|
|
55
|
-
[audioPlayerPool, duration, id, mimeType, playbackRates, previewVoiceRecording, type, uri],
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
return audioPlayer;
|
|
59
|
-
};
|