UNPKG

react-native-dynamic-table-component

Version:

A customizable and dynamic table component for React Native that supports flexible layouts, dynamic column rendering, and user interactions such as sorting and filter.

192 lines (156 loc) 6.33 kB
# DynamicTable for React Native A flexible and feature-rich table component for React Native applications that supports filtering, sorting, searching, and customizable styling. ## Features - 📊 **Dynamic Column Detection**: Automatically detects columns from your data - 🔍 **Searchable**: Built-in search functionality across all columns - 🔄 **Sortable**: Sort by any column with ascending/descending toggle - 🔢 **Smart Filtering**: Different filter types for text and numeric data - 📱 **Mobile Optimized**: Horizontal scrolling with synchronized header - 🎨 **Highly Customizable**: Extensive styling options for all components - ⚡ **Performance Optimized**: Uses virtualized lists for efficient rendering ## Installation ```bash npm install react-native-dynamic-table-component # or yarn add react-native-dynamic-table-component ``` ## Basic Usage ```jsx import React from 'react'; import { View } from 'react-native'; import DynamicTable from 'react-native-dynamic-table-component'; const App = () => { const data = [ { id: 1, name: 'John Doe', age: 28, department: 'Engineering' }, { id: 2, name: 'Jane Smith', age: 34, department: 'Marketing' }, { id: 3, name: 'Bob Johnson', age: 45, department: 'Finance' }, // ... more data ]; return ( <View style={{ flex: 1 }}> <DynamicTable initialData={data} /> </View> ); }; export default App; ``` ## Props ### Core Props | Prop | Type | Default | Description | |------|------|---------|-------------| | `initialData` | `Array<Object>` | `[]` | The data to be displayed in the table. Each object must have an `id` field. | | `isFilter` | `boolean` | `true` | Whether to show the filter button and functionality. | | `sortByColumn` | `boolean` | `true` | Whether columns can be clicked to sort data. | | `isSearch` | `boolean` | `true` | Whether to show the search input. | | `ignoredHeaders` | `string[]` | `[]` | Column keys to exclude from the table. | | `contentPaddingBottom` | `number` | `120` | Bottom padding for the table content. | | `emptyMessage` | `string` | `'No results found'` | Message to display when no data matches current filters/search. | | `filterTitle` | `string` | `'Filter'` | Title for the filter modal. | | `showApplyButton` | `boolean` | `true` | Whether to show the Apply button in filter modal. | ### Style Props | Prop | Type | Description | |------|------|-------------| | `cellStyle` | `ViewStyle` | Style for table cells. | | `headerStyle` | `ViewStyle` | Style for header cells. | | `filterButtonStyle` | `ViewStyle` | Style for the filter button. | | `filterButtonTextStyle` | `TextStyle` | Style for the filter button text. | | `filterContainerStyle` | `ViewStyle` | Style for the filter modal container. | | `filterContainerApplyButtonStyle` | `ViewStyle` | Style for the Apply button in filter modal. | | `filterContainerApplyButtonTextStyle` | `TextStyle` | Style for the Apply button text. | | `filterContainerResetButtonStyle` | `ViewStyle` | Style for the Reset button in filter modal. | | `filterContainerResetButtonTextStyle` | `TextStyle` | Style for the Reset button text. | | `activeTabButtonColor` | `string` | Color for the active filter tab. | | `filterContainerFieldOptionStyle` | `ViewStyle` | Style for filter field options. | | `filterContainerFieldOptionTextStyle` | `TextStyle` | Style for filter field option text. | | `filterContainerFieldOptionActiveTextStyle` | `string` | Color for active filter field option text. | | `filterContainerValueOptionStyle` | `ViewStyle` | Style for filter value options. | | `filterContainerValueOptionTextStyle` | `TextStyle` | Style for filter value option text. | | `filterContainerValueOptionActiveTextStyle` | `string` | Color for active filter value option text. | ## Examples ### Custom Styling ```jsx import React from 'react'; import { View } from 'react-native'; import DynamicTable from 'react-native-dynamic-table-component'; const App = () => { const data = [ { id: 1, name: 'John Doe', age: 28, department: 'Engineering' }, { id: 2, name: 'Jane Smith', age: 34, department: 'Marketing' }, // ... more data ]; return ( <View style={{ flex: 1, backgroundColor: '#f5f5f5' }}> <DynamicTable initialData={data} cellStyle={{ backgroundColor: 'white', borderRadius: 4, margin: 2 }} headerStyle={{ backgroundColor: '#e0e0ff', borderRadius: 4 }} filterButtonStyle={{ backgroundColor: '#4a6da7', borderRadius: 20, paddingHorizontal: 15 }} filterButtonTextStyle={{ color: 'white', fontWeight: 'bold' }} activeTabButtonColor="#4a6da7" /> </View> ); }; ``` ### Hiding Specific Columns ```jsx <DynamicTable initialData={data} ignoredHeaders={['id', 'createdAt']} // These fields won't be displayed /> ``` ### Disabling Filtering and Sorting ```jsx <DynamicTable initialData={data} isFilter={false} sortByColumn={false} /> ``` ### Custom Filter Modal ```jsx <DynamicTable initialData={data} filterTitle="Advanced Filters" filterContainerStyle={{ backgroundColor: '#f0f8ff', borderTopLeftRadius: 20, borderTopRightRadius: 20 }} filterContainerApplyButtonStyle={{ backgroundColor: '#4CAF50', paddingVertical: 12, paddingHorizontal: 25, borderRadius: 25 }} filterContainerApplyButtonTextStyle={{ color: 'white', fontWeight: 'bold', fontSize: 16 }} filterContainerResetButtonStyle={{ backgroundColor: '#f44336', paddingVertical: 12, paddingHorizontal: 25, borderRadius: 25 }} filterContainerResetButtonTextStyle={{ color: 'white', fontWeight: 'bold', fontSize: 16 }} /> ``` ## Filtering The DynamicTable component provides smart filtering: - **Text fields**: Show a list of unique values to select from - **Numeric fields**: Provide min/max range inputs for numeric filtering ## Performance Tips For large datasets, consider these optimizations: 1. Use `ignoredHeaders` to hide unnecessary columns 2. Consider paginating your data if you have thousands of rows 3. Implement server-side sorting and filtering for very large datasets ## Contributing Contributions are welcome! Please feel free to submit a Pull Request. ## License This project is licensed under the MIT License - see the LICENSE file for details.