UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

92 lines 3.83 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useAudioRecorder = void 0; var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _react = require("react"); var _useMessageComposer2 = require("../../../contexts/messageInputContext/hooks/useMessageComposer"); var _types = require("../../../types/types"); var _utils = require("../../../utils/utils"); var _audioSampling = require("../utils/audioSampling"); var useAudioRecorder = ({ audioRecorderManager, sendMessage }) => { var _useMessageComposer = (0, _useMessageComposer2.useMessageComposer)(), attachmentManager = _useMessageComposer.attachmentManager; var stopVoiceRecording = (0, _react.useCallback)(function () { var _ref = (0, _asyncToGenerator2.default)(function* (withDelete) { yield audioRecorderManager.stopRecording(withDelete); }); return function (_x) { return _ref.apply(this, arguments); }; }(), [audioRecorderManager]); (0, _react.useEffect)(() => () => { stopVoiceRecording(); }, [stopVoiceRecording]); var startVoiceRecording = (0, _react.useCallback)((0, _asyncToGenerator2.default)(function* () { return yield audioRecorderManager.startRecording(); }), [audioRecorderManager]); var deleteVoiceRecording = (0, _react.useCallback)((0, _asyncToGenerator2.default)(function* () { yield stopVoiceRecording(true); }), [stopVoiceRecording]); var uploadVoiceRecording = (0, _react.useCallback)(function () { var _ref4 = (0, _asyncToGenerator2.default)(function* (sendOnComplete) { try { var _audioRecorderManager = audioRecorderManager.state.getLatestValue(), recording = _audioRecorderManager.recording, duration = _audioRecorderManager.duration, waveformData = _audioRecorderManager.waveformData; yield stopVoiceRecording(); var durationInSeconds = parseFloat((duration / 1000).toFixed(3)); var resampledWaveformData = waveformData.length > 100 ? (0, _audioSampling.resampleWaveformData)(waveformData, 100) : waveformData; var clearFilter = new RegExp('[.:]', 'g'); var date = new Date().toISOString().replace(clearFilter, '_'); var file = { duration: durationInSeconds, name: `audio_recording_${date}.aac`, size: 0, type: 'audio/aac', uri: typeof recording !== 'string' ? recording?.getURI() : recording, waveform_data: resampledWaveformData }; var audioFile = { asset_url: typeof recording !== 'string' ? recording?.getURI() : recording, duration: durationInSeconds, file_size: 0, localMetadata: { file, id: (0, _utils.generateRandomId)(), uploadState: 'pending' }, mime_type: 'audio/aac', title: `audio_recording_${date}.aac`, type: _types.FileTypes.VoiceRecording, waveform_data: resampledWaveformData }; audioRecorderManager.reset(); if (sendOnComplete) { attachmentManager.upsertAttachments([audioFile]); sendMessage(); } else { yield attachmentManager.uploadAttachment(audioFile); } } catch (error) { console.log('Error uploading voice recording: ', error); } }); return function (_x2) { return _ref4.apply(this, arguments); }; }(), [audioRecorderManager, attachmentManager, sendMessage, stopVoiceRecording]); return { deleteVoiceRecording, startVoiceRecording, stopVoiceRecording, uploadVoiceRecording }; }; exports.useAudioRecorder = useAudioRecorder; //# sourceMappingURL=useAudioRecorder.js.map