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

Commit 696a74a

Browse files
feat(#322): remove deck from list if deleted
1 parent 71f46ff commit 696a74a

File tree

1 file changed

+40
-2
lines changed

1 file changed

+40
-2
lines changed

studio/src/app/components/core/app-menu/app-menu.tsx

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Component, Element, State, h} from '@stencil/core';
1+
import {Component, Element, State, h, Listen} from '@stencil/core';
22

33
import {Subscription} from 'rxjs';
44

@@ -104,6 +104,20 @@ export class AppMenu {
104104
});
105105
}
106106

107+
@Listen('deckDeleted', {target: 'window'})
108+
async onDeckDeleted($event: CustomEvent) {
109+
if (!$event || !$event.detail || $event.detail === undefined || $event.detail === '') {
110+
return;
111+
}
112+
113+
const deckId: string = $event.detail;
114+
115+
await this.removeFromDeckList(deckId);
116+
117+
const filter: string = await this.getCurrentFilter();
118+
await this.filterDecks(filter);
119+
}
120+
107121
private updateDeckList(deck: Deck): Promise<void> {
108122
return new Promise<void>((resolve) => {
109123
if (!deck || !deck.id || !deck.data || !deck.data.name) {
@@ -135,6 +149,30 @@ export class AppMenu {
135149
});
136150
}
137151

152+
public removeFromDeckList(deckId: string): Promise<void> {
153+
return new Promise<void>((resolve) => {
154+
if (!this.decks || this.decks.length <= 0) {
155+
resolve();
156+
return;
157+
}
158+
159+
const index: number = this.decks.findIndex((filteredDeck: Deck) => {
160+
return filteredDeck.id === deckId;
161+
});
162+
163+
if (index < 0) {
164+
resolve();
165+
return;
166+
}
167+
168+
this.decks.splice(index, 1);
169+
170+
this.decks = [...this.decks];
171+
172+
resolve();
173+
});
174+
}
175+
138176
private async filterDecksOnChange(e: CustomEvent) {
139177
if (e && e.detail) {
140178
await this.filterDecks(e.detail.value);
@@ -282,7 +320,7 @@ export class AppMenu {
282320
this.filteredDecks.map((deck: Deck) => {
283321
const url: string = `/editor/${deck.id}`;
284322

285-
return <ion-item href={url} routerDirection="root">
323+
return <ion-item href={url} routerDirection="root" key={deck.id}>
286324
<ion-icon name="book" slot="start"></ion-icon>
287325
<ion-label>{deck.data.name}</ion-label>
288326
</ion-item>

0 commit comments

Comments
 (0)