Untitled
unknown
plain_text
10 months ago
12 kB
3
Indexable
"use client";
import { useState } from "react";
import {
TextField,
Button,
Box,
Typography,
Paper,
FormControl,
FormHelperText,
Switch,
} from "@mui/material";
import { useRouter } from "next/navigation";
export default function NewClient({ user }) {
const router = useRouter();
const [formData, setFormData] = useState({
title: "",
abstract: "",
authors: "",
labName: "",
advisorName: "",
coAuthorNames: "",
submissionType: "",
forumName: "",
forumLevel: "",
acceptanceDate: "",
});
const [errors, setErrors] = useState({});
const [files, setFiles] = useState({ mainFile: null, proof: null });
const [isPoster, setIsPoster] = useState(false);
const [isSubmitting, setIsSubmitting] = useState(false);
const allowedFileTypes = [
"application/pdf",
"image/png",
"image/jpeg",
"image/jpg",
];
const validate = () => {
const newErrors = {};
if (!formData.title) newErrors.title = "Title is required";
if (!formData.abstract) newErrors.abstract = "Abstract is required";
if (!formData.authors) newErrors.authors = "Authors are required";
if (!formData.labName) newErrors.labName = "Lab name is required";
if (!formData.advisorName) newErrors.advisorName = "Advisor name is required";
if (!formData.submissionType) newErrors.submissionType = "Submission type is required";
if (!formData.forumName) newErrors.forumName = "Forum name is required";
if (!formData.forumLevel) newErrors.forumLevel = "Forum level is required";
if (!formData.acceptanceDate) newErrors.acceptanceDate = "Acceptance date is required";
if (!files.mainFile) newErrors.mainFile = "Paper file is required";
if (!files.proof) newErrors.proof = "Proof of acceptance is required";
setErrors(newErrors);
return Object.keys(newErrors).length === 0;
};
const handleChange = (field) => (e) => {
setFormData((prev) => ({ ...prev, [field]: e.target.value }));
};
const handleFileChange = (type) => (e) => {
const file = e.target.files[0];
if (file && allowedFileTypes.includes(file.type)) {
setFiles((prev) => ({ ...prev, [type]: file }));
} else {
alert("Please upload a valid file type (PDF, PNG, JPG, JPEG)");
}
};
const handleSubmit = async (e) => {
e.preventDefault();
if (!validate()) return;
setIsSubmitting(true);
try {
const formDataToSend = new FormData();
formDataToSend.append("user_roll_no", user.roll.toString());
formDataToSend.append("title", formData.title);
formDataToSend.append("abstract", formData.abstract);
formDataToSend.append("authors", formData.authors);
formDataToSend.append("file_url", files.mainFile);
formDataToSend.append("acceptance_proof", files.proof);
formDataToSend.append("is_poster", isPoster);
formDataToSend.append("lab_name", formData.labName);
formDataToSend.append("advisor_name", formData.advisorName);
formDataToSend.append("co_author_names", formData.coAuthorNames);
formDataToSend.append("submission_type", formData.submissionType);
formDataToSend.append("forum_name", formData.forumName);
formDataToSend.append("forum_level", formData.forumLevel);
formDataToSend.append("acceptance_date", formData.acceptanceDate);
const response = await fetch(
`/api/submissions`,
{
method: "POST",
body: formDataToSend,
}
);
if (response.ok) {
router.push(`/applications`);
} else {
throw new Error("Failed to submit application.");
}
} catch (error) {
alert(error.message);
} finally {
setIsSubmitting(false);
}
};
return (
<Box
sx={{
p: 6,
maxWidth: 1000,
mx: "auto",
}}
>
<Paper elevation={0} sx={{ p: 6, borderRadius: 4 }}>
<Box
sx={{
textAlign: "center",
display: "flex",
justifyContent: "space-between",
}}
>
<Typography
variant="h4"
gutterBottom
sx={{
fontWeight: 700,
fontSize: "1.7rem",
textAlign: "center",
mb: 4,
}}
>
Submit Your Paper
</Typography>
<Box>
<Switch
id="poster"
checked={isPoster}
onChange={() => setIsPoster((prev) => !prev)}
/>
<Typography variant="caption" display="block" gutterBottom>
Poster
</Typography>
</Box>
</Box>
<form onSubmit={handleSubmit}>
<FormControl fullWidth margin="normal" error={!!errors.title}>
<TextField
id="title"
value={formData.title}
onChange={handleChange("title")}
label="Title"
variant="outlined"
sx={{ fontSize: "1.2rem" }}
/>
<FormHelperText>{errors.title}</FormHelperText>
</FormControl>
<FormControl fullWidth margin="normal" error={!!errors.abstract}>
<TextField
id="abstract"
value={formData.abstract}
onChange={handleChange("abstract")}
label="Abstract"
variant="outlined"
multiline
rows={4}
sx={{ fontSize: "1.2rem" }}
/>
<FormHelperText>{errors.abstract}</FormHelperText>
</FormControl>
<FormControl fullWidth margin="normal" error={!!errors.authors}>
<TextField
id="authors"
value={formData.authors}
onChange={handleChange("authors")}
label="Authors"
variant="outlined"
sx={{ fontSize: "1.2rem" }}
/>
<FormHelperText>{errors.authors}</FormHelperText>
</FormControl>
<FormControl fullWidth margin="normal" error={!!errors.labName}>
<TextField
id="labName"
value={formData.labName}
onChange={handleChange("labName")}
label="Lab Name"
variant="outlined"
sx={{ fontSize: "1.2rem" }}
/>
<FormHelperText>{errors.labName}</FormHelperText>
</FormControl>
<FormControl fullWidth margin="normal" error={!!errors.advisorName}>
<TextField
id="advisorName"
value={formData.advisorName}
onChange={handleChange("advisorName")}
label="Advisor(s) Name"
variant="outlined"
sx={{ fontSize: "1.2rem" }}
/>
<FormHelperText>{errors.advisorName}</FormHelperText>
</FormControl>
<FormControl fullWidth margin="normal" error={!!errors.coAuthorNames}>
<TextField
id="coAuthorNames"
value={formData.coAuthorNames}
onChange={handleChange("coAuthorNames")}
label="Co-author Names"
variant="outlined"
sx={{ fontSize: "1.2rem" }}
/>
<FormHelperText>{errors.coAuthorNames}</FormHelperText>
</FormControl>
<FormControl fullWidth margin="normal" error={!!errors.submissionType}>
<TextField
id="submissionType"
value={formData.submissionType}
onChange={handleChange("submissionType")}
label="Original Submission Type"
variant="outlined"
helperText="Workshop, Short Paper, Full Paper, Journal, etc."
sx={{ fontSize: "1.2rem" }}
/>
<FormHelperText>{errors.submissionType}</FormHelperText>
</FormControl>
<FormControl fullWidth margin="normal" error={!!errors.forumName}>
<TextField
id="forumName"
value={formData.forumName}
onChange={handleChange("forumName")}
label="Conference/Journal/Forum Name"
variant="outlined"
sx={{ fontSize: "1.2rem" }}
/>
<FormHelperText>{errors.forumName}</FormHelperText>
</FormControl>
<FormControl fullWidth margin="normal" error={!!errors.forumLevel}>
<TextField
id="forumLevel"
value={formData.forumLevel}
onChange={handleChange("forumLevel")}
label="Level of the Forum"
variant="outlined"
helperText="A*/A/B/Below B/Workshop/Others"
sx={{ fontSize: "1.2rem" }}
/>
<FormHelperText>{errors.forumLevel}</FormHelperText>
</FormControl>
<FormControl fullWidth margin="normal" error={!!errors.acceptanceDate}>
<TextField
id="acceptanceDate"
type="date"
value={formData.acceptanceDate}
onChange={handleChange("acceptanceDate")}
label="Date of Original Submission Acceptance"
variant="outlined"
InputLabelProps={{ shrink: true }}
sx={{ fontSize: "1.2rem" }}
/>
<FormHelperText>{errors.acceptanceDate}</FormHelperText>
</FormControl>
<Box sx={{ mt: 3 }}>
<FormControl fullWidth error={!!errors.mainFile}>
<input
accept=".pdf"
type="file"
onChange={handleFileChange("mainFile")}
style={{ padding: "10px 0", fontSize: "1rem" }}
/>
<FormHelperText>{errors.mainFile}</FormHelperText>
</FormControl>
<Typography variant="caption" display="block" gutterBottom>
Upload Paper (PDF)
</Typography>
</Box>
<Box sx={{ mt: 3 }}>
<FormControl fullWidth error={!!errors.proof}>
<input
accept=".pdf"
type="file"
onChange={handleFileChange("proof")}
style={{ padding: "10px 0", fontSize: "1rem" }}
/>
<FormHelperText>{errors.proof}</FormHelperText>
</FormControl>
<Typography variant="caption" display="block" gutterBottom>
Upload Proof of Acceptance (PDF)
</Typography>
</Box>
<Button
type="submit"
variant="contained"
sx={{
mt: 4,
p: 2,
fontSize: "1.2rem",
fontWeight: 700,
backgroundColor: "var(--theme-bg-color)",
color: "#fff",
"&:hover": {
backgroundColor: "#0056b3",
boxShadow: "0 8px 16px rgba(0, 0, 0, 0.15)",
},
}}
fullWidth
disabled={isSubmitting}
>
{isSubmitting ? "Submitting..." : "Submit Application"}
</Button>
</form>
</Paper>
</Box>
);
}
Editor is loading...
Leave a Comment