1.0.4 • Published 5 years ago

react-native-sectionlist-sidebar v1.0.4

Weekly downloads
1
License
MIT
Repository
github
Last release
5 years ago

SectionList with Sidebar

SectionList with sidebar to jump to sections

SectionList-array-of-strings SectionList-array-of-objects

Installation

$ npm i react-native-sectionlist-sidebar

or

$ yarn add react-native-sectionlist-sidebar

Usage

1. Import the component

import SectionListSidebar from 'react-native-sectionlist-sidebar'

2. Embed the component

class App extends React.Component {
  render() {
    return (
      <SectionListSidebar
        ...
      />
    )
  }
}

3. Pass properties to the component

Properties

PropertyTypeDescriptionRequiredDefault
dataarray < object >Sections dataYes
renderItemfunctionReturns section list item componentYes
itemHeightnumberSection's list item heightYes
sectionHeaderHeightnumberSection's header heightNo22
sectionFooterHeightnumberSection's footer heightNo0
separatorHeightnumberSection's list item serparator heightNo0
listHeaderHeightnumberSectionList top header heightNo0
sectionHeaderTextStyleobjectSection's list item text styleNo{ height: 22 }
renderSidebarItemfunctionReturns sidebar's item componentNo
sidebarContainerStyleobjectSidebar's container styleNo{ width: 30 }
sidebarItemContainerStyleobjectSidebar's item container styleNo
sidebarItemTextStyleobjectSidebar's item text styleNo
containerStyleobjectSectionListSidebar component's styleNo
rtlbooleanReverse layout if set to trueNofalse

And all the optional props of <SectionList />. You can find them here.

Examples

Minimal example

import React from 'react'
import { Text } from 'react-native'
import SectionListSidebar from 'react-native-sectionlist-sidebar'

export default class MinimalExampleScreen extends React.Component {
  render() {
    return (
      <SectionListSidebar
        data={[{ key: 'A', title: 'A', data: ['Aaron', 'Ali'] }]}
        renderItem={({ item }) => <Text key={item.key}>{item}</Text>}
        itemHeight={30}
      />
    )
  }
}
  • key: section's sidebar item title, string
  • title: section's title, string
  • data: section's data, [{}] or string

Custom section header component

  renderSectionHeader = ({ section }) => (
    <View style={{ height: 30, backgroundColor: 'lightgray' }}>
      <Image />
      <Text>{section.title}</Text>
    </View>
  );

  ...

  <SectionListSidebar
    renderSectionHeader={this.renderSectionHeader}
    sectionHeaderHeight={30}
    ...
  />

Use renderSectionHeader only if you need to add components to the section headers. For simple headers use sectionHeaderTextStyle.

sectionHeaderHeight must be equal to section header's height with top and bottom margins, paddings, and borders.

Custom sidebar item component

  renderSidebarItem = ({ item, index }) => (
    <TouchableOpacity
      onPress={() => { this.sectionListSidebar.jumpToSection(index); }}
      style={{ marginVertical: 4, backgroundColor: 'lightgray' }}>
      <Text style={{ padding: 10, color: 'black', textAlign: 'center' }}>{item}</Text>
    </TouchableOpacity>
  );

  ...

  <SectionListSidebar
    ref={ref => { this.sectionListSidebar = ref; }}
    renderSidebarItem={this.renderSidebarItem}
    ...
  />

Use renderSidebarItem only if you need to fire a function before/after humping to section and/or add components to sidebar items. You may try accomplishing what you want using sidebarItemContainerStyle and sidebarItemTextStyle props first, and if you failed, use renderSidebarItem.

More examples

SectionList-array-of-strings

SectionList-array-of-strings

TODO

  • Custom sidebar component
  • Add RTL support
  • Add more examples
  • Mark selected sidebar item
  • Add Tests
  • Your suggestion!