mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
95 lines
3 KiB
TypeScript
95 lines
3 KiB
TypeScript
import { useRouter } from "next/router";
|
|
import React from "react";
|
|
import { Title } from "../../../../../components/UI/Elements/Styles/Title";
|
|
import Layout from "../../../../../components/UI/Layout";
|
|
import { getOrganizationContextInfo } from "../../../../../services/orgs";
|
|
import { getOrgCourses } from "../../../../../services/courses/courses";
|
|
import { createCollection } from "../../../../../services/collections";
|
|
|
|
function NewCollection() {
|
|
const router = useRouter();
|
|
const { orgslug } = router.query;
|
|
const [name, setName] = React.useState("");
|
|
const [org, setOrg] = React.useState({}) as any;
|
|
const [description, setDescription] = React.useState("");
|
|
const [selectedCourses, setSelectedCourses] = React.useState([]) as any;
|
|
const [courses, setCourses] = React.useState([]) as any;
|
|
const [isLoading, setIsLoading] = React.useState(false);
|
|
|
|
async function getCourses() {
|
|
setIsLoading(true);
|
|
const org = await getOrganizationContextInfo(orgslug);
|
|
setOrg(org);
|
|
const courses = await getOrgCourses(org.org_id);
|
|
setCourses(courses);
|
|
setIsLoading(false);
|
|
}
|
|
|
|
const handleNameChange = (event: React.ChangeEvent<HTMLInputElement>) => {
|
|
setName(event.target.value);
|
|
};
|
|
|
|
const handleDescriptionChange = (event: React.ChangeEvent<HTMLInputElement>) => {
|
|
setDescription(event.target.value);
|
|
};
|
|
|
|
const handleSubmit = async (e: any) => {
|
|
e.preventDefault();
|
|
console.log("selectedCourses", selectedCourses);
|
|
const collection = {
|
|
name: name,
|
|
description: description,
|
|
courses: selectedCourses,
|
|
org_id: org.org_id,
|
|
};
|
|
await createCollection(collection);
|
|
router.push("/org/" + orgslug + "/collections");
|
|
};
|
|
|
|
React.useEffect(() => {
|
|
if (router.isReady) {
|
|
getCourses();
|
|
}
|
|
return () => {};
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [router.isReady]);
|
|
|
|
return (
|
|
<Layout>
|
|
<Title>Add new</Title>
|
|
<br />
|
|
<input type="text" placeholder="Name" value={name} onChange={handleNameChange} />
|
|
{isLoading ? (
|
|
<p>Loading...</p>
|
|
) : (
|
|
<div>
|
|
{courses.map((course: any) => (
|
|
<div key={course.course_id}>
|
|
<input
|
|
type="checkbox"
|
|
id={course.course_id}
|
|
name={course.course_id}
|
|
value={course.course_id}
|
|
onChange={(e) => {
|
|
if (e.target.checked) {
|
|
setSelectedCourses([...selectedCourses, e.target.value]);
|
|
} else {
|
|
setSelectedCourses(selectedCourses.filter((item: any) => item !== e.target.value));
|
|
}
|
|
}}
|
|
/>
|
|
<label htmlFor={course.course_id}>{course.name}</label>
|
|
</div>
|
|
))}
|
|
</div>
|
|
)}
|
|
|
|
<br />
|
|
<input type="text" placeholder="Description" value={description} onChange={handleDescriptionChange} />
|
|
<br />
|
|
<button onClick={handleSubmit}>Submit</button>
|
|
</Layout>
|
|
);
|
|
}
|
|
|
|
export default NewCollection;
|