@@ -18,6 +18,7 @@ import {DeckEditorService} from '../../../../services/editor/deck/deck-editor.se
1818import { AuthService } from '../../../../services/auth/auth.service' ;
1919import { DeckService } from '../../../../services/data/deck/deck.service' ;
2020import { SlideService } from '../../../../services/data/slide/slide.service' ;
21+ import { ApiSlideService } from '../../../../services/api/slide/api.slide.service' ;
2122
2223export class DeckEventsHandler {
2324
@@ -39,6 +40,8 @@ export class DeckEventsHandler {
3940 private deckService : DeckService ;
4041 private slideService : SlideService ;
4142
43+ private apiSlideService : ApiSlideService ;
44+
4245 constructor ( ) {
4346 this . errorService = ErrorService . getInstance ( ) ;
4447 this . busyService = BusyService . getInstance ( ) ;
@@ -49,6 +52,8 @@ export class DeckEventsHandler {
4952
5053 this . deckService = DeckService . getInstance ( ) ;
5154 this . slideService = SlideService . getInstance ( ) ;
55+
56+ this . apiSlideService = ApiSlideService . getInstance ( ) ;
5257 }
5358
5459 init ( el : HTMLElement ) : Promise < void > {
@@ -457,15 +462,24 @@ export class DeckEventsHandler {
457462
458463 this . deckEditorService . watch ( ) . pipe ( take ( 1 ) ) . subscribe ( async ( deck : Deck ) => {
459464 if ( deck && deck . data ) {
460- await this . slideService . delete ( deck . id , slideId ) ;
465+ const slide : Slide = await this . slideService . get ( deck . id , slideId ) ;
466+
467+ if ( slide && slide . data ) {
468+ // 1. If needed, delete slide in the API
469+ await this . deleteApiSlide ( deck , slide ) ;
461470
462- // TODO: Ultimately should be moved in a Cloud Function
463- // Update list of slide in the deck
464- if ( deck . data . slides && deck . data . slides . indexOf ( slideId ) > - 1 ) {
465- deck . data . slides . splice ( deck . data . slides . indexOf ( slideId ) , 1 ) ;
471+ // TODO: no rush but ultimately maybe should we move step 2. and 3. below in a cloud function?
466472
467- const updatedDeck : Deck = await this . deckService . update ( deck ) ;
468- this . deckEditorService . next ( updatedDeck ) ;
473+ // 2. Delete the slide in Firestore
474+ await this . slideService . delete ( deck . id , slideId ) ;
475+
476+ // 3. Update list of slide in the deck (in Firestore)
477+ if ( deck . data . slides && deck . data . slides . indexOf ( slideId ) > - 1 ) {
478+ deck . data . slides . splice ( deck . data . slides . indexOf ( slideId ) , 1 ) ;
479+
480+ const updatedDeck : Deck = await this . deckService . update ( deck ) ;
481+ this . deckEditorService . next ( updatedDeck ) ;
482+ }
469483 }
470484 }
471485
@@ -483,6 +497,28 @@ export class DeckEventsHandler {
483497 } ) ;
484498 }
485499
500+ private deleteApiSlide ( deck : Deck , slide : Slide ) : Promise < void > {
501+ return new Promise < void > ( async ( resolve , reject ) => {
502+ if ( ! deck . data . api_id || deck . data . api_id === undefined || deck . data . api_id === '' ) {
503+ resolve ( ) ;
504+ return ;
505+ }
506+
507+ if ( ! slide . data . api_id || slide . data . api_id === undefined || slide . data . api_id === '' ) {
508+ resolve ( ) ;
509+ return ;
510+ }
511+
512+ try {
513+ await this . apiSlideService . delete ( deck . data . api_id , slide . data . api_id ) ;
514+
515+ resolve ( ) ;
516+ } catch ( err ) {
517+ reject ( err ) ;
518+ }
519+ } ) ;
520+ }
521+
486522 private deleteSlideElement ( ) : Promise < void > {
487523 return new Promise < void > ( async ( resolve ) => {
488524 const deck : HTMLElement = this . el . querySelector ( 'deckgo-deck' ) ;
0 commit comments