Package Exports
- dynamic-table-builder
- dynamic-table-builder/dist/index.esm.js
- dynamic-table-builder/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (dynamic-table-builder) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Dynamic Table Builder
A powerful and flexible React table library that supports backend-driven configuration, built on top of Ant Design. This document provides a comprehensive guide to the DynamicTable
component and its JSON configuration structure.
Features
- Backend-Driven Configuration: Define table structure, filters, sorting, and more from a JSON object, usually fetched from a backend.
- Global and Column-Level Filters: Supports various filter types like search, select, and date range.
- Sortable Columns: Enable sorting on specified columns.
- Pagination: Complete pagination support, configurable from the JSON.
- State Persistence: Persist table state (filters, sorting, pagination) to
localStorage
. - Custom Rendering: Render cell content as links, statuses with colors, formatted dates, and numbers.
- Action Buttons: Configurable action buttons for functionalities like Export and Refresh.
- Row Selection: Support for checkbox-based row selection.
Installation
First, make sure you have the required peer dependencies installed:
npm install antd @ant-design/icons dayjs
Then, install the library:
npm install dynamic-table-builder
How to Use
Here's a basic example of how to integrate the DynamicTable
component.
import React from 'react';
import DynamicTable from 'dynamic-table-builder';
import 'dynamic-table-builder/dist/index.css'; // Don't forget to import styles
const YourComponent = () => {
// This config would typically come from an API
const tableConfiguration = { /* ... Your JSON config ... */ };
const handleDataFetch = async (params) => {
console.log('Fetching data with params:', params);
// 'params' will contain { pagination, filters, sorter }
// Fetch data from your API and return it in the expected format.
// Example:
// const response = await yourApi.getData(params);
// return { data: response.items, pagination: { totalCount: response.total } };
return Promise.resolve({ data: [], pagination: { totalCount: 0 } });
};
const handleExport = async (params) => {
console.log('Exporting data with params:', params);
// 'params' will contain { filters, sort }
// Call your API to get the export data (e.g., a CSV blob).
// Example:
// const blob = await yourApi.exportData(params);
// return blob;
return Promise.resolve(new Blob(["Success"]));
};
return (
<DynamicTable
config={tableConfiguration}
onDataFetch={handleDataFetch}
onExport={handleExport}
className="custom-table-class"
/>
);
};
export default YourComponent;
JSON Configuration Structure
The DynamicTable
is configured through a single JSON object. Here is the breakdown of its main properties.
{
"data": [],
"columns": [],
"pagination": {},
"tableConfig": {},
"tableFeatures": {}
}
data
: An array of objects, where each object represents a row in the table. While it can be provided initially, the component is designed to fetch data dynamically via theonDataFetch
prop.columns
: (Required) An array of objects defining the table's columns.pagination
: Configuration for the table's pagination.tableConfig
: General table settings like title, action buttons, and global filters.tableFeatures
: Enables or configures special features like row selection and state management.
columns
Each object in the columns
array defines a column.
Key | Type | Description |
---|---|---|
title |
string |
The text displayed in the column header. |
key |
string |
A unique identifier for the column. This should match a key in the data objects. |
width |
number |
The width of the column in pixels. |
sortable |
boolean |
If true , the column can be sorted. |
render |
object |
Defines how to render the data in this column's cells. See Render Configuration below. |
filter |
object |
Defines a filter for this column. See Column Filter Configuration below. |
fixed |
'left' | 'right' |
Fixes the column to the left or right side of the table. |
Render Configuration (render
)
Key | Type | Description |
---|---|---|
type |
string |
The render type. Can be text , link , status , datetime , or number . |
urlTemplate |
string |
For type: 'link' . A template for the URL. Use {key} to insert data from the row (e.g., /users/{id} ). |
urlType |
'internal' | 'external' |
For type: 'link' . 'internal' opens in the same tab, 'external' opens in a new tab. Defaults to 'internal' . |
colorMapping |
object |
For type: 'status' . Maps cell values to colors (e.g., {"active": "success", "inactive": "error"} ). |
textMapping |
object |
For type: 'status' . Maps cell values to display text (e.g., {"PRS_PENDING": "Pending"} ). |
format |
string |
For type: 'datetime' , it's a date format string (e.g., DD-MM-YYYY HH:mm:ss ). For type: 'number' , it's the number of decimal places. |
Column Filter Configuration (filter
)
Key | Type | Description |
---|---|---|
type |
string |
The filter type. Can be search or select . |
placeholder |
string |
Placeholder text for the filter input. |
mode |
string |
For type: 'select' . Set to 'multiple' to allow multiple selections. |
options |
array |
For type: 'select' . An array of { label: string, value: any } objects. |
validation |
object |
For type: 'search' . Validation rules, e.g., {"minChars": 3} . Currently informational. |
pagination
Configures the table's pagination controls.
Key | Type | Description |
---|---|---|
pageSize |
number |
The default number of items per page. |
pageSizeOptions |
number[] |
An array of numbers for the page size selector (e.g., [10, 20, 50] ). |
showQuickJumper |
boolean |
If true , shows an input field to jump to a specific page. |
showTotal |
boolean |
If true , displays the total number of items. |
position |
string[] |
An array specifying the position of the pagination controls (e.g., ['bottomRight'] ). |
showSizeChanger |
boolean |
If true , allows the user to change the page size. |
totalCount |
number |
The total number of items available, which is used to calculate the number of pages. This is usually returned from the API. |
requestParams |
object |
Maps the table's internal pagination state to keys for the API request (e.g., {"page": "pageNumber", "pageSize": "pageSize"} ). |
tableConfig
General table configuration.
Key | Type | Description |
---|---|---|
title |
string |
The title displayed above the table. |
defaultPageSize |
number |
Default page size if not specified in pagination . |
actionButtons |
object[] |
An array of action buttons. See Action Button Configuration below. |
globalFilters |
object[] |
An array of global filters. See Global Filter Configuration below. |
exportFileName |
string |
The default filename for exports (e.g., 'data.csv'). |
Action Button Configuration
Key | Type | Description |
---|---|---|
key |
string |
A unique key. Pre-defined keys export , refresh , and clearFilters have built-in functionality. |
title |
string |
The button's text. |
icon |
string |
The name of an Ant Design icon to display. |
iconSource |
'internal' |
Specifies that the icon is from Ant Design. |
type |
string |
Ant Design button type (primary , default , etc.). |
enabled |
boolean |
Whether the button is enabled. |
position |
'left' | 'right' |
Positions the button on the left or right side of the action bar. Defaults to left . |
onClick |
function |
Custom click handler. If provided, this overrides default behavior for keys like export . |
Global Filter Configuration
Key | Type | Description |
---|---|---|
key |
string |
A unique key for the filter. |
type |
string |
The filter type: dateRange , select , or search . |
title |
string |
A label displayed for the filter. |
placeholder |
string |
Placeholder text for the filter input. |
required |
boolean |
For type: 'dateRange' , if a date range is mandatory. |
showTime |
boolean |
For type: 'dateRange' , includes a time picker. |
format |
string |
For type: 'dateRange' , the date format (e.g., DD-MM-YYYY ). |
presets |
object[] |
For type: 'dateRange' , predefined date ranges like "Today" or "This Month". |
mode |
string |
For type: 'select' , set to multiple for multi-select. |
options |
object[] |
For type: 'select' , an array of { label: string, value: any } objects. |
defaultValue |
any |
Default value for the filter when the table loads. For date ranges, use dayjs objects: [dayjs().subtract(30, 'days'), dayjs()] . For selects, use string or array of strings. |
position |
'left' | 'right' |
Positions the filter on the left or right. Defaults to the left. |
Setting Default Values for Global Filters
You can set default values for any global filter using the defaultValue
property:
// Date Range - Last 30 days
{
key: 'dateRange',
type: 'dateRange',
title: 'Date Range',
defaultValue: [
dayjs().subtract(30, 'days'), // Start date
dayjs() // End date
]
}
// Single Select - Default to specific value
{
key: 'status',
type: 'select',
title: 'Status',
options: [
{ label: 'Active', value: 'ACTIVE' },
{ label: 'Inactive', value: 'INACTIVE' }
],
defaultValue: 'ACTIVE'
}
// Multi-Select - Default to multiple values
{
key: 'roles',
type: 'select',
mode: 'multiple',
title: 'Roles',
options: [
{ label: 'Admin', value: 'ADMIN' },
{ label: 'User', value: 'USER' }
],
defaultValue: ['ADMIN', 'USER']
}
// Search - Default search term
{
key: 'search',
type: 'search',
title: 'Search',
defaultValue: 'john'
}
tableFeatures
Enables or configures special table features.
Key | Type | Description |
---|---|---|
rowKey |
string |
The unique identifier field for each row in the data array (e.g., id , prsNumber ). This is crucial for selection and performance. |
stateManagement |
object |
Configures state persistence. See State Management Configuration below. |
rowSelection |
object |
Configures row selection. See Row Selection Configuration below. |
State Management Configuration
Key | Type | Description |
---|---|---|
enabled |
boolean |
If true , enables state persistence. |
storageKey |
string |
The key to use for storing the table's state in localStorage . |
persistColumns |
boolean |
If true , persists column visibility and order (future feature). |
persistFilters |
boolean |
If true , persists active filters. |
persistSort |
boolean |
If true , persists the current sorting. |
persistPagination |
boolean |
If true , persists the current page number and size. |
Row Selection Configuration
Key | Type | Description |
---|---|---|
enabled |
boolean |
If true , enables row selection. |
type |
'checkbox' | 'radio' |
The type of selection. |
Component Props
Prop | Type | Description |
---|---|---|
config |
object |
The main JSON configuration object for the table. |
onDataFetch |
(params) => Promise<{ data: any[], pagination?: { totalCount: number } }> |
A function that is called to fetch table data. It receives pagination , filters , and sorter info and should return the data and total count. |
onExport |
(params) => Promise<Blob | { success: boolean, message?: string }> |
A function to handle data exporting. It receives the current filters and sort info. |
className |
string |
An optional CSS class to apply to the main table container. |
style |
React.CSSProperties |
Optional inline styles to apply to the main container. |