JavaScript
Switch branches/tags
Nothing to show
Clone or download
Latest commit ff3defe Mar 18, 2018
Permalink
Failed to load latest commit information.
src use prop-types Mar 17, 2018
.babelrc initial commit Apr 28, 2017
.buckconfig initial commit Apr 28, 2017
.flowconfig initial commit Apr 28, 2017
.gitattributes initial commit Apr 28, 2017
.gitignore initial commit Apr 28, 2017
.watchmanconfig initial commit Apr 28, 2017
README.md fix readme description Apr 29, 2017
demo.gif add demo gif Apr 29, 2017
package-lock.json use prop-types Mar 17, 2018
package.json use prop-types Mar 17, 2018

README.md

react-native-panel

demo
A Customizable React Native Panel for Android and iOS

  • note: It's lag due to gif recorder app, actually it works more smooth.

Installation

  • npm install --save react-native-panel

Usage

  • Just import Panel from the package and use your own component to render Header or Content.
  • Don't forget to wrap your Panel component inside ScrollView or ListView.
  • To render a content, you must wrap your component inside Panel (as a children).
  • See Example below for more details.

Example

import React, { Component } from 'react';
import {
  StyleSheet,
  Text,
  View,
  ScrollView,
} from 'react-native';
import Panel from 'react-native-panel';

class MyExample extends Component {
  renderFirstHeader() {
    return (
      <View style={styles.firstHeader}>
        <Text>This is Custom Header</Text>
      </View>
    );
  }

  render() {
    return (
      <ScrollView
        style={styles.container}
        contentContainerStyle={styles.contentContainerStyle}
      >
        <Panel
          style={styles.firstHeaderContainer}
          header={this.renderFirstHeader}
        >
          <Text style={styles.myDescription}>
            Lorem ipsum dolor sit amet, 
            consectetur adipiscing elit.
          </Text>
        </Panel>
        <Panel
          header="With onPress, yeaahhhh!!! It's so f#cking amazing wooohoooo..."
          onPress={() => alert("It's awesome, right?")}
        >
          <Text style={styles.myDescription}>
            Lorem ipsum dolor sit amet,
            consectetur adipiscing elit,
            sed do eiusmod tempor incididunt ut
            labore et dolore magna aliqua.
            Ut enim ad minim veniam, quis nostrud exercitation
            ullamco laboris nisi ut aliquip ex ea
            commodo consequat. Duis aute irure dolor in reprehenderit
            in voluptate velit esse cillum dolore eu
            fugiat nulla pariatur. Excepteur sint occaecat
            cupidatat non proident, sunt in culpa qui
            officia deserunt mollit anim id est laborum.
          </Text>
        </Panel>
        <Panel
          style={styles.thirdHeaderContainer}
          header="Custom container style"
        >
          <Text style={styles.myDescription}>
            Lorem ipsum dolor sit amet,
            consectetur adipiscing elit,
            sed do eiusmod tempor incididunt ut
            labore et dolore magna aliqua.
            Ut enim ad minim veniam, quis nostrud
            exercitation ullamco laboris nisi ut
            aliquip ex ea commodo consequat.
            Duis aute irure dolor in reprehenderit
            in voluptate velit esse cillum dolore
            eu fugiat nulla pariatur. Excepteur sint
            occaecat cupidatat non proident.
          </Text>
        </Panel>
        <Panel header="Custom content style">
          <View style={styles.customContent}>
            <View style={styles.square} />
            <View style={styles.circle} />
            <View style={styles.square} />
          </View>
        </Panel>
      </ScrollView>
    );
  }
}

const styles = StyleSheet.create({
  contentContainerStyle: {
    paddingTop: 30,
    paddingBottom: 20,
  },
  container: {
    flex: 1,
    backgroundColor: '#eee',
  },
  firstHeaderContainer: {
    backgroundColor: '#ccc',
  },
  firstHeader: {
    marginHorizontal: 10,
    backgroundColor: 'gray',
    alignItems: 'center',
    justifyContent: 'center',
    borderRadius: 15,
    height: 50,
  },
  thirdHeaderContainer: {
    margin: 15,
    backgroundColor: 'yellow',
  },
  myDescription: {
    padding: 10,
    paddingTop: 0,
  },
  customContent: {
    backgroundColor: '#bada55',
    flexDirection: 'row',
    justifyContent: 'space-around',
    alignItems: 'center',
    paddingVertical: 10,
  },
  square: {
    backgroundColor: 'yellow',
    width: 50,
    height: 50,
  },
  circle: {
    backgroundColor: 'blue',
    width: 50,
    height: 50,
    borderRadius: 25,
  },
});

export default MyExample;

Properties

props type description
header String / Function Use String or Function that render a React Element
onPress Function Invoke a function when the Panel header is pressed
style Object Custom wrapper style for Panel

License

MIT