@zohodesk/components
Version:
In this Package, we Provide Some Basic Components to Build Web App
108 lines (100 loc) • 2.94 kB
JavaScript
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'
// };
// }