diff --git a/apps/web/components/Objects/Activities/Video/Video.tsx b/apps/web/components/Objects/Activities/Video/Video.tsx
index 2ba6b15c..cf09ca56 100644
--- a/apps/web/components/Objects/Activities/Video/Video.tsx
+++ b/apps/web/components/Objects/Activities/Video/Video.tsx
@@ -3,17 +3,42 @@ import YouTube from 'react-youtube'
import { getActivityMediaDirectory } from '@services/media/media'
import { useOrg } from '@components/Contexts/OrgContext'
-function VideoActivity({ activity, course }: { activity: any; course: any }) {
+interface VideoActivityProps {
+ activity: {
+ activity_sub_type: string
+ activity_uuid: string
+ content: {
+ filename?: string
+ uri?: string
+ }
+ }
+ course: {
+ course_uuid: string
+ }
+}
+
+function VideoActivity({ activity, course }: VideoActivityProps) {
const org = useOrg() as any
const [videoId, setVideoId] = React.useState('')
React.useEffect(() => {
- if (activity && activity.content && activity.content.uri) {
- var getYouTubeID = require('get-youtube-id');
+ if (activity?.content?.uri) {
+ var getYouTubeID = require('get-youtube-id')
setVideoId(getYouTubeID(activity.content.uri))
}
}, [activity, org])
+ const getVideoSrc = () => {
+ if (!activity.content?.filename) return ''
+ return getActivityMediaDirectory(
+ org?.org_uuid,
+ course?.course_uuid,
+ activity.activity_uuid,
+ activity.content.filename,
+ 'video'
+ )
+ }
+
return (
{activity && (
@@ -24,13 +49,7 @@ function VideoActivity({ activity, course }: { activity: any; course: any }) {
@@ -44,7 +63,7 @@ function VideoActivity({ activity, course }: { activity: any; course: any }) {
width: '100%',
height: '100%',
playerVars: {
- autoplay: 0,
+ autoplay: 0
},
}}
videoId={videoId}
diff --git a/apps/web/components/Objects/Modals/Activities/Create/NewActivity.tsx b/apps/web/components/Objects/Modals/Activities/Create/NewActivity.tsx
index ff851a06..9dac7af1 100644
--- a/apps/web/components/Objects/Modals/Activities/Create/NewActivity.tsx
+++ b/apps/web/components/Objects/Modals/Activities/Create/NewActivity.tsx
@@ -4,11 +4,11 @@ import VideoPageActivityImage from 'public//activities_types/video-page-activity
import DocumentPdfPageActivityImage from 'public//activities_types/documentpdf-page-activity.png'
import AssignmentActivityImage from 'public//activities_types/assignment-page-activity.png'
-import DynamicCanvaModal from './NewActivityModal/DynamicCanva'
-import VideoModal from './NewActivityModal/Video'
+import DynamicCanvaModal from './NewActivityModal/DynamicActivityModal'
+import VideoModal from './NewActivityModal/VideoActivityModal'
import Image from 'next/image'
-import DocumentPdfModal from './NewActivityModal/DocumentPdf'
-import Assignment from './NewActivityModal/Assignment'
+import DocumentPdfModal from './NewActivityModal/DocumentActivityModal'
+import Assignment from './NewActivityModal/AssignmentActivityModal'
function NewActivityModal({
closeModal,
diff --git a/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/Assignment.tsx b/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/AssignmentActivityModal.tsx
similarity index 100%
rename from apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/Assignment.tsx
rename to apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/AssignmentActivityModal.tsx
diff --git a/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/DocumentPdf.tsx b/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/DocumentActivityModal.tsx
similarity index 100%
rename from apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/DocumentPdf.tsx
rename to apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/DocumentActivityModal.tsx
diff --git a/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/DynamicCanva.tsx b/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/DynamicActivityModal.tsx
similarity index 100%
rename from apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/DynamicCanva.tsx
rename to apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/DynamicActivityModal.tsx
diff --git a/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/Video.tsx b/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/Video.tsx
deleted file mode 100644
index 3cc61bd1..00000000
--- a/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/Video.tsx
+++ /dev/null
@@ -1,199 +0,0 @@
-import FormLayout, {
- ButtonBlack,
- Flex,
- FormField,
- FormLabel,
- FormMessage,
- Input,
-} from '@components/Objects/StyledElements/Form/Form'
-import React, { useState } from 'react'
-import * as Form from '@radix-ui/react-form'
-import BarLoader from 'react-spinners/BarLoader'
-import { Youtube } from 'lucide-react'
-import { constructAcceptValue } from '@/lib/constants';
-
-const SUPPORTED_FILES = constructAcceptValue(['mp4', 'webm'])
-
-interface ExternalVideoObject {
- name: string
- type: string
- uri: string
- chapter_id: string
-}
-
-function VideoModal({
- submitFileActivity,
- submitExternalVideo,
- chapterId,
- course,
-}: any) {
- const [video, setVideo] = React.useState(null) as any
- const [isSubmitting, setIsSubmitting] = useState(false)
- const [name, setName] = React.useState('')
- const [youtubeUrl, setYoutubeUrl] = React.useState('')
- const [selectedView, setSelectedView] = React.useState('file') as any
-
- const handleVideoChange = (event: React.ChangeEvent) => {
- setVideo(event.target.files[0])
- }
-
- const handleNameChange = (event: React.ChangeEvent) => {
- setName(event.target.value)
- }
-
- const handleYoutubeUrlChange = (
- event: React.ChangeEvent
- ) => {
- setYoutubeUrl(event.target.value)
- }
-
- const handleSubmit = async (e: any) => {
- e.preventDefault()
- setIsSubmitting(true)
-
- if (selectedView === 'file') {
- let status = await submitFileActivity(
- video,
- 'video',
- {
- name: name,
- chapter_id: chapterId,
- activity_type: 'TYPE_VIDEO',
- activity_sub_type: 'SUBTYPE_VIDEO_HOSTED',
- published_version: 1,
- version: 1,
- course_id: course.id,
- },
- chapterId
- )
-
- setIsSubmitting(false)
- }
- if (selectedView === 'youtube') {
- let external_video_object: ExternalVideoObject = {
- name,
- type: 'youtube',
- uri: youtubeUrl,
- chapter_id: chapterId,
- }
-
- let status = await submitExternalVideo(
- external_video_object,
- 'activity',
- chapterId
- )
- setIsSubmitting(false)
- }
- }
-
- /* TODO : implement some sort of progress bar for file uploads, it is not possible yet because i'm not using axios.
- and the actual upload isn't happening here anyway, it's in the submitFileActivity function */
-
- return (
-
-
-
- Video name
-
- Please provide a name for your video activity
-
-
-
-
-
-
-
-
-
-
{
- setSelectedView('file')
- }}
- className="rounded-full bg-slate-900 text-zinc-50 py-2 px-4 text-sm drop-shadow-md hover:cursor-pointer hover:bg-slate-700 "
- >
- Video upload
-
-
{
- setSelectedView('youtube')
- }}
- className="rounded-full bg-slate-900 text-zinc-50 py-2 px-4 text-sm drop-shadow-md hover:cursor-pointer hover:bg-slate-700"
- >
- YouTube Video
-
-
- {selectedView === 'file' && (
-
-
-
- Video file
-
- Please provide a video for your activity
-
-
-
-
-
-
-
- )}
- {selectedView === 'youtube' && (
-
-
-
-
-
- YouTube URL
-
-
- Please provide a video for your activity
-
-
-
-
-
-
-
- )}
-
-
-
-
-
-
- {isSubmitting ? (
-
- ) : (
- 'Create activity'
- )}
-
-
-
-
- )
-}
-
-export default VideoModal
diff --git a/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/VideoActivityModal.tsx b/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/VideoActivityModal.tsx
new file mode 100644
index 00000000..38e7e7f7
--- /dev/null
+++ b/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/VideoActivityModal.tsx
@@ -0,0 +1,187 @@
+import FormLayout, {
+ ButtonBlack,
+ Flex,
+ FormField,
+ FormLabel,
+ FormMessage,
+ Input,
+} from '@components/Objects/StyledElements/Form/Form'
+import React, { useState } from 'react'
+import * as Form from '@radix-ui/react-form'
+import BarLoader from 'react-spinners/BarLoader'
+import { Youtube, Upload } from 'lucide-react'
+import { constructAcceptValue } from '@/lib/constants'
+
+const SUPPORTED_FILES = constructAcceptValue(['mp4', 'webm'])
+
+interface ExternalVideoObject {
+ name: string
+ type: string
+ uri: string
+ chapter_id: string
+}
+
+function VideoModal({
+ submitFileActivity,
+ submitExternalVideo,
+ chapterId,
+ course,
+}: any) {
+ const [video, setVideo] = React.useState(null)
+ const [isSubmitting, setIsSubmitting] = useState(false)
+ const [name, setName] = React.useState('')
+ const [youtubeUrl, setYoutubeUrl] = React.useState('')
+ const [selectedView, setSelectedView] = React.useState<'file' | 'youtube'>('file')
+
+ const handleVideoChange = (event: React.ChangeEvent) => {
+ if (event.target.files?.[0]) {
+ setVideo(event.target.files[0])
+ }
+ }
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault()
+ setIsSubmitting(true)
+
+ try {
+ if (selectedView === 'file' && video) {
+ await submitFileActivity(
+ video,
+ 'video',
+ {
+ name: name,
+ chapter_id: chapterId,
+ activity_type: 'TYPE_VIDEO',
+ activity_sub_type: 'SUBTYPE_VIDEO_HOSTED',
+ published_version: 1,
+ version: 1,
+ course_id: course.id,
+ },
+ chapterId
+ )
+ }
+
+ if (selectedView === 'youtube') {
+ const external_video_object: ExternalVideoObject = {
+ name,
+ type: 'youtube',
+ uri: youtubeUrl,
+ chapter_id: chapterId,
+ }
+
+ await submitExternalVideo(
+ external_video_object,
+ 'activity',
+ chapterId
+ )
+ }
+ } finally {
+ setIsSubmitting(false)
+ }
+ }
+
+ return (
+
+
+
+ Activity Name
+
+ Please provide a name for your video activity
+
+
+
+ setName(e.target.value)}
+ type="text"
+ required
+ placeholder="Enter activity name..."
+ />
+
+
+
+
+
+
+
+
+
+
+ {selectedView === 'file' && (
+
+ )}
+
+ {selectedView === 'youtube' && (
+
+
+ YouTube URL
+
+ setYoutubeUrl(e.target.value)}
+ type="text"
+ required
+ placeholder="https://youtube.com/watch?v=..."
+ />
+
+
+
+ )}
+
+
+
+
+
+
+ {isSubmitting ? (
+
+ ) : (
+ 'Create Activity'
+ )}
+
+
+
+
+ )
+}
+
+export default VideoModal