Skip to content

meysamsahragard/ngx-promise-buttons

 
 

Repository files navigation

npm version Build Status Coverage Status MIT license

ngx-promise-buttons is a simple module that let's you add a loading indicator to a button of your choice. Check out the demo!

Bug-reports or feature request as well as any other kind of feedback is highly welcome!

Getting started

Install it via npm:

npm install ngx-promise-buttons -S

Add it to your app using bootstrapApplication:

bootstrapApplication(AppComponent, {
  providers: [
    provideNgxPromiseButtons({ handleCurrentBtnOnly: true }),
  ],
});

Using the buttons is easy. Just pass a promise to the directive:

<button (click)="someAction()" 
   [promiseBtn]="promiseSetBySomeAction">Click me to spin!</button>
export class SomeComponent {
    // some example async action, but this works with any promise
    someAction(){
      this.promiseSetBySomeAction = new Promise((resolve, reject) => {
        setTimeout(resolve, 2000);
      });
    }
}

Styling the button

To give you maximum flexibility there are no base styles coming with the directive, but it is easy to fix that! There are lots of free css-spinners out there. Just find one of your liking and add the css to your global stylesheet.

Ressources:

There are selectors you can use to style. There is the .is-loading class on the button, which is set, when the promise is pending and there is the <span class="btn-spinner"></span> element inside the button.

Configuration

You can pass a config object to provideNgxPromiseButtons:

provideNgxPromiseButtons({
  spinnerTpl: '<span class="btn-spinner"></span>',
  disableBtn: true,
  btnLoadingClass: 'is-loading',
  handleCurrentBtnOnly: false,
});

Using observables

When you're using the module with observables make sure to pass a subscription to the directive rather than an observable directly.

const FAKE_FACTORY = {
  initObservable: (): Observable<number> => {
    return new Observable(observer => {
      setTimeout(() => {
        observer.complete();
      }, 4000);
    });
  } 
};

// DO:
const observable = FAKE_FACTORY.initObservable();
this.passedToDirective = observable.subscribe(
// ...
);
  
// DON'T DO:
const observable = FAKE_FACTORY.initObservable();
this.passedToDirective = observable;

Using booleans

Is now also possible.

<button (click)="someAction()" 
   [promiseBtn]="isShowBoolean">Click!</button>

Contributing

Contribution guidelines: CONTRIBUTING.md

About

Chilled loading buttons for angular2

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 70.7%
  • JavaScript 13.7%
  • HTML 9.7%
  • SCSS 5.8%
  • CSS 0.1%