~sirn/fanboi2

ref: a68873a108d20a6a49a1b6caf374bfb2cf6a94fe fanboi2/assets/app/javascripts/utils/loading.ts -rw-r--r-- 780 bytes
a68873a1Kridsada Thanabulpong Coding style cleanups and setup pre-commit hooks (#42) 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
29
30
31
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"]);
        }
    }
}