npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@chevtek/react-spinners

v1.0.5

Published

Easy loading spinner component and management service for React apps.

Downloads

26

Readme

@chevtek/react-spinners

A library for easily managing loading spinners in complex React applications.

Install

$ npm i @chevtek/react-spinners --save

If you're running npm v8 or higher then --save is implied if you don't include it.

Quick Start

First import the Spinner component and use it anywhere in your app.

// ./src/App.jsx

import * as React from 'react';
import { Spinner } from '@chevtek/react-spinners';

export default class YourComponent extends React.Component {
  ...
  render() {
    return (
      <div>
        ...
        <Spinner name="mySpinner">
          Loading...
        </Spinner>
      </div>
    );
  }
}

Now just import the spinnerService wherever you need it.

// ./src/services/yourService.js

import { spinnerService } from '@chevtek/react-spinners';

function beginSomeOperation() {
  spinnerService.show('mySpinner');
  doSomething().then(() => {
    spinnerService.hide('mySpinner');
  });
}

@chevtek/react-spinners contains a singleton instance of SpinnerService for your convenience and as you've seen above all you have to do is import and use it. Optionally, you can create your own instance of the SpinnerService and pass that to your Spinner components instead. This is useful in certain situations such as centralizing all your dependencies to be used for dependency injection.

import { Spinner, SpinnerServie } from '@chevtek/react-spinners';

const yourCustomSpinnerService = new SpinnerService();

...

function SomeDumbComponent() {
  return (
    <Spinner name="yourSpinner" spinnerService={yourCustomSpinnerService}>
      Loading...
    </Spinner>
  );
}

In this way you can declare the spinner service in a centralized location and have greater control over where you store this singleton.


Spinner Component

The spinner component gives you several options.

name: string

The name attribute is required. It is what you must pass to the service when trying to show/hide that specific spinner.

<spinner name="mySpinner"></spinner>

group: string

Optionally a group name may be specified so that you can show/hide groups of spinners.

<spinner name="mySpinner" group="foo"></spinner>
<spinner name="mySpinner2" group="foo"></spinner>
<spinner name="mySpinner3" group="bar"></spinner>
this.spinnerService.showGroup('foo');

show: boolean

By default all spinners are hidden when first registered. You can set a spinner to be visible by default by setting the show property to true.

<spinner name="mySpinner" show={true}></spinner>

loadingImage: string

Passing in a loading image is the simplest way to create a quick spinner.

<spinner name="mySpinner" loadingImage="/path/to/loading.gif"></spinner>

If you want to disable the loading image entirely then simply do not specify the loadingImage property and an image won't be used. If you don't include the loadingImage option then be sure to specify some custom markup within the spinner component itself so it can be used instead.

Content Projection

If you need more control over the kind of spinner you want to display, beyond just a simple animated image. You are able to supply any custom markup that you need by simply nesting it within the spinner component. Any content will be projeced into the spinner template below the loadingImage if one was specified.

<spinner name="mySpinner">
  <h3>Loading...</h3>
</spinner>

Content projection is the most common way to use the SpinnerComponent as it allows you to pass in custom markup and use CSS animations instead of just an animated .gif image.


Spinner Service

The most common way of interacting with your spinners is via the spinnerService. This service can be injected just like any other Angular service. Once you have reference to the service you can take advantage of several methods.

import { spinnerService } from '@chevtek/react-spinners';
import * as axios from 'axios'; // replace with your preferred ajax request library


function  loadData() {
  spinnerService.show('mySpinner');
  axios.get('/some/url/for/data/')
    .then(res => {
      spinnerService.hide('mySpinner');
      // do stuff with res
    })
    .catch(err => {
      spinnerService.hide('mySpinner');
      // log error
    });
}

show(spinnerName: string): void

The show method allows you to display a specific spinner by name.

<spinner name="mySpinner" loadingImage="/path/to/loader.gif"></spinner>
spinnerService.show('mySpinner');

hide(spinnerName: string): void

Works exactly like show but hides the spinner element.

showGroup(groupName: string): void

The showGroup method allows you to display all spinners with the same group name.

<spinner name="spinner1" group="foo"></spinner>
<spinner name="spinner2" group="foo"></spinner>
<spinner name="spinner3" group="bar"></spinner>
spinnerService.showGroup('foo');

Spinners 1 and 2 would show but spinner 3 would not since it is not part of group "foo".

hideGroup(groupName: string): void

Works exactly the same as showGroup except it hides the spinners instead.

showAll: void

Hopefully it's obvious that this method will show every single spinner registered with the service. This method is rarely used but is there for parity just in case.

hideAll(): void

The hideAll method is identical to showAll except it hides every spinner that is registered. This method also isn't used very often but is extremely useful in global error handlers. We all know how much users HATE frozen spinners, right?

isShowing(spinnerName: string): boolean

The isShowing method returns a boolean indicating whether or not the specified spinner is currently showing.