11## @jjmyers/datatable
22
3+ ### The styling of the datatable can be customized.
34### Check out the [ DEMO WEBSITE] ( https://joshbot-debug.github.io/datatable )
45
56A 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"
3132``` tsx
3233
3334import { 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+
3546
3647function MyListOfData() {
3748
3849 const [isFetching, setIsFetching] = useState (false );
3950
40- const { Datatable, ... controller } = useDatatable ({
51+ const { Datatable, ... controller } = useDatatable < Data > ({
4152 data: data , // An array of objects
4253 count: data .length , // This is the total number of records in the database
4354 serverSide: false , // If this is false, data manipulation will be handled client sided. DEFAULT: true
4455 onFilter: console .log , // If serverSide is true, you need to handle the filters here and update data.
56+
4557 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" },
5167 { 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+
5576 // For custom fields that do not exist in "data", use @ts-ignore
5677 // @ts-ignore
5778 { field: " customField" },
@@ -61,21 +82,15 @@ function MyListOfData() {
6182 // Just an example of how you can add buttons here and manipulate the datatable if needed.
6283 const AppsPanel = ({ OmitColumns }: Datatable .AppsPanelProps ) => (
6384 <>
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 >
6986 { OmitColumns }
7087 </>
7188 )
7289
7390 // Just an exmple of adding options to rows
7491 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 >
7994 </>);
8095
8196
0 commit comments