mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19: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 { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd";
|
||||||
import { initialData, initialData2 } from "../../../../../../components/drags/data";
|
import { initialData, initialData2 } from "../../../../../../components/drags/data";
|
||||||
import Chapter from "../../../../../../components/drags/Chapter";
|
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 { useRouter } from "next/router";
|
||||||
import NewChapterModal from "../../../../../../components/modals/CourseEdit/NewChapter";
|
import NewChapterModal from "../../../../../../components/modals/CourseEdit/NewChapter";
|
||||||
import NewElementModal from "../../../../../../components/modals/CourseEdit/NewElement";
|
import NewElementModal from "../../../../../../components/modals/CourseEdit/NewElement";
|
||||||
|
|
@ -73,6 +73,7 @@ function CourseEdit() {
|
||||||
// Submit new element
|
// Submit new element
|
||||||
const submitElement = async (element: any) => {
|
const submitElement = async (element: any) => {
|
||||||
console.log("submitElement", element);
|
console.log("submitElement", element);
|
||||||
|
updateChaptersMetadata(courseid, data);
|
||||||
await createElement(element, element.chapterId);
|
await createElement(element, element.chapterId);
|
||||||
getCourseChapters();
|
getCourseChapters();
|
||||||
setNewElementModal(false);
|
setNewElementModal(false);
|
||||||
|
|
@ -84,10 +85,9 @@ function CourseEdit() {
|
||||||
getCourseChapters();
|
getCourseChapters();
|
||||||
};
|
};
|
||||||
|
|
||||||
const openNewElementModal = async (chapterId: any) => {
|
const updateChapters = () => {
|
||||||
console.log("openNewElementModal", chapterId);
|
console.log(data);
|
||||||
setNewElementModal(true);
|
updateChaptersMetadata(courseid,data);
|
||||||
setNewElementModalData(chapterId);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -95,6 +95,13 @@ function CourseEdit() {
|
||||||
Modals
|
Modals
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const openNewElementModal = async (chapterId: any) => {
|
||||||
|
console.log("openNewElementModal", chapterId);
|
||||||
|
setNewElementModal(true);
|
||||||
|
setNewElementModalData(chapterId);
|
||||||
|
};
|
||||||
|
|
||||||
// Close new chapter modal
|
// Close new chapter modal
|
||||||
const closeNewChapterModal = () => {
|
const closeNewChapterModal = () => {
|
||||||
setNewChapterModal(false);
|
setNewChapterModal(false);
|
||||||
|
|
@ -218,6 +225,13 @@ function CourseEdit() {
|
||||||
>
|
>
|
||||||
+
|
+
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
onClick={() => {
|
||||||
|
updateChapters();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Save Chapters
|
||||||
|
</button>
|
||||||
</Title>
|
</Title>
|
||||||
{newChapterModal && <NewChapterModal closeModal={closeNewChapterModal} submitChapter={submitChapter}></NewChapterModal>}
|
{newChapterModal && <NewChapterModal closeModal={closeNewChapterModal} submitChapter={submitChapter}></NewChapterModal>}
|
||||||
{newElementModal && <NewElementModal closeModal={closeNewElementModal} submitElement={submitElement} chapterId={newElementModalData}></NewElementModal>}
|
{newElementModal && <NewElementModal closeModal={closeNewElementModal} submitElement={submitElement} chapterId={newElementModalData}></NewElementModal>}
|
||||||
|
|
@ -232,7 +246,15 @@ function CourseEdit() {
|
||||||
<div key={"chapters"} {...provided.droppableProps} ref={provided.innerRef}>
|
<div key={"chapters"} {...provided.droppableProps} ref={provided.innerRef}>
|
||||||
{getChapters().map((info: any, index: any) => (
|
{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}
|
{provided.placeholder}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,26 @@ export async function getCourseChaptersMetadata(course_id: any) {
|
||||||
return data;
|
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) {
|
export async function createChapter(data: any, course_id: any) {
|
||||||
console.log("data", data, course_id);
|
console.log("data", data, course_id);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,8 @@ class CourseChapterInDB(CourseChapter):
|
||||||
# Frontend
|
# Frontend
|
||||||
class CourseChapterMetaData(BaseModel):
|
class CourseChapterMetaData(BaseModel):
|
||||||
chapterOrder: List[str]
|
chapterOrder: List[str]
|
||||||
chapters: List
|
chapters: object
|
||||||
|
elements: object
|
||||||
|
|
||||||
#### Classes ####################################################
|
#### Classes ####################################################
|
||||||
|
|
||||||
|
|
@ -167,8 +168,6 @@ async def get_coursechapters_meta(course_id: str, current_user: PublicUser):
|
||||||
coursechapters = coursechapters.find(
|
coursechapters = coursechapters.find(
|
||||||
{"course_id": course_id}).sort("name", 1)
|
{"course_id": course_id}).sort("name", 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
course = courses.find_one({"course_id": course_id})
|
course = courses.find_one({"course_id": course_id})
|
||||||
course = Course(**course) # type: ignore
|
course = Course(**course) # type: ignore
|
||||||
|
|
||||||
|
|
@ -213,16 +212,20 @@ async def update_coursechapters_meta(course_id: str, coursechapters_metadata: Co
|
||||||
coursechapters = learnhouseDB["coursechapters"]
|
coursechapters = learnhouseDB["coursechapters"]
|
||||||
courses = learnhouseDB["courses"]
|
courses = learnhouseDB["courses"]
|
||||||
|
|
||||||
course = courses.find_one({"course_id": course_id})
|
|
||||||
course = Course(**course) # type: ignore
|
|
||||||
|
|
||||||
# update chapters in course
|
# update chapters in course
|
||||||
courseInDB = courses.update_one({"course_id": course_id}, {
|
courseInDB = courses.update_one({"course_id": course_id}, {
|
||||||
"$set": {"chapters": coursechapters_metadata.chapterOrder}})
|
"$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 ####################################################
|
#### Security ####################################################
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue