Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
react-native-expandable-listview
Advanced tools
A simple and customizable React Native ExpandableListView component.
This is a React-Native ExpandableListView component that you can freely modify its styles.
To install just input the following command:
npm i react-native-expandable-listview
or
yarn add react-native-expandable-listview
const CONTENT = [
{
id: '1', // required, id of item
categoryName: 'Item 1', // label of item expandable item
subCategory: [
// required, array containing inner objects
{
id: '3', // required, of inner object
name: 'Sub Cat 1', // required, label of inner object
},
{
id: '4',
name: 'Sub Cat 3',
},
],
},
{
id: '2',
categoryName: 'Item 8',
subCategory: [{id: '22', name: 'Sub Cat 22'}],
},
];
//...
import React, {Component} from 'react';
import {ExpandableListView} from 'react-native-expandable-listview';
const CONTENT = [
{
id: '42',
categoryName: 'Item 1',
subCategory: [
{
id: '1',
name:
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged",
},
{id: '2', name: 'Sub Item 2'},
],
},
{
id: '95',
categoryName: 'Item 2',
subCategory: [{id: '1', name: 'Sub Item 1'}],
},
{
id: '94',
categoryName: 'Item 3',
subCategory: [{id: '1', name: 'Sub Item 1'}],
},
{
id: '93',
categoryName: 'Item 4',
subCategory: [{id: '1', name: 'Sub Item 1'}],
},
{
id: '92',
categoryName: 'Item 5',
subCategory: [{id: '1', name: 'Sub Item 1'}],
},
{
id: '96',
categoryName: 'Item 6',
subCategory: [{id: '1', name: 'Sub Item 1'}],
},
];
function YourComponent() {
function handleItemClick({index}) {
console.log(index);
};
function handleInnerItemClick({innerIndex, item, itemIndex}) {
console.log(innerIndex);
};
render() {
return (
<ExpandableListView
data={CONTENT} // required
onInnerItemClick={handleInnerItemClick}
onItemClick={handleItemClick}
/>
);
}
}
//...
import React, {Component} from 'react';
import {Text, Image} from 'react-native';
import {ExpandableListView} from 'react-native-expandable-listview';
const CONTENT = [
{
id: '42',
categoryName: 'Item 1',
customItem: (
<View style={{flexDirection: 'column'}}>
<Text>Custom Item</Text>
<Text>With</Text>
<Text>what you</Text>
<Text>want</Text>
</View>
),
subCategory: [
{
customInnerItem: (
<View style={{flexDirection: 'column', marginLeft: 15}}>
<Text>Inner Item</Text>
<Text>With whatever you need</Text>
</View>
),
id: '1',
name: '',
},
{id: '2', name: 'Sub Item 2'},
],
},
{
id: '96',
categoryName: 'Item 2',
subCategory: [{id: '1', name: 'Sub Item 1'}],
},
{
id: '12',
categoryName: 'Item 3',
subCategory: [
{id: '1', name: 'Category 1'},
{id: '2', name: 'Category 2'},
{id: '3', name: 'Category 3'},
],
},
];
function YourComponent() {
const [listDataSource, setListDataSource] = useState([])
function handleItemClick({index}) {
console.log(index);
};
function handleInnerItemClick({innerIndex, item, itemIndex}) {
console.log(innerIndex);
};
render() {
return (
<ExpandableListView
// ExpandableListViewStyles={{borderTopWidth:1}} // styles to expandable listview
// renderInnerItemSeparator={false} // true or false, render separator between inner items
// renderItemSeparator={false} // true or false, render separator between Items
// itemContainerStyle={{}} // add your styles to all item container of your list
// itemLabelStyle={{}} // add your styles to all item text of your list
// customChevron={{}} // your custom image to the indicator
// chevronColor="white" // color of the default indicator
// innerItemContainerStyle={{}} // add your styles to all inner item containers of your list
// itemLabelStyle={{}} // add your styles to all inner item text of your list
// itemImageIndicatorStyle={{}} // add your styles to the image indicator of your list
// animated={true} // sets all animations on/off, default on
// defaultLoaderStyles?: ViewStyle; // Set your styles to default loader (only for animated={true})
// customLoader?: JSX.Element; Pass your custom loader, while your content is measured and rendered (only for animated={true})
data={listDataSource}
onInnerItemClick={handleInnerItemClick}
onItemClick={handleItemClick}
/>
);
}
}
All commented options above are optional.
If you want to use the "customLoader" prop, provide JSX.Element or a Component, for example:
import {View, ActivityIndicator} from 'react-native';
// ...
const myLoader = (<View><ActivityIndicator /></View>)
import chevron from '../assets/images/yourImage';
// ...
customChevron = {chevron};
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
FAQs
A simple and customizable React Native ExpandableListView component.
We found that react-native-expandable-listview demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.