UNPKG

vs-form-mui-4x

Version:

A schema-based form generator component for React using material-ui 4.x

119 lines (116 loc) 4.44 kB
import { Component, createElement } from 'react'; import 'lodash/capitalize'; import 'lodash/cloneDeep'; import 'lodash/get'; import 'lodash/has'; import 'lodash/isArray'; import 'lodash/isDate'; import 'lodash/isBoolean'; import 'lodash/isEmpty'; import 'lodash/isFunction'; import 'lodash/isInteger'; import 'lodash/isNull'; import 'lodash/isNumber'; import 'lodash/isObject'; import 'lodash/isPlainObject'; import 'lodash/isRegExp'; import 'lodash/isString'; import isUndefined from 'lodash/isUndefined'; import 'lodash/merge'; import 'lodash/set'; import 'lodash/toInteger'; import 'lodash/toNumber'; import 'lodash/trimEnd'; import 'lodash/uniq'; import 'lodash/debounce'; import 'lodash/throttle'; import { X as Text, h as BaseIcon, _ as chevronDown } from './index-5c5f12ca.js'; import '@material-ui/core/FormControl'; import '@material-ui/core/FormHelperText'; import '@material-ui/core/FormLabel'; import '@material-ui/core/TextField'; import '@material-ui/core/InputAdornment'; import '@material-ui/core/Tooltip'; import '@material-ui/core/styles'; import classNames from 'classnames'; import '@material-ui/core/Icon'; import '@material-ui/core/SvgIcon'; import 'date-fns'; import 'events'; import '@material-ui/core/Typography'; import '@material-ui/core/Grid'; import '@material-ui/core/IconButton'; import Accordion from '@material-ui/core/Accordion'; import AccordionSummary from '@material-ui/core/AccordionSummary'; import AccordionDetails from '@material-ui/core/AccordionDetails'; const styles = { root: { width: '100%' }, dense: { padding: '5px', } }; class VsAccordion extends Component { constructor(props) { super(props); this.AccordionProps = {}; this.AccordionSummaryProps = {}; this.AccordionDetailsProps = {}; this.TypographyProps = {}; this.componentEventParams = this.props.schemaManager.getComponentEventParams(this.props.comp); this.changeExpanded = (_event, expanded) => { let canChange = true; const params = { ...this.componentEventParams, expanded }; if (this.comp.onBeforeChange) { const p = { ...params, canChange: true }; this.comp.onBeforeChange(p); canChange = p.canChange; } if (canChange) { this.setState({ expanded }); this.props.schemaManager.changeExpanded(this.comp, expanded, !!this.props.designMode); if (this.comp.onChange) { this.comp.onChange(params); } } }; this.initProps(); this.state = { expanded: !!(this.comp.expanded) }; } get comp() { return this.props.comp; } render() { return (createElement(Accordion, Object.assign({}, this.AccordionProps, { expanded: this.state.expanded }), createElement(AccordionSummary, Object.assign({}, this.AccordionSummaryProps), createElement(Text, Object.assign({ text: this.comp.label }, this.TypographyProps))), createElement(AccordionDetails, Object.assign({}, this.AccordionDetailsProps), this.props.children))); } initProps() { const { AccordionSummaryProps, AccordionDetailsProps, TypographyProps, IconProps, ...AccordionProps } = this.comp.props; if (AccordionProps) { this.AccordionProps = AccordionProps; } if (AccordionSummaryProps) { this.AccordionSummaryProps = AccordionSummaryProps; } if (AccordionDetailsProps) { this.AccordionDetailsProps = AccordionDetailsProps; } if (TypographyProps) { this.TypographyProps = TypographyProps; } this.AccordionProps.onChange = this.changeExpanded; this.AccordionProps.className = classNames(this.props.classes.root, this.AccordionProps.className); if (this.comp.dense) { this.AccordionDetailsProps.className = classNames(this.props.classes.dense, this.AccordionDetailsProps.className); } this.AccordionSummaryProps.expandIcon = createElement(BaseIcon, { svg: chevronDown }); if (isUndefined(this.AccordionProps.expanded)) { this.AccordionProps.expanded = false; } } } export default VsAccordion; export { styles };