feat: auto enroll into org as student and oauth improvements

This commit is contained in:
Rotimi Best
2026-05-20 08:32:56 +01:00
parent d21d89f250
commit 71fbb2101c
18 changed files with 482 additions and 21 deletions
@@ -10,6 +10,7 @@
import { newOrgModal } from '../new-org-modal-store';
import { t } from '$lib/utils/functions/translations';
import { orgApi } from '$features/org/api/org.svelte';
import { TENANT_ROOT_DOMAIN } from '@cio/utils/constants';
let orgName = $state('');
let siteName = $derived(generateSitename(orgName));
@@ -52,7 +53,7 @@
<Field.Field>
<Field.Label>{$t('add_org.org_sitename')}</Field.Label>
<DomainInput bind:value={siteName} placeholder="myschool" prefix="https://" suffix=".classroomio.com" />
<DomainInput bind:value={siteName} placeholder="myschool" prefix="https://" suffix=".{TENANT_ROOT_DOMAIN}" />
{#if orgApi.errors.siteName || orgApi.errors.general}
<Field.Error>{orgApi.errors.siteName || orgApi.errors.general}</Field.Error>
{/if}
@@ -16,6 +16,7 @@
import { copyToClipboard } from '$lib/utils/functions/formatYoutubeVideo';
import { updateOrgSiteNameValidation } from '$lib/utils/functions/validator';
import { sanitizeDomain, sendDomainRequest } from '$lib/utils/functions/domain';
import { BRAND_ROOT_DOMAIN, TENANT_ROOT_DOMAIN } from '@cio/utils/constants';
import { Badge } from '@cio/ui/base/badge';
import { Button } from '@cio/ui/base/button';
@@ -164,7 +165,7 @@
return;
}
if (sanitizedDomain.includes('classroomio.com')) {
if (sanitizedDomain.includes(BRAND_ROOT_DOMAIN) || sanitizedDomain.includes(TENANT_ROOT_DOMAIN)) {
errors.customDomain = $t('components.settings.domains.custom_domain_not_classroomio');
return;
}
@@ -284,7 +285,7 @@
onchange={(e) => (siteName = (e.target as HTMLInputElement)?.value ?? '')}
placeholder="myschool"
prefix="https://"
suffix=".classroomio.com"
suffix=".{TENANT_ROOT_DOMAIN}"
/>
{#if errors.siteName}
<Field.Error>{errors.siteName}</Field.Error>
@@ -4,8 +4,13 @@
import { currentOrg } from '$lib/utils/store/org';
import { Badge } from '@cio/ui/base/badge';
import { PLAN_NAMES, PLAN } from '@cio/utils/plans';
import { BRAND_ROOT_DOMAIN, TENANT_ROOT_DOMAIN } from '@cio/utils/constants';
const plan = $derived($currentOrg.plans?.[0]?.planName || PLAN.BASIC);
const utmSource = $derived(
$currentOrg.customDomain ||
($currentOrg.siteName ? `${$currentOrg.siteName}.${TENANT_ROOT_DOMAIN}` : BRAND_ROOT_DOMAIN)
);
</script>
<Sidebar.Menu>
@@ -16,7 +21,7 @@
>
{#snippet child({ props })}
<a
href="https://classroomio.com?utm_source={$currentOrg.siteName}.classroomio.com"
href="https://{BRAND_ROOT_DOMAIN}?utm_source={utmSource}"
target="_blank"
rel="noopener noreferrer"
{...props}