|
1 | | -import {Component, Element, State, h} from '@stencil/core'; |
| 1 | +import {Component, Element, State, h, Listen} from '@stencil/core'; |
2 | 2 |
|
3 | 3 | import {Subscription} from 'rxjs'; |
4 | 4 |
|
@@ -104,6 +104,20 @@ export class AppMenu { |
104 | 104 | }); |
105 | 105 | } |
106 | 106 |
|
| 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 | + |
107 | 121 | private updateDeckList(deck: Deck): Promise<void> { |
108 | 122 | return new Promise<void>((resolve) => { |
109 | 123 | if (!deck || !deck.id || !deck.data || !deck.data.name) { |
@@ -135,6 +149,30 @@ export class AppMenu { |
135 | 149 | }); |
136 | 150 | } |
137 | 151 |
|
| 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 | + |
138 | 176 | private async filterDecksOnChange(e: CustomEvent) { |
139 | 177 | if (e && e.detail) { |
140 | 178 | await this.filterDecks(e.detail.value); |
@@ -282,7 +320,7 @@ export class AppMenu { |
282 | 320 | this.filteredDecks.map((deck: Deck) => { |
283 | 321 | const url: string = `/editor/${deck.id}`; |
284 | 322 |
|
285 | | - return <ion-item href={url} routerDirection="root"> |
| 323 | + return <ion-item href={url} routerDirection="root" key={deck.id}> |
286 | 324 | <ion-icon name="book" slot="start"></ion-icon> |
287 | 325 | <ion-label>{deck.data.name}</ion-label> |
288 | 326 | </ion-item> |
|
0 commit comments