turash/bugulma/frontend/hooks/useModal.ts
Damir Mukimov 6347f42e20
Consolidate repositories: Remove nested frontend .git and merge into main repository
- Remove nested git repository from bugulma/frontend/.git
- Add all frontend files to main repository tracking
- Convert from separate frontend/backend repos to unified monorepo
- Preserve all frontend code and development history as tracked files
- Eliminate nested repository complexity for simpler development workflow

This creates a proper monorepo structure with frontend and backend
coexisting in the same repository for easier development and deployment.
2025-11-25 06:02:57 +01:00

54 lines
1.1 KiB
TypeScript

import { useCallback, useState } from 'react';
/**
* Hook for managing modal state with common patterns
*/
export function useModal(initialOpen = false) {
const [isOpen, setIsOpen] = useState(initialOpen);
const open = useCallback(() => setIsOpen(true), []);
const close = useCallback(() => setIsOpen(false), []);
const toggle = useCallback(() => setIsOpen(prev => !prev), []);
return {
isOpen,
open,
close,
toggle,
setIsOpen,
};
}
/**
* Hook for managing modal state with data payload
*/
export function useModalWithData<T>(initialOpen = false) {
const [isOpen, setIsOpen] = useState(initialOpen);
const [data, setData] = useState<T | null>(null);
const open = useCallback((modalData?: T) => {
setData(modalData || null);
setIsOpen(true);
}, []);
const close = useCallback(() => {
setIsOpen(false);
setData(null);
}, []);
const toggle = useCallback(() => {
setIsOpen(prev => !prev);
if (!isOpen) setData(null);
}, [isOpen]);
return {
isOpen,
data,
open,
close,
toggle,
setIsOpen,
setData,
};
}