refactor(frontend): use shared isValidEmail from input-validation utils

Replace duplicate isValidEmail implementation in form-input.tsx with
the existing utility function from #/utils/input-validation to maintain
consistency across the codebase.

Co-authored-by: openhands <openhands@all-hands.dev>
This commit is contained in:
openhands
2026-03-20 02:22:42 +00:00
parent 2d430e9cc0
commit 71b7d92e06
3 changed files with 4 additions and 26 deletions

View File

@@ -1,10 +1,7 @@
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { describe, expect, it, vi } from "vitest";
import {
FormInput,
isValidEmail,
} from "#/components/features/onboarding/form-input";
import { FormInput } from "#/components/features/onboarding/form-input";
describe("FormInput", () => {
const defaultProps = {
@@ -195,21 +192,4 @@ describe("FormInput", () => {
expect(input).not.toHaveClass("border-red-500");
});
});
describe("isValidEmail", () => {
it("should return true for valid emails", () => {
expect(isValidEmail("test@example.com")).toBe(true);
expect(isValidEmail("user.name@domain.org")).toBe(true);
expect(isValidEmail("user+tag@domain.co.uk")).toBe(true);
});
it("should return false for invalid emails", () => {
expect(isValidEmail("")).toBe(false);
expect(isValidEmail("a@b")).toBe(false);
expect(isValidEmail("invalid")).toBe(false);
expect(isValidEmail("@domain.com")).toBe(false);
expect(isValidEmail("user@")).toBe(false);
expect(isValidEmail("user@.com")).toBe(false);
});
});
});

View File

@@ -1,7 +1,4 @@
export const isValidEmail = (email: string): boolean =>
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/.test(
email,
);
import { isValidEmail } from "#/utils/input-validation";
interface FormInputProps {
id: string;

View File

@@ -5,7 +5,8 @@ import { I18nKey } from "#/i18n/declaration";
import { useTracking } from "#/hooks/use-tracking";
import { Card } from "#/ui/card";
import { Text } from "#/ui/typography";
import { FormInput, isValidEmail } from "./form-input";
import { isValidEmail } from "#/utils/input-validation";
import { FormInput } from "./form-input";
import OpenHandsLogoWhite from "#/assets/branding/openhands-logo-white.svg?react";
import CloudIcon from "#/icons/cloud-minimal.svg?react";
import StackedIcon from "#/icons/stacked.svg?react";