diff --git a/front/components/Editor/Editor.tsx b/front/components/Editor/Editor.tsx
index c074dfb4..f849904d 100644
--- a/front/components/Editor/Editor.tsx
+++ b/front/components/Editor/Editor.tsx
@@ -4,19 +4,28 @@ import StarterKit from "@tiptap/starter-kit";
import Collaboration from "@tiptap/extension-collaboration";
import CollaborationCursor from "@tiptap/extension-collaboration-cursor";
import { AuthContext } from "../Security/AuthProvider";
+import learnhouseIcon from "public/learnhouse_icon.png";
import { ToolbarButtons } from "./Toolbar/ToolbarButtons";
+import Image from "next/image";
+import styled from "styled-components";
+import { getBackendUrl } from "../../services/config";
+import { RocketIcon, SlashIcon, TriangleLeftIcon, TriangleRightIcon } from "@radix-ui/react-icons";
interface Editor {
content: string;
ydoc: any;
provider: any;
+ element: any;
+ course: any;
setContent: (content: string) => void;
}
function Editor(props: Editor) {
const auth: any = React.useContext(AuthContext);
+ console.log(props.element);
+ console.log(props.course);
- const editor : any = useEditor({
+ const editor: any = useEditor({
extensions: [
StarterKit.configure({
// The Collaboration extension comes with its own history handling
@@ -41,12 +50,131 @@ function Editor(props: Editor) {
return (
- File
-
-
-
+
+
+
+
+
+
+ {" "}
+ {props.course.course.name} {props.element.name}{" "}
+
+ props.setContent(editor.getJSON())}>
+
+
+
+
+
+
+
+
+
+
+
+
);
}
+const EditorTop = styled.div`
+ background-color: white;
+ border-radius: 15px;
+ margin: 40px;
+ margin-bottom: 20px;
+ padding: 10px;
+`;
+
+// Inside EditorTop
+const EditorDocSection = styled.div`
+ display: flex;
+ flex-direction: column;
+`;
+const EditorUsersSection = styled.div`
+ display: flex;
+ flex-direction: column;
+`;
+
+// Inside EditorDocSection
+const EditorInfoWrapper = styled.div`
+ display: flex;
+ flex-direction: row;
+ margin-bottom: 5px;
+`;
+const EditorButtonsWrapper = styled.div``;
+
+// Inside EditorUsersSection
+const EditorUserProfileWrapper = styled.div``;
+
+// Inside EditorInfoWrapper
+//..todo
+const EditorInfoLearnHouseLogo = styled(Image)`
+ border-radius: 6px;
+ margin-right: 15px;
+`;
+const EditorInfoDocName = styled.div`
+ font-size: 16px;
+ justify-content: center;
+ align-items: center;
+ display: flex;
+ margin-left: 10px;
+
+ svg {
+ margin-left: 4px;
+ margin-right: 4px;
+ color: #909090;
+ }
+`;
+
+const EditorSaveButton = styled.div`
+ display: flex;
+ border-radius: 6px;
+ width: 25px;
+ height: 25px;
+ padding: 5px;
+ font-size: 5px;
+ margin-right: 5px;
+ margin-left: 7px;
+
+ &.is-active {
+ background: rgba(176, 176, 176, 0.5);
+
+ &:hover {
+ background: rgba(139, 139, 139, 0.5);
+ cursor: pointer;
+ }
+ }
+
+ &:hover {
+ background: rgba(217, 217, 217, 0.48);
+ cursor: pointer;
+ }
+`;
+
+const EditorInfoThumbnail = styled.img`
+ height: 25px;
+ width: 56px;
+ object-fit: cover;
+ object-position: top;
+ border-radius: 7px;
+ margin-left: 5px;
+`;
+
+const EditorContentWrapper = styled.div`
+ margin: 40px;
+ background-color: white;
+
+ // disable chrome outline
+
+
+ .ProseMirror {
+ padding: 10px;
+ &:focus {
+ outline: none !important;
+ outline-style: none !important;
+ box-shadow: none !important;
+ }
+ }
+
+`;
+
export default Editor;
diff --git a/front/components/Editor/EditorWrapper.tsx b/front/components/Editor/EditorWrapper.tsx
index ece8d159..283fd5f2 100644
--- a/front/components/Editor/EditorWrapper.tsx
+++ b/front/components/Editor/EditorWrapper.tsx
@@ -7,6 +7,7 @@ import { updateElement } from "../../services/courses/elements";
interface EditorWrapperProps {
content: string;
element: any;
+ course:any
}
function EditorWrapper(props: EditorWrapperProps) {
@@ -18,7 +19,6 @@ function EditorWrapper(props: EditorWrapperProps) {
function createRTCProvider() {
const provider = new WebrtcProvider(props.element.element_id, ydoc);
-
setYdocState(ydoc);
setProviderState(provider);
setIsLoading(false);
@@ -28,12 +28,13 @@ function EditorWrapper(props: EditorWrapperProps) {
let element = props.element;
element.content = content;
const res = await updateElement(element, element.element_id);
+ alert(JSON.stringify(res));
}
if (isLoading) {
createRTCProvider();
} else {
- return ;
+ return ;
}
}
diff --git a/front/components/Editor/Toolbar/ToolbarButtons.tsx b/front/components/Editor/Toolbar/ToolbarButtons.tsx
index 18bea8d7..4d057617 100644
--- a/front/components/Editor/Toolbar/ToolbarButtons.tsx
+++ b/front/components/Editor/Toolbar/ToolbarButtons.tsx
@@ -1,99 +1,82 @@
-export const ToolbarButtons = ({ editor }: any) => {
- if (!editor) {
- return null;
- }
+import styled from "styled-components";
+import { FontBoldIcon, FontItalicIcon, StrikethroughIcon, ArrowLeftIcon, ArrowRightIcon } from "@radix-ui/react-icons";
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
- );
- };
\ No newline at end of file
+export const ToolbarButtons = ({ editor }: any) => {
+ if (!editor) {
+ return null;
+ }
+
+ return (
+
+ editor.chain().focus().toggleBold().run()} className={editor.isActive("bold") ? "is-active" : ""}>
+
+
+ editor.chain().focus().toggleItalic().run()} className={editor.isActive("italic") ? "is-active" : ""}>
+
+
+ editor.chain().focus().toggleStrike().run()} className={editor.isActive("strike") ? "is-active" : ""}>
+
+
+
+ editor.chain().focus().undo().run()}>
+
+
+ editor.chain().focus().redo().run()}>
+
+
+ editor.chain().focus().toggleHeading({ level: parseInt(e.target.value) }).run() }>
+
+
+
+
+
+
+
+
+ );
+};
+
+const ToolButtonsWrapper = styled.div`
+ display: flex;
+ flex-direction: row;
+ align-items: left;
+ justify-content: left;
+`;
+
+const ToolBtn = styled.div`
+ display: flex;
+ background: rgba(217, 217, 217, 0.24);
+ border-radius: 6px;
+ width: 25px;
+ height: 25px;
+ padding: 5px;
+ font-size: 5px;
+ margin-right: 5px;
+
+ &.is-active {
+ background: rgba(176, 176, 176, 0.5);
+
+ &:hover {
+ background: rgba(139, 139, 139, 0.5);
+ cursor: pointer;
+ }
+ }
+
+ &:hover {
+ background: rgba(217, 217, 217, 0.48);
+ cursor: pointer;
+ }
+`;
+
+const ToolSelect = styled.select`
+ display: flex;
+ background: rgba(217, 217, 217, 0.24);
+ border-radius: 6px;
+ width: 100px;
+ border: none;
+ height: 25px;
+ padding: 5px;
+ font-size: 11px;
+ font-family: "DM Sans";
+ margin-right: 5px;
+`;
diff --git a/front/pages/index.tsx b/front/pages/index.tsx
index 28e5c0b8..0fe7549e 100644
--- a/front/pages/index.tsx
+++ b/front/pages/index.tsx
@@ -4,7 +4,7 @@ import styled from "styled-components";
import learnhouseBigIcon from "public/learnhouse_bigicon.png";
import Image from "next/image";
import Link from "next/link";
-import { PreAlphaLabel } from "../components/rename/UI/Layout";
+import { PreAlphaLabel } from "../components//UI/Layout";
const Home: NextPage = () => {
return (
diff --git a/front/pages/login.tsx b/front/pages/login.tsx
index 51a2f2ae..524cdd5d 100644
--- a/front/pages/login.tsx
+++ b/front/pages/login.tsx
@@ -1,8 +1,8 @@
import Router from "next/router";
import React from "react";
-import { Header } from "../components/rename/UI/Header";
-import Layout from "../components/rename/UI/Layout";
-import { Title } from "../components/rename/UI/Elements/Styles/Title";
+import { Header } from "../components//UI/Header";
+import Layout from "../components//UI/Layout";
+import { Title } from "../components//UI/Elements/Styles/Title";
import { loginAndGetToken } from "../services/auth/auth";
const Login = () => {
diff --git a/front/pages/org/[orgslug]/course/[courseid]/edit/index.tsx b/front/pages/org/[orgslug]/course/[courseid]/edit/index.tsx
index 2bc7d33e..a0ff2f16 100644
--- a/front/pages/org/[orgslug]/course/[courseid]/edit/index.tsx
+++ b/front/pages/org/[orgslug]/course/[courseid]/edit/index.tsx
@@ -1,9 +1,9 @@
import React from "react";
import { useState, useEffect } from "react";
import styled from "styled-components";
-import { Header } from "../../../../../../components/rename/UI/Header";
-import Layout from "../../../../../../components/rename/UI/Layout";
-import { Title } from "../../../../../../components/rename/UI/Elements/Styles/Title";
+import { Header } from "../../../../../../components//UI/Header";
+import Layout from "../../../../../../components//UI/Layout";
+import { Title } from "../../../../../../components//UI/Elements/Styles/Title";
import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd";
import { initialData, initialData2 } from "../../../../../../components/Drags/data";
import Chapter from "../../../../../../components/Drags/Chapter";
diff --git a/front/pages/org/[orgslug]/course/[courseid]/element/[elementid]/edit.tsx b/front/pages/org/[orgslug]/course/[courseid]/element/[elementid]/edit.tsx
index 697b450f..87658580 100644
--- a/front/pages/org/[orgslug]/course/[courseid]/element/[elementid]/edit.tsx
+++ b/front/pages/org/[orgslug]/course/[courseid]/element/[elementid]/edit.tsx
@@ -1,12 +1,13 @@
import { default as React, useEffect, useRef } from "react";
-import Layout from "../../../../../../../components/rename/UI/Layout";
-import { Title } from "../../../../../../../components/rename/UI/Elements/Styles/Title";
+import Layout from "../../../../../../../components//UI/Layout";
+import { Title } from "../../../../../../../components//UI/Elements/Styles/Title";
import dynamic from "next/dynamic";
import { useRouter } from "next/router";
import { getElement } from "../../../../../../../services/courses/elements";
-import AuthProvider from "../../../../../../../components/security/AuthProvider";
+import AuthProvider from "../../../../../../../components/Security/AuthProvider";
import EditorWrapper from "../../../../../../../components/Editor/EditorWrapper";
+import { getCourseMetadata } from "../../../../../../../services/courses/courses";
// Workaround (Next.js SSR doesn't support tip tap editor)
const Editor: any = dynamic(() => import("../../../../../../../components/Editor/EditorWrapper") as any, {
@@ -15,25 +16,40 @@ const Editor: any = dynamic(() => import("../../../../../../../components/Editor
function EditElement() {
const router = useRouter();
- const { elementid } = router.query;
+ const { elementid, courseid } = router.query;
const [element, setElement] = React.useState({});
+ const [courseInfo, setCourseInfo] = React.useState({}) as any;
const [isLoading, setIsLoading] = React.useState(true);
async function fetchElementData() {
const element = await getElement("element_" + elementid);
setElement(element);
+ }
+
+ async function fetchCourseInfo() {
+ const course = await getCourseMetadata("course_" + courseid);
+ setCourseInfo(course);
+ }
+
+ async function fetchAllData() {
+ await fetchElementData();
+ await fetchCourseInfo();
setIsLoading(false);
}
React.useEffect(() => {
if (router.isReady) {
- fetchElementData();
+ fetchAllData();
}
return () => {};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [router.isReady]);
- return {isLoading ? Loading...
: };
+ return (
+
+ {isLoading ? Loading...
: }
+
+ );
}
export default EditElement;
diff --git a/front/pages/org/[orgslug]/course/[courseid]/element/[elementid]/index.tsx b/front/pages/org/[orgslug]/course/[courseid]/element/[elementid]/index.tsx
index 955549f4..c0630600 100644
--- a/front/pages/org/[orgslug]/course/[courseid]/element/[elementid]/index.tsx
+++ b/front/pages/org/[orgslug]/course/[courseid]/element/[elementid]/index.tsx
@@ -6,7 +6,7 @@ import Text from "@tiptap/extension-text";
import { generateHTML } from "@tiptap/html";
import { useRouter } from "next/router";
import React, { useMemo } from "react";
-import Layout from "../../../../../../../components/rename/UI/Layout";
+import Layout from "../../../../../../../components//UI/Layout";
import { getElement } from "../../../../../../../services/courses/elements";
import { getBackendUrl } from "../../../../../../../services/config";
diff --git a/front/pages/org/[orgslug]/course/[courseid]/index.tsx b/front/pages/org/[orgslug]/course/[courseid]/index.tsx
index f21009a4..4531e916 100644
--- a/front/pages/org/[orgslug]/course/[courseid]/index.tsx
+++ b/front/pages/org/[orgslug]/course/[courseid]/index.tsx
@@ -3,7 +3,7 @@ import Link from "next/link";
import { useRouter } from "next/router";
import React from "react";
import styled from "styled-components";
-import Layout from "../../../../../components/rename/UI/Layout";
+import Layout from "../../../../../components//UI/Layout";
import { getAPIUrl, getBackendUrl } from "../../../../../services/config";
import { getCourse, getCourseMetadata } from "../../../../../services/courses/courses";
diff --git a/front/pages/org/[orgslug]/courses/index.tsx b/front/pages/org/[orgslug]/courses/index.tsx
index 055501f4..711dc6f7 100644
--- a/front/pages/org/[orgslug]/courses/index.tsx
+++ b/front/pages/org/[orgslug]/courses/index.tsx
@@ -2,9 +2,9 @@ import Link from "next/link";
import { useRouter } from "next/router";
import React from "react";
import styled from "styled-components";
-import { Header } from "../../../../components/rename/UI/Header";
-import Layout from "../../../../components/rename/UI/Layout";
-import { Title } from "../../../../components/rename/UI/Elements/Styles/Title";
+import { Header } from "../../../../components//UI/Header";
+import Layout from "../../../../components//UI/Layout";
+import { Title } from "../../../../components//UI/Elements/Styles/Title";
import { getBackendUrl } from "../../../../services/config";
import { deleteCourseFromBackend, getOrgCourses } from "../../../../services/courses/courses";
import { getOrganizationContextInfo } from "../../../../services/orgs";
diff --git a/front/pages/org/[orgslug]/courses/new/index.tsx b/front/pages/org/[orgslug]/courses/new/index.tsx
index 8f5f456c..22c28e5e 100644
--- a/front/pages/org/[orgslug]/courses/new/index.tsx
+++ b/front/pages/org/[orgslug]/courses/new/index.tsx
@@ -1,8 +1,8 @@
import { useRouter } from "next/router";
import React from "react";
-import { Header } from "../../../../../components/rename/UI/Header";
-import Layout from "../../../../../components/rename/UI/Layout";
-import { Title } from "../../../../../components/rename/UI/Elements/Styles/Title";
+import { Header } from "../../../../../components//UI/Header";
+import Layout from "../../../../../components//UI/Layout";
+import { Title } from "../../../../../components//UI/Elements/Styles/Title";
import { createNewCourse } from "../../../../../services/courses/courses";
import { getOrganizationContextInfo } from "../../../../../services/orgs";
diff --git a/front/pages/org/[orgslug]/index.tsx b/front/pages/org/[orgslug]/index.tsx
index 7a009b5c..67521df1 100644
--- a/front/pages/org/[orgslug]/index.tsx
+++ b/front/pages/org/[orgslug]/index.tsx
@@ -1,8 +1,8 @@
import React from "react";
import { useRouter } from "next/router";
-import Layout from "../../../components/rename/UI/Layout";
-import { Title } from "../../../components/rename/UI/Elements/Styles/Title";
-import { Header } from "../../../components/rename/UI/Header";
+import Layout from "../../../components//UI/Layout";
+import { Title } from "../../../components//UI/Elements/Styles/Title";
+import { Header } from "../../../components//UI/Header";
import Link from "next/link";
const OrgHomePage = () => {
diff --git a/front/pages/organizations/index.tsx b/front/pages/organizations/index.tsx
index 12c0c65c..b8485cbd 100644
--- a/front/pages/organizations/index.tsx
+++ b/front/pages/organizations/index.tsx
@@ -1,7 +1,7 @@
import Link from "next/link";
import React from "react";
-import Layout from "../../components/rename/UI/Layout";
-import { Title } from "../../components/rename/UI/Elements/Styles/Title";
+import Layout from "../../components//UI/Layout";
+import { Title } from "../../components//UI/Elements/Styles/Title";
import { deleteOrganizationFromBackend, getUserOrganizations } from "../../services/orgs";
const Organizations = () => {
diff --git a/front/pages/organizations/new.tsx b/front/pages/organizations/new.tsx
index 2a82ff49..a15c7943 100644
--- a/front/pages/organizations/new.tsx
+++ b/front/pages/organizations/new.tsx
@@ -1,6 +1,6 @@
import React from "react";
-import Layout from "../../components/rename/UI/Layout";
-import { Title } from "../../components/rename/UI/Elements/Styles/Title";
+import Layout from "../../components//UI/Layout";
+import { Title } from "../../components//UI/Elements/Styles/Title";
import { createNewOrganization } from "../../services/orgs";
const Organizations = () => {
diff --git a/front/pages/signup.tsx b/front/pages/signup.tsx
index 23424698..240fb05a 100644
--- a/front/pages/signup.tsx
+++ b/front/pages/signup.tsx
@@ -1,7 +1,7 @@
import React from "react";
-import { Header } from "../components/rename/UI/Header";
-import Layout from "../components/rename/UI/Layout";
-import { Title } from "../components/rename/UI/Elements/Styles/Title";
+import { Header } from "../components//UI/Header";
+import Layout from "../components//UI/Layout";
+import { Title } from "../components//UI/Elements/Styles/Title";
import { signup } from "../services/auth/auth";
const SignUp = () => {