diff --git a/apps/portal/src/components/ui/loading-spinner.tsx b/apps/portal/src/components/ui/loading-spinner.tsx
deleted file mode 100644
index 957fd852..00000000
--- a/apps/portal/src/components/ui/loading-spinner.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import { forwardRef } from "react";
-import { cva, type VariantProps } from "class-variance-authority";
-import { cn } from "@/shared/utils";
-
-const spinnerVariants = cva(
- "animate-spin rounded-full border-solid border-current border-r-transparent",
- {
- variants: {
- size: {
- xs: "h-3 w-3 border",
- sm: "h-4 w-4 border",
- default: "h-6 w-6 border-2",
- lg: "h-8 w-8 border-2",
- xl: "h-12 w-12 border-4",
- },
- variant: {
- default: "text-blue-600",
- white: "text-white",
- gray: "text-gray-400",
- current: "text-current",
- },
- },
- defaultVariants: {
- size: "default",
- variant: "default",
- },
- }
-);
-
-interface LoadingSpinnerProps
- extends React.HTMLAttributes
,
- VariantProps {
- label?: string;
-}
-
-const LoadingSpinner = forwardRef(
- ({ className, size, variant, label = "Loading...", ...props }, ref) => {
- return (
-
- );
- }
-);
-LoadingSpinner.displayName = "LoadingSpinner";
-
-// Centered loading spinner for full-page or container loading
-const CenteredLoadingSpinner = forwardRef<
- HTMLDivElement,
- LoadingSpinnerProps & { containerClassName?: string }
->(({ containerClassName, ...props }, ref) => {
- return (
-
-
-
- );
-});
-CenteredLoadingSpinner.displayName = "CenteredLoadingSpinner";
-
-export { LoadingSpinner, CenteredLoadingSpinner, spinnerVariants };
-export type { LoadingSpinnerProps };
diff --git a/apps/portal/src/features/auth/components/PasswordResetForm/PasswordResetForm.tsx b/apps/portal/src/features/auth/components/PasswordResetForm/PasswordResetForm.tsx
index aa2c3651..94430359 100644
--- a/apps/portal/src/features/auth/components/PasswordResetForm/PasswordResetForm.tsx
+++ b/apps/portal/src/features/auth/components/PasswordResetForm/PasswordResetForm.tsx
@@ -12,10 +12,10 @@ import { FormField } from "@/components/common/FormField";
import { usePasswordReset } from "../../hooks/use-auth";
import { useZodForm } from "@/core/forms";
import {
- passwordResetRequestSchema,
- passwordResetSchema,
- type PasswordResetRequestData,
- type PasswordResetData
+ passwordResetRequestFormSchema,
+ passwordResetFormSchema,
+ type PasswordResetRequestFormData,
+ type PasswordResetFormData
} from "@customer-portal/domain";
interface PasswordResetFormProps {
@@ -39,11 +39,11 @@ export function PasswordResetForm({
// Zod form for password reset request
const requestForm = useZodForm({
- schema: passwordResetRequestSchema,
+ schema: passwordResetRequestFormSchema,
initialValues: { email: "" },
onSubmit: async (data) => {
try {
- await requestPasswordReset(data.email);
+ await requestPasswordReset(data);
onSuccess?.();
} catch (err) {
const errorMessage = err instanceof Error ? err.message : "Request failed";
@@ -54,16 +54,11 @@ export function PasswordResetForm({
// Zod form for password reset (with confirm password)
const resetForm = useZodForm({
- schema: passwordResetSchema.extend({
- confirmPassword: passwordResetSchema.shape.password,
- }).refine((data) => data.password === data.confirmPassword, {
- message: "Passwords do not match",
- path: ["confirmPassword"],
- }),
+ schema: passwordResetFormSchema,
initialValues: { token: token || "", password: "", confirmPassword: "" },
onSubmit: async (data) => {
try {
- await resetPassword(data.token, data.password);
+ await resetPassword(data);
onSuccess?.();
} catch (err) {
const errorMessage = err instanceof Error ? err.message : "Reset failed";
@@ -110,22 +105,22 @@ export function PasswordResetForm({
placeholder="Enter your email"
value={requestForm.values.email}
onChange={(e) => requestForm.setValue("email", e.target.value)}
- onBlur={() => requestForm.setTouched("email", true)}
+ onBlur={() => requestForm.validate()}
disabled={loading || requestForm.isSubmitting}
className={requestForm.errors.email ? "border-red-300" : ""}
/>
- {(error || requestForm.errors._form) && (
+ {error && (
- {requestForm.errors._form || error}
+ {error}
)}