diff --git a/src/components/Audience/AudienceList.svelte b/src/components/Audience/AudienceList.svelte new file mode 100644 index 00000000..0f5ded74 --- /dev/null +++ b/src/components/Audience/AudienceList.svelte @@ -0,0 +1,47 @@ + + +{#if isLoading} + +{:else} + + + + + + + +{/if} + + diff --git a/src/components/Audience/index.svelte b/src/components/Audience/index.svelte new file mode 100644 index 00000000..8631cd63 --- /dev/null +++ b/src/components/Audience/index.svelte @@ -0,0 +1,31 @@ + + +
+ {#if $orgAudience.length || isLoading} + + {:else} + + +

No audience to manage!

+

+ Manage all your students here and stay connected with them. +

+
+ {/if} +
diff --git a/src/components/Courses/components/NewCourseModal/index.svelte b/src/components/Courses/components/NewCourseModal/index.svelte index 5c989114..a93826c8 100644 --- a/src/components/Courses/components/NewCourseModal/index.svelte +++ b/src/components/Courses/components/NewCourseModal/index.svelte @@ -9,6 +9,7 @@ import { addGroupMember } from '../../../../utils/services/courses'; import { supabase } from '../../../../utils/functions/supabase'; import { profile } from '../../../../utils/store/user'; + import { currentOrg } from '../../../../utils/store/org'; let errors = { emails: '', @@ -25,7 +26,7 @@ // 1. Create group const { data: newGroup } = await supabase .from('group') - .insert({ name: title, description }); + .insert({ name: title, description, organization_id: $currentOrg.id }); console.log(`newGroup`, newGroup); const { id: group_id } = newGroup[0]; diff --git a/src/components/Icons/AudienceEmptyIcon.svelte b/src/components/Icons/AudienceEmptyIcon.svelte new file mode 100644 index 00000000..517d95d5 --- /dev/null +++ b/src/components/Icons/AudienceEmptyIcon.svelte @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + diff --git a/src/routes/_layout.svelte b/src/routes/_layout.svelte index 22e44836..32b8f26a 100644 --- a/src/routes/_layout.svelte +++ b/src/routes/_layout.svelte @@ -248,4 +248,8 @@ :global(.app-background-color) { background-color: var(--app-background-color); } + + :global(.bx--data-table-container) { + width: 100%; + } diff --git a/src/routes/org/[slug]/audience.svelte b/src/routes/org/[slug]/audience.svelte index 5610a30e..91301ab9 100644 --- a/src/routes/org/[slug]/audience.svelte +++ b/src/routes/org/[slug]/audience.svelte @@ -1 +1,31 @@ -Audience Page + + + + Audience - ClassroomIO + + +
+
+
+

Audience

+ +
+ + +
+
diff --git a/src/routes/org/[slug]/courses.svelte b/src/routes/org/[slug]/courses.svelte index bee2540d..6e37a892 100644 --- a/src/routes/org/[slug]/courses.svelte +++ b/src/routes/org/[slug]/courses.svelte @@ -65,7 +65,7 @@ Courses - ClassroomIO -
+

Courses

diff --git a/src/routes/org/[slug]/index.svelte b/src/routes/org/[slug]/index.svelte index e02f416e..82ea7bec 100644 --- a/src/routes/org/[slug]/index.svelte +++ b/src/routes/org/[slug]/index.svelte @@ -209,7 +209,7 @@ Dashboard - ClassroomIO -
+

Dashboard

diff --git a/src/utils/services/org/index.js b/src/utils/services/org/index.js index eeaccda0..55e33b26 100644 --- a/src/utils/services/org/index.js +++ b/src/utils/services/org/index.js @@ -1,5 +1,5 @@ import { supabase } from '../../functions/supabase'; -import { orgs, currentOrg } from '../../store/org'; +import { orgs, currentOrg, orgAudience } from '../../store/org'; export async function getOrganizations(userId) { const { data, error } = await supabase @@ -39,3 +39,42 @@ export async function getOrganizations(userId) { error, }; } + +export async function getOrgAudience(orgId) { + // get all students who are participants in any course belonging to an org + const { data, error } = await supabase + .from('profile') + .select( + ` + id, + fullname, + email, + avatar_url, + created_at, + groupmember!inner( + role_id, + group!inner( + organization!inner(id) + ) + ) + ` + ) + .eq('groupmember.group.organization.id', orgId) + .eq('groupmember.role_id', 3); // is a student, tutor is 2 and admin is 1 + + console.log('data', data); + + const audience = (data || []).map((profile) => ({ + id: profile.id, + name: profile.fullname, + email: profile.email, + avatar_url: profile.avatar_url, + date_joined: new Date(profile.created_at).toDateString(), + })); + orgAudience.set(audience); + + return { + audience: audience, + error, + }; +} diff --git a/src/utils/store/org.js b/src/utils/store/org.js index 17d1b8db..6d46fc9b 100644 --- a/src/utils/store/org.js +++ b/src/utils/store/org.js @@ -7,3 +7,4 @@ export const currentOrg = writable({ shortName: '', siteName: '', }); +export const orgAudience = writable([]);