mirror of
https://github.com/flarum/core.git
synced 2025-10-12 15:34:26 +02:00
73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
import Mithril from 'mithril';
|
|
import Alert, { AlertAttrs } from '../components/Alert';
|
|
|
|
/**
|
|
* Returned by `AlertManagerState.show`. Used to dismiss alerts.
|
|
*/
|
|
export type AlertIdentifier = number;
|
|
|
|
export interface AlertState {
|
|
componentClass: typeof Alert;
|
|
attrs: AlertAttrs;
|
|
children: Mithril.Children;
|
|
}
|
|
|
|
export default class AlertManagerState {
|
|
protected activeAlerts: { [id: number]: AlertState } = {};
|
|
protected alertId = 0;
|
|
|
|
getActiveAlerts() {
|
|
return this.activeAlerts;
|
|
}
|
|
|
|
/**
|
|
* Show an Alert in the alerts area.
|
|
*
|
|
* @returns The alert's ID, which can be used to dismiss the alert.
|
|
*/
|
|
show(children: Mithril.Children): AlertIdentifier;
|
|
show(attrs: AlertAttrs, children: Mithril.Children): AlertIdentifier;
|
|
show(componentClass: Alert, attrs: AlertAttrs, children: Mithril.Children): AlertIdentifier;
|
|
|
|
show(arg1: any, arg2?: any, arg3?: any) {
|
|
// Assigns variables as per the above signatures
|
|
let componentClass = Alert;
|
|
let attrs: AlertAttrs = {};
|
|
let children: Mithril.Children;
|
|
|
|
if (arguments.length == 1) {
|
|
children = arg1 as Mithril.Children;
|
|
} else if (arguments.length == 2) {
|
|
attrs = arg1 as AlertAttrs;
|
|
children = arg2 as Mithril.Children;
|
|
} else if (arguments.length == 3) {
|
|
componentClass = arg1 as typeof Alert;
|
|
attrs = arg2 as AlertAttrs;
|
|
children = arg3;
|
|
}
|
|
|
|
this.activeAlerts[++this.alertId] = { children, attrs, componentClass };
|
|
m.redraw();
|
|
|
|
return this.alertId;
|
|
}
|
|
|
|
/**
|
|
* Dismiss an alert.
|
|
*/
|
|
dismiss(key: AlertIdentifier): void {
|
|
if (!key || !(key in this.activeAlerts)) return;
|
|
|
|
delete this.activeAlerts[key];
|
|
m.redraw();
|
|
}
|
|
|
|
/**
|
|
* Clear all alerts.
|
|
*/
|
|
clear(): void {
|
|
this.activeAlerts = {};
|
|
m.redraw();
|
|
}
|
|
}
|