mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 14:25:02 +00:00
- 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>
56 lines
1.4 KiB
TypeScript
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
|
|
};
|
|
};
|