123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import { showSnackbar, hideSnackbar } from 'misago/reducers/snackbar';
- const HIDE_ANIMATION_LENGTH = 300;
- const MESSAGE_SHOW_LENGTH = 5000;
- export class Snackbar {
- init(store) {
- this._store = store;
- this._timeout = null;
- }
- alert(message, type) {
- if (this._timeout) {
- window.clearTimeout(this._timeout);
- this._store.dispatch(hideSnackbar());
- this._timeout = window.setTimeout(() => {
- this._timeout = null;
- this.alert(message, type);
- }, HIDE_ANIMATION_LENGTH);
- } else {
- this._store.dispatch(showSnackbar(message, type));
- this._timeout = window.setTimeout(() => {
- this._store.dispatch(hideSnackbar());
- this._timeout = null;
- }, MESSAGE_SHOW_LENGTH);
- }
- }
- // shorthands for message types
- info(message) {
- this.alert(message, 'info');
- }
- success(message) {
- this.alert(message, 'success');
- }
- warning(message) {
- this.alert(message, 'warning');
- }
- error(message) {
- this.alert(message, 'error');
- }
- // shorthand for api errors
- apiError(rejection) {
- let message = rejection.detail;
- if (!message) {
- if (rejection.status === 404) {
- message = gettext("Action link is invalid.");
- } else {
- message = gettext("Unknown error has occured.");
- }
- }
- if (rejection.status === 403 && message === "Permission denied") {
- message = gettext("You don't have permission to perform this action.");
- }
- this.error(message);
- }
- }
- export default new Snackbar();
|