@@ -5,6 +5,7 @@ import { Field } from 'react-final-form';
55import RendererContext from '../renderer-context' ;
66import Condition from '../condition' ;
77import getConditionTriggers from '../get-condition-triggers' ;
8+ import prepareComponentProps from '../prepare-component-props' ;
89
910const FormFieldHideWrapper = ( { hideField, children } ) => ( hideField ? < div hidden > { children } </ div > : children ) ;
1011
@@ -87,57 +88,7 @@ FormConditionWrapper.propTypes = {
8788const SingleField = ( { component, condition, hideField, ...rest } ) => {
8889 const { actionMapper, componentMapper } = useContext ( RendererContext ) ;
8990
90- let componentProps = {
91- component,
92- ...rest
93- } ;
94-
95- const componentBinding = componentMapper [ component ] ;
96- let Component ;
97- if ( typeof componentBinding === 'object' && Object . prototype . hasOwnProperty . call ( componentBinding , 'component' ) ) {
98- const { component, ...mapperProps } = componentBinding ;
99- Component = component ;
100- componentProps = {
101- ...mapperProps ,
102- ...componentProps ,
103- // merge mapper and field actions
104- ...( mapperProps . actions && rest . actions ? { actions : { ...mapperProps . actions , ...rest . actions } } : { } ) ,
105- // merge mapper and field resolveProps
106- ...( mapperProps . resolveProps && rest . resolveProps
107- ? {
108- resolveProps : ( ...args ) => ( {
109- ...mapperProps . resolveProps ( ...args ) ,
110- ...rest . resolveProps ( ...args )
111- } )
112- }
113- : { } )
114- } ;
115- } else {
116- Component = componentBinding ;
117- }
118-
119- /**
120- * Map actions to props
121- */
122- let overrideProps = { } ;
123- let mergedResolveProps ; // new object has to be created because of references
124- if ( componentProps . actions ) {
125- Object . keys ( componentProps . actions ) . forEach ( ( prop ) => {
126- const [ action , ...args ] = componentProps . actions [ prop ] ;
127- overrideProps [ prop ] = actionMapper [ action ] ( ...args ) ;
128- } ) ;
129-
130- // Merge componentProps resolve props and actions resolve props
131- if ( componentProps . resolveProps && overrideProps . resolveProps ) {
132- mergedResolveProps = ( ...args ) => ( {
133- ...componentProps . resolveProps ( ...args ) ,
134- ...overrideProps . resolveProps ( ...args )
135- } ) ;
136- }
137-
138- // do not pass actions object to components
139- delete componentProps . actions ;
140- }
91+ const { componentProps, Component, overrideProps, mergedResolveProps } = prepareComponentProps ( { component, rest, componentMapper, actionMapper } ) ;
14192
14293 return (
14394 < FormConditionWrapper condition = { condition } field = { componentProps } >
0 commit comments