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

Commit 4f9a912

Browse files
feat(#20): when deck and slides are loaded, emit an event
1 parent 6e39736 commit 4f9a912

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

doc/features/extra.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ await deck.print();
3737

3838
| Event | Emitted value | Description |
3939
| -------------------------- |:-----------------:|:-----------------:|
40+
| slidesDidLoad | string[] | Emitted when the deck and all slides have loaded. Emit the an ordered list of all the tag names of the slides. |
4041
| slideNextDidChange | number | Emitted when the next slide has started. Emit the index of the new active slide. |
4142
| slidePrevDidChange | number | Emitted when the previous slide has ended. Emit the index of the new active slide. |
4243
| slideToChange | number | Emitted when a specific slide as selected. Emit the index of the new selected slide. |

src/components.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export namespace Components {
3333
'onSlidePrevDidChange'?: (event: CustomEvent<number>) => void;
3434
'onSlideToChange'?: (event: CustomEvent<number>) => void;
3535
'onSlideWillChange'?: (event: CustomEvent<number>) => void;
36+
'onSlidesDidLoad'?: (event: CustomEvent<string[]>) => void;
3637
'pager'?: boolean;
3738
'pagerPercentage'?: boolean;
3839
}

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export class DeckdeckgoDeck {
3434
@State()
3535
private length: number = 0;
3636

37+
@Event() slidesDidLoad: EventEmitter<string[]>;
3738
@Event() slideNextDidChange: EventEmitter<number>;
3839
@Event() slidePrevDidChange: EventEmitter<number>;
3940
@Event() slideToChange: EventEmitter<number>;
@@ -245,8 +246,24 @@ export class DeckdeckgoDeck {
245246
/* BEGIN: Slide length and active index */
246247

247248
@Listen('slideDidLoad')
248-
slideDidLoad() {
249+
async slideDidLoad() {
249250
this.length++;
251+
252+
await this.emitSlidesDidLoad();
253+
}
254+
255+
private emitSlidesDidLoad(): Promise<void> {
256+
return new Promise<void>((resolve) => {
257+
const definedSlides: HTMLCollection = this.el.children;
258+
const loadedSlides: NodeListOf<HTMLElement> = this.el.querySelectorAll('.deckgo-slide-container');
259+
260+
if (definedSlides && loadedSlides && loadedSlides.length === definedSlides.length && definedSlides.length === this.length) {
261+
const orderedSlidesTagNames: string[] = Array.from(loadedSlides).map((slide: HTMLElement) => { return slide.tagName});
262+
this.slidesDidLoad.emit(orderedSlidesTagNames);
263+
}
264+
265+
resolve();
266+
});
250267
}
251268

252269
@Method()

0 commit comments

Comments
 (0)