From 71f46ffd226f7273d47389e4a4a894b168ae378b Mon Sep 17 00:00:00 2001 From: peterpeterparker Date: Sun, 8 Sep 2019 19:51:03 +0200 Subject: [PATCH 1/2] feat(#322): remove deck from list if deleted --- .../app-delete-deck-action.tsx | 4 +- .../core/app-dashboard/app-dashboard.scss | 11 ----- .../core/app-dashboard/app-dashboard.tsx | 47 +++++++++---------- studio/src/components.d.ts | 2 +- 4 files changed, 26 insertions(+), 38 deletions(-) diff --git a/studio/src/app/components/core/app-delete-deck-action/app-delete-deck-action.tsx b/studio/src/app/components/core/app-delete-deck-action/app-delete-deck-action.tsx index a56b8ccee..d23cf9c50 100644 --- a/studio/src/app/components/core/app-delete-deck-action/app-delete-deck-action.tsx +++ b/studio/src/app/components/core/app-delete-deck-action/app-delete-deck-action.tsx @@ -18,7 +18,7 @@ export class AppDeleteDeckAction { private deckService: DeckService; - @Event() deckDeleted: EventEmitter; + @Event() deckDeleted: EventEmitter; constructor() { this.deckService = DeckService.getInstance(); @@ -61,7 +61,7 @@ export class AppDeleteDeckAction { await this.deckService.delete(this.deck.id); - this.deckDeleted.emit(); + this.deckDeleted.emit(this.deck.id); await loading.dismiss(); diff --git a/studio/src/app/pages/core/app-dashboard/app-dashboard.scss b/studio/src/app/pages/core/app-dashboard/app-dashboard.scss index f87df8ff9..fb3073014 100644 --- a/studio/src/app/pages/core/app-dashboard/app-dashboard.scss +++ b/studio/src/app/pages/core/app-dashboard/app-dashboard.scss @@ -62,17 +62,6 @@ app-dashboard { height: 38vh; } - &.deleted:after { - content: ""; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(var(--ion-color-light-rgb), 0.8); - cursor: initial; - } - app-delete-deck-action { position: absolute; top: 0; diff --git a/studio/src/app/pages/core/app-dashboard/app-dashboard.tsx b/studio/src/app/pages/core/app-dashboard/app-dashboard.tsx index bb7b6d212..4e273f7f4 100644 --- a/studio/src/app/pages/core/app-dashboard/app-dashboard.tsx +++ b/studio/src/app/pages/core/app-dashboard/app-dashboard.tsx @@ -19,7 +19,6 @@ interface DeckAndFirstSlide { slide: any; style: any; background: any; - deleted: boolean; } @Component({ @@ -101,8 +100,7 @@ export class AppDashboard { deck: deck, slide: element, style: style, - background: background, - deleted: false + background: background }); } catch (err) { resolve(undefined); @@ -166,10 +164,6 @@ export class AppDashboard { return; } - if (deck.deleted) { - return; - } - const url: string = `/editor/${deck.deck.id}`; this.navService.navigate({ @@ -178,14 +172,30 @@ export class AppDashboard { }); } - private displayDeckDeleted(deck: DeckAndFirstSlide): Promise { + private removeDeletedDeck($event: CustomEvent): Promise { return new Promise(async (resolve) => { - if (!deck || !deck.deck) { + if (!$event || !$event.detail || $event.detail === undefined || $event.detail === '') { + resolve(); + return; + } + + const deckId: string = $event.detail; + + if (!this.decks || this.decks.length < 0) { + resolve(); + return; + } + + const index: number = this.decks.findIndex((matchDeck: DeckAndFirstSlide) => { + return matchDeck.deck && matchDeck.deck.id === deckId + }); + + if (index < 0) { resolve(); return; } - deck.deleted = true; + this.decks.splice(index, 1); await this.filterDecks(null); @@ -216,8 +226,7 @@ export class AppDashboard { return

Oh, hi! Good to have you.

- this.signIn()}>Sign in - to access your presentations.

