Skip to content

Commit cf7ca16

Browse files
committed
Add Table.tsx
1 parent 5de23c1 commit cf7ca16

File tree

2 files changed

+135
-0
lines changed

2 files changed

+135
-0
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
import {
2+
DataGrid as MuiDataGrid,
3+
type GridCallbackDetails,
4+
type GridColDef,
5+
type GridPaginationModel,
6+
type GridRowModel,
7+
type GridRowParams,
8+
type MuiEvent,
9+
} from "@mui/x-data-grid";
10+
import type { ComponentProps, ComponentState } from "@/index";
11+
12+
interface TableState extends ComponentState {
13+
rows?: GridRowModel[];
14+
columns?: GridColDef[];
15+
ariaLabel?: string;
16+
autoPageSize?: boolean;
17+
checkboxSelection?: boolean;
18+
density?: "compact" | "standard" | "comfortable";
19+
disableAutosize?: boolean;
20+
disableColumnFilter?: boolean;
21+
disableColumnMenu?: boolean;
22+
disableColumnResize?: boolean;
23+
disableColumnSelector?: boolean;
24+
disableColumnSorting?: boolean;
25+
disableDensitySelector?: boolean;
26+
disableMultipleRowSelection?: boolean;
27+
disableRowSelectionOnClick?: boolean;
28+
editMode?: "cell" | "row";
29+
hideFooter?: boolean;
30+
hideFooterPagination?: boolean;
31+
hideFooterSelectedRowCount?: boolean;
32+
initialState?: {
33+
pagination?: {
34+
paginationModel: GridPaginationModel;
35+
};
36+
};
37+
loading?: boolean;
38+
pageSizeOptions?: number[] | { label: string; value: number }[];
39+
paginationModel?: GridPaginationModel;
40+
rowHeight?: number;
41+
rowSelection?: boolean;
42+
}
43+
44+
interface TableProps extends ComponentProps, TableState {}
45+
46+
export const Table = ({
47+
type,
48+
id,
49+
style,
50+
rows,
51+
columns,
52+
ariaLabel,
53+
autoPageSize,
54+
checkboxSelection,
55+
density,
56+
disableAutosize,
57+
disableColumnFilter,
58+
disableColumnMenu,
59+
disableColumnResize,
60+
disableColumnSelector,
61+
disableColumnSorting,
62+
disableDensitySelector,
63+
disableMultipleRowSelection,
64+
disableRowSelectionOnClick,
65+
editMode,
66+
hideFooter,
67+
hideFooterPagination,
68+
hideFooterSelectedRowCount,
69+
initialState,
70+
loading,
71+
rowHeight,
72+
rowSelection,
73+
paginationModel,
74+
pageSizeOptions,
75+
onChange,
76+
}: TableProps) => {
77+
if (!columns) {
78+
return;
79+
}
80+
81+
const handleClick = (
82+
params: GridRowParams,
83+
event: MuiEvent,
84+
details: GridCallbackDetails,
85+
) => {
86+
console.log(params, event, details, id);
87+
if (id) {
88+
if (onChange) {
89+
onChange({
90+
componentType: type,
91+
id: id,
92+
property: "value",
93+
value: params.row,
94+
});
95+
}
96+
}
97+
};
98+
99+
return (
100+
<div id={id}>
101+
<MuiDataGrid
102+
rows={rows}
103+
columns={columns}
104+
aria-label={ariaLabel}
105+
autoPageSize={autoPageSize}
106+
checkboxSelection={checkboxSelection}
107+
density={density}
108+
disableAutosize={disableAutosize}
109+
disableColumnFilter={disableColumnFilter}
110+
disableColumnMenu={disableColumnMenu}
111+
disableColumnResize={disableColumnResize}
112+
disableColumnSelector={disableColumnSelector}
113+
disableColumnSorting={disableColumnSorting}
114+
disableDensitySelector={disableDensitySelector}
115+
disableMultipleRowSelection={disableMultipleRowSelection}
116+
disableRowSelectionOnClick={disableRowSelectionOnClick}
117+
hideFooterSelectedRowCount={hideFooterSelectedRowCount}
118+
editMode={editMode}
119+
hideFooter={hideFooter}
120+
hideFooterPagination={hideFooterPagination}
121+
initialState={initialState}
122+
loading={loading}
123+
onRowClick={handleClick}
124+
paginationModel={paginationModel}
125+
pageSizeOptions={pageSizeOptions}
126+
rowHeight={rowHeight}
127+
rowSelection={rowSelection}
128+
sx={style}
129+
data-testid="data-grid-test-id" // For testing purposes
130+
/>
131+
</div>
132+
);
133+
};

chartlets.js/packages/lib/src/plugins/mui/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { Switch } from "./Switch";
1111
import { Tabs } from "./Tabs";
1212
import { Typography } from "./Typography";
1313
import { Slider } from "./Slider";
14+
import { Table } from "@/plugins/mui/Table";
1415

1516
export default function mui(): Plugin {
1617
return {
@@ -25,6 +26,7 @@ export default function mui(): Plugin {
2526
["Select", Select],
2627
["Slider", Slider],
2728
["Switch", Switch],
29+
["Table", Table],
2830
["Tabs", Tabs],
2931
["Typography", Typography],
3032
],

0 commit comments

Comments
 (0)