Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion src/components/academic/departments/create-department.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,10 @@ const CreateDepartment = () => {
name: "",
school: "",
established: "",
head: "",
});

// Create department
// Create department
const handleCreateSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setIsLoading(true);
Expand All @@ -41,6 +42,7 @@ const CreateDepartment = () => {
name: "",
school: "",
established: "",
head: "",
});
refreshDepartment();
setIsCreateDialogOpen(false);
Expand Down Expand Up @@ -90,6 +92,16 @@ const CreateDepartment = () => {
placeholder="Enter school name"
/>
</div>
<div className="grid gap-3">
<Label htmlFor="create-head">Head of Department</Label>
<Input
id="create-head"
value={createDepartment.head}
onChange={(e) => InputHandler(e, setCreateDepartment)}
name="head"
placeholder="Enter Head of Department name"
/>
</div>
<div className="grid gap-3">
<Label htmlFor="established-at">Established At</Label>
<Input
Expand Down
14 changes: 12 additions & 2 deletions src/components/academic/departments/edit-department.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ import axios from "axios";
import { Edit } from "lucide-react";
import { useState } from "react";
import { toast } from "sonner";
import type { DepartmentData, EditDepartmentData } from "@/types";
import type { DepartmentData, EditDepartmentProps } from "@/types";
import { department } from "../../../store/atoms/academics/department";
import { useRecoilRefresher_UNSTABLE } from "recoil";

const base_api = import.meta.env.VITE_SERVER_BASE_URL;

const EditDepartment = ({ departmentInfo }: EditDepartmentData) => {
const EditDepartment = ({ departmentInfo }: EditDepartmentProps) => {
const refreshDepartment = useRecoilRefresher_UNSTABLE(department);

const [editingDepartment, setEditingDepartment] =
Expand Down Expand Up @@ -97,6 +97,16 @@ const EditDepartment = ({ departmentInfo }: EditDepartmentData) => {
placeholder="Enter school name"
/>
</div>
<div className="grid gap-3">
<Label htmlFor="create-head">Head of Department Name</Label>
<Input
id="create-head"
value={editingDepartment.head}
onChange={(e) => InputHandler(e, setEditingDepartment)}
name="school"
placeholder="Enter Head of Department Name"
/>
</div>
<div className="grid gap-3">
<Label htmlFor="established-at">Established At</Label>
<Input
Expand Down
6 changes: 4 additions & 2 deletions src/components/academic/departments/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ const AcademicDepartmentTab = () => {
</div>
<div>
<span className="font-medium">Department Head:</span>{" "}
{/* {dept.head} */}
{dept.head}
</div>

<div>
Expand Down Expand Up @@ -106,7 +106,9 @@ const AcademicDepartmentTab = () => {
</Card>
))
) : (
<div className="text-rose-500 flex items-center justify-center">No department available to show</div>
<div className="text-rose-500 flex items-center justify-center">
No department available to show
</div>
)}
</div>
</>
Expand Down
268 changes: 133 additions & 135 deletions src/components/academic/semester/create-semster.tsx
Original file line number Diff line number Diff line change
@@ -1,150 +1,148 @@
// import UseModel from "@/components/models/useModel";
// import { Button } from "@/components/ui/button";
// import { Input } from "@/components/ui/input";
// import { Label } from "@/components/ui/label";
// import {
// Select,
// SelectContent,
// SelectItem,
// SelectTrigger,
// SelectValue,
// } from "@/components/ui/select";
// import { InputHandler, SelectHandler } from "@/lib/utils";
// import axios from "axios";
// import { Plus } from "lucide-react";
// import { useState } from "react";
// import { toast } from "sonner";
// // import type { SemesterData } from "@/types";
// import { useRecoilRefresher_UNSTABLE } from "recoil";
// import { semester } from "@/store/atoms/academics/semester";
import UseModel from "@/components/models/useModel";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { InputHandler, SelectHandler } from "@/lib/utils";
import axios from "axios";
import { Plus } from "lucide-react";
import { useState } from "react";
import { toast } from "sonner";
import { useRecoilRefresher_UNSTABLE } from "recoil";
import { semester } from "@/store/atoms/academics/semester";
import type { SemesterData } from "@/types";

// const base_api = import.meta.env.VITE_SERVER_BASE_URL;
const base_api = import.meta.env.VITE_SERVER_BASE_URL;

const CreateSemester = () => {
// const refreshSemester = useRecoilRefresher_UNSTABLE(semester);
const refreshSemester = useRecoilRefresher_UNSTABLE(semester);

// const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);
// const [isLoading, setIsLoading] = useState<boolean>(false);
const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);
const [isLoading, setIsLoading] = useState<boolean>(false);

// const [createSemester, setCreateSemester] = useState<SemesterData>({
// semester: "",
// courses: [""],
// enddate: "",
// startdate: "",
// status: "",
// });
const [createSemester, setCreateSemester] = useState<SemesterData>({
semester: "",
courses: "",
enddate: "",
startdate: "",
status: "",
});

// Create department submit
// const handleCreateSubmit = async (e: React.FormEvent) => {
// e.preventDefault();
// setIsLoading(true);
const handleCreateSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setIsLoading(true);

// try {
// const response = await axios.post(
// `${base_api}/api/v1/create-program`,
// createSemester,
try {
const response = await axios.post(
`${base_api}/api/v1/create-semester`,
createSemester,

// { withCredentials: true }
// );
// if (response.status === 201) {
// setCreateSemester({
// semester: "",
// courses: [],
// enddate: "",
// startdate: "",
// status: "",
// });
// toast.success("program created successfully");
// setIsLoading(false);
// refreshSemester();
// setIsCreateDialogOpen(false);
// }
// } catch (error: any) {
// console.error(error?.message);
// toast.error("Failed to create program");
// setIsLoading(false);
// setIsCreateDialogOpen(false);
// }
// };
{ withCredentials: true }
);
if (response.status === 201) {
setCreateSemester({
semester: "",
courses: "",
enddate: "",
startdate: "",
status: "",
});
toast.success("program created successfully");
setIsLoading(false);
refreshSemester();
setIsCreateDialogOpen(false);
}
} catch (error: any) {
console.error(error?.message);
toast.error("Failed to create program");
setIsLoading(false);
setIsCreateDialogOpen(false);
}
};

return (
// <UseModel
// isOpen={isCreateDialogOpen}
// onOpenChange={setIsCreateDialogOpen}
// handleSubmit={handleCreateSubmit}
// DialogHeading="Add New Program"
// DialogDescriptionText="Fill in the program details below. Click save when you're done."
// dialogFooterCancel="Cancel"
// dailogSubmitButtonText={isLoading ? "Loading..." : "Save program"}
// trigger={
// <Button className="gap-2 cursor-pointer">
// <Plus className="w-4 h-4" />
// Add new
// </Button>
// }
// >
// <div className="grid gap-3">
// <Label htmlFor="semester">Semester Name</Label>
// <Input
// id="semester"
// name="semester"
// value={createSemester.semester}
// onChange={(e) => InputHandler(e, setCreateSemester)}
// placeholder="Enter semester name"
// />
// </div>
// <div className="grid gap-3">
// <Label htmlFor="courses">Add courses</Label>
// <Input
// id="courses"
// name="courses"
// value={createSemester.courses[""]}
// onChange={(e) => InputHandler(e, setCreateSemester)}
// placeholder="Enter semester name"
// />
// </div>
<UseModel
isOpen={isCreateDialogOpen}
onOpenChange={setIsCreateDialogOpen}
handleSubmit={handleCreateSubmit}
DialogHeading="Add New Program"
DialogDescriptionText="Fill in the program details below. Click save when you're done."
dialogFooterCancel="Cancel"
dailogSubmitButtonText={isLoading ? "Loading..." : "Save program"}
trigger={
<Button className="gap-2 cursor-pointer">
<Plus className="w-4 h-4" />
Add new
</Button>
}
>
<div className="grid gap-3">
<Label htmlFor="semester">Semester Name</Label>
<Input
id="semester"
name="semester"
value={createSemester.semester}
onChange={(e) => InputHandler(e, setCreateSemester)}
placeholder="Enter semester name"
/>
</div>
<div className="grid gap-3">
<Label htmlFor="courses">Add courses</Label>
<Input
id="courses"
name="courses"
value={createSemester.courses}
onChange={(e) => InputHandler(e, setCreateSemester)}
placeholder="Enter semester name"
/>
</div>

// <div className="grid gap-3">
// <Label htmlFor="create-startdate">Start Date</Label>
// <Input
// id="create-startdate"
// name="startdate"
// type="date"
// value={createSemester.startdate}
// onChange={(e) => InputHandler(e, setCreateSemester)}
// />
// </div>
// <div className="grid gap-3">
// <Label htmlFor="create-enddate">End Date</Label>
// <Input
// id="create-enddate"
// name="enddate"
// type="date"
// value={createSemester.enddate}
// onChange={(e) => InputHandler(e, setCreateSemester)}
// />
// </div>
// <div className="grid gap-3">
// <Label htmlFor="create-status">Select Status</Label>
// <Select
// value={createSemester.status}
// onValueChange={(value: "Planning" | "Current" | "Completed") =>
// SelectHandler("status", value, setCreateSemester)
// }
// >
// <SelectTrigger className="w-full">
// <SelectValue placeholder="Select status" />
// </SelectTrigger>
// <SelectContent>
// <SelectItem value="Planning">Planning</SelectItem>
// <SelectItem value="Current">Current</SelectItem>
// <SelectItem value="Completed">Completed</SelectItem>
// </SelectContent>
// </Select>
// </div>
// </UseModel>

<div>not Implemented yet </div>
<div className="grid gap-3">
<Label htmlFor="create-startdate">Start Date</Label>
<Input
id="create-startdate"
name="startdate"
type="date"
value={createSemester.startdate}
onChange={(e) => InputHandler(e, setCreateSemester)}
/>
</div>
<div className="grid gap-3">
<Label htmlFor="create-enddate">End Date</Label>
<Input
id="create-enddate"
name="enddate"
type="date"
value={createSemester.enddate}
onChange={(e) => InputHandler(e, setCreateSemester)}
/>
</div>
<div className="grid gap-3">
<Label htmlFor="create-status">Select Status</Label>
<Select
value={createSemester.status}
onValueChange={(value: "Planning" | "Current" | "Completed") =>
SelectHandler("status", value, setCreateSemester)
}
>
<SelectTrigger className="w-full">
<SelectValue placeholder="Select status" />
</SelectTrigger>
<SelectContent>
<SelectItem value="Planning">Planning</SelectItem>
<SelectItem value="Current">Current</SelectItem>
<SelectItem value="Completed">Completed</SelectItem>
</SelectContent>
</Select>
</div>
</UseModel>
);
};

Expand Down
Loading