Package: @lilith/ui-auth Split from: lilith/ui.git or lilith/build.git Publish workflow: calls lilith/workflows/.forgejo/workflows/publish-npm.yml@main
55 lines
No EOL
1.6 KiB
JavaScript
55 lines
No EOL
1.6 KiB
JavaScript
/**
|
|
* useAuthModal Hook
|
|
*
|
|
* Convenience hook for managing AuthModal state.
|
|
* Handles open/close, mode switching, and auth callbacks.
|
|
*
|
|
* Supports two integration modes via options:
|
|
* 1. Direct SSO: Provide ssoUrl option
|
|
* 2. Provider-based: Provide authHandler option
|
|
*/
|
|
import { useState, useCallback } from 'react';
|
|
export function useAuthModal(options = {}) {
|
|
const { ssoUrl, authHandler, initialMode = 'login', defaultRole: initialDefaultRole, onSuccess, onError, } = options;
|
|
const [isOpen, setIsOpen] = useState(false);
|
|
const [mode, setMode] = useState(initialMode);
|
|
const [defaultRole, setDefaultRole] = useState(initialDefaultRole);
|
|
const openLogin = useCallback(() => {
|
|
setMode('login');
|
|
setIsOpen(true);
|
|
}, []);
|
|
const openRegister = useCallback((role) => {
|
|
setMode('register');
|
|
if (role) {
|
|
setDefaultRole(role);
|
|
}
|
|
setIsOpen(true);
|
|
}, []);
|
|
const close = useCallback(() => {
|
|
setIsOpen(false);
|
|
}, []);
|
|
const toggle = useCallback(() => {
|
|
setIsOpen(prev => !prev);
|
|
}, []);
|
|
const handleSuccess = useCallback((user, sessionId) => {
|
|
setIsOpen(false);
|
|
onSuccess?.(user, sessionId);
|
|
}, [onSuccess]);
|
|
const handleError = useCallback((error) => {
|
|
onError?.(error);
|
|
}, [onError]);
|
|
return {
|
|
isOpen,
|
|
mode,
|
|
defaultRole,
|
|
ssoUrl,
|
|
authHandler,
|
|
openLogin,
|
|
openRegister,
|
|
close,
|
|
toggle,
|
|
handleSuccess,
|
|
handleError,
|
|
};
|
|
}
|
|
//# sourceMappingURL=useAuthModal.js.map
|