Sha256: c6ffbfa15e6a60494e108dfdd1eebf251c70c1209a9e51825c80f9294275e5c7

Contents?: true

Size: 1.46 KB

Versions: 2

Compression:

Stored size: 1.46 KB

Contents

import React from 'react';
import PropTypes from 'prop-types';
import { PropTypes as MobxPropTypes, Provider, observer } from 'mobx-react';
import { observePubSub } from '../../models/pub_sub';
import { FormState } from './model';

@observer
export default class FormWrapper extends React.PureComponent {

    static propTypes = {
        tag: PropTypes.string,
        className: PropTypes.string,
        children: PropTypes.node.isRequired,
        state: PropTypes.instanceOf(FormState),
        model: MobxPropTypes.observableObject,
    }

    static get defaultProps() {
        return {
            state: new FormState(),
        };
    }

    componentDidMount() {
        if (this.props.model) {
            this.props.state.setFromModel(this.props.model);
        }
    }

    renderTagless() {
        return (
            <Provider formState={this.props.state}>
                {this.props.children}
            </Provider>
        );
    }

    persistTo(model) {
        this.props.state.persistTo(model);
    }

    renderTagged() {
        const { tag: Tag, state, children, model: _, ...otherProps } = this.props;
        return (
            <Provider formState={state}>
                <Tag {...otherProps}>
                    {children}
                </Tag>
            </Provider>
        );
    }

    render() {
        if (this.props.model) { observePubSub(this.props.model); }
        return this.props.tag ? this.renderTagged() : this.renderTagless();
    }

}

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hippo-fw-0.9.5 client/hippo/components/form/wrapper.jsx
hippo-fw-0.9.4 client/hippo/components/form/wrapper.jsx