From 9dbd47c36f4fc828bb3d0ad66a2531a4cd24529b Mon Sep 17 00:00:00 2001 From: swve Date: Wed, 26 Apr 2023 21:43:43 +0200 Subject: [PATCH] feat: add document pdf activity type --- .../[courseid]/activity/[activityid]/page.tsx | 3 + .../Modals/Activities/Create/NewActivity.tsx | 14 +++- .../Create/NewActivityModal/DocumentPdf.tsx | 58 +++++++++++++ .../Activities/DocumentPdf/DocumentPdf.tsx | 75 +++++++++++++++++ .../documentpdf-page-activity.png | Bin 0 -> 620 bytes front/services/courses/activities.ts | 11 ++- src/routers/courses/activities.py | 10 ++- src/services/courses/activities/pdf.py | 77 ++++++++++++++++++ .../courses/activities/uploads/pdfs.py | 23 ++++++ 9 files changed, 263 insertions(+), 8 deletions(-) create mode 100644 front/components/Modals/Activities/Create/NewActivityModal/DocumentPdf.tsx create mode 100644 front/components/Pages/Activities/DocumentPdf/DocumentPdf.tsx create mode 100644 front/public/activities_types/documentpdf-page-activity.png create mode 100644 src/services/courses/activities/pdf.py create mode 100644 src/services/courses/activities/uploads/pdfs.py diff --git a/front/app/_orgs/[orgslug]/(withmenu)/course/[courseid]/activity/[activityid]/page.tsx b/front/app/_orgs/[orgslug]/(withmenu)/course/[courseid]/activity/[activityid]/page.tsx index 7a6fffa7..27afd332 100644 --- a/front/app/_orgs/[orgslug]/(withmenu)/course/[courseid]/activity/[activityid]/page.tsx +++ b/front/app/_orgs/[orgslug]/(withmenu)/course/[courseid]/activity/[activityid]/page.tsx @@ -13,6 +13,7 @@ import { Check } from "lucide-react"; import { swrFetcher } from "@services/utils/ts/requests"; import { markActivityAsComplete } from "@services/courses/activity"; import ToolTip from "@components/UI/Tooltip/Tooltip"; +import DocumentPdfActivity from "@components/Pages/Activities/DocumentPdf/DocumentPdf"; function ActivityPage(params: any) { const activityid = params.params.activityid; @@ -77,6 +78,8 @@ function ActivityPage(params: any) { {/* todo : use apis & streams instead of this */} {activity.type == "video" && } + {activity.type == "documentpdf" && } + {course.trail.activities_marked_complete && diff --git a/front/components/Modals/Activities/Create/NewActivity.tsx b/front/components/Modals/Activities/Create/NewActivity.tsx index 9062e2ba..9cc28b5f 100644 --- a/front/components/Modals/Activities/Create/NewActivity.tsx +++ b/front/components/Modals/Activities/Create/NewActivity.tsx @@ -2,15 +2,17 @@ import React, { useState } from "react"; import { ArrowLeftIcon, Cross1Icon } from "@radix-ui/react-icons"; import DynamicPageActivityImage from "public/activities_types/dynamic-page-activity.png"; import VideoPageActivityImage from "public//activities_types/video-page-activity.png"; +import DocumentPdfPageActivityImage from "public//activities_types/documentpdf-page-activity.png"; import { styled, keyframes } from '@stitches/react'; import DynamicCanvaModal from "./NewActivityModal/DynamicCanva"; import VideoModal from "./NewActivityModal/Video"; import Image from "next/image"; +import DocumentPdfModal from "./NewActivityModal/DocumentPdf"; function NewActivityModal({ closeModal, submitActivity, submitFileActivity, chapterId }: any) { const [selectedView, setSelectedView] = useState("home"); - + return (
{selectedView === "home" && ( @@ -27,11 +29,11 @@ function NewActivityModal({ closeModal, submitActivity, submitFileActivity, chap Video Page - { setSelectedView("video") }}> + { setSelectedView("documentpdf") }}> - Video Page + Document PDF Page - Video Page + PDF Document Page )} @@ -43,6 +45,10 @@ function NewActivityModal({ closeModal, submitActivity, submitFileActivity, chap {selectedView === "video" && ( )} + + {selectedView === "documentpdf" && ( + + )}
); } diff --git a/front/components/Modals/Activities/Create/NewActivityModal/DocumentPdf.tsx b/front/components/Modals/Activities/Create/NewActivityModal/DocumentPdf.tsx new file mode 100644 index 00000000..01310a84 --- /dev/null +++ b/front/components/Modals/Activities/Create/NewActivityModal/DocumentPdf.tsx @@ -0,0 +1,58 @@ +import FormLayout, { ButtonBlack, Flex, FormField, FormLabel, FormMessage, Input, Textarea } from "@components/UI/Form/Form"; +import React, { useState } from "react"; +import * as Form from '@radix-ui/react-form'; +import BarLoader from "react-spinners/BarLoader"; + +function DocumentPdfModal({ submitFileActivity, chapterId }: any) { + const [documentpdf, setDocumentPdf] = React.useState(null) as any; + const [isSubmitting, setIsSubmitting] = useState(false); + const [name, setName] = React.useState(""); + + const handleDocumentPdfChange = (event: React.ChangeEvent) => { + setDocumentPdf(event.target.files[0]); + }; + + const handleNameChange = (event: React.ChangeEvent) => { + setName(event.target.value); + }; + + const handleSubmit = async (e: any) => { + e.preventDefault(); + setIsSubmitting(true); + let status = await submitFileActivity(documentpdf, "documentpdf", { name, type: "documentpdf" }, chapterId); + setIsSubmitting(false); + }; + + return ( + + + + PDF Document name + Please provide a name for your PDF Document activity + + + + + + + + PDF Document file + Please provide a PDF Document for your activity + + + + + + + + + + {isSubmitting ? : "Create activity"} + + + + + ); +} + +export default DocumentPdfModal; diff --git a/front/components/Pages/Activities/DocumentPdf/DocumentPdf.tsx b/front/components/Pages/Activities/DocumentPdf/DocumentPdf.tsx new file mode 100644 index 00000000..4c907a5e --- /dev/null +++ b/front/components/Pages/Activities/DocumentPdf/DocumentPdf.tsx @@ -0,0 +1,75 @@ +import { getBackendUrl } from "@services/config/config"; +import React from "react"; +import styled from "styled-components"; + +function DocumentPdfActivity({ activity, course }: { activity: any; course: any }) { + function getChapterName() { + let chapterName = ""; + let chapterId = activity.chapter_id; + course.chapters.forEach((chapter: any) => { + if (chapter.chapter_id === chapterId) { + chapterName = chapter.name; + } + }); + return chapterName; + } + + return ( + + +

Chapter : {getChapterName()}

+ {activity.name} +
+ +