~sirn/fanboi2

ref: 5b482cfc1bfb0bb1e89715cb57c7bac864391768 fanboi2/assets/app/javascripts/utils/loading.ts -rw-r--r-- 707 bytes
5b482cfcKridsada Thanabulpong 0.30.0 3 years ago
                                                                                
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
27
28
import {addClass, removeClass} from './elements';


export class LoadingState {
    isLoading: boolean = false;

    bind(fn: (() => Promise<any>), buttonElement?: Element): void {
        if (!this.isLoading) {
            this.isLoading = true;

            if (buttonElement) {
                addClass(buttonElement, ['js-button-loading']);
            }

            fn().
                then(() => { this.unbind(buttonElement); }).
                catch(() => { this.unbind(buttonElement); });
        }
    }

    private unbind(buttonElement?: Element) {
        this.isLoading = false;

        if (buttonElement) {
            removeClass(buttonElement, ['js-button-loading']);
        }
    }
}