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

Commit 5d80db4

Browse files
feat: add a new function to query the slide definitions which could be used to update the remote connection
1 parent 4f0bc3e commit 5d80db4

File tree

1 file changed

+50
-21
lines changed

1 file changed

+50
-21
lines changed

webcomponents/core/src/components/deck/deckdeckgo-deck/deckdeckgo-deck.tsx

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -402,39 +402,68 @@ export class DeckdeckgoDeck {
402402
}
403403

404404
private afterSlidesDidLoad(): Promise<void> {
405+
return new Promise<void>(async (resolve) => {
406+
const slidesDefinition: DeckdeckgoSlideDefinition[] = await this.getSlidesDefinition();
407+
408+
if (slidesDefinition && slidesDefinition.length > 0) {
409+
this.slidesDidLoad.emit(slidesDefinition);
410+
411+
await this.onAllSlidesDidLoadLazyAndClone();
412+
}
413+
414+
resolve();
415+
});
416+
}
417+
418+
private onAllSlidesDidLoadLazyAndClone(): Promise<void> {
405419
return new Promise<void>(async (resolve) => {
406420
const filteredSlides: HTMLElement[] = await this.getDefinedFilteredSlides();
407421

422+
const promises: Promise<void>[] = [];
423+
promises.push(this.lazyLoadFirstSlides());
424+
promises.push(DeckdeckgoDeckBackgroundUtils.cloneSlots(this.el, filteredSlides, 'actions'));
425+
promises.push(DeckdeckgoDeckBackgroundUtils.cloneAndLoadBackground(this.el, filteredSlides, this.cloneBackground));
426+
427+
await Promise.all(promises);
428+
429+
resolve();
430+
});
431+
}
432+
433+
@Method()
434+
getSlidesDefinition(): Promise<DeckdeckgoSlideDefinition[]> {
435+
return new Promise<DeckdeckgoSlideDefinition[] | null>(async (resolve) => {
408436
const loadedSlides: NodeListOf<HTMLElement> = this.el.querySelectorAll('.deckgo-slide-container');
409437

438+
if (!loadedSlides || loadedSlides.length <= 0) {
439+
resolve(null);
440+
return;
441+
}
442+
443+
const filteredSlides: HTMLElement[] = await this.getDefinedFilteredSlides();
444+
410445
const definedSlidesLength: number = filteredSlides ? filteredSlides.length : 0;
411446

412447
// Are all slides loaded?
413-
if (filteredSlides && loadedSlides && loadedSlides.length === definedSlidesLength && definedSlidesLength === this.length) {
414-
const orderedSlidesTagNames: DeckdeckgoSlideDefinition[] = [];
415-
416-
Array.from(loadedSlides).forEach((slide: HTMLElement) => {
417-
const notes: HTMLElement = slide.querySelector('[slot=\'notes\']');
418-
const title: HTMLElement = slide.querySelector('[slot=\'title\']');
419-
420-
orderedSlidesTagNames.push({
421-
name: slide.tagName,
422-
title: title ? title.innerHTML : null,
423-
notes: notes ? notes.innerHTML : null
424-
});
425-
});
448+
if (loadedSlides.length !== definedSlidesLength) {
449+
resolve(null);
450+
return;
451+
}
426452

427-
this.slidesDidLoad.emit(orderedSlidesTagNames);
453+
const orderedSlidesTagNames: DeckdeckgoSlideDefinition[] = [];
428454

429-
const promises: Promise<void>[] = [];
430-
promises.push(this.lazyLoadFirstSlides());
431-
promises.push(DeckdeckgoDeckBackgroundUtils.cloneSlots(this.el, filteredSlides, 'actions'));
432-
promises.push(DeckdeckgoDeckBackgroundUtils.cloneAndLoadBackground(this.el, filteredSlides, this.cloneBackground));
455+
Array.from(loadedSlides).forEach((slide: HTMLElement) => {
456+
const notes: HTMLElement = slide.querySelector('[slot=\'notes\']');
457+
const title: HTMLElement = slide.querySelector('[slot=\'title\']');
433458

434-
await Promise.all(promises);
435-
}
459+
orderedSlidesTagNames.push({
460+
name: slide.tagName,
461+
title: title ? title.innerHTML : null,
462+
notes: notes ? notes.innerHTML : null
463+
});
464+
});
436465

437-
resolve();
466+
resolve(orderedSlidesTagNames);
438467
});
439468
}
440469

0 commit comments

Comments
 (0)