UNPKG

@openshift-console/dynamic-plugin-sdk

Version:

Provides core APIs, types and utilities used by dynamic plugins at runtime.

38 lines (37 loc) 1.63 kB
import { createElement as _createElement } from "react"; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import * as React from 'react'; import * as _ from 'lodash'; export const ModalContext = React.createContext({ launchModal: () => { }, closeModal: () => { }, }); export const ModalProvider = ({ children }) => { const [isOpen, setOpen] = React.useState(false); const [Component, setComponent] = React.useState(); const [componentProps, setComponentProps] = React.useState({}); const [componentsMap, setComponentsMap] = React.useState({}); const launchModal = React.useCallback((component, compProps, id = null) => { if (id) { setComponentsMap((components) => ({ ...components, [id]: { Component: component, props: compProps }, })); } else { setComponent(() => component); } setComponentProps(compProps); setOpen(true); }, [setOpen, setComponent, setComponentProps]); const closeModal = React.useCallback((id = null) => { if (id) { setComponentsMap((components) => _.omit(components, id)); } else { setOpen(false); setComponent(undefined); } }, [setOpen]); return (_jsxs(ModalContext.Provider, { value: { launchModal, closeModal }, children: [isOpen && !!Component && _jsx(Component, { ...componentProps, closeModal: () => closeModal() }), _.map(componentsMap, (c, id) => (_createElement(c.Component, { ...c.props, key: id, closeModal: () => closeModal(id) }))), children] })); };