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 |
|
7 | const FieldRenderObserver = ({
|
8 | component,
|
9 | propsForm
|
10 | }) => {
|
11 | let FieldComponent = component;
|
12 |
|
13 | try {
|
14 | FieldComponent = observer(component);
|
15 | } catch (error) {}
|
16 |
|
17 | return React.createElement(FieldComponent, propsForm);
|
18 | };
|
19 |
|
20 | class FieldRender extends React.PureComponent {
|
21 | constructor(...args) {
|
22 | super(...args);
|
23 |
|
24 | this.changeField = (e, callback) => this.props.changeField(e, callback);
|
25 | }
|
26 |
|
27 | render() {
|
28 | const {
|
29 | fieldProxy
|
30 | } = this.props;
|
31 | const breakpoints = { ...fieldProxy.breakpoints
|
32 | };
|
33 | const {
|
34 | xs = 12
|
35 | } = breakpoints;
|
36 | const {
|
37 | sm = xs
|
38 | } = breakpoints;
|
39 | const {
|
40 | md = sm
|
41 | } = breakpoints;
|
42 | const {
|
43 | lg = md
|
44 | } = breakpoints;
|
45 | const {
|
46 | xl = lg
|
47 | } = breakpoints;
|
48 | const {
|
49 | component: Component,
|
50 | render,
|
51 | type,
|
52 | grid = typeof this.props.grid !== 'undefined' ? this.props.grid : true
|
53 | } = fieldProxy;
|
54 | const propsForm = {
|
55 | fieldProxy,
|
56 | changeField: this.changeField
|
57 | };
|
58 | const formInput = React.createElement(Inputs, propsForm);
|
59 | if (render) return render({
|
60 | children: formInput,
|
61 | props: propsForm
|
62 | });
|
63 |
|
64 | if (type === 'component') {
|
65 | if (React.isValidElement(Component) && typeof Component !== 'function') {
|
66 | return React.createElement(Component.type, { ...Component.props,
|
67 | ...propsForm
|
68 | });
|
69 | }
|
70 |
|
71 | if (ReactIs.isValidElementType(Component)) return React.createElement(FieldRenderObserver, {
|
72 | component: Component,
|
73 | propsForm: propsForm
|
74 | });
|
75 | return null;
|
76 | }
|
77 |
|
78 | return grid ? React.createElement(Grid, {
|
79 | item: true,
|
80 | xs: xs,
|
81 | sm: sm,
|
82 | md: md,
|
83 | lg: lg,
|
84 | xl: xl
|
85 | }, formInput) : formInput;
|
86 | }
|
87 |
|
88 | }
|
89 |
|
90 | export { FieldRender };
|
91 | export default FieldRender; |
\ | No newline at end of file |