Skip to content
This repository was archived by the owner on Feb 6, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {debounce} from '@deckdeckgo/utils';

import {isSlide} from '../../../../../../../utils/deck/src';
import {deckSelector, slideTo} from '../../../../utils/editor/deck.utils';
import {SlideUtils} from '../../../../utils/editor/slide.utils';

@Component({
tag: 'app-slides-aside',
Expand Down Expand Up @@ -76,21 +77,17 @@ export class AppSlidesAside {
}

private async updateSlide(updatedSlide: HTMLElement) {
const slideIndex: number = this.slideIndex(updatedSlide);
const slideIndex: number = SlideUtils.slideIndex(updatedSlide);

this.slides = [...this.slides.map((slide: HTMLElement, index: number) => (slideIndex === index ? (updatedSlide.cloneNode(true) as HTMLElement) : slide))];
}

private async deleteSlide(deletedSlide: HTMLElement) {
const slideIndex: number = this.slideIndex(deletedSlide);
const slideIndex: number = SlideUtils.slideIndex(deletedSlide);

this.slides = [...this.slides.filter((_slide: HTMLElement, index: number) => slideIndex !== index)];
}

private slideIndex(slide: HTMLElement): number {
return Array.from(slide.parentNode.children).indexOf(slide);
}

private async updateAllSlides() {
const slides: NodeListOf<HTMLElement> = document.querySelectorAll(`${deckSelector} > *`);

Expand Down
38 changes: 6 additions & 32 deletions studio/src/app/handlers/editor/events/deck/deck-events.handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,8 @@ export class DeckEventsHandler {
}
};

private onSlidesDidLoad = async ($event: CustomEvent) => {
if ($event) {
await this.initSlideSize();
await this.slideToLastSlide();
}
private onSlidesDidLoad = async () => {
await this.initSlideSize();
};

private onDeckChange = async ($event: CustomEvent) => {
Expand Down Expand Up @@ -227,7 +224,7 @@ export class DeckEventsHandler {

// Because of the offline mode, is kind of handy to handle the list on the client side too.
// But maybe in the future it is something which could be moved to the cloud.
await this.updateDeckSlideList(deckStore.state.deck, persistedSlide);
await this.updateDeckSlideList(deckStore.state.deck, persistedSlide, slide);

busyStore.state.deckBusy = false;

Expand Down Expand Up @@ -299,7 +296,7 @@ export class DeckEventsHandler {
});
}

private updateDeckSlideList(deck: Deck, slide: Slide): Promise<void> {
private updateDeckSlideList(deck: Deck, slide: Slide, slideElement: HTMLElement): Promise<void> {
return new Promise<void>(async (resolve, reject) => {
try {
if (!deck && !deck.data) {
Expand All @@ -316,7 +313,8 @@ export class DeckEventsHandler {
deck.data.slides = [];
}

deck.data.slides.push(slide.id);
const slideIndex: number = SlideUtils.slideIndex(slideElement);
deck.data.slides = [...deck.data.slides.slice(0, slideIndex), slide.id, ...deck.data.slides.slice(slideIndex)];

const updatedDeck: Deck = await this.deckService.update(deck);
deckStore.state.deck = {...updatedDeck};
Expand Down Expand Up @@ -891,30 +889,6 @@ export class DeckEventsHandler {
};
}

private async slideToLastSlide(): Promise<void> {
const deck: HTMLDeckgoDeckElement = this.mainRef.querySelector('deckgo-deck');

if (!deck || !deck.children || deck.children.length <= 0) {
return;
}

const slides: Element[] = Array.from(deck.children).filter((slide: Element) => {
return isSlide(slide as HTMLElement);
});

if (!slides || slides.length <= 0) {
return;
}

const lastSlide: Element = slides[slides.length - 1];

if (!lastSlide || lastSlide.getAttribute('slide_id')) {
return;
}

await deck.slideTo(slides.length - 1);
}

async initSlideSize() {
const deck: HTMLDeckgoDeckElement = this.mainRef.querySelector('deckgo-deck');
await deck?.initSlideSize();
Expand Down
5 changes: 4 additions & 1 deletion studio/src/app/pages/editor/app-editor/app-editor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -332,9 +332,12 @@ export class AppEditor {
}

private async concatSlide(extraSlide: JSX.IntrinsicElements) {
this.slides = [...this.slides, extraSlide];
const slideIndex: number = this.activeIndex + 1;
this.slides = [...this.slides.slice(0, slideIndex), extraSlide, ...this.slides.slice(slideIndex)];

await ParseDeckSlotsUtils.stickLastChildren(this.mainRef);

await this.deckRef?.slideTo(slideIndex);
}

private async replaceSlide(slide: JSX.IntrinsicElements) {
Expand Down
4 changes: 4 additions & 0 deletions studio/src/app/utils/editor/slide.utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@ export class SlideUtils {
static slideScope(element: HTMLElement | undefined): SlideScope {
return element?.hasAttribute('scope') ? <SlideScope>element.getAttribute('scope') : SlideScope.DEFAULT;
}

static slideIndex(slide: HTMLElement): number {
return Array.from(slide.parentNode.children).indexOf(slide);
}
}