Skip to content
This repository was archived by the owner on Feb 6, 2024. It is now read-only.

Commit 7bfda88

Browse files
Merge pull request #273 from deckgo/create-slide-race-condition
fix(#254): possible (maybe) race condition referencing the deck while updating the list of slides
2 parents b24b544 + f3b5c4b commit 7bfda88

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

studio/src/app/handlers/editor/events/deck/deck-events.handler.tsx

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ export class DeckEventsHandler {
201201
const persistedSlide: Slide = await this.postSlide(deck, slide);
202202

203203
// TODO: Ultimately, when using reactive data, move this to a Cloud Function
204-
await this.updateDeckSlideList(persistedSlide);
204+
await this.updateDeckSlideList(deck, persistedSlide);
205205

206206
this.busyService.deckBusy(false);
207207

@@ -270,28 +270,29 @@ export class DeckEventsHandler {
270270
});
271271
}
272272

273-
private updateDeckSlideList(slide: Slide): Promise<void> {
273+
private updateDeckSlideList(deck: Deck, slide: Slide): Promise<void> {
274274
return new Promise<void>(async (resolve, reject) => {
275275
try {
276+
if (!deck && !deck.data) {
277+
reject('Missing deck to add the slide to the list');
278+
return;
279+
}
280+
276281
if (!slide || !slide.id || !slide.data) {
277282
reject('Missing slide to create or update the deck');
278283
return;
279284
}
280285

281-
this.deckEditorService.watch().pipe(take(1)).subscribe(async (deck: Deck) => {
282-
if (deck && deck.data) {
283-
if (!deck.data.slides || deck.data.slides.length <= 0) {
284-
deck.data.slides = [];
285-
}
286+
if (!deck.data.slides || deck.data.slides.length <= 0) {
287+
deck.data.slides = [];
288+
}
286289

287-
deck.data.slides.push(slide.id);
290+
deck.data.slides.push(slide.id);
288291

289-
const updatedDeck: Deck = await this.deckService.update(deck);
290-
this.deckEditorService.next(updatedDeck);
291-
}
292+
const updatedDeck: Deck = await this.deckService.update(deck);
293+
this.deckEditorService.next(updatedDeck);
292294

293-
resolve();
294-
});
295+
resolve();
295296
} catch (err) {
296297
reject(err);
297298
}

0 commit comments

Comments
 (0)