UNPKG

@blocktion/json-to-table

Version:

A powerful, modular React component for converting JSON data to navigable tables with advanced features like automatic column detection, theming, and sub-table navigation. Part of the Blocktion SaaS project ecosystem.

59 lines (58 loc) 2.08 kB
import { TableOptions, Column } from "../core/types"; export interface EditableTableOptions extends TableOptions { enableEditing?: boolean; enableRowDeletion?: boolean; enableFieldEditing?: boolean; enableFieldDeletion?: boolean; enableInlineEditing?: boolean; enableBulkOperations?: boolean; editMode?: "inline" | "modal" | "sidebar"; validationRules?: ValidationRule[]; onDataChange?: (newData: unknown[], changes: DataChange[]) => void; onRowAdd?: (rowIndex: number, row: unknown) => void; onRowDelete?: (rowIndex: number, row: unknown) => void; onFieldUpdate?: (rowIndex: number, field: string, newValue: unknown, oldValue: unknown, navigationPath?: string[], rootDocumentIndex?: number) => void; onFieldDelete?: (rowIndex: number, field: string, value: unknown) => void; onBulkDelete?: (rowIndices: number[]) => void; } export interface DataChange { id: string; type: "row_delete" | "row_add" | "field_update" | "field_delete" | "field_add"; rowIndex: number; field?: string; oldValue?: unknown; newValue?: unknown; timestamp: Date; isValid: boolean; validationErrors?: string[]; } export interface ValidationRule { field: string; validator: (value: unknown, row: unknown) => boolean | string; message?: string; required?: boolean; } export interface EditState { isEditing: boolean; editingRow: number | null; editingField: string | null; pendingChanges: DataChange[]; validationErrors: Record<string, string>; selectedRows: Set<number>; isBulkMode: boolean; } export interface EditableColumn extends Column { editable?: boolean; deletable?: boolean; validationRules?: ValidationRule[]; editorType?: "text" | "number" | "boolean" | "date" | "select" | "custom"; editorProps?: Record<string, unknown>; } export interface TableState { data: unknown[]; originalData: unknown[]; changes: DataChange[]; editState: EditState; selectedRows: Set<number>; validationErrors: Record<string, string>; }