@@ -38,7 +38,7 @@ import { XmlSlideHelper } from '../helper/xml-slide-helper';
3838import { OLEObject } from '../shapes/ole' ;
3939import { Hyperlink } from '../shapes/hyperlink' ;
4040import { HyperlinkProcessor } from '../helper/hyperlink-processor' ;
41- import { GeneralHelper , vd } from '../helper/general-helper' ;
41+ import { vd } from '../helper/general-helper' ;
4242
4343export default class HasShapes {
4444 /**
@@ -343,14 +343,29 @@ export default class HasShapes {
343343 mode : string ,
344344 callback ?: ShapeModificationCallback | ShapeModificationCallback [ ] ,
345345 ) : void {
346+ this . importElements . push ( {
347+ presName,
348+ slideNumber,
349+ selector,
350+ mode,
351+ callback,
352+ } ) ;
353+ }
354+
355+ getAlreadyModifiedElement ( selector : FindElementSelector ) {
346356 // Check if an element with the same selector is already imported in modify mode
347357 const existingElement = this . importElements . find ( ( element ) => {
348358 if (
349- typeof selector === 'object' &&
350- typeof element . selector === 'object' &&
351- selector . creationId &&
352- element . selector ?. creationId
359+ typeof selector !== 'object' ||
360+ typeof element . selector !== 'object'
353361 ) {
362+ return ;
363+ }
364+
365+ if ( ! selector . creationId ) {
366+ // Match by name and nameIdx only if the shape has no creationId
367+ return selector . name === element . selector . name && selector . nameIdx === element . selector . nameIdx ;
368+ } else if ( selector . creationId && element . selector ?. creationId ) {
354369 const creaId1 = selector . creationId . replace ( '{' , '' ) . replace ( '}' , '' ) ;
355370 const creaId2 = element . selector . creationId
356371 . replace ( '{' , '' )
@@ -359,31 +374,7 @@ export default class HasShapes {
359374 return selector . name === element . selector . name && creaId1 === creaId2 ;
360375 }
361376 } ) ;
362-
363- if ( existingElement && mode === 'modify' ) {
364- if ( callback ) {
365- const addCallback = GeneralHelper . arrayify ( callback ) ;
366-
367- if ( existingElement . callback ) {
368- existingElement . callback = GeneralHelper . arrayify (
369- existingElement . callback ,
370- ) ;
371- }
372-
373- if ( Array . isArray ( existingElement . callback ) ) {
374- existingElement . callback . push ( ...addCallback ) ;
375- }
376- }
377- } else {
378- // If the element is not already imported or not in modify mode, add it as a new import
379- this . importElements . push ( {
380- presName,
381- slideNumber,
382- selector,
383- mode,
384- callback,
385- } ) ;
386- }
377+ return existingElement ;
387378 }
388379
389380 /**
@@ -573,14 +564,18 @@ export default class HasShapes {
573564 mode : 'findByElementName' ,
574565 selector : selector ,
575566 } ) ;
576- } else if ( selector . name ) {
577- strategies . push ( {
578- mode : 'findByElementCreationId' ,
579- selector : selector . creationId ,
580- } ) ;
567+ } else {
568+ if ( selector . creationId ) {
569+ strategies . push ( {
570+ mode : 'findByElementCreationId' ,
571+ selector : selector . creationId ,
572+ } ) ;
573+ }
574+
581575 strategies . push ( {
582576 mode : 'findByElementName' ,
583577 selector : selector . name ,
578+ nameIdx : selector . nameIdx
584579 } ) ;
585580 }
586581
@@ -591,6 +586,7 @@ export default class HasShapes {
591586 sourceArchive ,
592587 sourcePath ,
593588 findElement . selector ,
589+ findElement . nameIdx ,
594590 ) ;
595591
596592 if ( sourceElement ) {
0 commit comments