import * as React from 'react'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import Typography from '@mui/material/Typography'; import Modal from '@mui/material/Modal'; import InputLabel from '@mui/material/InputLabel'; import MenuItem from '@mui/material/MenuItem'; import FormControl from '@mui/material/FormControl'; import Select from '@mui/material/Select'; import TextField from '@mui/material/TextField'; import Checkbox from '@mui/material/Checkbox'; import FormGroup from '@mui/material/FormGroup'; import FormControlLabel from '@mui/material/FormControlLabel'; import './modalStyles.css'; const { ipcRenderer } = window.require('electron'); // eslint-disable-next-line no-unused-vars const style = { position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', width: 400, bgcolor: 'background.paper', border: '2px solid #FFF', boxShadow: 24, padding: '20px', color: 'white', }; export default function InitModal() { const [open, setOpen] = React.useState(false); const handleOpen = () => setOpen(true); const handleClose = () => setOpen(false); const [chosenTemplate, setChosenTemplate] = React.useState(''); const handleTemplateChange = (event) => { setChosenTemplate(event.target.value); }; const [installPackages, setInstallPackages] = React.useState(true); const handlePackagesChange = (event) => { setInstallPackages(event.target.checked); }; const [chosenPackageManager, setChosenPackageManager] = React.useState(''); const handlePackageManagerChange = (event) => { setChosenPackageManager(event.target.value); }; const [templates, setTemplates] = React.useState([]); React.useEffect(() => { fetch('https://raw.githubusercontent.com/sern-handler/create-bot/main/metadata/templateChoices.json') .then((res) => res.json()) .then((data) => { setTemplates(data); }) .catch((err) => { console.log(err.message); }); }, []); if (templates.length === 0) { setTemplates([{ title: "Couldn't fetch templates! Please do CTRL+R", value: 'error' }]); } const [selectedPath, setSelectedPath] = React.useState(''); const handleChooseDirButton = () => { ipcRenderer.send('openFolder'); }; const [projectName, setProjectName] = React.useState(''); const handleProjectNameChange = (event) => { setProjectName(event.target.value); }; React.useEffect(() => { ipcRenderer.on('folderData', handleFolderData); return () => { ipcRenderer.removeListener('folderData', handleFolderData); }; }, []); const handleFolderData = (event, paths) => { const selectedPath = paths && paths.length > 0 ? paths[0] : ''; setSelectedPath(selectedPath); }; const [loading, setLoading] = React.useState(false); const isFormValid = () => { return projectName !== '' && selectedPath !== ''; }; const handleSubmit = () => { if (!isFormValid()) { return; } const data = { projectName, chosenTemplate, installPackages, chosenPackageManager, selectedPath, }; setLoading(true); ipcRenderer.send('submitForm', data); ipcRenderer.on('submitForm', () => { setLoading(false); handleClose(); ipcRenderer.removeAllListeners('submitForm'); // Remove the listener to avoid memory leaks }); } return (