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:
@@ -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,
|
||||
|
23
framework/core/js/src/common/utils/EventEmitter.ts
Normal file
23
framework/core/js/src/common/utils/EventEmitter.ts
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user