@talend/react-containers
Version:
Provide connected components aka containers for @talend/react-cmf based on @talend/react-components.
71 lines • 2.02 kB
JavaScript
import PropTypes from 'prop-types';
import { isValidElement } from 'react';
import List from '../List';
import SidePanel from '../SidePanel';
import { Inject, Layout, HeaderBar } from "@talend/react-components";
import { jsx as _jsx } from "react/jsx-runtime";
function getContent(Component, props) {
if (/*#__PURE__*/isValidElement(props)) {
return props;
}
return /*#__PURE__*/_jsx(Component, {
...props
});
}
function wrapChildren(children) {
if (children && children.props && children.props.children) {
return [children, ...wrapChildren(children.props.children)];
} else if (children && !children.props) {
// this happens ony in tests with enzyme's mount
return [];
}
return [children];
}
function HomeListView({
getComponent,
components,
id,
hasTheme,
sidepanel,
list,
header,
children
}) {
if (!sidepanel || !list) {
return null;
}
let drawers = children || [];
if (!Array.isArray(drawers)) {
drawers = wrapChildren(drawers);
}
if (components && components.drawers) {
drawers = drawers.concat(Inject.map(getComponent, components.drawers));
}
const Renderers = Inject.getAll(getComponent, {
HeaderBar,
SidePanel,
List
});
return /*#__PURE__*/_jsx(Layout, {
id: id,
hasTheme: hasTheme,
mode: "TwoColumns",
header: getContent(Renderers.HeaderBar, header),
one: getContent(Renderers.SidePanel, sidepanel),
drawers: drawers,
children: getContent(Renderers.List, list)
});
}
HomeListView.displayName = 'HomeListView';
HomeListView.propTypes = {
getComponent: PropTypes.func,
id: PropTypes.string,
hasTheme: PropTypes.bool,
components: PropTypes.object,
header: PropTypes.oneOfType([PropTypes.node, PropTypes.object]),
sidepanel: PropTypes.oneOfType([PropTypes.node, PropTypes.object]).isRequired,
list: PropTypes.oneOfType([PropTypes.node, PropTypes.object]).isRequired,
children: PropTypes.node
};
export default HomeListView;
//# sourceMappingURL=HomeListView.component.js.map