1
1
## @jjmyers/datatable
2
2
3
+ ### The styling of the datatable can be customized.
3
4
### Check out the [ DEMO WEBSITE] ( https://joshbot-debug.github.io/datatable )
4
5
5
6
A datatable equiped with every commonly used filter. The demo has an array of 10,000 records. Not all features are active here.
@@ -31,27 +32,47 @@ import "@jjmyers/datatable/build/styles/default.css"
31
32
``` tsx
32
33
33
34
import { useDatatable , type Datatable } from " @jjmyers/datatable" ;
34
- import " @jjmyers/datatable/build/styles/default.css"
35
+ import " @jjmyers/datatable/build/styles/default.css" // OR elegance.css
36
+
37
+ const status = [" online" , " offline" , " available" , " unavailable" , " dnd" ]
38
+
39
+ type Data = {
40
+ id: number ;
41
+ status: string ;
42
+ fullName: string ;
43
+ // ...more fields
44
+ }
45
+
35
46
36
47
function MyListOfData() {
37
48
38
49
const [isFetching, setIsFetching] = useState (false );
39
50
40
- const { Datatable, ... controller } = useDatatable ({
51
+ const { Datatable, ... controller } = useDatatable < Data > ({
41
52
data: data , // An array of objects
42
53
count: data .length , // This is the total number of records in the database
43
54
serverSide: false , // If this is false, data manipulation will be handled client sided. DEFAULT: true
44
55
onFilter: console .log , // If serverSide is true, you need to handle the filters here and update data.
56
+
45
57
columns: [
46
- { field: " emp_id" , datatype: " number" , sortable: false },
47
- { field: " name" , datatype: " string" , multiFilter: true },
48
- { field: " email" , datatype: " email" , },
49
- { field: " dob" , datatype: " date" },
50
- { field: " image" , datatype: " image" },
58
+ // There are more props
59
+ // You'll have to check them yourself
60
+ { field: " id" , width: 85 , datatype: " number" },
61
+ { field: " status" , setOptions: status , multiFilter: true },
62
+ { field: " fullName" , width: 250 },
63
+ { field: " firstName" },
64
+ { field: " middleName" },
65
+ { field: " lastName" },
66
+ { field: " email" , width: 250 , datatype: " email" },
51
67
{ field: " phone" , datatype: " phone" },
52
- { field: " is_active" , datatype: " boolean" },
53
- { field: " bio" , datatype: " paragraph" },
54
-
68
+ { field: " isActive" , datatype: " boolean" },
69
+ { field: " profileImage" , datatype: " image" , omit: true },
70
+ { field: " website" , width: 250 , datatype: " link" },
71
+ { field: " loginTime" , datatype: " time" },
72
+ { field: " dateOfBirth" , width: 180 , datatype: " date" },
73
+ { field: " about" , width: 500 , datatype: " paragraph" },
74
+ { field: " createdAt" , width: 250 , datatype: " datetime" },
75
+
55
76
// For custom fields that do not exist in "data", use @ts-ignore
56
77
// @ts-ignore
57
78
{ field: " customField" },
@@ -61,21 +82,15 @@ function MyListOfData() {
61
82
// Just an example of how you can add buttons here and manipulate the datatable if needed.
62
83
const AppsPanel = ({ OmitColumns }: Datatable .AppsPanelProps ) => (
63
84
<>
64
- <button onClick = { () => controller .selectable .selectAll (true )} style = { { padding: 8 }} >Check All</button >
65
- <button onClick = { () => controller .selectable .selectAll (false )} style = { { padding: 8 }} >Uncheck All</button >
66
- <button onClick = { () => controller .updateFilter (prev => ({ ... prev , [" custom" ]: " Hello!" }))} style = { { padding: 8 }} >Custom filter option</button >
67
- <button onClick = { () => setIsFetching (p => ! p )} style = { { padding: 8 }} >Bulk update</button >
68
- <button onClick = { () => controller .pagination .lastPage ()} style = { { padding: 8 }} >Last page</button >
85
+ <button onClick = { () => controller .reset ()} style = { { padding: 8 }} >Reset Filters</button >
69
86
{ OmitColumns }
70
87
</>
71
88
)
72
89
73
90
// Just an exmple of adding options to rows
74
91
const RowOptionMenu = ({ row , rowIndex }: Datatable .RowOptionMenuProps ) => (<>
75
- <div onClick = { () => setIsFetching (p => ! p )} style = { { padding: 8 }} >Row Option 1</div >
76
- <div onClick = { () => setIsFetching (p => ! p )} style = { { padding: 8 }} >Row Option 2</div >
77
- <div onClick = { () => setIsFetching (p => ! p )} style = { { padding: 8 }} >Row Option 3</div >
78
- <div onClick = { () => setIsFetching (p => ! p )} style = { { padding: 8 }} >Row Option 4</div >
92
+ <div onClick = { () => {}} style = { { padding: 8 }} >Row Option 1</div >
93
+ <div onClick = { () => {}} style = { { padding: 8 }} >Row Option 2</div >
79
94
</>);
80
95
81
96
0 commit comments