aboutsummaryrefslogtreecommitdiffstats
path: root/packages/instant/src/util/error_flasher.ts
blob: 068c12fe29d45e42e09a1eda18d7481099b3ff03 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import { Dispatch } from 'redux';

import { Action, actions } from '../redux/actions';

class ErrorFlasher {
    private _timeoutId?: number;
    public flashNewErrorMessage(dispatch: Dispatch<Action>, errorMessage?: string, delayMs: number = 7000): void {
        this._clearTimeout();
        // dispatch new message
        dispatch(actions.setErrorMessage(errorMessage || 'Something went wrong...'));
        this._timeoutId = window.setTimeout(() => {
            dispatch(actions.hideError());
        }, delayMs);
    }
    public clearError(dispatch: Dispatch<Action>): void {
        this._clearTimeout();
        dispatch(actions.hideError());
    }
    private _clearTimeout(): void {
        if (this._timeoutId) {
            window.clearTimeout(this._timeoutId);
        }
    }
}

export const errorFlasher = new ErrorFlasher();