npm:@braniac/virtual-grid | Skypack
Usage no npm install needed!
<script type="module">
import braniacVirtualGrid from 'https://cdn.skypack.dev/@braniac/virtual-grid';
</script>
README
Table Wrapper for React Virtualized
Usage
<Table
title={title}
columns={columns}
header
data={data}
utility={{
optionalButton:[
(i)=>{
return <React.Fragment key={`optional.ele.${i}`}>
<IconButton edge="start" className={classes.icon} color="inherit" onClick={close} aria-label="Close">
<CloseIcon />
</IconButton>
</React.Fragment>
}
],
ExportData:(e)=>{
return true;
},
onSearch:(e)=>{ return true;},
onSort:(o)=>{
return true;
},
onFilter:(o)=>{
return true;
}
}}
rowHeight={55}
fixedCols={0}
minColumnWidth={250}
actions={{
onUpdateApply: ({rowIndex,data:value}) => {
return true;
},
onSelectRow:()=>{
return true;
},
onAddRow:({rowIndex,data:value})=>{
return true;
}
}}
/>
Table Props
| Property |
Type |
Allowed Values |
Description |
tilte |
string|element |
any |
Table Header Title |
columns |
array |
array of column definition objects |
Array of column definitions |
header |
boolean |
true|false |
Header visibility |
data |
array |
array of objects |
Array of data objects |
utility |
object |
utility definition |
Table utility configuration object |
rowHeight |
number |
any |
Table Row Height |
fixedCols |
number |
any >= 0 |
Frozen column count from left |
minColumnWidth |
number |
any |
Minimum column width |
actions |
object |
action definition |
Table actions column configurations |
Column Definition
{
label: 'Fat (g)',
dataKey: 'fat',
numeric: true,
visible:true,
width:200,
align:"right",
displayFormat:{
thousandSeparator:true,
precision:2,
suffix:"%",
currency:{
derived:true,
key:"calories",
frmt:(data)=>{return {id:data,symbol:"LKR",prefixSymbol:false}}
}
}
,
filter:{
enable:true,
type:"number"
},
editor:{
editable:true,
type:'number'
}
}
| Property |
Type |
Allowed Values |
Definition |
label |
string |
any |
|
dataKey |
string |
any |
|
numeric |
boolean |
true|false |
|
visible |
boolean |
true|false |
|
width |
number |
any > minColumnWidth |
|
align |
text |
left|right|center |
|
displayFormat |
object |
display format definition |
Optional display format definition for numeric columns |
filter |
object |
filter definition |
|
editor |
object |
editor definition |
|
Display Format Definition
| Property |
Type |
Allowed Values |
Definition |
thousandSeparator |
boolean |
true|false |
|
precision |
number |
any > 0 |
|
suffix |
string |
any |
Optional suffix for the formatter |
prefix |
string |
any |
Optional prefix for the formatter |
currency |
object |
currency format definition |
Optional currency format definition |
Currency definition
| Property |
Type |
Allowed Values |
Definition |
derived |
boolean |
true|false |
|
key |
string |
any |
|
frmt |
function |
function should return {symbol:" |
quot;,prefixSymbol:true} format
|
Filter definition
| Property |
Type |
Allowed Values |
Definition |
enable |
boolean |
true|false |
|
type |
string |
date|boolean|number|text |
|
Editor definition
| Property |
Type |
Allowed Values |
Definition |
editable |
boolean |
true|false |
|
type |
string |
date|boolean|number|text |
|
Utility Definition
{
optionalButton:[
(i)=>{
return <React.Fragment key={`optional.ele.${i}`}>
<IconButton>
<CloseIcon />
</IconButton>
</React.Fragment>
}
],
ExportData:(e)=>{
return true;
},
onSearch:(e)=>{ return true;},
onSort:(o)=>{
return true;
},
onFilter:(o)=>{
return true;
}
}
| Property |
Type |
Allowed Values |
Definition |
optionalButton |
array |
array of functions should return element |
|
ExportData |
function |
function should return boolean |
|
onSearch |
function |
function should return boolean |
|
onSort |
function |
function should return boolean |
|
onFilter |
function |
function should return boolean |
|
Actions definition
{
onUpdateApply: ({rowIndex,data:value}) => {
return true;
},
onSelectRow:()=>{
return true;
},
onAddRow:({rowIndex,data:value})=>{
return true;
},
onDeleteRow:({rowIndex,data:value})=>{
return true;
},
renderer:{
EditRow:(...),
AddRow:(...),
DefaultRow:(...)
}
}
| Property |
Type |
Allowed Values |
Definition |
onUpdateApply |
function |
function should return boolean |
|
onSelectRow |
function |
function should return boolean |
|
onAddRow |
function |
function should return boolean |
|
onDeleteRow |
function |
function should return boolean |
|
renderer |
object |
action renderer definition |
Optional render definition to override defaults |
Action Renderer Definition
| Property |
Type |
Allowed Values |
Definition |
EditRow |
function |
function returning a element |
|
AddRow |
function |
function returning a element |
|
DefaultRow |
function |
function returning a element |
|
Example
const cols = [
{
label: 'Dessert',
dataKey: 'dessert',
visible:true,
width:60,
sortable:true,
filter:{
enable:true,
type:"text"
},
editor:{
editable:false,
type:'text'
}
},
{
label: 'Calories (g)',
dataKey: 'calories',
numeric: true,
visible:true,
sortable:true,
width:200,
flexGrow: 1.0
},
{
label: 'Fat (g)',
dataKey: 'fat',
numeric: true,
visible:true,
flexGrow:1,
width:200,
align:"right",
displayFormat:{
thousandSeparator:true,
precision:2,
suffix:"%",
currency:{
derived:true,
key:"calories",
frmt:(data)=>{return {id:data,symbol:"LKR",prefixSymbol:false}}
}
}
,
filter:{
enable:true,
type:"number"
},
editor:{
editable:true,
type:'number'
}
}
];
const data = Array.from({length: 600}, (x,i) => {return cols.reduce((acc,{dataKey,type,numeric=false},i)=>{
if(type && type === "boolean")
acc[dataKey] = Math.floor(Math.random() * Math.floor(3)) %2 === 0 ;
else
acc[dataKey] = numeric ? Math.floor(Math.random() * Math.floor(3000)) + 1 : Math.random().toString(36).substring(2);
return acc;
},{})});
const Sample = (props)=>{
return <Table
title={"Test Table"}
columns={cols}
header
data={data}
utility={{
optionalButton:[
(i)=>{
return <React.Fragment key={`optional.ele.${i}`}>
<IconButton>
<CloseIcon />
</IconButton>
</React.Fragment>
}
],
ExportData:(e)=>{
return true;
},
onSearch:(e)=>{ return true;},
onSort:(o)=>{
return true;
},
onFilter:(o)=>{
return true;
}
}}
rowHeight={55}
fixedCols={0}
minColumnWidth={250}
actions={{
onUpdateApply: ({rowIndex,data:value}) => {
return true;
},
onSelectRow:()=>{
return true;
},
onAddRow:({rowIndex,data:value})=>{
return true;
}
}}
/>
}