@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
JavaScript
;
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