From b54bea71929fc29eccd6cf469e2847eaae774f4e Mon Sep 17 00:00:00 2001 From: Guilhem Date: Mon, 16 Feb 2026 11:32:31 +0000 Subject: [PATCH] feat: add email validation and use TextInput in AddUser Add client-side email format validation with error message display and disable the Add button when email is invalid. Replace plain elements with TextInput component for consistent styling. Co-Authored-By: Claude Opus 4.6 --- frontend/src/lib/components/AddUser.svelte | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/frontend/src/lib/components/AddUser.svelte b/frontend/src/lib/components/AddUser.svelte index 741fee68f5..75c69a440b 100644 --- a/frontend/src/lib/components/AddUser.svelte +++ b/frontend/src/lib/components/AddUser.svelte @@ -11,6 +11,7 @@ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte' import { UserPlus } from 'lucide-svelte' import Select from './select/Select.svelte' + import TextInput from './text_input/TextInput.svelte' const dispatch = createEventDispatcher() @@ -93,6 +94,12 @@ dispatch('new') } + let emailError = $derived.by(() => { + if (!email) return undefined + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ + return emailRegex.test(email) ? undefined : 'Please enter a valid email address' + }) + let selected: 'operator' | 'developer' | 'admin' = $state('developer') @@ -117,14 +124,18 @@ email = v }} disablePortal={true} + error={!!emailError} /> {:else} - + + {/if} + {#if emailError} + {emailError} {/if} {#if !automateUsernameCreation} Username - + {/if} Role @@ -161,7 +172,7 @@ username = undefined }) }} - disabled={email === undefined || (!automateUsernameCreation && username === undefined)} + disabled={email === undefined || !!emailError || (!automateUsernameCreation && username === undefined)} > Add