react-loadbar
v0.1.2
Published
[![Greenkeeper badge](https://badges.greenkeeper.io/noisycr1cket/react-loadbar.svg)](https://greenkeeper.io/)
Downloads
9
Maintainers
Readme
react-loadbar
A super simple and minimal progress bar with optional spinner.
Preview :eyes:
:white_check_mark: Fully customizable
:white_check_mark: Lightweight bundle
:white_check_mark: No dependencies included
Storybook Examples
Installation
npm install react-loadbar --save
Usage
import 'react-loadbar/dist/styles.css'
import { LoadBar } from 'react-loadbar'
class MyCmpt extends React.Component {
state = { downloadProgress: 0 }
_onVisibilityChange = isVisible => {
if (isVisible) {
console.log('load started!')
} else {
console.log('load complete!')
}
}
render() {
// All of these are optional except for percent
return (
<LoadBar percent={this.state.downloadProgress}
onVisibilityChange={this._onVisibilityChange}
barStyle={{ background: 'slateblue' }}
spinnerStyle={{ borderColor: 'slateblue' }} />
)
}
}
LoadBar
A simple, dumb component which simply displays the loading percent
you provide to it.
Prop | Default | Type | Optional | Description
------|----------|------|----------|------------
percent
| 1
| number
| No | Determines the width of the loading bar
onVisibilityChange
| undefined
| (boolean) => void
| Yes | Callback which receives true
when the loading bar goes from hidden -> visible, and false
when it goes from visible -> hidden
barStyle
| {}
| Object
| Yes | Style properties applied directly on the loading bar
showSpinner
| true
| boolean
| Yes | Visibility of the spinner
spinnerStyle
| {}
| Object
| Yes | Style properties applied directly on the spinner element
import 'react-loadbar/dist/styles.css'
import { SimulatedLoadBar } from 'react-loadbar'
class MyCmpt extends React.Component {
state = { isLoading: false, text: '' }
_fetchData = async () => {
try {
this.setState({ isLoading: true })
const res = await fetch('/api', { method: 'get' })
this.setState({ text: await res.text() })
} catch (err) {
console.error(err)
} finally {
this.setState({ isLoading: false })
}
}
componentDidMount() {
this._fetchData()
}
render() {
// All values are optional
return (
<div>
<SimulatedLoadBar isLoading={this.state.isLoading}
timeMs={2000}
numTicks={20}
barStyle={{ background: 'slateblue' }} />
<p>{this.state.text}</p>
</div>
)
}
}
SimulatedLoadBar
A loading bar component based on LoadBar
which simulates loading. Inherits the same set of props from LoadBar
, but ignores the percent
property. The SimulatedLoadBar
controls the value of the percent
prop internally.
Prop | Default | Type | Optional | Description
--------------|-----------------| -----------------| -------| ------
onPercentChange
| undefined
| (number) => void
| Yes | Invoked at every tick of the simulated load when the internal value of percent
changes
timeMs
| 8000
| number
| Yes | Number of milliseconds it takes for the loading bar to reach 95%, at which point the bar animation stops indefinitely until the user sets isLoading
to false
numTicks
| 16
| number
| Yes | Number of ticks it takes for the internal percent
value to reach 95%. This number is distributed evenly over the given timeMs
so the time between each tick is roughly timeMs ÷ numTicks
isLoading
| true
| boolean
| Yes | If set to true
, the loading simulation and animation will begin immediately. If set to false
, the animation will fast forward to 100% and transition to being hidden
Styling
All elements are easily targettable with CSS. To view the classes and base styles, see the source .scss file.
License
(c) 2017 John Bernardo, MIT license.