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

@mertsolak/axios-helper

v5.0.4

Published

Developed for easy integration of progress spinner and error handler into axios.

Downloads

5

Readme

Axios Helper

Developed for easy integration of progress spinner and error handler into axios.

npm license size issue

Installation

Use node package manager to install @mertsolak/axios-helper.

npm i @mertsolak/axios-helper

Basic Usage

// dataService.ts

// First parameter must be axios for all services.
const getData = (axios, ...otherParams) => {
  return axios.get('url');
};

export default {
  getData,
};

Initialize it in the root component.

// Root.tsx
import { AxiosProvider, OptionsOfServices } from '@mertsolak/axios-helper';

import dataService from './dataService';

import App from './App';

export const services = {
  dataService,
};

const options: OptionsOfServices<keyof typeof services> = {
  dataService: {
    headers: { Authorization: 'token' },
    isLoadingBlocked: false,
    isErrorHandlerBlocked: false,
    handleErrorsBy: 'status',
    handleErrorsWith: { '404': 'not found' }, // format must be {[status]: 'error message'} and depends on the handleErrorsBy option
  },
};

const errorHandler = (errorMessage) => {
  // Globally handle error message in here.
  // console.log(errorMessage);
  // alert(errorMessage);
};

const Root = () => {
  return (
    <AxiosProvider services={services} options={options} errorHandler={errorHandler}>
      <App />
    </AxiosProvider>
  );
};

export default Root;

Place your progress spinner in a suitable component.

// App.tsx

import { useContext } from 'react';

import { AxiosContext } from '@mertsolak/axios-helper';

import HomePage from './HomePage';

const ProgressSpinner = () => <p>Progress Spinner</p>;

const App = () => {
  const { isLoading } = useContext(AxiosContext);

  return (
    <div>
      <HomePage />
      {isLoading && <ProgressSpinner />}
    </div>
  );
};

export default App;

Use axios everywhere.

// HomePage.tsx

import { useEffect } from 'react';

import { useAxios } from '@mertsolak/axios-helper';

import services from './Root.tsx';

const HomePage = () => {
  const { axios: axios1 } = useAxios({ isLoadingBlocked: true, isErrorHandlerBlocked: true }); // progress spinner and global error handler blocked
  const { axios: axios2 } = useAxios({ isLoadingBlocked: false, isErrorHandlerBlocked: false }); // progress spinner and global error handler not blocked
  const { axios: axios3 } = useAxios({ headers: { Authorization: 'token' } }); // uses default options with additional headers
  const { axios: axios4 } = useAxios(); // uses default options in root.tsx, progress spinner and global error handler not blocked

  // or services can be imported with configured axios.
  const {
    services: { dataService },
  } = useAxios<typeof services>();

  useEffect(() => {
    const getData = async () => {
      try {
        const { data } = await axios1.get(url);
        const { data } = await axios2.get(url);
        const { data } = await axios3.get(url);
        const { data } = await axios4.get(url);

        const { data } = dataService.getData();
      } catch (error) {
        if (!error?.config?.handled) {
          // you can handle the errors that is not handled by the global error handler in here.
        }
      }
    };
    getData();
  }, []);

  return <p>Home Page</p>;
};

export default HomePage;