From f0e5fa925d71363ad7202742e054302c199a62a0 Mon Sep 17 00:00:00 2001 From: swve Date: Tue, 16 Apr 2024 21:54:55 +0200 Subject: [PATCH] feat: add ui skeletons for course updates --- .../(withmenu)/course/[courseuuid]/course.tsx | 116 +++++------ .../Objects/CourseUpdates/CourseUpdates.tsx | 184 ++++++++++++++++++ .../Objects/Editor/EditorWrapper.tsx | 1 + apps/web/components/Objects/Menu/Menu.tsx | 10 +- apps/web/styles/globals.css | 4 + 5 files changed, 252 insertions(+), 63 deletions(-) create mode 100644 apps/web/components/Objects/CourseUpdates/CourseUpdates.tsx diff --git a/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/course.tsx b/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/course.tsx index 3890ee6d..c51f96cd 100644 --- a/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/course.tsx +++ b/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/course.tsx @@ -15,6 +15,7 @@ import { import { ArrowRight, Check, File, Sparkles, Video } from 'lucide-react' import { useOrg } from '@components/Contexts/OrgContext' import UserAvatar from '@components/Objects/UserAvatar' +import CourseUpdates from '@components/Objects/CourseUpdates/CourseUpdates' const CourseClient = (props: any) => { const [user, setUser] = useState({}) @@ -68,9 +69,14 @@ const CourseClient = (props: any) => { ) : ( -
-

Course

-

{course.name}

+
+
+

Course

+

{course.name}

+
+
+ +
{props.course?.thumbnail_image && org ? ( @@ -150,13 +156,13 @@ const CourseClient = (props: any) => {
{activity.activity_type === 'TYPE_DYNAMIC' && ( -
- -
- )} +
+ +
+ )} {activity.activity_type === 'TYPE_VIDEO' && (
{
{activity.activity_type === 'TYPE_DYNAMIC' && ( - <> - -
-

Page

- -
- - - )} + <> + +
+

Page

+ +
+ + + )} {activity.activity_type === 'TYPE_VIDEO' && ( <> { )} {activity.activity_type === 'TYPE_DOCUMENT' && ( - <> - -
-

Document

- -
- - - )} + <> + +
+

Document

+ +
+ + + )}
diff --git a/apps/web/components/Objects/CourseUpdates/CourseUpdates.tsx b/apps/web/components/Objects/CourseUpdates/CourseUpdates.tsx new file mode 100644 index 00000000..5b2a68db --- /dev/null +++ b/apps/web/components/Objects/CourseUpdates/CourseUpdates.tsx @@ -0,0 +1,184 @@ +import { PencilLine, Rss } from 'lucide-react' +import React from 'react' +import { motion } from 'framer-motion' +import { useFormik } from 'formik' +import * as Form from '@radix-ui/react-form' +import FormLayout, { + FormField, + FormLabelAndMessage, + Input, + Textarea, +} from '@components/StyledElements/Form/Form' + +function CourseUpdates() { + const [isModelOpen, setIsModelOpen] = React.useState(false) + + function handleModelOpen() { + setIsModelOpen(!isModelOpen) + } + + // if user clicks outside the model, close the model + React.useEffect(() => { + function handleClickOutside(event: any) { + if (event.target.closest('.bg-white') === null) { + setIsModelOpen(false) + } + } + document.addEventListener('mousedown', handleClickOutside) + return () => { + document.removeEventListener('mousedown', handleClickOutside) + } + }, []) + + return ( +
+
+
+
+ Updates + 5 +
+
+ {isModelOpen && + + } +
+ ) +} + +const UpdatesModel = () => { + return ( +
+
+
+ + Updates + +
+
+ + New Update +
+
+
+ +
+
+ ) +} + +const NewUpdateForm = () => { + + const validate = (values: any) => { + const errors: any = {} + + if (!values.title) { + errors.title = 'Title is required' + } + if (!values.content) { + errors.content = 'Content is required' + } + + return errors + } + const formik = useFormik({ + initialValues: { + title: '', + content: '' + }, + validate, + onSubmit: async (values) => { }, + enableReinitialize: true, + }) + return ( +
+
+
Test Course
+
Add new Course Update
+
+
+ + + + + + + + + + +