Skip to content
15 changes: 12 additions & 3 deletions packages/react/src/views/ChatInput/AudioMessageRecorder.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ import {
Box,
Icon,
ActionButton,
Tooltip,
useTheme,
useToastBarDispatch,
Tooltip,
} from '@embeddedchat/ui-elements';
import { useMediaRecorder } from '../../hooks/useMediaRecorder';
import useMessageStore from '../../store/messageStore';
Expand All @@ -30,6 +31,8 @@ const AudioMessageRecorder = (props) => {
const [recordingInterval, setRecordingInterval] = useState(null);
const [file, setFile] = useState(null);
const [isRecorded, setIsRecorded] = useState(false);
const threadId = useMessageStore((_state) => _state.threadMainMessage?._id);
const dispatchToastMessage = useToastBarDispatch();

const onStop = (audioChunks) => {
const audioBlob = new Blob(audioChunks, { type: 'audio/mpeg' });
Expand All @@ -53,10 +56,12 @@ const AudioMessageRecorder = (props) => {
setRecordState('idle');
};

const handleRecordButtonClick = () => {
const handleRecordButtonClick = async () => {
if (disabled) return;
setRecordState('recording');
try {
await navigator.mediaDevices.getUserMedia({ audio: true });

setRecordState('recording');
start();
toogleRecordingMessage();
const startTime = new Date();
Expand All @@ -76,6 +81,10 @@ const AudioMessageRecorder = (props) => {
);
} catch (error) {
console.log(error);
dispatchToastMessage({
type: 'error',
message: 'Unable to access the microphone. Please grant permissions.',
});
setRecordState('idle');
}
};
Expand Down
13 changes: 10 additions & 3 deletions packages/react/src/views/ChatInput/VideoMessageRecoder.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
Tooltip,
Modal,
useTheme,
useToastBarDispatch,
} from '@embeddedchat/ui-elements';
import { useMediaRecorder } from '../../hooks/useMediaRecorder';
import useMessageStore from '../../store/messageStore';
Expand All @@ -33,6 +34,7 @@ const VideoMessageRecorder = (props) => {
const [recordingInterval, setRecordingInterval] = useState(null);
const [file, setFile] = useState(null);
const [isRecorded, setIsRecorded] = useState(false);
const dispatchToastMessage = useToastBarDispatch();

const onStop = (videoChunks) => {
const videoBlob = new Blob(videoChunks, { type: 'video/mp4' });
Expand All @@ -56,10 +58,11 @@ const VideoMessageRecorder = (props) => {
setRecordState('idle');
};

const handleRecordButtonClick = () => {
const handleRecordButtonClick = async () => {
if (disabled) return;
setRecordState('recording');
try {
await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
setRecordState('recording');
start(videoRef.current);
toogleRecordingMessage();
const startTime = new Date();
Expand All @@ -78,7 +81,11 @@ const VideoMessageRecorder = (props) => {
}, 1000)
);
} catch (error) {
console.log(error);
dispatchToastMessage({
type: 'error',
message:
'Unable to access microphone or camera. Please grant permissions.',
});
setRecordState('idle');
}
};
Expand Down
Loading