@@ -17,12 +17,14 @@ import {get} from "../utils/object";
17
17
import { fromSnakeToCamelCase } from "../utils/string" ;
18
18
import appearanceConfig from "./appearance-config" ;
19
19
import Master from "./master" ;
20
+ import { GeneratedElementsData } from "./observable-updater.types" ;
20
21
import Preview from "./preview" ;
21
22
22
23
export default class ObservableUpdater {
23
24
private converterPool : typeof ConverterPool ;
24
25
private massConverterPool : typeof MassConverterPool ;
25
26
private converterResolver : ( config : object ) => string ;
27
+ private previousData : GeneratedElementsData = { } ;
26
28
27
29
/**
28
30
* @param {typeof ConverterPool } converterPool
@@ -82,6 +84,9 @@ export default class ObservableUpdater {
82
84
83
85
for ( const elementName of Object . keys ( elements ) ) {
84
86
const elementConfig = elements [ elementName ] ;
87
+ if ( this . previousData [ elementName ] === undefined ) {
88
+ this . previousData [ elementName ] = { } ;
89
+ }
85
90
if ( generatedData [ elementName ] === undefined ) {
86
91
generatedData [ elementName ] = {
87
92
attributes : { } ,
@@ -92,8 +97,12 @@ export default class ObservableUpdater {
92
97
}
93
98
94
99
if ( elementConfig . style !== undefined ) {
95
- // @todo retrieve previous styles
96
- generatedData [ elementName ] . style = this . generateStyles ( { } , elementConfig , convertedData ) ;
100
+ let previousStyles = { } ;
101
+ if ( typeof this . previousData [ elementName ] . style !== "undefined" ) {
102
+ previousStyles = this . previousData [ elementName ] . style ;
103
+ }
104
+ generatedData [ elementName ] . style = this . generateStyles ( previousStyles , elementConfig , convertedData ) ;
105
+ this . previousData [ elementName ] . style = generatedData [ elementName ] . style ;
97
106
}
98
107
99
108
if ( elementConfig . attributes !== undefined ) {
@@ -109,8 +118,12 @@ export default class ObservableUpdater {
109
118
}
110
119
111
120
if ( elementConfig . css !== undefined && elementConfig . css . var in convertedData ) {
112
- // @todo retrieve previous CSS classes
113
- generatedData [ elementName ] . css = this . generateCss ( { } , elementConfig , convertedData ) ;
121
+ let previousCss = { } ;
122
+ if ( typeof this . previousData [ elementName ] . css !== "undefined" ) {
123
+ previousCss = this . previousData [ elementName ] . css ;
124
+ }
125
+ generatedData [ elementName ] . css = this . generateCss ( previousCss , elementConfig , convertedData ) ;
126
+ this . previousData [ elementName ] . css = generatedData [ elementName ] . css ;
114
127
}
115
128
116
129
if ( elementConfig . tag !== undefined && elementConfig . tag . var !== undefined ) {
@@ -300,10 +313,3 @@ export default class ObservableUpdater {
300
313
return value ;
301
314
}
302
315
}
303
-
304
- export interface GeneratedElementsData {
305
- [ key : string ] : {
306
- [ key : string ] : { } ;
307
- } ;
308
- appearance ?: any ;
309
- }
0 commit comments