diff --git a/.vscode/settings.json b/.vscode/settings.json index eaa2a9da..c2627ef6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -19,6 +19,6 @@ "deno.importMap": "./supabase/functions/import_map.json", "editor.formatOnSave": true, "editor.codeActionsOnSave": { - "source.organizeImports": true + "source.organizeImports": "explicit" } } diff --git a/apps/dashboard/src/lib/components/AuthUI/index.svelte b/apps/dashboard/src/lib/components/AuthUI/index.svelte index 3c940053..d2b5a7dd 100644 --- a/apps/dashboard/src/lib/components/AuthUI/index.svelte +++ b/apps/dashboard/src/lib/components/AuthUI/index.svelte @@ -1,11 +1,12 @@ -
-
-
+
+
+
{#if !showOnlyContent || showLogo} -
+
-

+

{$currentOrg.name ? $currentOrg.name : 'ClassroomIO'}

@@ -70,13 +71,13 @@
{#if !showOnlyContent && !hideGoogleAuth} -
-

or sign up with:

+
+

{$t('login.signup_with')}:

- {isLogin ? 'Sign in' : 'Sign up'} with Google + + {isLogin ? $t('login.login_with_google') : $t('login.signup_with_google')} +
{/if}
{#if !showOnlyContent} -
+
{#if isLogin} - Not registered yet? Sign up{$t('login.signup')} {:else} - Already have an account? Log In{$t('login.login')} {/if}
diff --git a/apps/dashboard/src/lib/components/Org/LandingPage/index.svelte b/apps/dashboard/src/lib/components/Org/LandingPage/index.svelte index b7ddd4b3..3e663748 100644 --- a/apps/dashboard/src/lib/components/Org/LandingPage/index.svelte +++ b/apps/dashboard/src/lib/components/Org/LandingPage/index.svelte @@ -1,34 +1,34 @@
email verification -

{$t('verify_email_modal.heading')}

-

+

{$t('verify_email_modal.heading')}

+

{$t('verify_email_modal.sent_verification')} {$profile.email} {$t('verify_email_modal.to_confirm')}

-
+
> = { - initLocale: 'en', +export const config: Config> = { // parser: parser(), loaders: [ { diff --git a/apps/dashboard/src/lib/utils/functions/validator.ts b/apps/dashboard/src/lib/utils/functions/validator.ts index 3f72c5c5..cee368f4 100644 --- a/apps/dashboard/src/lib/utils/functions/validator.ts +++ b/apps/dashboard/src/lib/utils/functions/validator.ts @@ -1,7 +1,7 @@ +import { t } from '$lib/utils/functions/translations'; import isNumber from 'lodash/isNumber'; import z from 'zod'; import { validateEmail } from './validateEmail'; -import { t } from '$lib/utils/functions/translations'; const getOrgNameValidation = () => z @@ -85,12 +85,12 @@ const forgotValidationSchema = z.object({ const authValidationSchema = z.object({ email: z.string().email({ - message: `${t.get('validations.auth.email.invalid_email')}`, - invalid_type_error: `${t.get('validations.invalid_type_error')}` + message: 'validations.auth.email.invalid_email', + invalid_type_error: 'validations.invalid_type_error' }), password: z.string().min(6, { - message: `${t.get('validations.auth.password.min_char')}`, - invalid_type_error: `${t.get('validations.invalid_type_error')}` + message: 'validations.auth.password.min_char', + invalid_type_error: 'validations.invalid_type_error' }) }); diff --git a/apps/dashboard/src/lib/utils/services/courses/index.ts b/apps/dashboard/src/lib/utils/services/courses/index.ts index 7a796c54..83f32cc7 100644 --- a/apps/dashboard/src/lib/utils/services/courses/index.ts +++ b/apps/dashboard/src/lib/utils/services/courses/index.ts @@ -1,21 +1,21 @@ -import { get } from 'svelte/store'; -import { supabase } from '$lib/utils/functions/supabase'; -import { isUUID } from '$lib/utils/functions/isUUID'; import { QUESTION_TYPE } from '$lib/components/Question/constants'; +import { STATUS } from '$lib/utils/constants/course'; +import { isUUID } from '$lib/utils/functions/isUUID'; +import { supabase } from '$lib/utils/functions/supabase'; +import { isOrgAdmin } from '$lib/utils/store/org'; import type { - Lesson, Course, + Exercise, + ExerciseTemplate, Group, Groupmember, - Exercise, + Lesson, LessonCompletion, - ExerciseTemplate, - LessonSection + LessonSection, + ProfileCourseProgress } from '$lib/utils/types'; -import { STATUS } from '$lib/utils/constants/course'; -import type { PostgrestSingleResponse, PostgrestError } from '@supabase/supabase-js'; -import type { ProfileCourseProgress } from '$lib/utils/types'; -import { isOrgAdmin } from '$lib/utils/store/org'; +import type { PostgrestError, PostgrestSingleResponse } from '@supabase/supabase-js'; +import { get } from 'svelte/store'; export async function fetchCourses(profileId, orgId) { if (!orgId || !profileId) return; @@ -144,10 +144,7 @@ export async function fetchCourse(courseId?: Course['id'], slug?: Course['slug'] const { data, error } = response; - console.log(`error`, error); - console.log(`data`, data); if (!data || error) { - console.log(`data`, data); console.log(`fetchCourse => error`, error); // return this.redirect(307, '/courses'); return { data, error }; diff --git a/apps/dashboard/src/lib/utils/services/org/index.ts b/apps/dashboard/src/lib/utils/services/org/index.ts index f51d4c25..e3d8859f 100644 --- a/apps/dashboard/src/lib/utils/services/org/index.ts +++ b/apps/dashboard/src/lib/utils/services/org/index.ts @@ -1,11 +1,11 @@ -import { get } from 'svelte/store'; -import type { PostgrestError } from '@supabase/supabase-js'; import { goto } from '$app/navigation'; -import { supabase } from '$lib/utils/functions/supabase'; -import { orgs, currentOrg, orgAudience, orgTeam } from '$lib/utils/store/org'; import { ROLE, ROLE_LABEL } from '$lib/utils/constants/roles'; -import type { CurrentOrg, OrgTeamMember } from '$lib/utils/types/org'; +import { supabase } from '$lib/utils/functions/supabase'; +import { currentOrg, orgAudience, orgs, orgTeam } from '$lib/utils/store/org'; import type { OrganizationPlan } from '$lib/utils/types'; +import type { CurrentOrg, OrgTeamMember } from '$lib/utils/types/org'; +import type { PostgrestError } from '@supabase/supabase-js'; +import { get } from 'svelte/store'; export async function getOrgTeam(orgId: string) { const { data, error } = await supabase @@ -164,8 +164,6 @@ export async function getOrgAudience(orgId: string) { .eq('groupmember.group.organization_id', orgId) .eq('groupmember.role_id', ROLE.STUDENT); - console.log('data', data); - const audience = (data || []).map((profile) => ({ id: profile.id, name: profile.fullname, diff --git a/apps/dashboard/src/lib/utils/translations/de.json b/apps/dashboard/src/lib/utils/translations/de.json index 44463d0b..927a867d 100644 --- a/apps/dashboard/src/lib/utils/translations/de.json +++ b/apps/dashboard/src/lib/utils/translations/de.json @@ -1293,7 +1293,29 @@ "email": "Deine E-Mail", "password": "Ihr Passwort", "forgot": "Passwort vergessen?", - "login": "Anmeldung" + "login": "Anmeldung", + "login_with": "oder loggen Sie sich mit ein", + "signup_with": "oder melden Sie sich an", + "already_have_account": "Sie haben bereits ein Konto?", + "not_registered_yet": "Noch nicht registriert?", + "signup": "Melden Sie sich an", + "signup_with_google": "Melden Sie sich bei Google an", + "login_with_google": "Melden Sie sich mit Google an", + "create_to_join": "Erstellen Sie ein kostenloses Konto, um Mitglied zu werden", + "login_to_join": "Melden Sie sich an, um beizutreten", + "validation": { + "unable_to_create_profile": "Profil kann nicht erstellt werden", + "user_cannot_be_created": "Benutzer kann nicht erstellt werden" + }, + "fields": { + "email": "Ihre E-Mail", + "full_name": "Vollständiger Name", + "password": "Ihr Passwort", + "confirm_password": "Passwort bestätigen", + "password_helper_message": "Das Passwort muss mehr als 6 Zeichen lang sein", + "create_account": "Benutzerkonto erstellen" + }, + "create_account": "Benutzerkonto erstellen" }, "welcome_modal": { "we_at": "Wir bei", diff --git a/apps/dashboard/src/lib/utils/translations/en.json b/apps/dashboard/src/lib/utils/translations/en.json index 69085dcc..b1bdcd85 100644 --- a/apps/dashboard/src/lib/utils/translations/en.json +++ b/apps/dashboard/src/lib/utils/translations/en.json @@ -49,7 +49,29 @@ "email": "Your email", "password": "Your password", "forgot": "Forgot password?", - "login": "Log In" + "login": "Log In", + "login_with": "or login with", + "signup_with": "or sign up with", + "already_have_account": "Already have an account?", + "not_registered_yet": "Not registered yet?", + "signup": "Sign up", + "signup_with_google": "Sign up with Google", + "login_with_google": "Login with Google", + "create_to_join": "Create a free account to join", + "create_account": "Create Account", + "login_to_join": "Log in to join", + "fields": { + "email": "Your Email", + "full_name": "Full Name", + "password": "Your Password", + "confirm_password": "Confirm Password", + "password_helper_message": "Password must be more than 6 characters", + "create_account": "Create Account" + }, + "validation": { + "unable_to_create_profile": "Unable to create profile", + "user_cannot_be_created": "User cannot be created" + } }, "profileMenu": { "profile": "PROFILE", diff --git a/apps/dashboard/src/lib/utils/translations/es.json b/apps/dashboard/src/lib/utils/translations/es.json index 2db17866..fb6a22dc 100644 --- a/apps/dashboard/src/lib/utils/translations/es.json +++ b/apps/dashboard/src/lib/utils/translations/es.json @@ -1293,7 +1293,29 @@ "email": "Tu correo electrónico", "password": "Tu contraseña", "forgot": "¿Has olvidado tu contraseña?", - "login": "Acceso" + "login": "Acceso", + "login_with": "o inicia sesión con", + "signup_with": "o regístrate con", + "already_have_account": "¿Ya tienes una cuenta?", + "not_registered_yet": "¿Aún no estás registrado?", + "signup": "Inscribirse", + "signup_with_google": "Regístrate con Google", + "login_with_google": "Iniciar sesión con Google", + "create_to_join": "Crea una cuenta gratuita para unirte", + "login_to_join": "Inicia sesión para unirte", + "validation": { + "unable_to_create_profile": "No se puede crear el perfil", + "user_cannot_be_created": "No se puede crear usuario" + }, + "fields": { + "email": "Tu correo electrónico", + "full_name": "Nombre completo", + "password": "Tu contraseña", + "confirm_password": "confirmar Contraseña", + "password_helper_message": "La contraseña debe tener más de 6 caracteres.", + "create_account": "Crear una cuenta" + }, + "create_account": "Crear una cuenta" }, "welcome_modal": { "we_at": "nosotros en", diff --git a/apps/dashboard/src/lib/utils/translations/fr.json b/apps/dashboard/src/lib/utils/translations/fr.json index 1911f4a7..bda0e928 100644 --- a/apps/dashboard/src/lib/utils/translations/fr.json +++ b/apps/dashboard/src/lib/utils/translations/fr.json @@ -1293,7 +1293,29 @@ "email": "Votre email", "password": "Votre mot de passe", "forgot": "Mot de passe oublié?", - "login": "Se connecter" + "login": "Se connecter", + "login_with": "ou connectez-vous avec", + "signup_with": "ou inscrivez-vous avec", + "already_have_account": "Vous avez déjà un compte ?", + "not_registered_yet": "Pas encore inscrit ?", + "signup": "S'inscrire", + "signup_with_google": "Inscrivez-vous avec Google", + "login_with_google": "Connectez-vous avec Google", + "create_to_join": "Créez un compte gratuit pour vous inscrire", + "login_to_join": "Connectez-vous pour rejoindre", + "validation": { + "unable_to_create_profile": "Impossible de créer un profil", + "user_cannot_be_created": "L'utilisateur ne peut pas être créé" + }, + "fields": { + "email": "Votre e-mail", + "full_name": "Nom et prénom", + "password": "Votre mot de passe", + "confirm_password": "Confirmez le mot de passe", + "password_helper_message": "Le mot de passe doit comporter plus de 6 caractères", + "create_account": "Créer un compte" + }, + "create_account": "Créer un compte" }, "welcome_modal": { "we_at": "Nous à", diff --git a/apps/dashboard/src/lib/utils/translations/hi.json b/apps/dashboard/src/lib/utils/translations/hi.json index 0ff209f3..c9ddf4c1 100644 --- a/apps/dashboard/src/lib/utils/translations/hi.json +++ b/apps/dashboard/src/lib/utils/translations/hi.json @@ -1293,7 +1293,29 @@ "email": "आपका ईमेल", "password": "आपका पासवर्ड", "forgot": "पासवर्ड भूल गए?", - "login": "लॉग इन करें" + "login": "लॉग इन करें", + "login_with": "या के साथ लॉगिन करें", + "signup_with": "या इसके साथ साइन अप करें", + "already_have_account": "क्या आपके पास पहले से एक खाता मौजूद है?", + "not_registered_yet": "अभी तक पंजीकृत नहीं हैं?", + "signup": "साइन अप करें", + "signup_with_google": "Google के साथ साइन अप करें", + "login_with_google": "गूगल से लॉगिन करें", + "create_to_join": "शामिल होने के लिए एक निःशुल्क खाता बनाएँ", + "login_to_join": "शामिल होने के लिए लॉग इन करें", + "validation": { + "unable_to_create_profile": "प्रोफ़ाइल बनाने में असमर्थ", + "user_cannot_be_created": "उपयोगकर्ता नहीं बनाया जा सकता" + }, + "fields": { + "email": "आपका ईमेल", + "full_name": "पूरा नाम", + "password": "आपका पासवर्ड", + "confirm_password": "पासवर्ड की पुष्टि कीजिये", + "password_helper_message": "पासवर्ड 6 अक्षर से अधिक होना चाहिए", + "create_account": "खाता बनाएं" + }, + "create_account": "खाता बनाएं" }, "welcome_modal": { "we_at": "हम पर", diff --git a/apps/dashboard/src/lib/utils/translations/pt.json b/apps/dashboard/src/lib/utils/translations/pt.json index 786e9675..78304047 100644 --- a/apps/dashboard/src/lib/utils/translations/pt.json +++ b/apps/dashboard/src/lib/utils/translations/pt.json @@ -1293,7 +1293,29 @@ "email": "Seu email", "password": "Sua senha", "forgot": "Esqueceu sua senha?", - "login": "Conecte-se" + "login": "Conecte-se", + "login_with": "ou faça login com", + "signup_with": "ou cadastre-se com", + "already_have_account": "Já tem uma conta?", + "not_registered_yet": "Ainda não está cadastrado?", + "signup": "Inscrever-se", + "signup_with_google": "Inscreva-se no Google", + "login_with_google": "Faça login com o Google", + "create_to_join": "Crie uma conta gratuita para participar", + "login_to_join": "Faça login para participar", + "validation": { + "unable_to_create_profile": "Não foi possível criar o perfil", + "user_cannot_be_created": "O usuário não pode ser criado" + }, + "fields": { + "email": "Seu e-mail", + "full_name": "Nome completo", + "password": "Sua senha", + "confirm_password": "Confirme sua senha", + "password_helper_message": "A senha deve ter mais de 6 caracteres", + "create_account": "Criar uma conta" + }, + "create_account": "Criar uma conta" }, "welcome_modal": { "we_at": "Nós em", diff --git a/apps/dashboard/src/lib/utils/translations/ru.json b/apps/dashboard/src/lib/utils/translations/ru.json index af5094fd..a536eafb 100644 --- a/apps/dashboard/src/lib/utils/translations/ru.json +++ b/apps/dashboard/src/lib/utils/translations/ru.json @@ -1293,7 +1293,29 @@ "email": "Ваш адрес электронной почты", "password": "Ваш пароль", "forgot": "Забыли пароль?", - "login": "Авторизоваться" + "login": "Авторизоваться", + "login_with": "или войдите с помощью", + "signup_with": "или зарегистрируйтесь через", + "already_have_account": "У вас уже есть аккаунт?", + "not_registered_yet": "Еще не зарегистрированы?", + "signup": "Зарегистрироваться", + "signup_with_google": "Зарегистрируйтесь через Google", + "login_with_google": "Войти через Google", + "create_to_join": "Создайте бесплатную учетную запись, чтобы присоединиться", + "login_to_join": "Войдите, чтобы присоединиться", + "validation": { + "unable_to_create_profile": "Невозможно создать профиль", + "user_cannot_be_created": "Пользователь не может быть создан" + }, + "fields": { + "email": "Ваш адрес электронной почты", + "full_name": "Полное имя", + "password": "Ваш пароль", + "confirm_password": "Подтвердите пароль", + "password_helper_message": "Пароль должен быть более 6 символов", + "create_account": "Зарегистрироваться" + }, + "create_account": "Зарегистрироваться" }, "welcome_modal": { "we_at": "Мы в", diff --git a/apps/dashboard/src/lib/utils/translations/vi.json b/apps/dashboard/src/lib/utils/translations/vi.json index 7b36c1ee..734b36ea 100644 --- a/apps/dashboard/src/lib/utils/translations/vi.json +++ b/apps/dashboard/src/lib/utils/translations/vi.json @@ -1293,7 +1293,29 @@ "email": "Email của bạn", "password": "Mật khẩu của bạn", "forgot": "Quên mật khẩu?", - "login": "Đăng nhập" + "login": "Đăng nhập", + "login_with": "hoặc đăng nhập với", + "signup_with": "hoặc đăng ký với", + "already_have_account": "Đã có tài khoản?", + "not_registered_yet": "Chưa đăng ký?", + "signup": "Đăng ký", + "signup_with_google": "Đăng ký với Google", + "login_with_google": "Đăng nhập bằng Google", + "create_to_join": "Tạo một tài khoản miễn phí để tham gia", + "login_to_join": "Đăng nhập để tham gia", + "validation": { + "unable_to_create_profile": "Không thể tạo hồ sơ", + "user_cannot_be_created": "Không thể tạo người dùng" + }, + "fields": { + "email": "Email của bạn", + "full_name": "Tên đầy đủ", + "password": "Mật khẩu của bạn", + "confirm_password": "Xác nhận mật khẩu", + "password_helper_message": "Mật khẩu phải nhiều hơn 6 ký tự", + "create_account": "Tạo tài khoản" + }, + "create_account": "Tạo tài khoản" }, "welcome_modal": { "we_at": "Chúng tôi ở", diff --git a/apps/dashboard/src/routes/+layout.server.ts b/apps/dashboard/src/routes/+layout.server.ts index ed5e990e..1566699e 100644 --- a/apps/dashboard/src/routes/+layout.server.ts +++ b/apps/dashboard/src/routes/+layout.server.ts @@ -1,13 +1,12 @@ -import type { MetaTagsProps } from 'svelte-meta-tags'; -import { dev, browser } from '$app/environment'; -import { redirect } from '@sveltejs/kit'; -import { blockedSubdomain } from '$lib/utils/constants/app'; -import { getCurrentOrg } from '$lib/utils/services/org'; -import { getSupabase, supabase } from '$lib/utils/functions/supabase'; -import { loadTranslations } from '$lib/utils/functions/translations'; -import type { CurrentOrg } from '$lib/utils/types/org'; -import { IS_SELFHOSTED } from '$env/static/private'; +import { dev } from '$app/environment'; import { env } from '$env/dynamic/private'; +import { IS_SELFHOSTED } from '$env/static/private'; +import { blockedSubdomain } from '$lib/utils/constants/app'; +import { getSupabase, supabase } from '$lib/utils/functions/supabase'; +import { getCurrentOrg } from '$lib/utils/services/org'; +import type { CurrentOrg } from '$lib/utils/types/org'; +import { redirect } from '@sveltejs/kit'; +import type { MetaTagsProps } from 'svelte-meta-tags'; if (!supabase) { getSupabase(); @@ -19,19 +18,19 @@ interface LoadOutput { skipAuth: boolean; org: CurrentOrg | null; baseMetaTags: MetaTagsProps; + serverLang: string; } -export const load = async ({ url, cookies }): Promise => { +export const load = async ({ url, cookies, request }): Promise => { const response: LoadOutput = { orgSiteName: '', isOrgSite: false, skipAuth: false, org: null, - baseMetaTags: getBaseMetaTags(url) + baseMetaTags: getBaseMetaTags(url), + serverLang: request.headers?.get('accept-language') || '' }; - console.log('IS_SELFHOSTED', IS_SELFHOSTED); - // Selfhosted usecase would be here if (IS_SELFHOSTED === 'true') { const subdomain = getSubdomain(url); @@ -105,11 +104,6 @@ export const load = async ({ url, cookies }): Promise => { throw redirect(307, 'https://app.classroomio.com'); } - // Load translations - const { pathname } = url; - const initLocale = getInitialLocale(); - await loadTranslations(initLocale, pathname); - return response; }; @@ -151,18 +145,7 @@ function getBaseMetaTags(url: URL) { }); } -// Define getInitialLocale function -function getInitialLocale(): string { - if (browser) { - try { - return window.navigator.language.split('-')[0]; - } catch (e) { - return 'en'; - } - } - return 'en'; -} function getSubdomain(url: URL) { const host = url.host.replace('www.', ''); diff --git a/apps/dashboard/src/routes/+layout.svelte b/apps/dashboard/src/routes/+layout.svelte index 046bf4b6..80009f91 100644 --- a/apps/dashboard/src/routes/+layout.svelte +++ b/apps/dashboard/src/routes/+layout.svelte @@ -1,6 +1,8 @@ @@ -153,15 +151,15 @@
-

+

{#if data.invite.profile} - Log in to join + {$t('login.login_to_join')} {:else} - Create a free account to join + {$t('login.create_to_join')} {/if}

{#if !data.invite.profile} {/if} {#if !data.invite.profile} -
+
- import { page } from '$app/stores'; + import AuthUI from '$lib/components/AuthUI/index.svelte'; import TextField from '$lib/components/Form/TextField.svelte'; import PrimaryButton from '$lib/components/PrimaryButton/index.svelte'; - import { getSupabase } from '$lib/utils/functions/supabase'; - import { authValidation } from '$lib/utils/functions/validator'; import { LOGIN_FIELDS } from '$lib/utils/constants/authentication'; - import AuthUI from '$lib/components/AuthUI/index.svelte'; - import { currentOrg } from '$lib/utils/store/org'; - import { capturePosthogEvent } from '$lib/utils/services/posthog'; + import { getSupabase } from '$lib/utils/functions/supabase'; import { t } from '$lib/utils/functions/translations'; + import { authValidation } from '$lib/utils/functions/validator'; + import { capturePosthogEvent } from '$lib/utils/services/posthog'; import { globalStore } from '$lib/utils/store/app'; + import { currentOrg } from '$lib/utils/store/org'; let formRef: HTMLFormElement; let supabase = getSupabase(); @@ -18,9 +17,6 @@ let loading = false; let errors = Object.assign({}, LOGIN_FIELDS); - let query = new URLSearchParams($page.url.search); - let redirect = query.get('redirect'); - async function handleSubmit() { const validationRes = authValidation(fields); console.log('validationRes', validationRes); @@ -48,7 +44,7 @@ email: fields.email }); } - } catch (error) { + } catch (error: any) { submitError = error.error_description || error.message; loading = false; } @@ -61,7 +57,7 @@
-

{$t('login.welcome')}

+

{$t('login.welcome')}

{#if submitError}

{submitError}

@@ -91,7 +87,7 @@
-
+
{ + const { data: publishedCourse } = await supabase + .from('course') + .select( + ` + is_published, + group:group_id!inner( + organization!inner( + siteName + ) + ) + ` + ) + .eq('is_published', true) + .eq('group.organization.siteName', orgSlug) + .limit(1) + .returns<{ is_published: boolean }>(); + const { data } = await supabase .from('course') .select( @@ -23,14 +40,13 @@ async function getGenericData(orgSlug: string): Promise<{ ) ` ) - .eq('group.organization.siteName', orgSlug); + .eq('group.organization.siteName', orgSlug) + .limit(1); const result = data || []; - console.log('courseData', result); - return { - isCoursePublished: result.some((c) => c.is_published === true), + isCoursePublished: publishedCourse?.is_published === true, isCourseCreated: result.length > 0, orgHasAvatarUrl: !!get(result[0], 'group.organization.avatar_url', ''), courseData: result @@ -54,7 +70,8 @@ async function getIsLessonCreated( ) ` ) - .eq('course.group.organization.siteName', orgSlug); + .eq('course.group.organization.siteName', orgSlug) + .limit(1); console.log('lessonsData', data); return { @@ -80,7 +97,8 @@ async function getIsExerciseCreated(orgSlug: string): Promise { ) ` ) - .eq('lesson.course.group.organization.siteName', orgSlug); + .eq('lesson.course.group.organization.siteName', orgSlug) + .limit(1); return Array.isArray(data) ? data?.length > 0 : false; } diff --git a/apps/dashboard/src/routes/signup/+page.svelte b/apps/dashboard/src/routes/signup/+page.svelte index d4a5dc31..f6993efa 100644 --- a/apps/dashboard/src/routes/signup/+page.svelte +++ b/apps/dashboard/src/routes/signup/+page.svelte @@ -1,21 +1,22 @@