1 | import React from 'react';
|
2 | import * as ReactIs from 'react-is';
|
3 | import { observer } from 'mobx-react';
|
4 | import Grid from '@material-ui/core/Grid';
|
5 | import Inputs from './Inputs';
|
6 | const FieldRenderObserver = ({ component, propsForm, }) => {
|
7 | let FieldComponent = component;
|
8 | try {
|
9 | FieldComponent = observer(component);
|
10 | }
|
11 | catch (error) { }
|
12 | return React.createElement(FieldComponent, Object.assign({}, propsForm));
|
13 | };
|
14 | class FieldRender extends React.PureComponent {
|
15 | constructor() {
|
16 | super(...arguments);
|
17 | this.changeField = (e, callback) => {
|
18 | const { changeField } = this.props;
|
19 | changeField && changeField(e, callback);
|
20 | };
|
21 | }
|
22 | render() {
|
23 | const { field } = this.props;
|
24 | const breakpoints = Object.assign({}, field.breakpoints);
|
25 | const { xs = 12 } = breakpoints;
|
26 | const { sm = xs } = breakpoints;
|
27 | const { md = sm } = breakpoints;
|
28 | const { lg = md } = breakpoints;
|
29 | const { xl = lg } = breakpoints;
|
30 | const { component: Component, render, type, grid = typeof this.props.grid !== 'undefined'
|
31 | ? this.props.grid
|
32 | : true, } = field;
|
33 | const propsForm = {
|
34 | field,
|
35 | changeField: this.changeField,
|
36 | };
|
37 | const formInput = React.createElement(Inputs, Object.assign({}, propsForm));
|
38 | if (render)
|
39 | return render({
|
40 | children: formInput,
|
41 | props: propsForm,
|
42 | });
|
43 | if (type === 'component') {
|
44 | if (React.isValidElement(Component) &&
|
45 | typeof Component !== 'function') {
|
46 | return (React.createElement(Component.type, Object.assign({}, Object.assign(Object.assign({}, Component.props), propsForm))));
|
47 | }
|
48 | if (ReactIs.isValidElementType(Component))
|
49 | return (React.createElement(FieldRenderObserver, { component: Component, propsForm: propsForm }));
|
50 | return null;
|
51 | }
|
52 | return grid ? (React.createElement(Grid, { item: true, xs: xs, sm: sm, md: md, lg: lg, xl: xl }, formInput)) : (formInput);
|
53 | }
|
54 | }
|
55 | export { FieldRender };
|
56 | export default FieldRender;
|
57 |
|
\ | No newline at end of file |