import React, { useCallback, useEffect, useState } from 'react'; import { IconButton, Button, Box, LinearProgress, Tooltip } from "@mui/material"; import { GenericModal } from "../atoms/GenericModal"; import { stopRecording } from "../../api/recording"; import { useGlobalInfoStore } from "../../context/globalInfo"; import { useSocketStore } from "../../context/socket"; import { TextField, Typography } from "@mui/material"; import { WarningText } from "../atoms/texts"; import NotificationImportantIcon from "@mui/icons-material/NotificationImportant"; import FlagIcon from '@mui/icons-material/Flag'; interface SaveRecordingProps { fileName: string; } export const SaveRecording = ({fileName}: SaveRecordingProps) => { const [openModal, setOpenModal] = useState(false); const [needConfirm, setNeedConfirm] = useState(false); const [recordingName, setRecordingName] = useState(fileName); const [waitingForSave, setWaitingForSave] = useState(false); const { browserId, setBrowserId, notify, recordings } = useGlobalInfoStore(); const { socket } = useSocketStore(); const handleChangeOfTitle = (event: React.ChangeEvent) => { const { value } = event.target; if (needConfirm) { setNeedConfirm(false); } setRecordingName(value); } const handleSaveRecording = async (event: React.SyntheticEvent) => { event.preventDefault(); if (recordings.includes(recordingName)) { if (needConfirm) { return; } setNeedConfirm(true); } else { await saveRecording(); } }; const exitRecording = useCallback(async() => { notify('success', 'Recording saved successfully'); if (browserId) { await stopRecording(browserId); } setBrowserId(null); }, [setBrowserId, browserId, notify]); // notifies backed to save the recording in progress, // releases resources and changes the view for main page by clearing the global browserId const saveRecording = async () => { socket?.emit('save', recordingName) setWaitingForSave(true); } useEffect(() => { socket?.on('fileSaved', exitRecording); return () => { socket?.off('fileSaved', exitRecording); } }, [socket, exitRecording]); return (
setOpenModal(false)} modalStyle={modalStyle}>
Save the recording as: { needConfirm ? ( Recording already exists, please confirm the recording's overwrite. ) : } { waitingForSave && }
); } const modalStyle = { top: '25%', left: '50%', transform: 'translate(-50%, -50%)', width: '20%', backgroundColor: 'background.paper', p: 4, height:'fit-content', display:'block', padding: '20px', };