Files
metabuilder/hooks/useAuthForm.ts
johndoe6345789 78a54228df feat(hooks): Create centralized hooks npm package
- Added @metabuilder/hooks workspace package at root
- Consolidated 30 React hooks from across codebase into single module
- Implemented conditional exports for tree-shaking support
- Added comprehensive package.json with build/lint/typecheck scripts
- Created README.md documenting hook categories and usage patterns
- Updated root package.json workspaces array to include hooks
- Supports multi-version peer dependencies (React 18/19, Redux 8/9)

Usage:
  import { useDashboardLogic } from '@metabuilder/hooks'
  import { useLoginLogic } from '@metabuilder/hooks/useLoginLogic'

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-01-23 19:17:17 +00:00

56 lines
1.4 KiB
TypeScript

/**
* useAuthForm Hook
* Manages form state and validation for authentication forms (login/register)
*/
import { useState, useCallback } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { useRouter } from 'next/navigation';
import { setError, setLoading, selectError, selectIsLoading } from '../store/slices/authSlice';
export interface AuthFormState {
email: string;
password: string;
localError: string;
}
export interface UseAuthFormReturn extends AuthFormState {
isLoading: boolean;
errorMessage: string | null;
setEmail: (email: string) => void;
setPassword: (password: string) => void;
setLocalError: (error: string) => void;
clearErrors: () => void;
}
/**
* Custom hook for managing auth form state
* Handles email/password fields and error tracking
*/
export const useAuthForm = (): UseAuthFormReturn => {
const dispatch = useDispatch();
const isLoading = useSelector(selectIsLoading);
const errorMessage = useSelector(selectError);
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [localError, setLocalError] = useState('');
const clearErrors = useCallback(() => {
setLocalError('');
dispatch(setError(null));
}, [dispatch]);
return {
email,
password,
localError,
isLoading,
errorMessage,
setEmail,
setPassword,
setLocalError,
clearErrors
};
};