@@ -149,7 +149,6 @@ export class DeckEventsHandler {
149149
150150 if ( slide . getAttribute ( 'slide_id' ) ) {
151151 // !isNew
152-
153152 this . busyService . slideEditable ( slide ) ;
154153
155154 resolve ( ) ;
@@ -158,40 +157,77 @@ export class DeckEventsHandler {
158157
159158 this . busyService . deckBusy ( true ) ;
160159
161- const slidePost : Slide = {
162- template : this . getSlideTemplate ( slide )
163- } ;
160+ this . deckEditorService . watch ( ) . pipe ( take ( 1 ) ) . subscribe ( async ( deck : Deck ) => {
161+ if ( ! deck ) {
162+ deck = await this . createDeck ( ) ;
163+ }
164164
165- const content : string = await this . cleanSlideContent ( slide . innerHTML ) ;
166- if ( content && content . length > 0 ) {
167- slidePost . content = content
168- }
165+ const persistedSlide : Slide = await this . postSlide ( deck , slide ) ;
166+
167+ await this . updateDeckSlideList ( persistedSlide ) ;
169168
170- const persistedSlide : Slide = await this . slideService . post ( slidePost ) ;
169+ this . busyService . deckBusy ( false ) ;
170+
171+ resolve ( ) ;
172+ } ) ;
173+ } catch ( err ) {
174+ this . errorService . error ( err ) ;
175+ this . busyService . deckBusy ( false ) ;
176+ resolve ( ) ;
177+ }
178+ } ) ;
179+ }
180+
181+ private postSlide ( deck : Deck , slide : HTMLElement ) : Promise < Slide > {
182+ return new Promise < Slide > ( async ( resolve ) => {
183+ const slidePost : Slide = {
184+ template : this . getSlideTemplate ( slide )
185+ } ;
186+
187+ const content : string = await this . cleanSlideContent ( slide . innerHTML ) ;
188+ if ( content && content . length > 0 ) {
189+ slidePost . content = content
190+ }
191+
192+ const persistedSlide : Slide = await this . slideService . post ( deck . id , slidePost ) ;
193+
194+ if ( persistedSlide && persistedSlide . id ) {
195+ slide . setAttribute ( 'slide_id' , persistedSlide . id ) ;
171196
172197 this . busyService . slideEditable ( slide ) ;
198+ }
199+
200+ resolve ( persistedSlide ) ;
201+ } ) ;
202+ }
173203
174- if ( persistedSlide && persistedSlide . id ) {
175- slide . setAttribute ( 'slide_id' , persistedSlide . id ) ;
204+ private createDeck ( ) : Promise < Deck > {
205+ return new Promise < Deck > ( async ( resolve , reject ) => {
206+ try {
207+ this . userService . watch ( ) . pipe ( filter ( ( user : User ) => user !== null && user !== undefined ) , take ( 1 ) ) . subscribe ( async ( user : User ) => {
208+ const deck : Deck = {
209+ slides : [ ] ,
210+ name : `Presentation ${ await Utils . getNow ( ) } ` ,
211+ owner_id : user . id
212+ } ;
176213
177- await this . createOrUpdateDeckSlideList ( persistedSlide ) ;
178- }
214+ const persistedDeck : Deck = await this . deckService . post ( deck ) ;
215+ this . deckEditorService . next ( persistedDeck ) ;
179216
180- this . busyService . deckBusy ( false ) ;
217+ await this . updateNavigation ( persistedDeck ) ;
181218
182- resolve ( ) ;
219+ resolve ( persistedDeck ) ;
220+ } ) ;
183221 } catch ( err ) {
184- this . errorService . error ( err ) ;
185- this . busyService . deckBusy ( false ) ;
186- resolve ( ) ;
222+ reject ( err ) ;
187223 }
188224 } ) ;
189225 }
190226
191- private createOrUpdateDeckSlideList ( slide : Slide ) : Promise < void > {
227+ private updateDeckSlideList ( slide : Slide ) : Promise < void > {
192228 return new Promise < void > ( async ( resolve , reject ) => {
193229 try {
194- if ( ! slide ) {
230+ if ( ! slide || ! slide . id ) {
195231 reject ( 'Missing slide to create or update the deck' ) ;
196232 return ;
197233 }
@@ -206,19 +242,6 @@ export class DeckEventsHandler {
206242
207243 const updatedDeck : Deck = await this . deckService . put ( deck ) ;
208244 this . deckEditorService . next ( updatedDeck ) ;
209- } else {
210- this . userService . watch ( ) . pipe ( filter ( ( user : User ) => user !== null && user !== undefined ) , take ( 1 ) ) . subscribe ( async ( user : User ) => {
211- deck = {
212- slides : [ slide . id ] ,
213- name : `Presentation ${ await Utils . getNow ( ) } ` ,
214- owner_id : user . id
215- } ;
216-
217- const persistedDeck : Deck = await this . deckService . post ( deck ) ;
218- this . deckEditorService . next ( persistedDeck ) ;
219-
220- await this . updateNavigation ( persistedDeck ) ;
221- } ) ;
222245 }
223246
224247 resolve ( ) ;
@@ -350,11 +373,15 @@ export class DeckEventsHandler {
350373 slideUpdate . attributes = attributes ;
351374 }
352375
353- await this . slideService . put ( slideUpdate ) ;
376+ this . deckEditorService . watch ( ) . pipe ( take ( 1 ) ) . subscribe ( async ( deck : Deck ) => {
377+ if ( deck ) {
378+ await this . slideService . put ( deck . id , slideUpdate ) ;
379+ }
354380
355- this . busyService . deckBusy ( false ) ;
381+ this . busyService . deckBusy ( false ) ;
356382
357- resolve ( ) ;
383+ resolve ( ) ;
384+ } ) ;
358385 } catch ( err ) {
359386 this . errorService . error ( err ) ;
360387 this . busyService . deckBusy ( false ) ;
@@ -379,15 +406,17 @@ export class DeckEventsHandler {
379406
380407 const slideId : string = slide . getAttribute ( 'slide_id' ) ;
381408
382- await this . slideService . delete ( slideId ) ;
383-
384409 this . deckEditorService . watch ( ) . pipe ( take ( 1 ) ) . subscribe ( async ( deck : Deck ) => {
385- // Update list of slide in the deck
386- if ( deck && deck . slides && deck . slides . indexOf ( slideId ) > - 1 ) {
387- deck . slides . splice ( deck . slides . indexOf ( slideId ) , 1 ) ;
410+ if ( deck ) {
411+ await this . slideService . delete ( deck . id , slideId ) ;
388412
389- const updatedDeck : Deck = await this . deckService . put ( deck ) ;
390- this . deckEditorService . next ( updatedDeck ) ;
413+ // Update list of slide in the deck
414+ if ( deck . slides && deck . slides . indexOf ( slideId ) > - 1 ) {
415+ deck . slides . splice ( deck . slides . indexOf ( slideId ) , 1 ) ;
416+
417+ const updatedDeck : Deck = await this . deckService . put ( deck ) ;
418+ this . deckEditorService . next ( updatedDeck ) ;
419+ }
391420 }
392421
393422 await this . deleteSlideElement ( ) ;
0 commit comments