import React, { useState, useEffect } from "react"; import api from "./shared/api"; export default function App() { const schema = { regNo: "", name: "", course: "", cat1: "", cat2: "", da1: "", da2: "", quiz: "", fat: "", convert: { cat1: '', cat2: '', da1: '', da2: '', quiz: '', fat: '' } }; const [users, setUsers] = useState([]); const [user, setUser] = useState(schema); const [formErrors, setFormErrors] = useState({}); const convert = { cat1: (val) => (val / 50) * 15, cat2: (val) => (val / 50) * 15, da1: (val) => (val / 10) * 10, da2: (val) => (val / 10) * 10, quiz: (val) => (val / 10) * 10, fat: (val) => (val / 100) * 40 }; const patterns = { regNo: /^[0-9]{2}[A-Z]{3}[0-9]{4}$/, name: /^[A-Za-z ]{3,}$/, course: /^[A-Z]{3,}[0-9]*$/, cat1: /^([0-4]?[0-9]|50)(\.[0-9]{1,2})?$/, cat2: /^([0-4]?[0-9]|50)(\.[0-9]{1,2})?$/, da1: /^([0-9]|10)(\.[0-9]{1,2})?$/, da2: /^([0-9]|10)(\.[0-9]{1,2})?$/, quiz: /^([0-9]|10)(\.[0-9]{1,2})?$/, fat: /^([0-9]{1,2}|100)(\.[0-9]{1,2})?$/ }; const handleChange = (e) => { const { name, value } = e.target; setUser(prev => { const updatedUser = { ...prev, [name]: value }; if (convert[name]) { updatedUser.convert = { ...prev.convert, [name]: convert[name](parseFloat(value) || 0).toFixed(2) }; } return updatedUser; }); setFormErrors(prev => ({ ...prev, [name]: "" })); // Clear error on change }; const validateForm = () => { const errors = {}; for (let field in patterns) { if (!patterns[field].test(user[field])) { errors[field] = `Invalid ${field.toUpperCase()}`; } } return errors; }; const addUser = async (e) => { e.preventDefault(); const errors = validateForm(); if (Object.keys(errors).length > 0) { setFormErrors(errors); return; } await api.post('/users', user); setUser(schema); setFormErrors({}); fetchUsers(); }; const fetchUsers = async () => { const res = await api.get('/users'); setUsers(res.data); }; useEffect(() => { fetchUsers(); }, []); const renderInput = (label, name) => ( <> {formErrors[name] && {formErrors[name]}} > ); return ( <>
CAT1: {user.convert.cat1}
CAT2: {user.convert.cat2}
DA1: {user.convert.da1}
DA2: {user.convert.da2}
Quiz: {user.convert.quiz}
FAT: {user.convert.fat}
{user.regNo} {user.name} {user.course} {user.cat1} {user.cat2} {user.da1} {user.da2} {user.quiz} {user.fat}