Package Exports
- react-datagrid-component
- react-datagrid-component/dist/index.es.js
- react-datagrid-component/dist/index.umd.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 (react-datagrid-component) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
FluentGrid - Advanced React Data Grid Component
A powerful, customizable data grid component built with React, TypeScript, and TanStack Table v8. Features include column resizing, pinning, filtering, sorting, pagination, cell editing, and theme support.
🚀 Features
- 📊 Advanced Data Grid: Built on TanStack Table v8 for maximum performance
- 🎨 Theme Support: Light/dark mode with custom primary colors
- 📏 Column Management: Resize, pin, reorder, and hide columns
- 🔍 Smart Filtering: Type-specific filters with advanced operators and global filter panel
- ✏️ Cell Editing: Inline editing with validation and large text support
- 📱 Responsive Design: Mobile-friendly with adaptive layouts
- ⚡ Virtual Scrolling: Optimized for large datasets
- 🎯 Bulk Actions: Multi-select with bulk operations
- 📤 Import/Export: CSV and Excel support
- 🔧 Highly Customizable: Extensive props and styling options
📦 Installation
npm install react-datagrid-component
# or
yarn add react-datagrid-component
# or
pnpm add react-datagrid-component⚠️ CRITICAL: Required Dependencies
Make sure you have these peer dependencies installed:
npm install @tanstack/react-table react-resizable-panels
# or
yarn add @tanstack/react-table react-resizable-panels
# or
pnpm add @tanstack/react-table react-resizable-panels🎨 Including Styles
⚠️ IMPORTANT: You MUST import the CSS file for drag & drop and resize functionality to work:
import 'react-datagrid-component/dist/style.css';Without this CSS import, the following features will NOT work:
- Column resizing (drag handles won't appear)
- Drag and drop column reordering
- Proper styling and interactions
The CSS file includes:
- Tailwind CSS utilities
- Component-specific styles
- Theme-aware styling
- Responsive design
- Accessibility features
- Critical drag and resize handle styles
🚨 Troubleshooting: Drag & Drop / Resize Not Working?
If drag and drop or column resize functionality isn't working in your project:
1. Check CSS Import
// ✅ Make sure you have this import
import 'react-datagrid-component/dist/style.css';2. Check Dependencies
# Make sure these are installed
npm install @tanstack/react-table react-resizable-panels3. Check Your Build Configuration
If you're using a bundler that doesn't handle CSS imports automatically, you may need to:
For Vite:
// vite.config.js
export default defineConfig({
optimizeDeps: {
include: ['react-datagrid-component']
}
})For Webpack:
// webpack.config.js
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
}4. Manual CSS Import
If automatic CSS import isn't working, you can manually copy the styles:
/* Add these critical styles to your CSS */
.column-resize-handle {
position: absolute;
right: 0;
top: 0;
height: 100%;
width: 4px;
cursor: col-resize;
user-select: none;
touch-action: none;
z-index: 10;
transition: all 0.2s ease;
background-color: transparent;
}
.column-resize-handle:hover {
width: 6px;
background-color: hsl(var(--primary) / 0.2);
border-right: 1px solid hsl(var(--primary) / 0.3);
}
.drag-handle {
cursor: grab;
transition: all 0.2s ease;
opacity: 0.6;
pointer-events: auto;
z-index: 5;
}
.drag-handle:hover {
opacity: 1;
background-color: hsl(var(--muted) / 0.5);
}
.drag-handle:active {
cursor: grabbing;
background-color: hsl(var(--primary) / 0.1);
}🎯 Quick Start
import { DataGridTable } from 'react-datagrid-component';
// ⚠️ CRITICAL: Import CSS for functionality
import 'react-datagrid-component/dist/style.css';
const columns = [
{
id: 'name',
header: 'Name',
accessorKey: 'name',
type: 'text',
editable: true,
},
{
id: 'age',
header: 'Age',
accessorKey: 'age',
type: 'number',
sortable: true,
},
{
id: 'status',
header: 'Status',
accessorKey: 'status',
type: 'badge',
options: [
{ label: 'Active', value: 'active' },
{ label: 'Inactive', value: 'inactive' },
],
},
];
const data = [
{ id: 1, name: 'John Doe', age: 30, status: 'active' },
{ id: 2, name: 'Jane Smith', age: 25, status: 'inactive' },
];
function App() {
return (
<DataGridTable
data={data}
columns={columns}
tableName="Users"
onDataChange={(newData) => console.log('Data changed:', newData)}
/>
);
}📚 API Reference
DataGridTable Props
| Prop | Type | Default | Description |
|---|---|---|---|
data |
T[] |
- | Array of data objects |
columns |
DataGridColumn<T>[] |
- | Column definitions |
tableName |
string |
- | Display name for the table |
loading |
boolean |
false |
Loading state |
error |
string |
- | Error message to display |
onDataChange |
(data: T[]) => void |
- | Callback when data changes |
onRowEdit |
(row: T, field: keyof T, value: any) => Promise<void> |
- | Row edit callback |
onRowDelete |
(rows: T[]) => Promise<void> |
- | Row delete callback |
onExport |
(data: T[], format: 'csv' | 'xlsx') => void |
- | Export callback |
onImport |
(data: T[]) => void |
- | Import callback |
pagination |
PaginationConfig |
{ pageSize: 25, showSizeSelect: true, pageSizeOptions: [10, 25, 50, 100] } |
Pagination settings |
selection |
SelectionConfig |
{ enabled: true } |
Row selection settings |
globalSearch |
GlobalSearchConfig |
{ enabled: true, placeholder: "Search across all columns..." } |
Global search settings |
theming |
ThemingConfig |
{ enabled: true, defaultTheme: 'light' } |
Theme settings |
className |
string |
- | Additional CSS classes |
apiConfig |
DataGridApiConfig |
- | API configuration for CRUD operations |
Column Types
| Type | Description | Features |
|---|---|---|
text |
Text input | Basic text editing, filtering |
number |
Numeric input | Number validation, range filtering |
select |
Dropdown selection | Predefined options, multi-select |
date |
Date picker | Date range filtering, calendar |
badge |
Status badges | Color-coded status display |
image |
Image display | Thumbnail preview |
chart |
Chart visualization | Data visualization |
largeText |
Large text editor | Multi-line editing, popup editor |
Column Properties
| Property | Type | Description |
|---|---|---|
id |
string |
Unique column identifier |
header |
string |
Column header text |
accessorKey |
keyof T |
Data field key |
type |
ColumnType |
Column type for rendering |
editable |
boolean |
Enable cell editing |
filterable |
boolean |
Enable column filtering |
sortable |
boolean |
Enable column sorting |
pinnable |
boolean |
Enable column pinning |
width |
number |
Column width in pixels |
minWidth |
number |
Minimum column width |
maxWidth |
number |
Maximum column width |
options |
Array<{label: string, value: any}> |
Options for select/badge types |
🎨 Styling
The component uses Tailwind CSS for styling and includes comprehensive CSS classes. You can customize the appearance in several ways:
1. CSS Import (Required)
import 'react-datagrid-component/dist/style.css';2. Theme Variables
Override CSS custom properties for theming:
:root {
--primary: 20 14.3% 4.1%;
--primary-foreground: 60 9.1% 97.8%;
--background: 0 0% 100%;
--foreground: 20 14.3% 4.1%;
--muted: 210 40% 96%;
--muted-foreground: 215.4 16.3% 46.9%;
--border: 214.3 31.8% 91.4%;
--ring: 215 20.2% 65.1%;
/* ... more variables */
}3. Custom Classes
Pass additional CSS classes via the className prop:
<DataGridTable
data={data}
columns={columns}
className="my-custom-grid bg-blue-50"
/>4. Component-Specific Classes
The CSS includes utility classes for specific components:
.fluent-grid-badge.active { /* Active badge styles */ }
.fluent-grid-avatar { /* Avatar styles */ }
.fluent-grid-progress { /* Progress bar styles */ }
.fluent-grid-search { /* Search input styles */ }5. Tailwind Configuration
Extend your Tailwind configuration to include the component's design tokens:
// tailwind.config.js
module.exports = {
content: [
'./src/**/*.{js,ts,jsx,tsx}',
'node_modules/react-datagrid-component/dist/**/*.js'
],
theme: {
extend: {
colors: {
// Your custom colors
}
}
}
}🔧 Advanced Usage
Custom Cell Renderers
import { CellRenderer } from 'fluent-grid';
const CustomCell = ({ value, row, column, isEditing, onSave, onCancel }) => {
if (isEditing) {
return (
<input
value={value}
onChange={(e) => onSave(e.target.value)}
onBlur={onCancel}
autoFocus
/>
);
}
return <span>{value}</span>;
};
const columns = [
{
id: 'custom',
header: 'Custom',
accessorKey: 'custom',
cell: CustomCell,
},
];API Integration
const apiConfig = {
fetchUrl: 'https://api.example.com/users',
updateUrl: 'https://api.example.com/users/:id',
deleteUrl: 'https://api.example.com/users',
method: 'PATCH',
};
<DataGridTable
data={data}
columns={columns}
apiConfig={apiConfig}
onRowEdit={async (row, field, value) => {
// Custom edit logic
await updateUser(row.id, { [field]: value });
}}
/>Custom Filtering
const columns = [
{
id: 'status',
header: 'Status',
accessorKey: 'status',
type: 'select',
filterable: true,
options: [
{ label: 'Active', value: 'active' },
{ label: 'Inactive', value: 'inactive' },
{ label: 'Pending', value: 'pending' },
],
},
];Global Filter Panel
The global filter panel provides a centralized filtering experience with multiple filter rows, supporting AND/OR logic combinations.
<DataGridTable
data={data}
columns={columns}
globalFilter={{
enabled: true, // Enable global filter panel
}}
/>Features:
- Multiple Filter Rows: Add unlimited filter conditions
- Column Selection: Choose from available columns
- Type-Specific Operators: Operators adapt to column type
- AND/OR Logic: Combine filters with logical operators
- Value Inputs: Type-appropriate input controls (text, number, date, select)
- Real-time Validation: Only valid filters are applied
- Clear All: Remove all filters at once
Supported Operators by Type:
| Column Type | Operators |
|---|---|
text |
contains, not contains, starts with, ends with, equals, not equals, in, not in |
number |
equals, not equals, greater than, greater than or equal, less than, less than or equal, between |
date |
equals, not equals, after, on or after, before, on or before, between |
select/badge |
equals, not equals, in, not in |
Example Usage:
// Filter users who are active AND age > 25 OR email contains "@gmail.com"
// This would be configured in the global filter panel with:
// Filter 1: Status = Active AND Age > 25
// Filter 2: Email contains "@gmail.com" (OR logic)📦 Exported Components
DataGridTable- Main data grid componentThemePicker- Theme selection componentFileUpload- Import/export componentColumnVisibility- Column visibility toggleColumnFilter- Individual column filterGlobalFilterPanel- Global filter panel componentAppliedFilters- Active filters displayBulkActions- Bulk operations componentTablePagination- Pagination componentCellRenderer- Cell rendering utilitiesDensitySelector- Row density selectorPinnedColumnsIndicator- Pinned columns displayLargeTextEditor- Large text editing dialogResizablePopup- Resizable popup component
🔗 Dependencies
Peer Dependencies
react^18.0.0react-dom^18.0.0@tanstack/react-table^8.0.0
Required Dependencies
@radix-ui/*- UI primitiveslucide-react- Iconsdate-fns- Date utilitiesreact-day-picker- Date pickerclass-variance-authority- Component variantsclsx- Conditional classestailwind-merge- Tailwind class merging
🤝 Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
📄 License
MIT License - see LICENSE file for details
🔧 Troubleshooting
CSS Import Issues
If you encounter an error like:
Failed to resolve import "react-datagrid-component/dist/style.css"Solution: Make sure you're importing the CSS file correctly:
import 'react-datagrid-component/dist/style.css';Common issues:
- Missing CSS import: Always import the CSS file after installing the package
- Build tool configuration: Ensure your bundler (Vite, Webpack, etc.) can handle CSS imports
- Package version: Make sure you're using the latest version of the package
Styling Issues
If the component doesn't look styled properly:
- Check CSS import: Ensure the CSS file is imported
- Tailwind CSS: Make sure Tailwind CSS is installed and configured in your project
- CSS variables: Verify that your CSS custom properties are defined
Build Issues
If you encounter build errors:
- Peer dependencies: Ensure all peer dependencies are installed
- TypeScript: Make sure TypeScript is configured to handle the package types
- Module resolution: Check that your bundler can resolve ES modules