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.88 kB
JavaScript
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 == null ? void 0 : recording.getURI() : recording,
waveform_data: resampledWaveformData
};
var audioFile = {
asset_url: typeof recording !== 'string' ? recording == null ? void 0 : 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