2.0.0 • Published 13 days ago

@wojtekmaj/react-async-button v2.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
13 days ago

npm downloads CI

@wojtekmaj/react-async-button

A button that handles Promises for your React app.

tl;dr

  • Install by executing npm install @wojtekmaj/react-async-button or yarn add @wojtekmaj/react-async-button.
  • Use by adding import AsyncButton from '@wojtekmaj/react-async-button' and passing pendingConfig, successConfig.

Getting started

Compatibility

Your project needs to use React 16.8 or later.

React-Async-Button is also compatible with React Native.

Installation

Add React-Async-Button to your project by executing npm install @wojtekmaj/react-async-button or yarn add @wojtekmaj/react-async-button.

Usage

Here's an example of basic usage:

import AsyncButton from '@wojtekmaj/react-async-button';

const pendingConfig = {
  children: 'Loading…',
  disabled: true,
};

const successConfig = {
  children: 'Done',
};

const errorConfig = {
  children: 'Try again',
};

function MyComponent() {
  async function onClick(event) {
    // Do some async stuff
  }

  return (
    <AsyncButton
      onClick={onClick}
      pendingConfig={pendingConfig}
      successConfig={successConfig}
      errorConfig={errorConfig}
    >
      Do async stuff
    </AsyncButton>
  );
}

Usage with React Native

AsyncButton renders <button> by default, but by passing as prop you can render any component you want. Here's the same example, but using <TouchableOpacity> instead of <button>:

import { TouchableOpacity } from 'react-native';
import AsyncButton from '@wojtekmaj/react-async-button';

const pendingConfig = {
  children: 'Loading…',
  disabled: true,
};

const successConfig = {
  children: 'Done',
};

const errorConfig = {
  children: 'Try again',
};

function MyComponent() {
  async function onClick(event) {
    // Do some async stuff
  }

  return (
    <AsyncButton
      as={TouchableOpacity}
      onClick={onClick}
      pendingConfig={pendingConfig}
      successConfig={successConfig}
      errorConfig={errorConfig}
    >
      Do async stuff
    </AsyncButton>
  );
}

User guide

AsyncButton

Renders a button.

Props

Prop nameDescriptionDefault valueExample values
asComponent to render button with."button"String: "custom-button"React component: MyButton
errorConfigProps to override default props with when onClick async function throws.{}{ children: 'Try again' }
onClickA function, a function returning a Promise, or an async function to be called when the button is clicked.n/a
pendingConfigProps to override default props when button has been clicked but onClick function did not yet resolve.{}{ children: 'Loading…' }
resetTimeoutTime in milliseconds after which AsyncButton should stop using errorConfig / successConfig overrides.20005000
successConfigProps to override default props with when onClick async function resolves.{}{ children: 'Done' }

…and everything else a normal <button> would accept!

Accessibility

For accessibility purposes, we recommend setting aria-live="polite" and aria-atomic="true" props so that button label changes are announced to the user using assitive technologies.

License

The MIT License.

Author

2.0.0

13 days ago

1.6.0

5 months ago

1.5.2

7 months ago

1.5.1

10 months ago

1.5.0

10 months ago

1.4.0

10 months ago

1.3.1

11 months ago

1.3.0

11 months ago

1.2.0

1 year ago

1.1.0

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago

1.2.1

1 year ago

0.1.2

3 years ago

0.1.1

3 years ago

0.1.0

3 years ago