react-native-rewards
Version:
This package lets you easily add microinteractions to your app and reward users with the rain of confettis or flying emoji in seconds.
119 lines (92 loc) • 4.42 kB
Markdown
# react-native-rewards
Library is strongly inspired by [react-rewards](https://github.com/thedevelobear/react-rewards) created by [The Develobear](https://medium.com/@thedevelobear)!
<p align="center">
<img alt='react-native-rewards demo' src="https://thumbs.gfycat.com/FancyBriskBluegill-size_restricted.gif"/>
</p>
## Getting started
`$ npm install react-native-rewards --save`
`$ yarn add react-native-root-view-background`
Library is 100% javascript so, there is no need to do native linking
## Usage
using props:
```javascript
import RewardsComponent from 'react-native-rewards';
import React, { Component, createRef } from 'react';
class App extends Component {
state={
animationState: 'rest',
}
render() {
const { animationState } = this.state;
return (
<RewardsComponent
animationType="confetti"
state={animationState}
onRest={() => this.setState({ animationState: 'rest' })}
>
<TouchableOpacity
onPress={() => this.setState({ animationState: 'reward' })}
style={styles.buttonProps}
>
<Text style={styles.buttonText}>+</Text>
</TouchableOpacity>
</RewardsComponent>
)
}
}
```
using ref:
```javascript
import RewardsComponent from 'react-native-rewards';
import React, { Component, createRef } from 'react';
class App extends Component {
constructor(props) {
super(props);
this.rewardsComponent = createRef();
}
render() {
return (
<RewardsComponent
ref={this.rewardsComponent}
animationType="emoji"
>
<TouchableOpacity
onPress={() => this.rewardsComponent.current.rewardMe()}
style={styles.button}
>
<Image source={require('./assets/cup.png')}
style={styles.icon}/>
</TouchableOpacity>
</RewardsComponent>
)
}
}
```
## Props
| name | type | description | required | default |
|:--------------------: |:--------------: |:-------------------------------------------------------------: |:--------: |:---------------: |
| **`children`** | React Element | content to animate e.g. Button | YES | |
| **`initialSpeed`** | Number/Float | initial speed of partices | NO | `1` |
| **`spread`** | Number/Float | Multiplier of distance beetween partices | NO | `1` |
| **`deacceleration`** | Number/Float | Multiplier how fast partices deaccelerate in firt phase | NO | `1` |
| **`rotationXSpeed`** | Number/Float | Rotation speed multiplier in X axis | NO | `5` |
| **`rotationZSpeed`** | Number/Float | Rotation speed multiplier in Z axis | NO | `5` |
| **`particiesCount`** | Number/Integer | Partices count in reward animation | NO | `20` |
| **`colors`** | Array | Colors used to generate confetti | NO | Some colors :) |
| **`emoji`** | Array | Emojis used to generate confetti | NO | `['👍','😊','🎉']` |
| **`animationType`** | String | Type of animation `confetti`/`emoji` | NO | `confetti` |
| **`state`** | String | State of animation, changing of this value triggers animation | NO | `rest` |
| **`onRest`** | Function | Callback when animation goes to rest state | NO | |
## Methods
You can call this method by using refs of component
* **`rewardMe`** - Triggers reward animation
* **`punishMe`** - Triggers punish animation
## Notes for local development
You need to have facebook watchman installed
1. `cd example`
2. `yarn`
4. `yarn start`
5. `yarn run sync` in another terminal window (doesn't matter where)
If you have any issues, you can clear your watches using `watchman watch-del-all` and try again.
## Author
Feel free to ask me qustion on Twitter [@JanRomaniak](https://www.twitter.com/JanRomaniak)!