react-native-side-reveal-menu

1.0.1 • Public • Published

react-native-side-reveal-menu

Animated menu component for React Native. Inspired by this native android component: https://android-arsenal.com/details/1/1388

Installation

npm install --save react-native-side-reveal-menu

Example usage

This example uses react-native-vector-icons package but feel free to put anything else into the MenuItem components.

import React, { Component } from 'react';
import { AppRegistry, StyleSheet, Text, View, TouchableNativeFeedback, Alert } from 'react-native';
import Icon from 'react-native-vector-icons/FontAwesome';
import { Menu, MenuItem } from 'react-native-side-reveal-menu';
 
export default class SideRevealMenuDev extends Component {
  constructor(props) {
    super(props);
    this.state = {
      menuOpened: true
    }
 
    this.onBtnPress = this.onBtnPress.bind(this);
  }
 
  onBtnPress() {
    this.setState({
      menuOpened: !this.state.menuOpened
    });
  }
 
  render() {
    return (
      <View style={styles.container}>
 
        <TouchableNativeFeedback onPress={this.onBtnPress}>
          <View style={styles.btn}><Text style={styles.text}>Toggle Menu</Text></View>
        </TouchableNativeFeedback>
 
        <Menu isOpened={this.state.menuOpened}>
          <MenuItem onPress={() => console.log('Adress book pressed')}>
            <Icon name="address-book" size={25} color="#fff" />
          </MenuItem>
          <MenuItem onPress={() => console.log('Calendar pressed')}>
            <Icon name="calendar" size={25} color="#fff" />
          </MenuItem>
          <MenuItem onPress={() => console.log('Envelope pressed')}>
            <Icon name="envelope" size={25} color="#fff" />
          </MenuItem>
          <MenuItem onPress={() => console.log('Info pressed')}>
            <Icon name="info" size={25} color="#fff" />
          </MenuItem>
          <MenuItem onPress={() => console.log('User pressed')}>
            <Icon name="user" size={25} color="#fff" />
          </MenuItem>
        </Menu>
      </View >
    );
  }
}
 
const styles = StyleSheet.create({
  container: {
    flex: 1,
    paddingBottom: 30,
    alignItems: 'center',
    justifyContent: 'flex-end',
    backgroundColor: '#F5FCFF'
  },
  btn: {
    padding: 20, backgroundColor: '#00ab6b', alignItems: 'center', justifyContent: 'center'
  },
  text: {
    color: 'white'
  }
});
 
AppRegistry.registerComponent('SideRevealMenuDev', () => SideRevealMenuDev);

Properties

Prop Description Default
onShow Method that runs when menu is showing. empty
onHide Method that runs when menu is hiding. empty
borderRadius Border radius of menu items. Keep in mind that if items are rendered together, only first and last items will have rounded corners. 0
showActiveItem Highlights pressed menu item with the activeItemColor color if set to true. true
showItemsSeparator Renders a separator between each item. true
inactiveItemColor Default background color of every item. Must be a valid hex value (won't work with named colors like 'red'). #33334C
activeItemColor Default background color of selected item. Must be a valid hex value (won't work with named colors like 'red'). #D64A73
itemsDistribution Defines how menu items are distributed. Similar to flex justifyContent. 'top', 'center', 'bottom', 'space-between', 'space-around'
itemAnimDuration Duration of animation of single menu item in miliseconds. 150
itemAnimDelay Delay of susequent menu item animations. 50
itemAnimEasing Allow to specify custom easing function. Must be a valid react native easing function. Easing.inOut(Easing.ease)

Package Sidebar

Install

npm i react-native-side-reveal-menu

Weekly Downloads

3

Version

1.0.1

License

none

Last publish

Collaborators

  • kbarkowski