Repository URL to install this package:
|
Version:
3.5.4-es ▾
|
// tslint:disable:max-classes-per-file
import * as tslib_1 from "tslib";
import * as React from 'react';
import { omit } from '@skava/utils';
import { isFunction } from 'exotic';
import { computed, observe } from 'xmobx/mobx';
import { ObserverForm } from '../forms';
import { observer } from 'xmobx/mobx-react';
import { PluginsContext } from '../plugins/PluginsContext';
import { renderInput } from './renderInput';
import { fromObserverFormPropsToState } from './fromObserverFormPropsToState';
import { OldObserverFormAdapter } from './adapters/ObserverForm';
export { OneFormState } from './OneFormState';
export { resetInput } from '../forms/deps';
export { toFormState } from './toFormState';
export { OldObserverFormAdapter } from './adapters/ObserverForm';
export { OldInputConfigAdapter } from './adapters/ObserverInput';
export { renderInput } from './renderInput';
/**
* this will adapt FormState & FormView for old & new
* @invariant we won't need OneInput
* since previously there is no config for customizing input
* and almost all is in Form
*/
let OneObserverForm = class OneObserverForm extends OldObserverFormAdapter {
/**
* @todo remove this or see example of it
*/
get isToPreFill() {
return this.props.state.formState.isToPreFill || false;
}
// @todo @@strict componentDidMount...
componentWillMount() {
const { state } = fromObserverFormPropsToState(this.props);
state.setInputPluginsList(this.context);
this.makePreFill();
}
componentDidMount() {
// @note could bind... though this is only called ~once
// @todo @@perf - not sure if we need as a prop...
// @note - removed forceUpdate because it should not be needed
this.disposer = observe(this, 'isToPreFill', () => {
console.debug('[form] updated using preFill');
this.makePreFill();
});
}
makePreFill() {
const onPreFill = this.onPreFill || this.props.onPreFill;
if (isFunction(onPreFill)) {
this.props.state.inputsList.forEach(inputItemState => {
onPreFill(inputItemState);
});
}
}
render() {
const remainingProps = omit(this.props, ['state', 'inputsList']);
const { state } = fromObserverFormPropsToState(this.props);
// @todo - should provide only if it's not already provided
// <ValidationStrategyContext.Provider value={}>
return (React.createElement(ObserverForm, Object.assign({}, remainingProps, { state: state, renderInput: renderInput })));
}
};
OneObserverForm.contextType = PluginsContext;
tslib_1.__decorate([
computed
], OneObserverForm.prototype, "isToPreFill", null);
OneObserverForm = tslib_1.__decorate([
observer
], OneObserverForm);
export { OneObserverForm };
//# sourceMappingURL=OneForm.js.map