Repository URL to install this package:
|
Version:
3.0.0-beta.3 ▾
|
// tslint:disable:max-classes-per-file
import * as React from 'react'
import { omit } from '@skava/utils'
import { isFunction } from 'exotic'
import { ObserverForm } from '../forms'
import { ValidationStrategyContext } from '../strategies'
import { InputState } from '../inputs'
import { PluginsContext, PluginsContextValue } from '../plugins/PluginsContext'
import { renderInput } from './renderInput'
import { fromObserverFormPropsToState } from './fromObserverFormPropsToState'
import { OneFormState } from './OneFormState'
import { OldObserverFormAdapter } from './adapters/ObserverForm'
import { OnPreFill } from './typings'
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
*/
export class OneObserverForm<Props = {}> extends OldObserverFormAdapter<
Props & { state: OneFormState }
> {
static contextType = PluginsContext
context: PluginsContextValue
// @todo @@strict componentDidMount...
componentWillMount() {
const { state } = fromObserverFormPropsToState(this.props)
state.setInputPluginsList(this.context)
}
onPreFill?: OnPreFill
componentDidMount() {
// @note could bind... though this is only called ~once
// @todo @@perf - not sure if we need as a prop...
const onPreFill =
this.onPreFill || this.props.onPreFill || this.props.state.onPreFill
if (isFunction(onPreFill)) {
this.props.state.inputsList.forEach(onPreFill)
}
}
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 (
<ObserverForm
{...remainingProps}
state={state}
renderInput={renderInput}
/>
)
}
}