diff --git a/apps/dashboard/src/lib/components/Courses/api.js b/apps/dashboard/src/lib/components/Courses/api.js index 93e927d5..187b6aa0 100644 --- a/apps/dashboard/src/lib/components/Courses/api.js +++ b/apps/dashboard/src/lib/components/Courses/api.js @@ -1,15 +1,23 @@ import { supabase } from '$lib/utils/functions/supabase'; +import { get } from 'svelte/store'; +import { isOrgAdmin } from '$lib/utils/store/org'; export async function fetchCourses(profileId, orgId) { if (!orgId || !profileId) return; + const match = {}; + // Filter by profile_id if role isn't admin within organization + if (!get(isOrgAdmin)) { + match.profile_id = profileId; + } + // Gets courses for a particular organisation where the current logged in user is a groupmember const { data: allCourses } = await supabase .rpc('get_courses', { org_id_arg: orgId, profile_id_arg: profileId }) - .eq('profile_id', profileId); + .match(match); console.log(`allCourses`, allCourses); if (!Array.isArray(allCourses)) { diff --git a/apps/dashboard/src/lib/components/Org/Community/index.svelte b/apps/dashboard/src/lib/components/Org/Community/index.svelte index ed7f7560..56a60508 100644 --- a/apps/dashboard/src/lib/components/Org/Community/index.svelte +++ b/apps/dashboard/src/lib/components/Org/Community/index.svelte @@ -13,6 +13,7 @@ import { profile } from '$lib/utils/store/user'; import { Search, Dropdown } from 'carbon-components-svelte'; import { t } from '$lib/utils/functions/translations'; + import { courses } from '$lib/components/Courses/store'; export let isLMS = false; @@ -26,8 +27,12 @@ if (!orgId || !profileId) return; isLoading = true; - const courseResult = (await fetchCourses(profileId, orgId)) || { allCourses: [] }; - allCourses = courseResult.allCourses; + if ($courses.length) { + allCourses = [...$courses]; + } else { + const courseResult = (await fetchCourses(profileId, orgId)) || { allCourses: [] }; + allCourses = courseResult.allCourses; + } const courseIds = allCourses.map((course) => course.id); const courseIdsFilter = `(${courseIds.join(',')})`; diff --git a/apps/dashboard/src/lib/utils/store/org.ts b/apps/dashboard/src/lib/utils/store/org.ts index 98572a37..7945d7ef 100644 --- a/apps/dashboard/src/lib/utils/store/org.ts +++ b/apps/dashboard/src/lib/utils/store/org.ts @@ -14,7 +14,7 @@ export const defaultCurrentOrgState: CurrentOrg = { siteName: '', avatar_url: '', memberId: '', - role_id: '', + role_id: 3, landingpage: {}, customization: { apps: { poll: true, comments: true }, @@ -29,10 +29,8 @@ export const orgs = writable([]); export const currentOrg: Writable = writable(defaultCurrentOrgState); export const orgAudience = writable([]); export const orgTeam = writable([]); -export const isOrgAdmin = derived( - currentOrg, - ($currentOrg) => parseInt($currentOrg.role_id) === ROLE.ADMIN -); +export const isOrgAdmin = derived(currentOrg, ($currentOrg) => $currentOrg.role_id === ROLE.ADMIN); + export const currentOrgPlan = derived(currentOrg, ($currentOrg) => $currentOrg.organization_plan.find((p) => p.is_active) ); diff --git a/apps/dashboard/src/lib/utils/types/org.ts b/apps/dashboard/src/lib/utils/types/org.ts index 5c7c664d..4e716ba6 100644 --- a/apps/dashboard/src/lib/utils/types/org.ts +++ b/apps/dashboard/src/lib/utils/types/org.ts @@ -22,7 +22,7 @@ export interface CurrentOrg { siteName: string; avatar_url: string; memberId: string; - role_id: string; + role_id: number; landingpage: { [key: string]: unknown; }; diff --git a/apps/dashboard/src/routes/courses/[id]/attendance/+page.svelte b/apps/dashboard/src/routes/courses/[id]/attendance/+page.svelte index f2d06566..b43fd279 100644 --- a/apps/dashboard/src/routes/courses/[id]/attendance/+page.svelte +++ b/apps/dashboard/src/routes/courses/[id]/attendance/+page.svelte @@ -25,7 +25,7 @@ import type { GroupPerson, Lesson } from '$lib/utils/types/index'; import { browser } from '$app/environment'; import { globalStore } from '$lib/utils/store/app'; - import { t } from '$lib/utils/functions/translations.js'; + import { t } from '$lib/utils/functions/translations'; export let data; diff --git a/apps/dashboard/src/routes/courses/[id]/lessons/+page.svelte b/apps/dashboard/src/routes/courses/[id]/lessons/+page.svelte index 3f05437a..e5d76d5d 100644 --- a/apps/dashboard/src/routes/courses/[id]/lessons/+page.svelte +++ b/apps/dashboard/src/routes/courses/[id]/lessons/+page.svelte @@ -26,7 +26,7 @@ import { course, group } from '$lib/components/Course/store'; import DateField from '$lib/components/Form/Date.svelte'; import type { Course, Lesson } from '$lib/utils/types'; - import { t } from '$lib/utils/functions/translations.js'; + import { t } from '$lib/utils/functions/translations'; import { goto } from '$app/navigation'; import { COURSE_TYPE } from '$lib/utils/types'; diff --git a/apps/dashboard/src/routes/courses/[id]/lessons/[...lessonParams]/+page.svelte b/apps/dashboard/src/routes/courses/[id]/lessons/[...lessonParams]/+page.svelte index 67aae117..5a0afaeb 100644 --- a/apps/dashboard/src/routes/courses/[id]/lessons/[...lessonParams]/+page.svelte +++ b/apps/dashboard/src/routes/courses/[id]/lessons/[...lessonParams]/+page.svelte @@ -36,7 +36,7 @@ import type { LessonCompletion } from '$lib/utils/types'; import { profile } from '$lib/utils/store/user'; import { getIsLessonComplete } from '$lib/components/Course/components/Lesson/functions'; - import { t } from '$lib/utils/functions/translations.js'; + import { t } from '$lib/utils/functions/translations'; import { LANGUAGES } from '$lib/utils/constants/translation'; export let data; diff --git a/apps/dashboard/src/routes/courses/[id]/people/+page.svelte b/apps/dashboard/src/routes/courses/[id]/people/+page.svelte index 16d118cb..5cddd520 100644 --- a/apps/dashboard/src/routes/courses/[id]/people/+page.svelte +++ b/apps/dashboard/src/routes/courses/[id]/people/+page.svelte @@ -30,7 +30,7 @@ import { snackbar } from '$lib/components/Snackbar/store'; import Avatar from '$lib/components/Avatar/index.svelte'; import type { GroupPerson } from '$lib/utils/types'; - import { t } from '$lib/utils/functions/translations.js'; + import { t } from '$lib/utils/functions/translations'; import { page } from '$app/stores'; import { goto } from '$app/navigation'; diff --git a/apps/dashboard/src/routes/courses/[id]/submissions/+page.svelte b/apps/dashboard/src/routes/courses/[id]/submissions/+page.svelte index 38bb70b5..0ea3ad4c 100644 --- a/apps/dashboard/src/routes/courses/[id]/submissions/+page.svelte +++ b/apps/dashboard/src/routes/courses/[id]/submissions/+page.svelte @@ -25,7 +25,7 @@ } from '$lib/utils/services/notification/notification'; import { currentOrg, currentOrgDomain } from '$lib/utils/store/org'; import { browser } from '$app/environment'; - import { t } from '$lib/utils/functions/translations.js'; + import { t } from '$lib/utils/functions/translations'; type items = { id: number; diff --git a/apps/dashboard/src/routes/lms/community/[slug]/+page.svelte b/apps/dashboard/src/routes/lms/community/[slug]/+page.svelte index 18ca716f..aeff656c 100644 --- a/apps/dashboard/src/routes/lms/community/[slug]/+page.svelte +++ b/apps/dashboard/src/routes/lms/community/[slug]/+page.svelte @@ -23,8 +23,10 @@ import TextEditor from '$lib/components/TextEditor/index.svelte'; import { calDateDiff } from '$lib/utils/functions/date'; import { browser } from '$app/environment'; - import { fetchCourses } from '$lib/components/Courses/api.js'; - import { t } from '$lib/utils/functions/translations.js'; + import { fetchCourses } from '$lib/components/Courses/api'; + import { t } from '$lib/utils/functions/translations'; + import { courses } from '$lib/components/Courses/store'; + import type { Course } from '$lib/utils/types'; export let data; const { slug } = data; @@ -86,7 +88,7 @@ }; let editorInstance = false; - let fetchedCourses = []; + let fetchedCourses: Course[] = []; function mapResToQuestion(data): Question { return { @@ -115,8 +117,13 @@ } async function getCourses(userId: string | null, orgId: string) { + if ($courses.length) { + fetchedCourses = [...$courses]; + return; + } + const coursesResults = await fetchCourses(userId, orgId); - fetchedCourses = coursesResults.allCourses; + fetchedCourses = coursesResults?.allCourses || []; } async function fetchCommunityQuestion(slug: string) { diff --git a/apps/dashboard/src/routes/lms/community/ask/+page.svelte b/apps/dashboard/src/routes/lms/community/ask/+page.svelte index 0d32035a..3a350f8b 100644 --- a/apps/dashboard/src/routes/lms/community/ask/+page.svelte +++ b/apps/dashboard/src/routes/lms/community/ask/+page.svelte @@ -13,6 +13,8 @@ import { profile } from '$lib/utils/store/user'; import { fetchCourses } from '$lib/components/Courses/api'; import { t } from '$lib/utils/functions/translations'; + import { courses } from '$lib/components/Courses/store'; + import type { Course } from '$lib/utils/types'; let errors: { title?: string; @@ -24,11 +26,16 @@ courseId: '' }; - let fetchedCourses = []; + let fetchedCourses: Course[] = []; async function getCourses(userId: string | null, orgId: string) { + if ($courses.length) { + fetchedCourses = [...$courses]; + return; + } + const coursesResults = await fetchCourses(userId, orgId); - fetchedCourses = coursesResults.allCourses; + fetchedCourses = coursesResults?.allCourses || []; } async function handleSave() { diff --git a/apps/dashboard/src/routes/org/[slug]/+page.svelte b/apps/dashboard/src/routes/org/[slug]/+page.svelte index 911d9901..5863658b 100644 --- a/apps/dashboard/src/routes/org/[slug]/+page.svelte +++ b/apps/dashboard/src/routes/org/[slug]/+page.svelte @@ -20,7 +20,7 @@ import VisitOrgSiteButton from '$lib/components/Buttons/VisitOrgSite.svelte'; import { getGreeting } from '$lib/utils/functions/date'; import { globalStore } from '$lib/utils/store/app'; - import { t } from '$lib/utils/functions/translations.js'; + import { t } from '$lib/utils/functions/translations'; export let data; diff --git a/apps/dashboard/src/routes/org/[slug]/community/[slug]/+page.svelte b/apps/dashboard/src/routes/org/[slug]/community/[slug]/+page.svelte index 3371b092..05ee80d2 100644 --- a/apps/dashboard/src/routes/org/[slug]/community/[slug]/+page.svelte +++ b/apps/dashboard/src/routes/org/[slug]/community/[slug]/+page.svelte @@ -23,8 +23,10 @@ import TextEditor from '$lib/components/TextEditor/index.svelte'; import { calDateDiff } from '$lib/utils/functions/date'; import { browser } from '$app/environment'; - import { fetchCourses } from '$lib/components/Courses/api.js'; - import { t } from '$lib/utils/functions/translations.js'; + import { fetchCourses } from '$lib/components/Courses/api'; + import { t } from '$lib/utils/functions/translations'; + import { courses } from '$lib/components/Courses/store'; + import type { Course } from '$lib/utils/types'; export let data; const { slug } = data; @@ -85,7 +87,7 @@ }; let editorInstance = false; - let fetchedCourses = []; + let fetchedCourses: Course[] = []; function mapResToQuestion(data): Question { return { @@ -114,8 +116,13 @@ } async function getCourses(userId: string | null, orgId: string) { + if ($courses.length) { + fetchedCourses = [...$courses]; + return; + } + const coursesResults = await fetchCourses(userId, orgId); - fetchedCourses = coursesResults.allCourses; + fetchedCourses = coursesResults?.allCourses || []; } async function fetchCommunityQuestion(slug: string) { diff --git a/apps/dashboard/src/routes/org/[slug]/community/ask/+page.svelte b/apps/dashboard/src/routes/org/[slug]/community/ask/+page.svelte index b079f33a..d72a6729 100644 --- a/apps/dashboard/src/routes/org/[slug]/community/ask/+page.svelte +++ b/apps/dashboard/src/routes/org/[slug]/community/ask/+page.svelte @@ -13,7 +13,9 @@ import TextField from '$lib/components/Form/TextField.svelte'; import { profile } from '$lib/utils/store/user'; import { fetchCourses } from '$lib/components/Courses/api'; - import { t } from '$lib/utils/functions/translations.js'; + import { t } from '$lib/utils/functions/translations'; + import { courses } from '$lib/components/Courses/store'; + import type { Course } from '$lib/utils/types'; let errors: { title?: string; @@ -25,9 +27,14 @@ courseId: '' }; - let fetchedCourses: any[] = []; + let fetchedCourses: Course[] = []; async function getCourses(userId: string | null, orgId: string) { + if ($courses.length) { + fetchedCourses = [...$courses]; + return; + } + const coursesResults = await fetchCourses(userId, orgId); if (!coursesResults) return; diff --git a/apps/dashboard/src/routes/org/[slug]/courses/+page.svelte b/apps/dashboard/src/routes/org/[slug]/courses/+page.svelte index 19f66c24..56484d7b 100644 --- a/apps/dashboard/src/routes/org/[slug]/courses/+page.svelte +++ b/apps/dashboard/src/routes/org/[slug]/courses/+page.svelte @@ -12,7 +12,7 @@ import { isOrgAdmin } from '$lib/utils/store/org'; import type { Course } from '$lib/utils/types'; import { browser } from '$app/environment'; - import { t } from '$lib/utils/functions/translations.js'; + import { t } from '$lib/utils/functions/translations'; import { VARIANTS } from '$lib/components/PrimaryButton/constants'; import IconButton from '$lib/components/IconButton/index.svelte'; import Grid from 'carbon-icons-svelte/lib/Grid.svelte'; @@ -29,6 +29,7 @@ let hasFetched = false; async function getCourses(userId: string | undefined, orgId: string) { + console.log({ org: $currentOrg }); if (cantFetch && typeof cantFetch === 'boolean' && orgId && !hasFetched) { // only show is loading when fetching for the first time if (!$courses.length) {