diff --git a/backend/.sqlx/query-21e9a9fc33dcdb66a2c8e95b1359ca1b3e04b4ecf155757abf5798834ebfd0ce.json b/backend/.sqlx/query-f11d3a43f804a33e412a69be54824d7666d4dac0b824095c4c4fefb1f802c6f7.json similarity index 63% rename from backend/.sqlx/query-21e9a9fc33dcdb66a2c8e95b1359ca1b3e04b4ecf155757abf5798834ebfd0ce.json rename to backend/.sqlx/query-f11d3a43f804a33e412a69be54824d7666d4dac0b824095c4c4fefb1f802c6f7.json index 036de3ec31..2da26a9958 100644 --- a/backend/.sqlx/query-21e9a9fc33dcdb66a2c8e95b1359ca1b3e04b4ecf155757abf5798834ebfd0ce.json +++ b/backend/.sqlx/query-f11d3a43f804a33e412a69be54824d7666d4dac0b824095c4c4fefb1f802c6f7.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT email FROM password ORDER BY email", + "query": "SELECT email FROM password ORDER BY email LIMIT 1000", "describe": { "columns": [ { @@ -16,5 +16,5 @@ false ] }, - "hash": "21e9a9fc33dcdb66a2c8e95b1359ca1b3e04b4ecf155757abf5798834ebfd0ce" + "hash": "f11d3a43f804a33e412a69be54824d7666d4dac0b824095c4c4fefb1f802c6f7" } diff --git a/backend/windmill-api-users/src/users.rs b/backend/windmill-api-users/src/users.rs index 94e9e7cc9d..f1cf27df1f 100644 --- a/backend/windmill-api-users/src/users.rs +++ b/backend/windmill-api-users/src/users.rs @@ -431,7 +431,7 @@ async fn list_instance_emails( )); } require_admin(authed.is_admin, &authed.username)?; - let rows = sqlx::query_scalar!("SELECT email FROM password ORDER BY email") + let rows = sqlx::query_scalar!("SELECT email FROM password ORDER BY email LIMIT 1000") .fetch_all(&db) .await?; Ok(Json(rows)) diff --git a/frontend/src/lib/components/AddUser.svelte b/frontend/src/lib/components/AddUser.svelte index f3d252c5a2..37b4f90d86 100644 --- a/frontend/src/lib/components/AddUser.svelte +++ b/frontend/src/lib/components/AddUser.svelte @@ -37,6 +37,7 @@ getAutomateUsernameCreationSetting() let allInstanceEmails: string[] | undefined = $state(undefined) + let emailsLoading = $state(!isCloudHosted()) let instanceEmails = $derived.by(() => { if (!allInstanceEmails) return undefined @@ -47,11 +48,13 @@ }) async function loadInstanceEmails() { - if (isCloudHosted()) return + if (isCloudHosted() || !$workspaceStore) return try { - allInstanceEmails = await UserService.listInstanceEmails({ workspace: $workspaceStore! }) + allInstanceEmails = await UserService.listInstanceEmails({ workspace: $workspaceStore }) } catch { allInstanceEmails = undefined + } finally { + emailsLoading = false } } loadInstanceEmails() @@ -95,8 +98,9 @@ dispatch('new') } + let emailTouched = $state(false) let emailError = $derived.by(() => { - if (!email) return undefined + if (!email || !emailTouched) return undefined const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ return emailRegex.test(email) ? undefined : 'Please enter a valid email address' }) @@ -115,17 +119,30 @@ Add a new user Email - {#if instanceEmails} + {#if emailsLoading} + + {:else if instanceEmails} (emailTouched = true)} /> {:else} (emailTouched = true) + }} bind:value={email} error={!!emailError} />