@@ -55,6 +55,7 @@ export class DeckEventsHandler {
5555 this . el . addEventListener ( 'deckDidChange' , this . onDeckChange , false ) ;
5656 this . el . addEventListener ( 'slideDidChange' , this . onSlideChange , false ) ;
5757 this . el . addEventListener ( 'slideDidLoad' , this . onSlideDidLoad , false ) ;
58+ this . el . addEventListener ( 'slidesDidLoad' , this . onSlidesDidLoad , false ) ;
5859 this . el . addEventListener ( 'slideDelete' , this . onSlideDelete , false ) ;
5960 this . el . addEventListener ( 'codeDidChange' , this . onCodeChange , false ) ;
6061
@@ -75,6 +76,7 @@ export class DeckEventsHandler {
7576 this . el . removeEventListener ( 'deckDidChange' , this . onDeckChange , true ) ;
7677 this . el . removeEventListener ( 'slideDidChange' , this . onSlideChange , true ) ;
7778 this . el . removeEventListener ( 'slideDidLoad' , this . onSlideDidLoad , true ) ;
79+ this . el . removeEventListener ( 'slidesDidLoad' , this . onSlidesDidLoad , true ) ;
7880 this . el . removeEventListener ( 'slideDelete' , this . onSlideDelete , true ) ;
7981 this . el . removeEventListener ( 'codeDidChange' , this . onCodeChange , true ) ;
8082
@@ -91,11 +93,16 @@ export class DeckEventsHandler {
9193
9294 private onSlideDidLoad = async ( $event : CustomEvent ) => {
9395 if ( $event && $event . target && $event . target instanceof HTMLElement ) {
94- await this . slideToLastSlide ( $event . target ) ;
9596 await this . createSlide ( $event . target ) ;
9697 }
9798 } ;
9899
100+ private onSlidesDidLoad = async ( $event : CustomEvent ) => {
101+ if ( $event ) {
102+ await this . slideToLastSlide ( ) ;
103+ }
104+ } ;
105+
99106 private onDeckChange = async ( $event : CustomEvent ) => {
100107 if ( ! $event || ! $event . detail ) {
101108 return ;
@@ -518,19 +525,33 @@ export class DeckEventsHandler {
518525 return SlideTemplate [ templateKey ] ;
519526 }
520527
521- private slideToLastSlide ( newSlide : HTMLElement ) : Promise < void > {
528+ private slideToLastSlide ( ) : Promise < void > {
522529 return new Promise < void > ( async ( resolve ) => {
523530 const deck : HTMLElement = this . el . querySelector ( 'deckgo-deck' ) ;
524531
525- if ( ! deck ) {
532+ if ( ! deck || ! deck . children || deck . children . length <= 0 ) {
533+ resolve ( ) ;
534+ return ;
535+ }
536+
537+ const slides : Element [ ] = Array . from ( deck . children ) . filter ( ( slide : Element ) => {
538+ return slide . tagName . toLocaleLowerCase ( ) . indexOf ( 'deckgo-slide-' ) > - 1
539+ } ) ;
540+
541+ if ( ! slides || slides . length <= 0 ) {
526542 resolve ( ) ;
527543 return ;
528544 }
529545
530- if ( ! newSlide . getAttribute ( 'slide_id' ) && deck . hasChildNodes ( ) ) {
531- await ( deck as any ) . slideTo ( deck . children && deck . children . length > 0 ? deck . children . length - 1 : 0 ) ;
546+ const lastSlide : Element = slides [ slides . length - 1 ] ;
547+
548+ if ( ! lastSlide || lastSlide . getAttribute ( 'slide_id' ) ) {
549+ resolve ( ) ;
550+ return ;
532551 }
533552
553+ await ( deck as any ) . slideTo ( slides . length - 1 ) ;
554+
534555 resolve ( ) ;
535556 } ) ;
536557 }
0 commit comments