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 885d4ab4..6c3e6a3b 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
@@ -3,7 +3,7 @@ import Link from 'next/link'
import { getAPIUrl, getUriWithOrg } from '@services/config/config'
import Canva from '@components/Objects/Activities/DynamicCanva/DynamicCanva'
import VideoActivity from '@components/Objects/Activities/Video/Video'
-import { BookOpenCheck, Check, CheckCircle, ChevronDown, ChevronLeft, ChevronRight, FileText, Folder, List, Menu, MoreVertical, UserRoundPen, Video, Layers, ListFilter, ListTree, X, Edit2 } from 'lucide-react'
+import { BookOpenCheck, Check, CheckCircle, ChevronDown, ChevronLeft, ChevronRight, FileText, Folder, List, Menu, MoreVertical, UserRoundPen, Video, Layers, ListFilter, ListTree, X, Edit2, EllipsisVertical } from 'lucide-react'
import { markActivityAsComplete, unmarkActivityAsComplete } from '@services/courses/activity'
import DocumentPdfActivity from '@components/Objects/Activities/DocumentPdf/DocumentPdf'
import ActivityIndicators from '@components/Pages/Courses/ActivityIndicators'
@@ -42,6 +42,43 @@ interface ActivityClientProps {
course: any
}
+function ActivityActions({ activity, activityid, course, orgslug, assignment }: { activity: any, activityid: string, course: any, orgslug: string, assignment: any }) {
+ const session = useLHSession() as any;
+ const { contributorStatus } = useContributorStatus(course.course_uuid);
+
+ return (
+
+ {activity && activity.published == true && activity.content.paid_access != false && (
+
+ {activity.activity_type != 'TYPE_ASSIGNMENT' && (
+ <>
+
+ >
+ )}
+ {activity.activity_type == 'TYPE_ASSIGNMENT' && (
+ <>
+
+
+
+ >
+ )}
+
+ )}
+
+ );
+}
+
function ActivityClient(props: ActivityClientProps) {
const activityid = props.activityid
const courseuuid = props.courseuuid
@@ -131,6 +168,24 @@ function ActivityClient(props: ActivityClientProps) {
+ {activity && activity.published == true && activity.content.paid_access != false && (
+
+ { (
+
+ )}
+
+ )}
-
-
+
-
+
{activity && activity.published == true && activity.content.paid_access != false && (
{activity.activity_type != 'TYPE_ASSIGNMENT' && (
@@ -168,30 +223,9 @@ function ActivityClient(props: ActivityClientProps) {
className="bg-emerald-600 rounded-full px-5 drop-shadow-md flex items-center space-x-2 p-2.5 text-white hover:cursor-pointer transition delay-150 duration-300 ease-in-out"
>
- Contribute to Activity
+ Contribute
)}
-
-
- >
- )}
- {activity.activity_type == 'TYPE_ASSIGNMENT' && (
- <>
-
-
-
-
>
)}
@@ -249,7 +283,19 @@ function ActivityClient(props: ActivityClientProps) {
)}
>
)}
-
+
+ {/* Activity Actions below the content box */}
+ {activity && activity.published == true && activity.content.paid_access != false && (
+
+ )}
{/* Fixed Activity Secondary Bar */}
{activity && activity.published == true && activity.content.paid_access != false && (
@@ -483,15 +529,66 @@ function NextActivityButton({ course, currentActivityId, orgslug }: { course: an
};
return (
-
-
- {!isMobile && Next}
-
-
-
+
+ Next
+
+ {nextActivity.name}
+
+
+ );
+}
+
+function PreviousActivityButton({ course, currentActivityId, orgslug }: { course: any, currentActivityId: string, orgslug: string }) {
+ const router = useRouter();
+ const isMobile = useMediaQuery('(max-width: 768px)');
+
+ const findPreviousActivity = () => {
+ let allActivities: any[] = [];
+ let currentIndex = -1;
+
+ // Flatten all activities from all chapters
+ course.chapters.forEach((chapter: any) => {
+ chapter.activities.forEach((activity: any) => {
+ const cleanActivityUuid = activity.activity_uuid?.replace('activity_', '');
+ allActivities.push({
+ ...activity,
+ cleanUuid: cleanActivityUuid,
+ chapterName: chapter.name
+ });
+
+ // Check if this is the current activity
+ if (activity.id === currentActivityId) {
+ currentIndex = allActivities.length - 1;
+ }
+ });
+ });
+
+ // Get previous activity
+ return currentIndex > 0 ? allActivities[currentIndex - 1] : null;
+ };
+
+ const previousActivity = findPreviousActivity();
+
+ if (!previousActivity) return null;
+
+ const navigateToActivity = () => {
+ const cleanCourseUuid = course.course_uuid?.replace('course_', '');
+ router.push(getUriWithOrg(orgslug, '') + `/course/${cleanCourseUuid}/activity/${previousActivity.cleanUuid}`);
+ };
+
+ return (
+
+
+ Previous
+
+ {previousActivity.name}
+
);
}
diff --git a/apps/web/components/Pages/Activity/FixedActivitySecondaryBar.tsx b/apps/web/components/Pages/Activity/FixedActivitySecondaryBar.tsx
index 41679d4e..ae86377a 100644
--- a/apps/web/components/Pages/Activity/FixedActivitySecondaryBar.tsx
+++ b/apps/web/components/Pages/Activity/FixedActivitySecondaryBar.tsx
@@ -160,11 +160,7 @@ export default function FixedActivitySecondaryBar(props: FixedActivitySecondaryB