import React, { ReactNode, useState } from "react" import { Dialog, DialogTitle, DialogContent, DialogContentText, Button, DialogActions, useTheme, } from "@mui/material" import { actionCreator } from "../action" import { DebouncedInputTextField } from "./Debounce" export const useRenameStudyDialog = ( studies: StudySummary[] ): [(studyId: number, studyName: string) => void, () => ReactNode] => { const action = actionCreator() const theme = useTheme() const [openRenameStudyDialog, setOpenRenameStudyDialog] = useState(false) const [renameStudyID, setRenameStudyID] = useState(-1) const [prevStudyName, setPrevStudyName] = useState("") const [newStudyName, setNewStudyName] = useState("") const newStudyNameAlreadyUsed = studies.some( (v) => v.study_name === newStudyName ) const handleCloseRenameStudyDialog = () => { setOpenRenameStudyDialog(false) setRenameStudyID(-1) setPrevStudyName("") } const handleRenameStudy = () => { action.renameStudy(renameStudyID, newStudyName) setOpenRenameStudyDialog(false) setRenameStudyID(-1) setPrevStudyName("") } const openDialog = (studyId: number, prevStudyName: string) => { setRenameStudyID(studyId) setPrevStudyName(prevStudyName) setOpenRenameStudyDialog(true) } const renderRenameStudyDialog = () => { return ( { handleCloseRenameStudyDialog() }} aria-labelledby="rename-study-dialog-title" > Rename "{prevStudyName}" Please note that the study_id will be changed because this function internally creates a new study and copies all trials to it. Please enter the new study name. { setNewStudyName(s) }} delay={500} textFieldProps={{ autoFocus: true, fullWidth: true, error: newStudyNameAlreadyUsed, helperText: newStudyNameAlreadyUsed ? `"${newStudyName}" is already used` : "", label: "Study name", type: "text", }} /> ) } return [openDialog, renderRenameStudyDialog] }