diff --git a/lms/js_config_types.py b/lms/js_config_types.py index 4300f1b2f9..03eac49f9b 100644 --- a/lms/js_config_types.py +++ b/lms/js_config_types.py @@ -100,4 +100,13 @@ class User(TypedDict): class DashboardConfig(TypedDict): user: User + + organization_public_id: str + """ + Filtering by organization is not like other filters: + - It's only available to staff members + - It doesn't only filter but also authorized access to that orgnaiztion's data + For those resason we include it on the config instead of handling it like other query string parameters. + """ + routes: DashboardRoutes diff --git a/lms/resources/_js_config/__init__.py b/lms/resources/_js_config/__init__.py index 7a6e0e42e1..bced8b5916 100644 --- a/lms/resources/_js_config/__init__.py +++ b/lms/resources/_js_config/__init__.py @@ -257,6 +257,7 @@ def enable_dashboard_mode(self) -> None: "mode": JSConfig.Mode.DASHBOARD, "dashboard": DashboardConfig( user=self._get_user_info(), + organization_public_id=self._request.params.get("public_id"), routes=DashboardRoutes( assignment=self._to_frontend_template( "api.dashboard.assignment" diff --git a/lms/static/scripts/frontend_apps/components/dashboard/AssignmentActivity.tsx b/lms/static/scripts/frontend_apps/components/dashboard/AssignmentActivity.tsx index ce17b88260..448015f4f3 100644 --- a/lms/static/scripts/frontend_apps/components/dashboard/AssignmentActivity.tsx +++ b/lms/static/scripts/frontend_apps/components/dashboard/AssignmentActivity.tsx @@ -30,6 +30,7 @@ export default function AssignmentActivity() { ); const students = useAPIFetch(routes.students_metrics, { assignment_id: assignmentId, + public_id: dashboard.organization_public_id || [], }); const title = `Assignment: ${assignment.data?.title}`; diff --git a/lms/static/scripts/frontend_apps/components/dashboard/CourseActivity.tsx b/lms/static/scripts/frontend_apps/components/dashboard/CourseActivity.tsx index faa471e7e0..a0bcfe8ccd 100644 --- a/lms/static/scripts/frontend_apps/components/dashboard/CourseActivity.tsx +++ b/lms/static/scripts/frontend_apps/components/dashboard/CourseActivity.tsx @@ -35,6 +35,7 @@ export default function CourseActivity() { replaceURLParams(routes.course_assignments_metrics, { course_id: courseId, }), + { public_id: dashboard.organization_public_id || [] }, ); const rows: AssignmentsTableRow[] = useMemo( diff --git a/lms/static/scripts/frontend_apps/components/dashboard/DashboardActivityFilters.tsx b/lms/static/scripts/frontend_apps/components/dashboard/DashboardActivityFilters.tsx index ea456e0bca..66ca48ad66 100644 --- a/lms/static/scripts/frontend_apps/components/dashboard/DashboardActivityFilters.tsx +++ b/lms/static/scripts/frontend_apps/components/dashboard/DashboardActivityFilters.tsx @@ -29,11 +29,16 @@ export default function DashboardActivityFilters({ const { dashboard } = useConfig(['dashboard']); const { routes } = dashboard; - const courses = useAPIFetch<{ courses: Course[] }>(routes.courses); + const courses = useAPIFetch<{ courses: Course[] }>(routes.courses, { + public_id: dashboard.organization_public_id || [], + }); const assignments = useAPIFetch<{ assignments: Assignment[] }>( routes.assignments, + { public_id: dashboard.organization_public_id || [] }, ); - const students = useAPIFetch<{ students: Student[] }>(routes.students); + const students = useAPIFetch<{ students: Student[] }>(routes.students, { + public_id: dashboard.organization_public_id || [], + }); const studentsWithName = useMemo( () => students.data?.students.filter(s => !!s.display_name), [students.data?.students], diff --git a/lms/static/scripts/frontend_apps/components/dashboard/OrganizationActivity.tsx b/lms/static/scripts/frontend_apps/components/dashboard/OrganizationActivity.tsx index ef610146ee..c8f5a75bea 100644 --- a/lms/static/scripts/frontend_apps/components/dashboard/OrganizationActivity.tsx +++ b/lms/static/scripts/frontend_apps/components/dashboard/OrganizationActivity.tsx @@ -36,6 +36,7 @@ export default function OrganizationActivity() { h_userid: studentIds, assignment_id: assignmentIds, course_id: courseIds, + public_id: dashboard.organization_public_id || [], }); const rows: CoursesTableRow[] = useMemo( () => diff --git a/lms/static/scripts/frontend_apps/config.ts b/lms/static/scripts/frontend_apps/config.ts index 60027f463e..5643c81c25 100644 --- a/lms/static/scripts/frontend_apps/config.ts +++ b/lms/static/scripts/frontend_apps/config.ts @@ -277,6 +277,7 @@ export type DashboardUser = { export type DashboardConfig = { routes: DashboardRoutes; + organization_public_id?: string; user: DashboardUser; };