diff --git a/apps/api/migrations/env.py b/apps/api/migrations/env.py
index 08a2dd30..f4f75f2c 100644
--- a/apps/api/migrations/env.py
+++ b/apps/api/migrations/env.py
@@ -1,7 +1,7 @@
import importlib
from logging.config import fileConfig
import os
-import alembic_postgresql_enum
+import alembic_postgresql_enum # noqa: F401
from sqlalchemy import engine_from_config
from sqlalchemy import pool
from sqlmodel import SQLModel
diff --git a/apps/api/migrations/script.py.mako b/apps/api/migrations/script.py.mako
index 6ce33510..0c1e80d5 100644
--- a/apps/api/migrations/script.py.mako
+++ b/apps/api/migrations/script.py.mako
@@ -8,8 +8,8 @@ Create Date: ${create_date}
from typing import Sequence, Union
from alembic import op
-import sqlalchemy as sa
-import sqlmodel
+import sqlalchemy as sa # noqa: F401
+import sqlmodel # noqa: F401
${imports if imports else ""}
# revision identifiers, used by Alembic.
diff --git a/apps/api/migrations/versions/6295e05ff7d0_enum_updates.py b/apps/api/migrations/versions/6295e05ff7d0_enum_updates.py
index 4ff2406e..762028ce 100644
--- a/apps/api/migrations/versions/6295e05ff7d0_enum_updates.py
+++ b/apps/api/migrations/versions/6295e05ff7d0_enum_updates.py
@@ -8,8 +8,8 @@ Create Date: 2024-07-11 20:46:26.582170
from typing import Sequence, Union
from alembic import op
-import sqlalchemy as sa
-import sqlmodel
+import sqlalchemy as sa # noqa: F401
+import sqlmodel # noqa: F401
from alembic_postgresql_enum import TableReference # type: ignore
# revision identifiers, used by Alembic.
diff --git a/apps/api/migrations/versions/d8bc71595932_add_reference_for_assignmenttasks.py b/apps/api/migrations/versions/d8bc71595932_add_reference_for_assignmenttasks.py
index 10634418..ae5c5e2a 100644
--- a/apps/api/migrations/versions/d8bc71595932_add_reference_for_assignmenttasks.py
+++ b/apps/api/migrations/versions/d8bc71595932_add_reference_for_assignmenttasks.py
@@ -9,7 +9,7 @@ from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
-import sqlmodel
+import sqlmodel # noqa: F401
# revision identifiers, used by Alembic.
diff --git a/apps/api/migrations/versions/df2981bf24dd_initial_migration.py b/apps/api/migrations/versions/df2981bf24dd_initial_migration.py
index a6a5be8a..7dac90ee 100644
--- a/apps/api/migrations/versions/df2981bf24dd_initial_migration.py
+++ b/apps/api/migrations/versions/df2981bf24dd_initial_migration.py
@@ -8,9 +8,9 @@ Create Date: 2024-07-11 19:33:37.993767
from typing import Sequence, Union
from alembic import op
-from grpc import server
+from grpc import server # noqa: F401
import sqlalchemy as sa
-import sqlmodel
+import sqlmodel # noqa: F401
# revision identifiers, used by Alembic.
diff --git a/apps/api/src/db/courses/assignments.py b/apps/api/src/db/courses/assignments.py
index a2884114..dd30b221 100644
--- a/apps/api/src/db/courses/assignments.py
+++ b/apps/api/src/db/courses/assignments.py
@@ -1,5 +1,5 @@
from typing import Optional, Dict
-from sqlalchemy import JSON, Column, ForeignKey, null
+from sqlalchemy import JSON, Column, ForeignKey
from sqlmodel import Field, SQLModel
from enum import Enum
diff --git a/apps/api/src/routers/courses/assignments.py b/apps/api/src/routers/courses/assignments.py
index 8211b776..ba3f30e4 100644
--- a/apps/api/src/routers/courses/assignments.py
+++ b/apps/api/src/routers/courses/assignments.py
@@ -3,7 +3,6 @@ from src.db.courses.assignments import (
AssignmentCreate,
AssignmentRead,
AssignmentTaskCreate,
- AssignmentTaskSubmissionCreate,
AssignmentTaskSubmissionUpdate,
AssignmentTaskUpdate,
AssignmentUpdate,
diff --git a/apps/api/src/services/courses/activities/assignments.py b/apps/api/src/services/courses/activities/assignments.py
index 447ec12b..14acb75b 100644
--- a/apps/api/src/services/courses/activities/assignments.py
+++ b/apps/api/src/services/courses/activities/assignments.py
@@ -7,7 +7,6 @@ from typing import Literal
from uuid import uuid4
from fastapi import HTTPException, Request, UploadFile
from sqlmodel import Session, select
-from sympy import Sum
from src.db.courses.activities import Activity
from src.db.courses.assignments import (
@@ -1172,7 +1171,7 @@ async def read_user_assignment_submissions(
# Find assignments tasks for an assignment
statement = select(AssignmentUserSubmission).where(
- assignment.assignment_uuid == assignment_uuid,
+ AssignmentUserSubmission.assignment_id == assignment.id,
AssignmentUserSubmission.user_id == user_id,
)
diff --git a/apps/api/src/services/courses/activities/uploads/sub_file.py b/apps/api/src/services/courses/activities/uploads/sub_file.py
index 48df3cc5..9ebd46f5 100644
--- a/apps/api/src/services/courses/activities/uploads/sub_file.py
+++ b/apps/api/src/services/courses/activities/uploads/sub_file.py
@@ -1,4 +1,3 @@
-from uuid import uuid4
from src.services.utils.upload_content import upload_content
@@ -12,7 +11,7 @@ async def upload_submission_file(
assignment_task_uuid,
):
contents = file.file.read()
- file_format = file.filename.split(".")[-1]
+ file.filename.split(".")[-1]
await upload_content(
f"courses/{course_uuid}/activities/{activity_uuid}/assignments/{assignment_uuid}/tasks/{assignment_task_uuid}/subs",
diff --git a/apps/api/src/services/courses/activities/uploads/tasks_ref_files.py b/apps/api/src/services/courses/activities/uploads/tasks_ref_files.py
index d9f7c128..56981cc0 100644
--- a/apps/api/src/services/courses/activities/uploads/tasks_ref_files.py
+++ b/apps/api/src/services/courses/activities/uploads/tasks_ref_files.py
@@ -1,4 +1,3 @@
-from uuid import uuid4
from src.services.utils.upload_content import upload_content
@@ -12,7 +11,7 @@ async def upload_reference_file(
assignment_task_uuid,
):
contents = file.file.read()
- file_format = file.filename.split(".")[-1]
+ file.filename.split(".")[-1]
await upload_content(
f"courses/{course_uuid}/activities/{activity_uuid}/assignments/{assignment_uuid}/tasks/{assignment_task_uuid}",
diff --git a/apps/web/app/home/home.tsx b/apps/web/app/home/home.tsx
index 6c5c83ae..6755a7c1 100644
--- a/apps/web/app/home/home.tsx
+++ b/apps/web/app/home/home.tsx
@@ -17,9 +17,6 @@ function HomeClient() {
const { data: orgs } = useSWR(`${getAPIUrl()}orgs/user/page/1/limit/10`, (url) => swrFetcher(url, access_token))
useEffect(() => {
- console.log(orgs)
-
-
}, [session, orgs])
return (
diff --git a/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/activity/[activityid]/activity.tsx b/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/activity/[activityid]/activity.tsx
index fe12ea9d..d441b31c 100644
--- a/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/activity/[activityid]/activity.tsx
+++ b/apps/web/app/orgs/[orgslug]/(withmenu)/course/[courseuuid]/activity/[activityid]/activity.tsx
@@ -8,7 +8,7 @@ import { markActivityAsComplete } from '@services/courses/activity'
import DocumentPdfActivity from '@components/Objects/Activities/DocumentPdf/DocumentPdf'
import ActivityIndicators from '@components/Pages/Courses/ActivityIndicators'
import GeneralWrapperStyled from '@components/StyledElements/Wrappers/GeneralWrapper'
-import { useRouter } from 'next/navigation'
+import { usePathname, useRouter } from 'next/navigation'
import AuthenticatedClientElement from '@components/Security/AuthenticatedClientElement'
import { getCourseThumbnailMediaDirectory } from '@services/media/media'
import { useOrg } from '@components/Contexts/OrgContext'
@@ -42,6 +42,7 @@ function ActivityClient(props: ActivityClientProps) {
const course = props.course
const org = useOrg() as any
const session = useLHSession() as any;
+ const pathname = usePathname()
const access_token = session?.data?.tokens?.access_token;
const [bgColor, setBgColor] = React.useState('bg-white')
const [assignment, setAssignment] = React.useState(null) as any;
@@ -78,7 +79,7 @@ function ActivityClient(props: ActivityClientProps) {
setBgColor('bg-zinc-950');
}
}
- , [activity])
+ , [activity,pathname ])
return (
<>
@@ -126,6 +127,7 @@ function ActivityClient(props: ActivityClientProps) {
+ {activity && activity.published == true && (
{activity.activity_type != 'TYPE_ASSIGNMENT' &&
<>
@@ -141,7 +143,6 @@ function ActivityClient(props: ActivityClientProps) {
}
{activity.activity_type == 'TYPE_ASSIGNMENT' &&
<>
-
+ )}
{activity && activity.published == false && (
diff --git a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/TaskEditor.tsx b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/TaskEditor.tsx
index 09ba8d58..e5f910c5 100644
--- a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/TaskEditor.tsx
+++ b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/_components/TaskEditor/TaskEditor.tsx
@@ -8,8 +8,9 @@ import { GalleryVerticalEnd, Info, TentTree, Trash } from 'lucide-react'
import React, { useEffect } from 'react'
import toast from 'react-hot-toast';
import { mutate } from 'swr';
+import dynamic from 'next/dynamic';
import { AssignmentTaskGeneralEdit } from './Subs/AssignmentTaskGeneralEdit';
-import AssignmentTaskContentEdit from './Subs/AssignmentTaskContentEdit';
+const AssignmentTaskContentEdit = dynamic(() => import('./Subs/AssignmentTaskContentEdit'))
function AssignmentTaskEditor({ page }: any) {
const [selectedSubPage, setSelectedSubPage] = React.useState(page)
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 a31fd711..b4056e04 100644
--- a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/page.tsx
+++ b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/page.tsx
@@ -1,12 +1,9 @@
'use client';
import BreadCrumbs from '@components/Dashboard/UI/BreadCrumbs'
-import { BookOpen, BookX, EllipsisVertical, Eye, LayoutList } from 'lucide-react'
+import { BookOpen, BookX, EllipsisVertical, Eye, Layers2, UserRoundPen } from 'lucide-react'
import React, { useEffect } from 'react'
import { AssignmentProvider, useAssignments } from '@components/Contexts/Assignments/AssignmentContext';
-import AssignmentTasks from './_components/Tasks';
-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';
@@ -15,40 +12,59 @@ import toast from 'react-hot-toast';
import Link from 'next/link';
import { useParams } from 'next/navigation';
import { updateActivity } from '@services/courses/activities';
+// Lazy Loading
+import dynamic from 'next/dynamic';
+import AssignmentEditorSubPage from './subpages/AssignmentEditorSubPage';
+const AssignmentSubmissionsSubPage = dynamic(() => import('./subpages/AssignmentSubmissionsSubPage'))
function AssignmentEdit() {
const params = useParams<{ assignmentuuid: string; }>()
+ const [selectedSubPage, setSelectedSubPage] = React.useState('editor')
return (
-
+
-
Assignment Editor
+
Assignment Tools
+
+
setSelectedSubPage('editor')}
+ className={`flex space-x-4 py-2 w-fit text-center border-black transition-all ease-linear ${selectedSubPage === 'editor'
+ ? 'border-b-4'
+ : 'opacity-50'
+ } cursor-pointer`}
+ >
+
+
+
setSelectedSubPage('submissions')}
+ className={`flex space-x-4 py-2 w-fit text-center border-black transition-all ease-linear ${selectedSubPage === 'submissions'
+ ? 'border-b-4'
+ : 'opacity-50'
+ } cursor-pointer`}
+ >
+
+
+
-
-
-
-
+ {selectedSubPage === 'editor' &&
}
+ {selectedSubPage === 'submissions' &&
}
diff --git a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/subpages/AssignmentEditorSubPage.tsx b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/subpages/AssignmentEditorSubPage.tsx
new file mode 100644
index 00000000..70756060
--- /dev/null
+++ b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/subpages/AssignmentEditorSubPage.tsx
@@ -0,0 +1,29 @@
+'use client';
+import { AssignmentsTaskProvider } from '@components/Contexts/Assignments/AssignmentsTaskContext'
+import { LayoutList } from 'lucide-react'
+import React from 'react'
+import AssignmentTasks from '../_components/Tasks'
+import { AssignmentProvider } from '@components/Contexts/Assignments/AssignmentContext'
+import dynamic from 'next/dynamic';
+const AssignmentTaskEditor = dynamic(() => import('../_components/TaskEditor/TaskEditor'))
+
+function AssignmentEditorSubPage({ assignmentuuid }: { assignmentuuid: string }) {
+ return (
+
+
+
+
+ )
+}
+
+export default AssignmentEditorSubPage
\ No newline at end of file
diff --git a/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/subpages/AssignmentSubmissionsSubPage.tsx b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/subpages/AssignmentSubmissionsSubPage.tsx
new file mode 100644
index 00000000..c4266fe8
--- /dev/null
+++ b/apps/web/app/orgs/[orgslug]/dash/assignments/[assignmentuuid]/subpages/AssignmentSubmissionsSubPage.tsx
@@ -0,0 +1,25 @@
+import { useLHSession } from '@components/Contexts/LHSessionContext';
+import { getAPIUrl } from '@services/config/config'
+import { swrFetcher } from '@services/utils/ts/requests';
+import React from 'react'
+import useSWR from 'swr';
+
+function AssignmentSubmissionsSubPage({ assignment_uuid }: { assignment_uuid: string }) {
+ const session = useLHSession() as any;
+ const access_token = session?.data?.tokens?.access_token;
+
+ const { data: assignmentSubmission, error: assignmentError } = useSWR(
+ `${getAPIUrl()}assignments/assignment_${assignment_uuid}/submissions`,
+ (url) => swrFetcher(url, access_token)
+ )
+ return (
+
+ {assignmentSubmission && assignmentSubmission.length > 0 && (
+
s
+ )}
+
+
+ )
+}
+
+export default AssignmentSubmissionsSubPage
\ No newline at end of file
diff --git a/apps/web/components/Contexts/Assignments/AssignmentsTaskContext.tsx b/apps/web/components/Contexts/Assignments/AssignmentsTaskContext.tsx
index 32b69145..6cfeccfc 100644
--- a/apps/web/components/Contexts/Assignments/AssignmentsTaskContext.tsx
+++ b/apps/web/components/Contexts/Assignments/AssignmentsTaskContext.tsx
@@ -78,7 +78,6 @@ export function useAssignmentsTaskDispatch() {
function assignmentstaskReducer(state: State, action: Action): State {
switch (action.type) {
case 'setSelectedAssignmentTaskUUID':
- console.log('st', action.payload)
return { ...state, selectedAssignmentTaskUUID: action.payload };
case 'setAssignmentTask':
return { ...state, assignmentTask: action.payload };
diff --git a/apps/web/components/Dashboard/Course/EditCourseStructure/DraggableElements/ActivityElement.tsx b/apps/web/components/Dashboard/Course/EditCourseStructure/DraggableElements/ActivityElement.tsx
index 9a226bb0..3af1484a 100644
--- a/apps/web/components/Dashboard/Course/EditCourseStructure/DraggableElements/ActivityElement.tsx
+++ b/apps/web/components/Dashboard/Course/EditCourseStructure/DraggableElements/ActivityElement.tsx
@@ -254,9 +254,6 @@ const ActivityElementOptions = ({ activity }: any) => {
};
useEffect(() => {
-
- console.log(activity)
-
fetchAssignmentUUID();
}, [activity, course]);
diff --git a/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/Assignment.tsx b/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/Assignment.tsx
index 95abf80b..f69d7cbc 100644
--- a/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/Assignment.tsx
+++ b/apps/web/components/Objects/Modals/Activities/Create/NewActivityModal/Assignment.tsx
@@ -55,8 +55,6 @@ function NewAssignment({ submitActivity, chapterId, course, closeModal }: any) {
}
const activity_res = await createActivity(activity, chapterId, org?.id, session.data?.tokens?.access_token)
- console.log(course)
- console.log(activity_res)
await createAssignment({
title: activityName,
description: activityDescription,