mirror of
https://github.com/flarum/core.git
synced 2025-08-04 15:37:51 +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 Store from './Store';
|
||||||
import BasicEditorDriver from './utils/BasicEditorDriver';
|
import BasicEditorDriver from './utils/BasicEditorDriver';
|
||||||
import evented from './utils/evented';
|
import evented from './utils/evented';
|
||||||
|
import EventEmitter from './utils/EventEmitter';
|
||||||
import KeyboardNavigatable from './utils/KeyboardNavigatable';
|
import KeyboardNavigatable from './utils/KeyboardNavigatable';
|
||||||
import liveHumanTimes from './utils/liveHumanTimes';
|
import liveHumanTimes from './utils/liveHumanTimes';
|
||||||
import ItemList from './utils/ItemList';
|
import ItemList from './utils/ItemList';
|
||||||
@@ -97,6 +98,7 @@ export default {
|
|||||||
Store: Store,
|
Store: Store,
|
||||||
'utils/BasicEditorDriver': BasicEditorDriver,
|
'utils/BasicEditorDriver': BasicEditorDriver,
|
||||||
'utils/evented': evented,
|
'utils/evented': evented,
|
||||||
|
'utils/EventEmitter': EventEmitter,
|
||||||
'utils/KeyboardNavigatable': KeyboardNavigatable,
|
'utils/KeyboardNavigatable': KeyboardNavigatable,
|
||||||
'utils/liveHumanTimes': liveHumanTimes,
|
'utils/liveHumanTimes': liveHumanTimes,
|
||||||
'utils/ItemList': ItemList,
|
'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 PaginatedListState, { Page, PaginatedListParams, PaginatedListRequestParams } from '../../common/states/PaginatedListState';
|
||||||
import Discussion from '../../common/models/Discussion';
|
import Discussion from '../../common/models/Discussion';
|
||||||
import { ApiResponsePlural } from '../../common/Store';
|
import { ApiResponsePlural } from '../../common/Store';
|
||||||
|
import EventEmitter from '../../common/utils/EventEmitter';
|
||||||
|
|
||||||
export interface DiscussionListParams extends PaginatedListParams {
|
export interface DiscussionListParams extends PaginatedListParams {
|
||||||
sort?: string;
|
sort?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const globalEventEmitter = new EventEmitter();
|
||||||
|
|
||||||
export default class DiscussionListState<P extends DiscussionListParams = DiscussionListParams> extends PaginatedListState<Discussion, P> {
|
export default class DiscussionListState<P extends DiscussionListParams = DiscussionListParams> extends PaginatedListState<Discussion, P> {
|
||||||
protected extraDiscussions: Discussion[] = [];
|
protected extraDiscussions: Discussion[] = [];
|
||||||
|
protected eventEmitter: EventEmitter;
|
||||||
|
|
||||||
constructor(params: P, page: number = 1) {
|
constructor(params: P, page: number = 1) {
|
||||||
super(params, page, 20);
|
super(params, page, 20);
|
||||||
|
|
||||||
|
this.eventEmitter = globalEventEmitter.on('discussion.deleted', this.deleteDiscussion.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
get type(): string {
|
get type(): string {
|
||||||
@@ -77,6 +83,10 @@ export default class DiscussionListState<P extends DiscussionListParams = Discus
|
|||||||
}
|
}
|
||||||
|
|
||||||
removeDiscussion(discussion: Discussion): void {
|
removeDiscussion(discussion: Discussion): void {
|
||||||
|
this.eventEmitter.emit('discussion.deleted', discussion);
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteDiscussion(discussion: Discussion): void {
|
||||||
for (const page of this.pages) {
|
for (const page of this.pages) {
|
||||||
const index = page.items.indexOf(discussion);
|
const index = page.items.indexOf(discussion);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user