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
JavaScript
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;
};