clr-angular-static-fix
Version:
1. Install Clarity Icons package through npm:
99 lines (90 loc) • 3.65 kB
text/typescript
/*
* Copyright (c) 2016-2018 VMware, Inc. All Rights Reserved.
* This software is released under MIT license.
* The full license information can be found in LICENSE in the root directory of this project.
*/
import { animate, keyframes, style, transition, trigger } from '@angular/animations';
import { Component, ElementRef, EventEmitter, Output, Renderer2 } from '@angular/core';
import { ClrLoadingState } from '../../utils/loading/loading';
import { LoadingListener } from '../../utils/loading/loading-listener';
export class ClrLoadingButton implements LoadingListener {
public buttonState = ClrLoadingState;
public state: ClrLoadingState = ClrLoadingState.DEFAULT;
public clrLoadingChange: EventEmitter<ClrLoadingState> = new EventEmitter<ClrLoadingState>(false);
constructor(private el: ElementRef, private renderer: Renderer2) {}
loadingStateChange(state: ClrLoadingState): void {
this.state = state;
switch (state) {
case ClrLoadingState.DEFAULT:
this.renderer.removeStyle(this.el.nativeElement, 'width');
this.renderer.removeAttribute(this.el.nativeElement, 'disabled');
break;
case ClrLoadingState.LOADING:
this.setExplicitButtonWidth();
this.renderer.setAttribute(this.el.nativeElement, 'disabled', '');
break;
case ClrLoadingState.SUCCESS:
this.setExplicitButtonWidth();
setTimeout(() => {
this.loadingStateChange(ClrLoadingState.DEFAULT);
}, 1000);
break;
case ClrLoadingState.ERROR:
this.loadingStateChange(ClrLoadingState.DEFAULT);
break;
default:
break;
}
this.clrLoadingChange.emit(state);
}
private setExplicitButtonWidth() {
if (getComputedStyle) {
const width = getComputedStyle(this.el.nativeElement).getPropertyValue('width');
this.renderer.setStyle(this.el.nativeElement, 'width', width);
}
}
}