@@ -157,11 +157,15 @@ export type InstallAssetArgs = {|
157
157
158
158
const findVariant = (
159
159
container : gdEventsBasedObjectVariantsContainer ,
160
- assetStoreId : string
160
+ assetStoreAssetId : string ,
161
+ assetStoreOriginalName : string
161
162
) : gdEventsBasedObjectVariant | null = > {
162
163
for ( let index = 0 ; index < container . getVariantsCount ( ) ; index ++ ) {
163
164
const variant = container . getVariantAt ( index ) ;
164
- if ( variant . getAssetStoreId ( ) ) {
165
+ if (
166
+ variant . getAssetStoreAssetId ( ) === assetStoreAssetId &&
167
+ variant . getAssetStoreOriginalName ( ) === assetStoreOriginalName
168
+ ) {
165
169
return variant ;
166
170
}
167
171
}
@@ -183,34 +187,86 @@ export const addAssetToProject = async ({
183
187
const type : ?string = objectAsset . object . type ;
184
188
if ( ! type ) throw new Error ( 'An object has no type specified' ) ;
185
189
186
- let variantName : string | null = null ;
187
- const serializedVariant = objectAsset . variant ;
188
- const isCustomObjectWithVariant =
189
- serializedVariant && project . hasEventsBasedObject ( type ) ;
190
- if ( isCustomObjectWithVariant && serializedVariant ) {
191
- const eventsBasedObject = project . getEventsBasedObject ( type ) ;
192
- const variants = eventsBasedObject . getVariants ( ) ;
193
- variantName = serializedVariant . name ;
194
- let variant = findVariant ( variants , serializedVariant . assetStoreId ) ;
195
- if ( ! variant ) {
196
- // TODO Forbid name with `::`
197
- const uniqueNewName = newNameGenerator ( variantName , tentativeNewName =>
198
- variants . hasVariantNamed ( tentativeNewName )
199
- ) ;
200
- variant = variants . insertNewVariant (
201
- uniqueNewName ,
202
- variants . getVariantsCount ( )
203
- ) ;
204
- variantName = uniqueNewName ;
190
+ const variantRenamings : Array < {
191
+ objectType : string ,
192
+ oldVariantName : string ,
193
+ newVariantName : string ,
194
+ } > = [ ] ;
195
+ const serializedVariants = objectAsset . variants ;
196
+ if ( serializedVariants ) {
197
+ // Install variants
198
+ for ( const {
199
+ objectType,
200
+ variant : serializedVariant ,
201
+ } of serializedVariants ) {
202
+ if ( project . hasEventsBasedObject ( objectType ) ) {
203
+ const eventsBasedObject = project . getEventsBasedObject ( objectType ) ;
204
+ const variants = eventsBasedObject . getVariants ( ) ;
205
+ let variant = findVariant ( variants , asset . id , serializedVariant . name ) ;
206
+ if ( ! variant ) {
207
+ // TODO Forbid name with `::`
208
+ const uniqueNewName = newNameGenerator (
209
+ serializedVariant . name ,
210
+ tentativeNewName => variants . hasVariantNamed ( tentativeNewName )
211
+ ) ;
212
+ variant = variants . insertNewVariant (
213
+ uniqueNewName ,
214
+ variants . getVariantsCount ( )
215
+ ) ;
216
+ const variantName = variant . getName ( ) ;
217
+ unserializeFromJSObject (
218
+ variant ,
219
+ serializedVariant ,
220
+ 'unserializeFrom' ,
221
+ project
222
+ ) ;
223
+ variant . setName ( variantName ) ;
224
+ variant . setAssetStoreAssetId ( asset . id ) ;
225
+ variant . setAssetStoreOriginalName ( serializedVariant . name ) ;
226
+ }
227
+ if ( variant . getName ( ) !== serializedVariant . name ) {
228
+ variantRenamings . push ( {
229
+ objectType,
230
+ oldVariantName : serializedVariant . name ,
231
+ newVariantName : variant . getName ( ) ,
232
+ } ) ;
233
+ }
234
+ }
235
+ }
236
+ // Update variant names into variants object configurations.
237
+ for ( const {
238
+ objectType,
239
+ variant : serializedVariant ,
240
+ } of serializedVariants ) {
241
+ if ( project . hasEventsBasedObject ( objectType ) ) {
242
+ const eventsBasedObject = project . getEventsBasedObject ( objectType ) ;
243
+ const variants = eventsBasedObject . getVariants ( ) ;
244
+ let variant = findVariant ( variants , asset . id , serializedVariant . name ) ;
245
+ if ( variant ) {
246
+ for (
247
+ let index = 0 ;
248
+ index < variant . getObjects ( ) . getObjectsCount ( ) ;
249
+ index ++
250
+ ) {
251
+ const object = variant . getObjects ( ) . getObjectAt ( index ) ;
252
+
253
+ if ( project . hasEventsBasedObject ( object . getType ( ) ) ) {
254
+ const customObjectConfiguration = gd . asCustomObjectConfiguration (
255
+ object . getConfiguration ( )
256
+ ) ;
257
+ const customObjectVariantRenaming = variantRenamings . find (
258
+ renaming => renaming . objectType === object . getType ( )
259
+ ) ;
260
+ if ( customObjectVariantRenaming ) {
261
+ customObjectConfiguration . setVariantName (
262
+ customObjectVariantRenaming . newVariantName
263
+ ) ;
264
+ }
265
+ }
266
+ }
267
+ }
268
+ }
205
269
}
206
- unserializeFromJSObject (
207
- variant ,
208
- serializedVariant ,
209
- 'unserializeFrom' ,
210
- project
211
- ) ;
212
- variant . setName ( variantName ) ;
213
- variant . setAssetStoreId ( asset . id ) ;
214
270
}
215
271
216
272
// Insert the object
@@ -247,19 +303,27 @@ export const addAssetToProject = async ({
247
303
'unserializeFrom' ,
248
304
project
249
305
) ;
250
-
306
+ // The name was overwritten after unserialization.
307
+ object . setName ( newName ) ;
251
308
object . setAssetStoreId ( asset . id ) ;
252
- if ( isCustomObjectWithVariant && variantName ) {
309
+ if ( project . hasEventsBasedObject ( object . getType ( ) ) ) {
253
310
const customObjectConfiguration = gd . asCustomObjectConfiguration (
254
311
object . getConfiguration ( )
255
312
) ;
256
- customObjectConfiguration . setVariantName ( variantName ) ;
257
- customObjectConfiguration . setMarkedAsOverridingEventsBasedObjectChildrenConfiguration (
258
- false
313
+ if ( customObjectConfiguration . getVariantName ( ) ) {
314
+ customObjectConfiguration . setMarkedAsOverridingEventsBasedObjectChildrenConfiguration (
315
+ false
316
+ ) ;
317
+ }
318
+ const customObjectVariantRenaming = variantRenamings . find (
319
+ renaming => renaming . objectType === object . getType ( )
259
320
) ;
321
+ if ( customObjectVariantRenaming ) {
322
+ customObjectConfiguration . setVariantName (
323
+ customObjectVariantRenaming . newVariantName
324
+ ) ;
325
+ }
260
326
}
261
- // The name was overwritten after unserialization.
262
- object . setName ( newName ) ;
263
327
264
328
// Add resources used by the object
265
329
objectAsset . resources . forEach ( serializedResource => {
0 commit comments