@@ -164,21 +164,39 @@ function(accUtils, i18n, ko, project, urlCatalog, viewHelper, wktLogger, ViewMod
164
164
} ;
165
165
166
166
// Triggered when changes have been downloaded from the WRC backend, for the active WDT Model File provider.
167
- //
168
167
this . changesAutoDownloaded = ( event ) => {
168
+ function filterOriginalModelProperties ( array1 , array2 ) {
169
+ return array1 . filter ( c => array2 . findIndex ( x => x . uid == c . uid ) > - 1 )
170
+ }
171
+
169
172
wktLogger . debug ( 'Received changesAutoDownloaded event with modelContent = %s' , event . detail . value ) ;
170
173
this . wrcBackendTriggerChange = true ;
171
174
this . project . wdtModel . modelContent ( event . detail . value ) ;
172
175
if ( event . detail . properties ) {
173
- const existingProperties = this . project . wdtModel . getModelPropertiesObject ( ) . observable ( ) ;
176
+ // Model properties initially passed to WRC was a deep copy
177
+ // created using the spread operator. event.detail.properties
178
+ // contains what the model properties need to be now, which
179
+ // may in fact result in the removal of some of the original
180
+ // ones passed to the WRC.
181
+ const existingProperties = filterOriginalModelProperties (
182
+ this . project . wdtModel . getModelPropertiesObject ( ) . observable ( ) ,
183
+ event . detail . properties
184
+ ) ;
185
+ this . project . wdtModel . getModelPropertiesObject ( ) . observable ( existingProperties ) ;
174
186
event . detail . properties . forEach ( ( item ) => {
187
+ // Get index of existing property that matches property coming
188
+ // from “Design View”
175
189
const index = existingProperties . map ( item1 => item1 . uid ) . indexOf ( item . uid ) ;
176
190
if ( index === - 1 ) {
177
- // Must call addNewItem() in order to get remove() function added
191
+ // Didn’t find a match, so we need to call addNewItem() in order
192
+ // to get the remove() function added to the property coming from “Design View”
178
193
this . project . wdtModel . getModelPropertiesObject ( ) . addNewItem ( { uid : item . uid , Name : item . Name , Value : item . Value } ) ;
179
194
}
180
195
else {
181
- // Update existing properties with data from "Design View"
196
+ // Found a match, so we just need to update existing properties
197
+ // with data coming from “Design View”. The uid of the existing
198
+ // property will be the same, but “Design View” could have made
199
+ // both the Name and Value different.
182
200
existingProperties [ index ] . Name = item . Name ;
183
201
existingProperties [ index ] . Value = item . Value ;
184
202
}
0 commit comments