UNPKG

pagamio-frontend-commons-lib

Version:

Pagamio library for Frontend reusable components like the form engine and table container

50 lines (49 loc) 1.91 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'; import { setupInputRegistry } from '../form-engine/registry'; /** * Context for managing the new form engine drawer state */ const MultiFormEngineDrawerProviderContext = createContext(undefined); /** * Provider component for the new form engine drawer * Supports multiple drawers using unique keys */ export const MultiFormEngineDrawerProvider = ({ pathname, children }) => { const [drawerStates, setDrawerStates] = useState(new Map()); useEffect(() => { setupInputRegistry(); }, []); const handleOpenDrawer = useCallback((key) => { setDrawerStates((prev) => new Map(prev).set(key, true)); }, []); const handleCloseDrawer = useCallback((key) => { setDrawerStates((prev) => { const newStates = new Map(prev); newStates.delete(key); return newStates; }); }, []); const isOpen = useCallback((key) => drawerStates.get(key) === true, [drawerStates]); const isAnyDrawerOpen = useCallback(() => drawerStates.size > 0, [drawerStates]); useEffect(() => { setDrawerStates(new Map()); }, [pathname]); const contextValue = useMemo(() => ({ isOpen, isAnyDrawerOpen, handleOpenDrawer, handleCloseDrawer, }), [isOpen, isAnyDrawerOpen, handleOpenDrawer, handleCloseDrawer]); return (_jsx(MultiFormEngineDrawerProviderContext.Provider, { value: contextValue, children: children })); }; /** * Hook to access the new form engine drawer context */ export const useMultiFormEngineDrawer = () => { const context = useContext(MultiFormEngineDrawerProviderContext); if (!context) { throw new Error('useFormEngineDrawerV2 must be used within a FormEngineDrawerProviderV2'); } return context; };