Skip to content

entiqon/datagrid

Repository files navigation

@entiqon/datagrid

npm version npm downloads GitHub License publish release-drafter Tests CI Coverage

A modern, typed, and extensible DataGrid library for React, built on:

  • Context-driven modular state
  • Controller/state slices
  • A UI-agnostic design that lets you provide your own table component
  • A rich hook API for interaction, pagination, selection, mode control, and events

This version (0.3.x) introduces a fully modular architecture with context slices, a unified provider, and new hooks.


πŸš€ Features

  • βš›οΈ React-first API
  • 🧠 Context-driven state slices (data, actions, pagination, selection, focus, mode)
  • 🧩 DataGridProvider with external control support
  • πŸŽ› Full hook suite for granular access & composition
  • 🎨 UI-agnostic: renderer is fully under your control
  • πŸ§ͺ Built-in Vitest + React Testing Library
  • πŸ€– Automated releases with Changesets + GitHub Actions
  • πŸ“¦ Tree-shakable ES modules

πŸ“¦ Installation

npm install @entiqon/datagrid

or

yarn add @entiqon/datagrid

🧩 Usage Overview

1. High-Level API β€” DataGrid Component

import DataGrid, { DataGridView } from '@entiqon/datagrid';

export default function App() {
  return (
    <DataGrid data={rows} columns={columns}>
      <DataGridView />
    </DataGrid>
  );
}

2. Low-Level API β€” DataGridProvider

import { DataGridProvider } from '@entiqon/datagrid';

export default function App() {
  return (
    <DataGridProvider data={rows} columns={columns}>
      <CustomGrid />
    </DataGridProvider>
  );
}

πŸŽ› Hook API

useData()

const { rows, setRows, updateRow, removeRow } = useData();

useActions()

const { refresh, reload } = useActions();

usePagination()

const { page, pageSize, total, next, prev, setPage } = usePagination();

useSelection()

const { selected, toggle, clear, selectAll } = useSelection();

useFocus()

const { focusedRow, setFocusedRow } = useFocus();

useGridMode()

const { mode, setMode, isCreate, isUpdate } = useGridMode();

useCurrentRow()

const { current } = useCurrentRow();

useGridEvents()

useGridEvents({
  onRowClick(row) {},
  onSelectionChange(selected) {},
});

useDataGrid() β€” Unified hook

const { data, actions, pagination, selection, focus, mode } = useDataGrid();

πŸ”§ Example: Pagination UI

const { page, next, prev } = usePagination();

πŸ” Example: Row Selection

const { selected, toggle } = useSelection();

🧭 Example: CRUD Workflow Using useGridMode

const { mode, setMode, isCreate } = useGridMode();

🎨 Example: Custom Grid Renderer

export function MyGrid() {
  const { data } = useData();
  const { selected } = useSelection();
}

βš™οΈ TypeScript Path Aliases

{
  "paths": {
    "@context/*": ["src/context/*"],
    "@contracts": ["src/contracts/index.ts"],
    "@hooks": ["src/hooks/index.ts"]
  }
}

πŸ§ͺ Development

npm test
npm run test:watch
npm run build

πŸš€ Versioning & Releases

  • Changesets
  • GitHub Actions

πŸ“ License

MIT Β© ENTIQON

About

A modern, stylable, opinionated DataGrid component for React

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Contributors 3

  •  
  •  
  •