mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-18 20:09:25 +00:00
feat: save course chapters/elements
This commit is contained in:
parent
57e64a2b74
commit
3fe5f47eea
3 changed files with 59 additions and 14 deletions
|
|
@ -7,7 +7,7 @@ import { Title } from "../../../../../../components/ui/styles/Title";
|
|||
import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd";
|
||||
import { initialData, initialData2 } from "../../../../../../components/drags/data";
|
||||
import Chapter from "../../../../../../components/drags/Chapter";
|
||||
import { createChapter, deleteChapter, getCourseChaptersMetadata } from "../../../../../../services/courses/chapters";
|
||||
import { createChapter, deleteChapter, getCourseChaptersMetadata, updateChaptersMetadata } from "../../../../../../services/courses/chapters";
|
||||
import { useRouter } from "next/router";
|
||||
import NewChapterModal from "../../../../../../components/modals/CourseEdit/NewChapter";
|
||||
import NewElementModal from "../../../../../../components/modals/CourseEdit/NewElement";
|
||||
|
|
@ -73,6 +73,7 @@ function CourseEdit() {
|
|||
// Submit new element
|
||||
const submitElement = async (element: any) => {
|
||||
console.log("submitElement", element);
|
||||
updateChaptersMetadata(courseid, data);
|
||||
await createElement(element, element.chapterId);
|
||||
getCourseChapters();
|
||||
setNewElementModal(false);
|
||||
|
|
@ -84,10 +85,9 @@ function CourseEdit() {
|
|||
getCourseChapters();
|
||||
};
|
||||
|
||||
const openNewElementModal = async (chapterId: any) => {
|
||||
console.log("openNewElementModal", chapterId);
|
||||
setNewElementModal(true);
|
||||
setNewElementModalData(chapterId);
|
||||
const updateChapters = () => {
|
||||
console.log(data);
|
||||
updateChaptersMetadata(courseid,data);
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -95,6 +95,13 @@ function CourseEdit() {
|
|||
Modals
|
||||
|
||||
*/
|
||||
|
||||
const openNewElementModal = async (chapterId: any) => {
|
||||
console.log("openNewElementModal", chapterId);
|
||||
setNewElementModal(true);
|
||||
setNewElementModalData(chapterId);
|
||||
};
|
||||
|
||||
// Close new chapter modal
|
||||
const closeNewChapterModal = () => {
|
||||
setNewChapterModal(false);
|
||||
|
|
@ -218,6 +225,13 @@ function CourseEdit() {
|
|||
>
|
||||
+
|
||||
</button>
|
||||
<button
|
||||
onClick={() => {
|
||||
updateChapters();
|
||||
}}
|
||||
>
|
||||
Save Chapters
|
||||
</button>
|
||||
</Title>
|
||||
{newChapterModal && <NewChapterModal closeModal={closeNewChapterModal} submitChapter={submitChapter}></NewChapterModal>}
|
||||
{newElementModal && <NewElementModal closeModal={closeNewElementModal} submitElement={submitElement} chapterId={newElementModalData}></NewElementModal>}
|
||||
|
|
@ -232,7 +246,15 @@ function CourseEdit() {
|
|||
<div key={"chapters"} {...provided.droppableProps} ref={provided.innerRef}>
|
||||
{getChapters().map((info: any, index: any) => (
|
||||
<>
|
||||
<Chapter orgslug={orgslug} courseid={courseid} openNewElementModal={openNewElementModal} deleteChapter={deleteChapterUI} key={index} info={info} index={index}></Chapter>
|
||||
<Chapter
|
||||
orgslug={orgslug}
|
||||
courseid={courseid}
|
||||
openNewElementModal={openNewElementModal}
|
||||
deleteChapter={deleteChapterUI}
|
||||
key={index}
|
||||
info={info}
|
||||
index={index}
|
||||
></Chapter>
|
||||
</>
|
||||
))}
|
||||
{provided.placeholder}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,26 @@ export async function getCourseChaptersMetadata(course_id: any) {
|
|||
return data;
|
||||
}
|
||||
|
||||
export async function updateChaptersMetadata(course_id: any, data: any) {
|
||||
const HeadersConfig = new Headers({ "Content-Type": "application/json" });
|
||||
|
||||
const requestOptions: any = {
|
||||
method: "PUT",
|
||||
headers: HeadersConfig,
|
||||
redirect: "follow",
|
||||
credentials: "include",
|
||||
body: JSON.stringify(data),
|
||||
};
|
||||
|
||||
const result: any = await fetch(`${getAPIUrl()}chapters/meta/course_${course_id}`, requestOptions)
|
||||
.then((result) => result.json())
|
||||
.catch((error) => console.log("error", error));
|
||||
|
||||
console.log("result", result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
export async function createChapter(data: any, course_id: any) {
|
||||
console.log("data", data, course_id);
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,8 @@ class CourseChapterInDB(CourseChapter):
|
|||
# Frontend
|
||||
class CourseChapterMetaData(BaseModel):
|
||||
chapterOrder: List[str]
|
||||
chapters: List
|
||||
chapters: object
|
||||
elements: object
|
||||
|
||||
#### Classes ####################################################
|
||||
|
||||
|
|
@ -167,8 +168,6 @@ async def get_coursechapters_meta(course_id: str, current_user: PublicUser):
|
|||
coursechapters = coursechapters.find(
|
||||
{"course_id": course_id}).sort("name", 1)
|
||||
|
||||
|
||||
|
||||
course = courses.find_one({"course_id": course_id})
|
||||
course = Course(**course) # type: ignore
|
||||
|
||||
|
|
@ -213,16 +212,20 @@ async def update_coursechapters_meta(course_id: str, coursechapters_metadata: Co
|
|||
coursechapters = learnhouseDB["coursechapters"]
|
||||
courses = learnhouseDB["courses"]
|
||||
|
||||
course = courses.find_one({"course_id": course_id})
|
||||
course = Course(**course) # type: ignore
|
||||
|
||||
# update chapters in course
|
||||
courseInDB = courses.update_one({"course_id": course_id}, {
|
||||
"$set": {"chapters": coursechapters_metadata.chapterOrder}})
|
||||
|
||||
# TODO : update chapters in coursechapters
|
||||
|
||||
return {courseInDB}
|
||||
# update elements in coursechapters
|
||||
# TODO : performance/optimization improvement
|
||||
for coursechapter in coursechapters_metadata.chapters:
|
||||
coursechapters.update_one({"coursechapter_id": coursechapter}, {
|
||||
"$set": {"elements": coursechapters_metadata.chapters[coursechapter]["elementIds"]}})
|
||||
|
||||
|
||||
|
||||
return {"ok"}
|
||||
|
||||
#### Security ####################################################
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue