JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 24
  • Score
    100M100P100Q73721F
  • License MIT

A dynamic table library with backend-driven configuration

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 the onDataFetch 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.