UNPKG

@zohodesk/components

Version:

In this Package, we Provide Some Basic Components to Build Web App

108 lines (100 loc) 2.94 kB
import React from 'react'; import { propTypes, RefElement_propTypes } from "./props/propTypes"; import { defaultProps } from "./props/defaultProps"; //Components import Modal from "../../Modal/Modal"; let RefElement = /*#__PURE__*/React.forwardRef((props, ref) => { let { Element, elementProps, renderChildren, isChildrenRestrictionNeeded = true, isActive } = props; return isChildrenRestrictionNeeded ? isActive ? renderChildren ? renderChildren(ref) : /*#__PURE__*/React.createElement(Element, { ...Object.assign({}, elementProps, { forwardRef: ref }) }) : null : renderChildren ? renderChildren(ref, isActive) : /*#__PURE__*/React.createElement(Element, { ...Object.assign({}, elementProps, { isActive, forwardRef: ref }) }); }); RefElement.propTypes = RefElement_propTypes; export { RefElement }; export default class PortalLayer extends React.Component { constructor(props) { super(props); this.state = { isOpen: this.props.initialState }; this.updateState = this.updateState.bind(this); this.getState = this.getState.bind(this); } componentDidUpdate(prevProps) { let { isActive } = this.props, { isActive: prevActive } = prevProps; isActive = Boolean(isActive), prevActive = Boolean(prevActive); if (typeof isActive !== 'undefined' && isActive != prevActive && Boolean(this.state.isOpen) != isActive) { this.setState({ isOpen: isActive }); } } updateState(alertState) { if (typeof alertState === 'boolean') { this.setState({ isOpen: alertState }); } else { this.setState(alertState); } } getState() { return Object.keys(this.state).length == 1 ? this.state.isOpen : this.state; } componentDidMount() { let { saveUpdateFunction, saveGetFunction, name } = this.props; saveUpdateFunction && saveUpdateFunction(this.updateState, name); saveGetFunction && saveGetFunction(this.getState, name); } render() { let { children, renderChildren, portalId, autoZIndexNeeded, isChildrenRestrictionNeeded } = this.props, { isOpen = false } = this.state; let Element = children && children.type, elementProps = children && children.props; return /*#__PURE__*/React.createElement(Modal, { autoZIndexNeeded: autoZIndexNeeded, portalId: portalId, isActive: isOpen }, /*#__PURE__*/React.createElement(RefElement, { Element: Element, elementProps: elementProps, renderChildren: renderChildren, isChildrenRestrictionNeeded: isChildrenRestrictionNeeded, isActive: isOpen })); } } PortalLayer.defaultProps = defaultProps; PortalLayer.propTypes = propTypes; // if (__DOCS__) { // PortalLayer.docs = { // componentGroup: 'Atom', // folderName: 'Style Guide' // }; // }