generated from muhtadeetaron/nextjs-template
137 lines
3.6 KiB
TypeScript
137 lines
3.6 KiB
TypeScript
import { Input } from "@/components/ui/input";
|
|
import { Label } from "@/components/ui/label";
|
|
|
|
interface UserData {
|
|
name: string;
|
|
institution: string;
|
|
sscRoll: string;
|
|
hscRoll: string;
|
|
email: string;
|
|
phone: string;
|
|
}
|
|
|
|
interface ProfileManagerProps {
|
|
userData: UserData | undefined;
|
|
edit: boolean;
|
|
setUserData: React.Dispatch<React.SetStateAction<UserData | undefined>>;
|
|
}
|
|
|
|
export default function ProfileManager({
|
|
userData,
|
|
edit,
|
|
setUserData,
|
|
}: ProfileManagerProps) {
|
|
if (!userData) return null;
|
|
|
|
const handleChange = (field: keyof UserData, value: string) => {
|
|
setUserData((prev) => (prev ? { ...prev, [field]: value } : prev));
|
|
};
|
|
|
|
return (
|
|
<div className="mx-auto">
|
|
<div className="space-y-4">
|
|
<div className="space-y-2">
|
|
<Label htmlFor="name" className="text-sm font-semibold text-gray-700">
|
|
Name
|
|
</Label>
|
|
<Input
|
|
id="name"
|
|
type="text"
|
|
value={userData.name}
|
|
onChange={(e) => handleChange("name", e.target.value)}
|
|
className="bg-gray-50 py-6"
|
|
readOnly={!edit}
|
|
/>
|
|
</div>
|
|
|
|
<div className="space-y-2">
|
|
<Label
|
|
htmlFor="institution"
|
|
className="text-sm font-semibold text-gray-700"
|
|
>
|
|
Institution
|
|
</Label>
|
|
<Input
|
|
id="institution"
|
|
type="text"
|
|
value={userData.institution}
|
|
onChange={(e) => handleChange("institution", e.target.value)}
|
|
className="bg-gray-50 py-6"
|
|
readOnly={!edit}
|
|
/>
|
|
</div>
|
|
|
|
<div className="flex gap-4">
|
|
<div className="space-y-2 w-full">
|
|
<Label
|
|
htmlFor="sscRoll"
|
|
className="text-sm font-semibold text-gray-700"
|
|
>
|
|
SSC Roll
|
|
</Label>
|
|
<Input
|
|
id="sscRoll"
|
|
type="text"
|
|
value={userData.sscRoll}
|
|
onChange={(e) => handleChange("sscRoll", e.target.value)}
|
|
className="bg-gray-50 py-6"
|
|
readOnly={!edit}
|
|
/>
|
|
</div>
|
|
|
|
<div className="space-y-2 w-full">
|
|
<Label
|
|
htmlFor="hscRoll"
|
|
className="text-sm font-semibold text-gray-700"
|
|
>
|
|
HSC Roll
|
|
</Label>
|
|
<Input
|
|
id="hscRoll"
|
|
type="text"
|
|
value={userData.hscRoll}
|
|
onChange={(e) => handleChange("hscRoll", e.target.value)}
|
|
className="bg-gray-50 py-6"
|
|
readOnly={!edit}
|
|
/>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="space-y-2">
|
|
<Label
|
|
htmlFor="email"
|
|
className="text-sm font-semibold text-gray-700"
|
|
>
|
|
Email
|
|
</Label>
|
|
<Input
|
|
id="email"
|
|
type="email"
|
|
value={userData.email}
|
|
onChange={(e) => handleChange("email", e.target.value)}
|
|
className="bg-gray-50 py-6"
|
|
readOnly={!edit}
|
|
/>
|
|
</div>
|
|
|
|
<div className="space-y-2">
|
|
<Label
|
|
htmlFor="phone"
|
|
className="text-sm font-semibold text-gray-700"
|
|
>
|
|
Phone
|
|
</Label>
|
|
<Input
|
|
id="phone"
|
|
type="tel"
|
|
value={userData.phone}
|
|
onChange={(e) => handleChange("phone", e.target.value)}
|
|
className="bg-gray-50 py-6"
|
|
readOnly={!edit}
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|