@@ -39,7 +39,7 @@ import {
3939import { useJsonForms } from '@jsonforms/react' ;
4040import { getStyle , getStyleAsClassName } from '../reducers' ;
4141import { VanillaRendererProps } from '../index' ;
42- import { ComponentType } from 'react' ;
42+ import { ComponentType , useMemo } from 'react' ;
4343import { findStyle , findStyleAsClassName } from '../reducers/styling' ;
4444import { useStyles } from '../styles' ;
4545
@@ -96,7 +96,7 @@ export const withVanillaControlProps = (Component: ComponentType<any>) => (props
9696 const controlElement = props . uischema as ControlElement ;
9797 const config = ctx . config ;
9898 const trim = config && config . trim ;
99- const styles = findStyle ( contextStyles ) ( 'control' ) ;
99+ const styles = useMemo ( ( ) => findStyle ( contextStyles ) ( 'control' ) , [ contextStyles ] ) ;
100100 let classNames : string [ ] = ! isEmpty ( controlElement . scope )
101101 ? styles . concat ( [ `${ convertToValidClassName ( controlElement . scope ) } ` ] )
102102 : [ '' ] ;
@@ -105,24 +105,33 @@ export const withVanillaControlProps = (Component: ComponentType<any>) => (props
105105 classNames = classNames . concat ( findStyle ( contextStyles ) ( 'control.trim' ) ) ;
106106 }
107107 const isValid = isEmpty ( props . errors ) ;
108- const labelClass = findStyleAsClassName ( contextStyles ) ( 'control.label' ) ;
109- const descriptionClassName = findStyleAsClassName ( contextStyles ) ( 'input.description' ) ;
110- const validationClassName = findStyleAsClassName ( contextStyles ) ( 'control.validation' ) ;
111- const validationErrorClassName = findStyleAsClassName ( contextStyles ) ( 'control.validation.error' ) ;
108+ const labelClass = useMemo ( ( ) => findStyleAsClassName ( contextStyles ) ( 'control.label' ) , [ contextStyles ] ) ;
109+ const descriptionClassName = useMemo ( ( ) => findStyleAsClassName ( contextStyles ) ( 'input.description' ) , [ contextStyles ] ) ;
110+ const validationClassName = useMemo ( ( ) => findStyleAsClassName ( contextStyles ) ( 'control.validation' ) , [ contextStyles ] ) ;
111+ const validationErrorClassName = useMemo ( ( ) => findStyleAsClassName ( contextStyles ) ( 'control.validation.error' ) , [ contextStyles ] ) ;
112112 const inputClassName = [ 'validate' ] . concat ( isValid ? 'valid' : 'invalid' ) ;
113+
114+ const getStyleAsClassName = useMemo ( ( ) => findStyleAsClassName ( contextStyles ) , [ contextStyles ] ) ;
115+ const getStyle = useMemo ( ( ) => findStyle ( contextStyles ) , [ contextStyles ] ) ;
116+
117+ const wrapper = classNames . join ( ' ' ) ;
118+ const input = inputClassName . join ( ' ' ) ;
119+
120+ const classNamesProp = useMemo ( ( ) => ( {
121+ wrapper,
122+ input,
123+ label : labelClass ,
124+ description : descriptionClassName ,
125+ validation : validationClassName ,
126+ validationError : validationErrorClassName
127+ } ) , [ wrapper , input , labelClass , descriptionClassName , validationClassName , validationErrorClassName ] ) ;
128+
113129 return (
114130 < Component
115131 { ...props }
116- getStyleAsClassName = { findStyleAsClassName ( contextStyles ) }
117- getStyle = { findStyle ( contextStyles ) }
118- classNames = { {
119- wrapper : classNames . join ( ' ' ) ,
120- input : inputClassName . join ( ' ' ) ,
121- label : labelClass ,
122- description : descriptionClassName ,
123- validation : validationClassName ,
124- validationError : validationErrorClassName
125- } }
132+ getStyleAsClassName = { getStyleAsClassName }
133+ getStyle = { getStyle }
134+ classNames = { classNamesProp }
126135 />
127136 ) ;
128137}
0 commit comments