@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
JavaScript
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] }));
};