1
0
mirror of https://github.com/flarum/core.git synced 2025-07-30 21:20:24 +02:00

fix: deleting a discussion from the profile does not visually remove it (#3799)

Signed-off-by: Sami Mazouz <sychocouldy@gmail.com>
This commit is contained in:
Sami Mazouz
2023-04-19 12:37:30 +01:00
committed by GitHub
parent c0af41c305
commit 297a2d8c5c
3 changed files with 35 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ import Session from './Session';
import Store from './Store';
import BasicEditorDriver from './utils/BasicEditorDriver';
import evented from './utils/evented';
import EventEmitter from './utils/EventEmitter';
import KeyboardNavigatable from './utils/KeyboardNavigatable';
import liveHumanTimes from './utils/liveHumanTimes';
import ItemList from './utils/ItemList';
@@ -97,6 +98,7 @@ export default {
Store: Store,
'utils/BasicEditorDriver': BasicEditorDriver,
'utils/evented': evented,
'utils/EventEmitter': EventEmitter,
'utils/KeyboardNavigatable': KeyboardNavigatable,
'utils/liveHumanTimes': liveHumanTimes,
'utils/ItemList': ItemList,

View File

@@ -0,0 +1,23 @@
export default class EventEmitter {
protected events: any = {};
public constructor() {
this.events = {};
}
public on(event: string, listener: Function): EventEmitter {
if (!this.events[event]) {
this.events[event] = [];
}
this.events[event].push(listener);
return this;
}
public emit(event: string, ...args: any[]): void {
if (this.events[event]) {
this.events[event].forEach((listener: Function) => listener(...args));
}
}
}

View File

@@ -2,16 +2,22 @@ import app from '../../forum/app';
import PaginatedListState, { Page, PaginatedListParams, PaginatedListRequestParams } from '../../common/states/PaginatedListState';
import Discussion from '../../common/models/Discussion';
import { ApiResponsePlural } from '../../common/Store';
import EventEmitter from '../../common/utils/EventEmitter';
export interface DiscussionListParams extends PaginatedListParams {
sort?: string;
}
const globalEventEmitter = new EventEmitter();
export default class DiscussionListState<P extends DiscussionListParams = DiscussionListParams> extends PaginatedListState<Discussion, P> {
protected extraDiscussions: Discussion[] = [];
protected eventEmitter: EventEmitter;
constructor(params: P, page: number = 1) {
super(params, page, 20);
this.eventEmitter = globalEventEmitter.on('discussion.deleted', this.deleteDiscussion.bind(this));
}
get type(): string {
@@ -77,6 +83,10 @@ export default class DiscussionListState<P extends DiscussionListParams = Discus
}
removeDiscussion(discussion: Discussion): void {
this.eventEmitter.emit('discussion.deleted', discussion);
}
deleteDiscussion(discussion: Discussion): void {
for (const page of this.pages) {
const index = page.items.indexOf(discussion);