+ this.signIn()}>Sign in to access to your presentations.

} @@ -249,12 +258,10 @@ export class AppDashboard { private renderDecksCards() { return ( this.filteredDecks.map((deck: DeckAndFirstSlide) => { - const deckClass: string = `item ion-no-margin ${deck.deleted ? 'deleted' : ''}`; - - return this.navigateDeck(deck)}> + return this.navigateDeck(deck)} key={deck.deck.id}> {this.renderDeck(deck)} - {this.renderDeckDeleteAction(deck)} + this.removeDeletedDeck($event)}> ; }) ); @@ -271,12 +278,4 @@ export class AppDashboard { } } - private renderDeckDeleteAction(deck: DeckAndFirstSlide) { - if (!deck || deck.deleted) { - return undefined; - } else { - return this.displayDeckDeleted(deck)}> - } - } - } diff --git a/studio/src/components.d.ts b/studio/src/components.d.ts index 685d68ffa..8dcd98a13 100644 --- a/studio/src/components.d.ts +++ b/studio/src/components.d.ts @@ -606,7 +606,7 @@ declare namespace LocalJSX { } interface AppDeleteDeckAction extends JSXBase.HTMLAttributes { 'deck'?: Deck; - 'onDeckDeleted'?: (event: CustomEvent) => void; + 'onDeckDeleted'?: (event: CustomEvent) => void; } interface AppDeveloper extends JSXBase.HTMLAttributes {} interface AppEditor extends JSXBase.HTMLAttributes { From 696a74a05689b6a59590a7a42a69d1d9bc1a423c Mon Sep 17 00:00:00 2001 From: peterpeterparker Date: Sun, 8 Sep 2019 20:07:48 +0200 Subject: [PATCH 2/2] feat(#322): remove deck from list if deleted --- .../app/components/core/app-menu/app-menu.tsx | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/studio/src/app/components/core/app-menu/app-menu.tsx b/studio/src/app/components/core/app-menu/app-menu.tsx index 8aecb9e35..acf01f323 100644 --- a/studio/src/app/components/core/app-menu/app-menu.tsx +++ b/studio/src/app/components/core/app-menu/app-menu.tsx @@ -1,4 +1,4 @@ -import {Component, Element, State, h} from '@stencil/core'; +import {Component, Element, State, h, Listen} from '@stencil/core'; import {Subscription} from 'rxjs'; @@ -104,6 +104,20 @@ export class AppMenu { }); } + @Listen('deckDeleted', {target: 'window'}) + async onDeckDeleted($event: CustomEvent) { + if (!$event || !$event.detail || $event.detail === undefined || $event.detail === '') { + return; + } + + const deckId: string = $event.detail; + + await this.removeFromDeckList(deckId); + + const filter: string = await this.getCurrentFilter(); + await this.filterDecks(filter); + } + private updateDeckList(deck: Deck): Promise { return new Promise((resolve) => { if (!deck || !deck.id || !deck.data || !deck.data.name) { @@ -135,6 +149,30 @@ export class AppMenu { }); } + public removeFromDeckList(deckId: string): Promise { + return new Promise((resolve) => { + if (!this.decks || this.decks.length <= 0) { + resolve(); + return; + } + + const index: number = this.decks.findIndex((filteredDeck: Deck) => { + return filteredDeck.id === deckId; + }); + + if (index < 0) { + resolve(); + return; + } + + this.decks.splice(index, 1); + + this.decks = [...this.decks]; + + resolve(); + }); + } + private async filterDecksOnChange(e: CustomEvent) { if (e && e.detail) { await this.filterDecks(e.detail.value); @@ -282,7 +320,7 @@ export class AppMenu { this.filteredDecks.map((deck: Deck) => { const url: string = `/editor/${deck.id}`; - return + return {deck.data.name}