Home Reference Source

js/template/ProgressButtonTemplate.js

import ProgressButtonController from '~/controllers/ProgressButtonController';
import ButtonTemplate from '~/template/ButtonTemplate';
import ErrorManager from '~/helpers/ErrorManager';

/**
 * A loading button thing
 */
export default class ProgressButtonTemplate extends ButtonTemplate {
    /**
     * @param {Object} options See {@link ButtonTemplate}
     */
    constructor({ ...options }) {
        super(options);

        /** @type {ProgressButtonController} */
        this.controller = new ProgressButtonController(this.underlyingNode);
    }

    /** @override */
    async trigger() {
        // Don't trigger if already loading
        if (this.controller.isLoading) return;

        this.controller.setLoadingState(true);

        try {
            await super.trigger();
        } catch(error) {
            ErrorManager.report(error)
        }

        this.controller.setLoadingState(false);
    }
}