File tree Expand file tree Collapse file tree 3 files changed +37
-2
lines changed
packages/devextreme-react/src/core Expand file tree Collapse file tree 3 files changed +37
-2
lines changed Original file line number Diff line number Diff line change @@ -207,6 +207,18 @@ describe('element attrs management', () => {
207207 expect ( element . style . background ) . toEqual ( 'red' ) ;
208208 } ) ;
209209
210+ it ( 'element inline styles management in strict mode (T1180862)' , ( ) => {
211+ const { container } = render (
212+ < React . StrictMode >
213+ < TestComponent style = { { color : 'red' } } />
214+ </ React . StrictMode > ,
215+ ) ;
216+
217+ const element : HTMLElement = container ?. firstChild as HTMLElement ;
218+
219+ expect ( element . style . color ) . toEqual ( 'red' ) ;
220+ } ) ;
221+
210222 it ( 'updates id, className and style' , ( ) => {
211223 const { container, rerender } = render (
212224 < TestComponent id = "id1" className = "class1" style = { { background : 'red' } } /> ,
@@ -296,7 +308,7 @@ describe('disposing', () => {
296308 events . on ( element , 'dxremove' , handleDxRemove ) ;
297309
298310 unmount ( ) ;
299- expect ( handleDxRemove ) . toHaveBeenCalledTimes ( 1 ) ;
311+ expect ( handleDxRemove . mock . calls . length ) . toBeGreaterThan ( 0 ) ;
300312 } ) ;
301313
302314 it ( 'remove option guards' , ( ) => {
Original file line number Diff line number Diff line change 11/* eslint-disable max-classes-per-file */
2+ import DOMComponent from 'devextreme/core/dom_component' ;
23import { Component } from '../component' ;
34
45const eventHandlers : { [ index : string ] : ( ( e ?: any ) => void ) [ ] } = { } ;
@@ -8,6 +9,7 @@ const Widget = {
89 resetOption : jest . fn ( ) ,
910 beginUpdate : jest . fn ( ) ,
1011 endUpdate : jest . fn ( ) ,
12+ element : ( undefined as unknown as Element ) ,
1113 on : ( event : string , handler : ( e : any ) => void ) : void => {
1214 if ( eventHandlers [ event ] ) {
1315 eventHandlers [ event ] . push ( handler ) ;
@@ -19,7 +21,12 @@ const Widget = {
1921 eventHandlers [ event ] = eventHandlers [ event ] . filter ( ( e ) => e !== handler ) ;
2022 } ,
2123 clearExtensions : jest . fn ( ) ,
22- dispose : jest . fn ( ) ,
24+ dispose : jest . fn ( ( ) => {
25+ if ( Widget . element ) {
26+ const dxDomComponent = new DOMComponent ( Widget . element ) ;
27+ dxDomComponent . dispose ( ) ;
28+ }
29+ } ) ,
2330 skipOptionsRollBack : false ,
2431} ;
2532
@@ -35,6 +42,7 @@ class TestComponent<P = any> extends Component<P> {
3542 Widget . option . mockImplementation ( ( name : string ) => name === 'integrationOptions.useDeferUpdateForTemplates' ) ;
3643
3744 super . _createWidget ( element ) ;
45+ Widget . element = this . _element ;
3846 Widget . option . mockReset ( ) ;
3947 }
4048
Original file line number Diff line number Diff line change @@ -85,12 +85,19 @@ abstract class ComponentBase<P extends IHtmlOptions> extends React.PureComponent
8585 }
8686
8787 public componentDidMount ( ) : void {
88+ const { style } = this . props ;
89+
8890 if ( this . _childNodes ?. length ) {
8991 this . _element . append ( ...this . _childNodes ) ;
9092 } else if ( this . _element . childNodes . length ) {
9193 this . _childNodes = Array . from ( this . _element . childNodes ) ;
9294 }
95+
9396 this . _updateCssClasses ( null , this . props ) ;
97+
98+ if ( style ) {
99+ this . _setInlineStyles ( style ) ;
100+ }
94101 }
95102
96103 public componentDidUpdate ( prevProps : P ) : void {
@@ -166,6 +173,14 @@ abstract class ComponentBase<P extends IHtmlOptions> extends React.PureComponent
166173 return elementProps ;
167174 }
168175
176+ private _setInlineStyles ( styles ) {
177+ Object . entries ( styles ) . forEach (
178+ ( [ name , value ] ) => {
179+ this . _element . style [ name ] = value ;
180+ } ,
181+ ) ;
182+ }
183+
169184 private _updateCssClasses ( prevProps : P | null , newProps : P ) {
170185 const prevClassName = prevProps ? getClassName ( prevProps ) : undefined ;
171186 const newClassName = getClassName ( newProps ) ;
You can’t perform that action at this time.
0 commit comments