diff --git a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/AssignmentTaskContentEdit.tsx b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/AssignmentTaskContentEdit.tsx index 0485d125..5d79a324 100644 --- a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/AssignmentTaskContentEdit.tsx +++ b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/AssignmentTaskContentEdit.tsx @@ -3,20 +3,22 @@ import { useAssignmentsTask, useAssignmentsTaskDispatch } from '@components/Cont import { useLHSession } from '@components/Contexts/LHSessionContext'; import React, { useEffect } from 'react' import TaskQuizObject from './TaskTypes/TaskQuizObject'; +import TaskFileObject from './TaskTypes/TaskFileObject'; function AssignmentTaskContentEdit() { const session = useLHSession() as any; const access_token = session?.data?.tokens?.access_token; const assignmentTaskStateHook = useAssignmentsTaskDispatch() as any - const assignment = useAssignments() as any + const assignment_task = useAssignmentsTask() as any useEffect(() => { } - , [assignment, assignmentTaskStateHook]) + , [assignment_task, assignmentTaskStateHook]) return (
- + {assignment_task?.assignmentTask.assignment_type === 'QUIZ' && } + {assignment_task?.assignmentTask.assignment_type === 'FILE_SUBMISSION' && }
) } diff --git a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/TaskTypes/TaskFileObject.tsx b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/TaskTypes/TaskFileObject.tsx new file mode 100644 index 00000000..ed7bd2e8 --- /dev/null +++ b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/Subs/TaskTypes/TaskFileObject.tsx @@ -0,0 +1,14 @@ +import AssignmentBoxUI from '@components/Objects/Assignments/AssignmentBoxUI' +import { Info } from 'lucide-react' +import React from 'react' + +export default function TaskFileObject({ view }: any) { + return ( + +
+ +

User will be able to submit a file for this task, you'll be able to review it in the Submissions Tab

+
+
+ ) +} diff --git a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/page.tsx b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/page.tsx index 66664d94..44b2c164 100644 --- a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/page.tsx +++ b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/page.tsx @@ -8,6 +8,11 @@ import { useParams } from 'next/navigation'; import { AssignmentsTaskProvider } from '@components/Contexts/Assignments/AssignmentsTaskContext'; import ToolTip from '@components/StyledElements/Tooltip/Tooltip'; import AssignmentTaskEditor from './_components/TaskEditor/TaskEditor'; +import { updateAssignment } from '@services/courses/assignments'; +import { useLHSession } from '@components/Contexts/LHSessionContext'; +import { mutate } from 'swr'; +import { getAPIUrl } from '@services/config/config'; +import toast from 'react-hot-toast'; function AssignmentEdit() { const params = useParams<{ assignmentuuid: string; }>() @@ -17,41 +22,17 @@ function AssignmentEdit() {
- +
Assignment Editor
-
-
Published
-
- -
- -

Publish

-
-
- -
- -

Unpublish

-
-
-
+
-
@@ -83,4 +64,59 @@ function BrdCmpx() { return ( ) -} \ No newline at end of file +} + +function PublishingState() { + const assignment = useAssignments() as any; + const session = useLHSession() as any; + const access_token = session?.data?.tokens?.access_token; + + async function updateAssignmentPublishState(assignmentUUID: string) { + const res = await updateAssignment({ published: !assignment?.assignment_object?.published }, assignmentUUID, access_token) + if (res.success) { + mutate(`${getAPIUrl()}assignments/${assignmentUUID}`) + toast.success('The assignment has been updated successfully') + } + else { + toast.error('Error updating assignment, please retry later.') + } + } + + useEffect(() => { + console.log('assignment', assignment?.assignment_object?.assignment_uuid) + }, [assignment]) + + return ( +
+
+ {assignment?.assignment_object?.published ? 'Published' : 'Unpublished'} +
+
+ {assignment?.assignment_object?.published && +
updateAssignmentPublishState(assignment?.assignment_object?.assignment_uuid)} + className='flex px-3 py-2 cursor-pointer rounded-md space-x-2 items-center bg-gradient-to-bl text-gray-800 font-medium from-gray-400/50 to-gray-200/80 border border-gray-600/10 shadow-gray-900/10 shadow-lg'> + +

Unpublish

+
+
} + {!assignment?.assignment_object?.published && + +
updateAssignmentPublishState(assignment?.assignment_object?.assignment_uuid)} + className='flex px-3 py-2 cursor-pointer rounded-md space-x-2 items-center bg-gradient-to-bl text-green-800 font-medium from-green-400/50 to-lime-200/80 border border-green-600/10 shadow-green-900/10 shadow-lg'> + +

Publish

+
+
} +
+ ) +} diff --git a/apps/web/components/Objects/Assignments/AssignmentBoxUI.tsx b/apps/web/components/Objects/Assignments/AssignmentBoxUI.tsx index d27769e7..0c281866 100644 --- a/apps/web/components/Objects/Assignments/AssignmentBoxUI.tsx +++ b/apps/web/components/Objects/Assignments/AssignmentBoxUI.tsx @@ -1,8 +1,8 @@ -import { BookUser, EllipsisVertical, ListTodo, Save } from 'lucide-react' +import { BookUser, EllipsisVertical, File, FileUp, ListTodo, Save } from 'lucide-react' import React from 'react' type AssignmentBoxProps = { - type: 'quiz' | 'task' + type: 'quiz' | 'file' view?: 'teacher' | 'student' saveFC?: () => void children: React.ReactNode @@ -20,6 +20,11 @@ function AssignmentBoxUI({ type, view, saveFC, children }: AssignmentBoxProps) {

Quiz

} + {type === 'file' && +
+ +

File Submission

+
}
diff --git a/apps/web/services/courses/assignments.ts b/apps/web/services/courses/assignments.ts index a8a32523..1a6e54e8 100644 --- a/apps/web/services/courses/assignments.ts +++ b/apps/web/services/courses/assignments.ts @@ -14,6 +14,19 @@ export async function createAssignment(body: any, access_token: string) { return res } +export async function updateAssignment( + body: any, + assignmentUUID: string, + access_token: string +) { + const result: any = await fetch( + `${getAPIUrl()}assignments/${assignmentUUID}`, + RequestBodyWithAuthHeader('PUT', body, null, access_token) + ) + const res = await getResponseMetadata(result) + return res +} + export async function getAssignmentFromActivityUUID( activityUUID: string, access_token: string