UNPKG

@uimkit/uikit-react

Version:

<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>

77 lines (74 loc) 3.87 kB
import { __assign } from 'tslib'; import React__default, { useState, useRef, useCallback, useEffect } from 'react'; import { Icon } from '../Icon/Icon.js'; import { IconTypes } from '../Icon/type.js'; import '../../context/TranslationContext.js'; import '../../context/UIKitContext.js'; import '../../context/ComponentContext.js'; import { useChatActionContext } from '../../context/ChatActionContext.js'; import '../../context/MessageInputContext.js'; import '../../context/UIMessageContext.js'; import { useChatStateContext } from '../../context/ChatStateContext.js'; function MessageAudioWithContext(props) { props.context; var message = props.message, children = props.children; var setAudioSource = useChatActionContext('MessageAudioWithContext').setAudioSource; var audioSource = useChatStateContext().audioSource; var _a = useState(0), currentTime = _a[0], setCurrentTime = _a[1]; var audioRef = useRef(null); var _b = useState(false), playClassName = _b[0], setPlayClassName = _b[1]; var play = useCallback(function () { if (audioSource && audioSource !== (audioRef === null || audioRef === void 0 ? void 0 : audioRef.current)) { audioSource.pause(); audioSource.currentTime = 0; setAudioSource(null); } if (audioRef === null || audioRef === void 0 ? void 0 : audioRef.current) { if (!audioRef.current.paused) { audioRef.current.pause(); endFunction(); } else { audioRef.current.play(); setPlayClassName(true); setAudioSource(audioRef.current); } } }, [audioRef, audioSource]); var pauseFunction = function () { setPlayClassName(false); }; var endFunction = function () { setAudioSource(null); audioRef.current.currentTime = 0; pauseFunction(); }; useEffect(function () { if (audioRef === null || audioRef === void 0 ? void 0 : audioRef.current) { audioRef.current.addEventListener('pause', pauseFunction); audioRef.current.addEventListener('ended', endFunction); audioRef.current.addEventListener('canplay', function () { var _a, _b; setCurrentTime(parseInt("".concat((_b = (_a = audioRef === null || audioRef === void 0 ? void 0 : audioRef.current) === null || _a === void 0 ? void 0 : _a.duration) !== null && _b !== void 0 ? _b : 0), 10)); }); } return function () { if (audioRef === null || audioRef === void 0 ? void 0 : audioRef.current) { audioRef.current.removeEventListener('pause', pauseFunction); audioRef.current.removeEventListener('ended', endFunction); } }; }, [audioRef]); return (React__default.createElement("div", { className: "message-audio" }, React__default.createElement("div", { className: "message-audio-content message-audio-".concat(message.flow) }, React__default.createElement(Icon, { className: "".concat(message === null || message === void 0 ? void 0 : message.flow, " ").concat(playClassName ? 'playing' : ''), type: IconTypes.VOICE, width: 16, height: 16, onClick: play }), React__default.createElement("span", null, "".concat(currentTime, "s"))), React__default.createElement("audio", { src: message.audio.url, ref: audioRef, controls: true, className: "message-audio-none" }, React__default.createElement("track", { kind: "captions" })), children)); } var MemoizedMessageAudio = React__default.memo(MessageAudioWithContext); function MessageAudio(props) { return (React__default.createElement(MemoizedMessageAudio, __assign({}, props))); } export { MessageAudio }; //# sourceMappingURL=MessageAudio.js.map