UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

49 lines 1.66 kB
import * as React from 'react'; import { createContext, useCallback, useState, useMemo } from 'react'; import isEqual from 'lodash/isEqual.js'; export const ResourceDefinitionContext = createContext({ definitions: {}, register: () => { }, unregister: () => { }, }); /** * Context to store the current resource Definition. * * Use the useResourceDefinition() hook to read the context. * * @example * * import { useResourceDefinition, useTranslate } from 'ra-core'; * * const PostMenuItem = () => { * const { name, icon } = useResourceDefinition({ resource: 'posts' }); * * return ( * <MenuItem> * <ListItemIcon>{icon}</ListItemIcon> * {name} * </MenuItem> * ); * }; */ export const ResourceDefinitionContextProvider = ({ definitions: defaultDefinitions = {}, children, }) => { const [definitions, setState] = useState(defaultDefinitions); const register = useCallback((config) => { setState(prev => isEqual(prev[config.name], config) ? prev : { ...prev, [config.name]: config, }); }, []); const unregister = useCallback((config) => { setState(prev => { const { [config.name]: _, ...rest } = prev; return rest; }); }, []); const contextValue = useMemo(() => ({ definitions, register, unregister }), [definitions] // eslint-disable-line react-hooks/exhaustive-deps ); return (React.createElement(ResourceDefinitionContext.Provider, { value: contextValue }, children)); }; //# sourceMappingURL=ResourceDefinitionContext.js.map