UNPKG

@sendbird/uikit-react

Version:

Sendbird UIKit for React: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.

117 lines (113 loc) 4.34 kB
'use strict'; var React = require('react'); var VoiceRecorder_context = require('./context.js'); var utils = require('../chunks/bundle-CkQrhwR6.js'); var useSendbird = require('../chunks/bundle-Bq15P9qk.js'); require('../chunks/bundle-DPDyqKIJ.js'); require('../chunks/bundle-Conb-pOy.js'); require('../chunks/bundle-BbrBawlX.js'); require('../chunks/bundle-Cyl6_qLo.js'); require('../chunks/bundle-DZlJeh0V.js'); require('react-dom'); require('../chunks/bundle-Fv6PNPGZ.js'); require('../ui/IconButton.js'); require('../ui/Button.js'); require('../chunks/bundle-zgmRG2KL.js'); require('../ui/Icon.js'); require('../chunks/bundle-t8BQsgL5.js'); require('../chunks/bundle-Cfh78Xnm.js'); require('../chunks/bundle-B19RHFpR.js'); require('@sendbird/chat'); require('@sendbird/chat/groupChannel'); require('@sendbird/chat/openChannel'); // export interface UseVoiceRecorderProps extends VoiceRecorderEventHandler { // /** // * onRecordingStarted // * onRecordingEnded // */ // } /* eslint-disable no-redeclare */ var VoiceRecorderStatus = { PREPARING: 'PREPARING', READY_TO_RECORD: 'READY_TO_RECORD', RECORDING: 'RECORDING', COMPLETED: 'COMPLETED', }; var useVoiceRecorder = function (_a) { var _b = _a.onRecordingStarted, onRecordingStarted = _b === void 0 ? utils.noop : _b, _c = _a.onRecordingEnded, onRecordingEnded = _c === void 0 ? utils.noop : _c; var state = useSendbird.useSendbird().state; var config = state.config; var voiceRecord = config.voiceRecord; var maxRecordingTime = voiceRecord === null || voiceRecord === void 0 ? void 0 : voiceRecord.maxRecordingTime; var voiceRecorder = VoiceRecorder_context.useVoiceRecorderContext(); var isRecordable = voiceRecorder.isRecordable; var _d = React.useState(null), recordedFile = _d[0], setRecordedFile = _d[1]; var _e = React.useState(VoiceRecorderStatus.PREPARING), recordingStatus = _e[0], setRecordingStatus = _e[1]; React.useEffect(function () { if (isRecordable && recordingStatus === VoiceRecorderStatus.PREPARING) { setRecordingStatus(VoiceRecorderStatus.READY_TO_RECORD); } }, [isRecordable]); var start = React.useCallback(function () { voiceRecorder === null || voiceRecorder === void 0 ? void 0 : voiceRecorder.start({ onRecordingStarted: function () { setRecordingStatus(VoiceRecorderStatus.RECORDING); onRecordingStarted(); startTimer(); }, onRecordingEnded: function (audioFile) { setRecordingStatus(VoiceRecorderStatus.COMPLETED); onRecordingEnded(audioFile); setRecordedFile(audioFile); stopTimer(); }, }); }, [onRecordingStarted, onRecordingEnded]); var stop = React.useCallback(function () { voiceRecorder === null || voiceRecorder === void 0 ? void 0 : voiceRecorder.stop(); stopTimer(); }, [voiceRecorder]); var cancel = React.useCallback(function () { stop(); setRecordedFile(null); }, [voiceRecorder]); // Timer var _f = React.useState(0), recordingTime = _f[0], setRecordingTime = _f[1]; var timer = React.useRef(null); function startTimer() { stopTimer(); setRecordingTime(0); timer.current = setInterval(function () { setRecordingTime(function (prevTime) { var newTime = prevTime + 100; if (newTime > maxRecordingTime) { stopTimer(); } return newTime; }); }, 100); } function stopTimer() { if (timer.current) { clearInterval(timer.current); timer.current = null; } } React.useEffect(function () { if (recordingTime > maxRecordingTime) { stop(); } }, [recordingTime, maxRecordingTime, stop]); return ({ start: start, stop: stop, cancel: cancel, recordingStatus: recordingStatus, recordingTime: recordingTime, recordedFile: recordedFile, recordingLimit: maxRecordingTime, }); }; exports.VoiceRecorderStatus = VoiceRecorderStatus; exports.useVoiceRecorder = useVoiceRecorder; //# sourceMappingURL=useVoiceRecorder.js.map