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
JavaScript
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 };