@trsys-tech/matrix-library 0.5.0-beta.1 → 0.5.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { default as React, HTMLAttributes } from 'react';
|
|
2
|
-
import { AgGridReactProps } from 'ag-grid-react';
|
|
2
|
+
import { AgGridReact, AgGridReactProps } from 'ag-grid-react';
|
|
3
3
|
import { GridApi, Theme, ThemeDefaultParams } from 'ag-grid-community';
|
|
4
4
|
import { ButtonProps } from '../button/Button';
|
|
5
5
|
import { IconButtonProps } from '../icon-botton/IconButton';
|
|
@@ -27,7 +27,9 @@ declare const DataGrid: React.FC<DataGridProps>;
|
|
|
27
27
|
type DataGridContentProps = Omit<AgGridReactProps, "theme"> & {
|
|
28
28
|
theme?: Theme;
|
|
29
29
|
};
|
|
30
|
-
declare const DataGridContent: React.
|
|
30
|
+
declare const DataGridContent: React.ForwardRefExoticComponent<Omit<AgGridReactProps<any>, "theme"> & {
|
|
31
|
+
theme?: Theme;
|
|
32
|
+
} & React.RefAttributes<AgGridReact<any>>>;
|
|
31
33
|
type DatagridActionBarProps = HTMLAttributes<HTMLDivElement> & {};
|
|
32
34
|
declare const DataGridActionBar: React.FC<DatagridActionBarProps>;
|
|
33
35
|
type SearchActionProps = HTMLAttributes<HTMLDivElement> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/data-grid/DataGrid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"DataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/data-grid/DataGrid.tsx"],"names":[],"mappings":"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"}
|
package/dist/datagrid.es.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { jsx as r, jsxs as
|
|
2
|
-
import t, { useMemo as
|
|
3
|
-
import { AgGridReact as
|
|
4
|
-
import { ModuleRegistry as
|
|
5
|
-
import { Magnifier as G, CircleXmark as
|
|
6
|
-
import { cn as
|
|
7
|
-
import { printHtml as
|
|
8
|
-
import { TextField as
|
|
1
|
+
import { jsx as r, jsxs as S } from "react/jsx-runtime";
|
|
2
|
+
import t, { forwardRef as A, useMemo as T } from "react";
|
|
3
|
+
import { AgGridReact as k } from "ag-grid-react";
|
|
4
|
+
import { ModuleRegistry as y, AllCommunityModule as F, themeQuartz as P } from "ag-grid-community";
|
|
5
|
+
import { Magnifier as G, CircleXmark as z, Snowflake as I, Print as H, Refresh as O, Trashcan as L, ElipsisVertical as M } from "@trsys-tech/matrix-icons";
|
|
6
|
+
import { cn as x } from "./utils.es.js";
|
|
7
|
+
import { printHtml as B } from "./printhtml.es.js";
|
|
8
|
+
import { TextField as Q } from "./textfield.es.js";
|
|
9
9
|
import { Button as E } from "./button.es.js";
|
|
10
|
-
import { IconButton as
|
|
11
|
-
import { Popover as
|
|
12
|
-
|
|
13
|
-
const
|
|
10
|
+
import { IconButton as b } from "./iconbutton.es.js";
|
|
11
|
+
import { Popover as q, PopoverTrigger as $, PopoverContent as j } from "./popover.es.js";
|
|
12
|
+
y.registerModules([F]);
|
|
13
|
+
const _ = P.withParams({
|
|
14
14
|
fontFamily: "DMSans",
|
|
15
15
|
fontSize: "12px",
|
|
16
16
|
headerFontSize: "12px",
|
|
@@ -20,13 +20,13 @@ const j = F.withParams({
|
|
|
20
20
|
accentColor: "hsl(var(--primary-300))",
|
|
21
21
|
foregroundColor: "hsl(var(--text-500))",
|
|
22
22
|
cellTextColor: "hsl(var(--text-500))"
|
|
23
|
-
}), p = t.createContext(null),
|
|
23
|
+
}), p = t.createContext(null), oe = () => {
|
|
24
24
|
const o = t.useContext(p);
|
|
25
25
|
if (!o)
|
|
26
26
|
throw new Error("useDataGrid should be used within <DataGrid>");
|
|
27
27
|
return o;
|
|
28
|
-
},
|
|
29
|
-
const s = t.useId(), [a, n] = t.useState(null), [i, d] = t.useState([]), [c,
|
|
28
|
+
}, ae = ({ children: o }) => {
|
|
29
|
+
const s = t.useId(), [a, n] = t.useState(null), [i, d] = t.useState([]), [c, l] = t.useState(0), [h, u] = t.useState(""), [e, f] = t.useState(!1);
|
|
30
30
|
return /* @__PURE__ */ r(
|
|
31
31
|
p.Provider,
|
|
32
32
|
{
|
|
@@ -37,49 +37,47 @@ const j = F.withParams({
|
|
|
37
37
|
setRowData: d,
|
|
38
38
|
gridId: s,
|
|
39
39
|
quickFilterText: h,
|
|
40
|
-
setQuickFilterText:
|
|
40
|
+
setQuickFilterText: u,
|
|
41
41
|
actionbarExists: e,
|
|
42
|
-
setActionbarExists:
|
|
42
|
+
setActionbarExists: f,
|
|
43
43
|
actionbarHeight: c,
|
|
44
|
-
setActionbarHeight:
|
|
44
|
+
setActionbarHeight: l
|
|
45
45
|
},
|
|
46
46
|
children: o
|
|
47
47
|
}
|
|
48
48
|
);
|
|
49
|
-
},
|
|
50
|
-
theme: o,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
);
|
|
82
|
-
}, ae = ({ className: o, ...s }) => {
|
|
49
|
+
}, U = A(
|
|
50
|
+
({ theme: o, onGridReady: s, quickFilterText: a, rowData: n, containerStyle: i, ...d }, c) => {
|
|
51
|
+
const l = t.useContext(p);
|
|
52
|
+
if (!l)
|
|
53
|
+
throw new Error("DataGridContent should be used within <DataGrid>");
|
|
54
|
+
const { rowData: h, setRowData: u, actionbarExists: e, setApi: f, setQuickFilterText: g, quickFilterText: C, gridId: D, actionbarHeight: w } = l, R = T(() => _.withParams({
|
|
55
|
+
headerHeight: 40,
|
|
56
|
+
wrapperBorderRadius: e ? "0px 0px 8px 8px" : "8px"
|
|
57
|
+
}), [e]), v = (m) => {
|
|
58
|
+
f(m.api), s?.(m);
|
|
59
|
+
};
|
|
60
|
+
return t.useEffect(() => {
|
|
61
|
+
u(n);
|
|
62
|
+
}, [n, u]), t.useEffect(() => {
|
|
63
|
+
a !== void 0 && g(a ?? "");
|
|
64
|
+
}, [a, g]), /* @__PURE__ */ r(
|
|
65
|
+
k,
|
|
66
|
+
{
|
|
67
|
+
gridId: D,
|
|
68
|
+
theme: o ?? R,
|
|
69
|
+
rowData: h,
|
|
70
|
+
quickFilterText: C,
|
|
71
|
+
onGridReady: v,
|
|
72
|
+
containerStyle: { height: `calc(100% - ${w}px)`, ...i },
|
|
73
|
+
...d,
|
|
74
|
+
ref: c
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
U.displayName = "DataGridContent";
|
|
80
|
+
const ie = ({ className: o, ...s }) => {
|
|
83
81
|
const a = t.useContext(p);
|
|
84
82
|
if (!a)
|
|
85
83
|
throw new Error("DataGridActionBar should be used within <DataGrid>");
|
|
@@ -89,7 +87,7 @@ const j = F.withParams({
|
|
|
89
87
|
}, [d]), /* @__PURE__ */ r(
|
|
90
88
|
"div",
|
|
91
89
|
{
|
|
92
|
-
className:
|
|
90
|
+
className: x(
|
|
93
91
|
"relative flex items-center p-2 h-12 w-full bg-gray-0 border border-gray-200 border-b-0 -mb-[1px] z-10 rounded-t-[8px]",
|
|
94
92
|
o
|
|
95
93
|
),
|
|
@@ -97,126 +95,126 @@ const j = F.withParams({
|
|
|
97
95
|
children: c
|
|
98
96
|
}
|
|
99
97
|
);
|
|
100
|
-
},
|
|
98
|
+
}, se = ({ defaultOpen: o = !1, className: s, ...a }) => {
|
|
101
99
|
const n = t.useContext(p);
|
|
102
100
|
if (!n)
|
|
103
101
|
throw new Error("SearchAction should be used within <DataGrid>");
|
|
104
|
-
const { quickFilterText: i, setQuickFilterText: d } = n, [c,
|
|
102
|
+
const { quickFilterText: i, setQuickFilterText: d } = n, [c, l] = t.useState(o), [h, u] = t.useState(!1), e = t.useRef(null), f = () => {
|
|
105
103
|
n.setQuickFilterText(""), e.current && e.current.focus();
|
|
106
|
-
},
|
|
107
|
-
|
|
104
|
+
}, g = () => {
|
|
105
|
+
l(!0);
|
|
108
106
|
};
|
|
109
107
|
t.useEffect(() => {
|
|
110
108
|
c && e?.current && e.current.focus();
|
|
111
109
|
}, [c]);
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
110
|
+
const C = () => {
|
|
111
|
+
u(!0), n.setQuickFilterText(""), setTimeout(() => {
|
|
112
|
+
l(!1), u(!1);
|
|
115
113
|
}, 200);
|
|
116
114
|
};
|
|
117
|
-
return /* @__PURE__ */ r("div", { className:
|
|
118
|
-
|
|
115
|
+
return /* @__PURE__ */ r("div", { className: x("max-w-60", s), ...a, children: c || h ? /* @__PURE__ */ r(
|
|
116
|
+
Q,
|
|
119
117
|
{
|
|
120
118
|
ref: e,
|
|
121
|
-
className:
|
|
122
|
-
onChange: (
|
|
119
|
+
className: x("relative h-7.5", c && !h ? "animate-input-open" : "", h && "animate-input-close"),
|
|
120
|
+
onChange: (D) => d(D.target.value),
|
|
123
121
|
value: i,
|
|
124
|
-
startAdornment: /* @__PURE__ */ r(
|
|
125
|
-
endAdornment: i && /* @__PURE__ */ r(
|
|
122
|
+
startAdornment: /* @__PURE__ */ r(b, { variant: "toolbar", className: "p-0.5 h-6 w-6 border-none mx-1", onClick: C, children: /* @__PURE__ */ r(G, { className: "w-5 h-5" }) }),
|
|
123
|
+
endAdornment: i && /* @__PURE__ */ r(b, { variant: "toolbar", className: "p-0.5 w-6 h-6 border-none mx-1", onClick: f, children: /* @__PURE__ */ r(z, { className: "w-5 h-5" }) })
|
|
126
124
|
}
|
|
127
|
-
) : /* @__PURE__ */ r(
|
|
128
|
-
},
|
|
125
|
+
) : /* @__PURE__ */ r(b, { variant: "toolbar", className: "p-0.5 w-6 h-6 m-1", onClick: g, children: /* @__PURE__ */ r(G, { className: "w-5 h-5" }) }) });
|
|
126
|
+
}, ce = ({ freezeText: o, unFreezeText: s, onClick: a, disabled: n, ...i }) => {
|
|
129
127
|
const d = t.useContext(p);
|
|
130
128
|
if (!d)
|
|
131
129
|
throw new Error("FreezeAction should be used within <DataGrid>");
|
|
132
|
-
const [c,
|
|
130
|
+
const [c, l] = t.useState(0), [h, u] = t.useState(0), { api: e, rowData: f } = d, g = () => {
|
|
133
131
|
if (!e) return;
|
|
134
|
-
const
|
|
135
|
-
if (
|
|
132
|
+
const w = e.getSelectedNodes();
|
|
133
|
+
if (w.length > 0) {
|
|
136
134
|
e.setGridOption(
|
|
137
135
|
"pinnedTopRowData",
|
|
138
|
-
|
|
136
|
+
w.map((m) => m.data)
|
|
139
137
|
);
|
|
140
|
-
const v = e.getRenderedNodes().filter((
|
|
138
|
+
const v = e.getRenderedNodes().filter((m) => !w.some((N) => N.id === m.id));
|
|
141
139
|
e.setGridOption(
|
|
142
140
|
"rowData",
|
|
143
|
-
v.map((
|
|
141
|
+
v.map((m) => m.data)
|
|
144
142
|
);
|
|
145
143
|
}
|
|
146
|
-
},
|
|
147
|
-
e && (e.setGridOption("pinnedTopRowData", []), e.setGridOption("rowData",
|
|
148
|
-
},
|
|
149
|
-
e && (e.getPinnedTopRowCount() > 0 ?
|
|
144
|
+
}, C = () => {
|
|
145
|
+
e && (e.setGridOption("pinnedTopRowData", []), e.setGridOption("rowData", f));
|
|
146
|
+
}, D = (w) => {
|
|
147
|
+
e && (e.getPinnedTopRowCount() > 0 ? C() : g()), a?.(w);
|
|
150
148
|
};
|
|
151
149
|
return t.useEffect(() => (e?.addEventListener("pinnedRowDataChanged", () => {
|
|
152
|
-
|
|
150
|
+
l(e.getPinnedTopRowCount());
|
|
153
151
|
}), e?.addEventListener("selectionChanged", () => {
|
|
154
|
-
|
|
152
|
+
u(e.getSelectedNodes().length);
|
|
155
153
|
}), () => {
|
|
156
154
|
e?.removeEventListener("pinnedRowDataChanged", () => {
|
|
157
|
-
|
|
155
|
+
l(e.getPinnedTopRowCount());
|
|
158
156
|
}), e?.removeEventListener("selectionChanged", () => {
|
|
159
|
-
|
|
157
|
+
u(e.getSelectedNodes().length);
|
|
160
158
|
});
|
|
161
159
|
}), [e]), /* @__PURE__ */ r(
|
|
162
160
|
E,
|
|
163
161
|
{
|
|
164
162
|
variant: "text",
|
|
165
|
-
onClick:
|
|
166
|
-
startIcon: /* @__PURE__ */ r(
|
|
163
|
+
onClick: D,
|
|
164
|
+
startIcon: /* @__PURE__ */ r(I, { className: "w-4.5 h-4.5" }),
|
|
167
165
|
disabled: !c && !h || n,
|
|
168
166
|
...i,
|
|
169
167
|
children: c ? s ?? "Unfreeze" : o ?? "Freeze"
|
|
170
168
|
}
|
|
171
169
|
);
|
|
172
|
-
},
|
|
170
|
+
}, de = ({ children: o, className: s, onClick: a, ...n }) => {
|
|
173
171
|
const i = t.useContext(p);
|
|
174
172
|
if (!i)
|
|
175
173
|
throw new Error("PrintAction should be used within <DataGrid>");
|
|
176
174
|
const d = (c) => {
|
|
177
175
|
i.api && (i.api.setGridOption("domLayout", "print"), setTimeout(() => {
|
|
178
|
-
const
|
|
176
|
+
const l = document.querySelector("[grid-id='" + i.gridId + "']"), u = `<html>
|
|
179
177
|
${document.head.innerHTML}
|
|
180
|
-
${
|
|
178
|
+
${l.outerHTML}
|
|
181
179
|
</html>`;
|
|
182
|
-
|
|
180
|
+
B(u), i?.api?.setGridOption("domLayout", void 0);
|
|
183
181
|
})), a?.(c);
|
|
184
182
|
};
|
|
185
|
-
return /* @__PURE__ */ r(
|
|
186
|
-
},
|
|
183
|
+
return /* @__PURE__ */ r(b, { variant: "toolbar", className: x("p-0.5 w-6 h-6", s), onClick: d, ...n, children: o ?? /* @__PURE__ */ r(H, { className: "w-5 h-5" }) });
|
|
184
|
+
}, le = ({ className: o, onRefresh: s, children: a, loading: n, ...i }) => {
|
|
187
185
|
if (!t.useContext(p))
|
|
188
186
|
throw new Error("RefreshAction should be used within <DataGrid>");
|
|
189
187
|
const c = () => {
|
|
190
188
|
s();
|
|
191
189
|
};
|
|
192
190
|
return /* @__PURE__ */ r(
|
|
193
|
-
|
|
191
|
+
b,
|
|
194
192
|
{
|
|
195
|
-
className:
|
|
193
|
+
className: x("p-0.5 w-6 h-6", n && "disabled:bg-transparent", o),
|
|
196
194
|
variant: "toolbar",
|
|
197
195
|
onClick: c,
|
|
198
196
|
disabled: n,
|
|
199
197
|
...i,
|
|
200
|
-
children: a ?? /* @__PURE__ */ r(
|
|
198
|
+
children: a ?? /* @__PURE__ */ r(O, { className: x("w-4.5 h-4.5", n && "animate-spin") })
|
|
201
199
|
}
|
|
202
200
|
);
|
|
203
|
-
},
|
|
201
|
+
}, ue = ({ onDelete: o, children: s, ...a }) => /* @__PURE__ */ r(E, { variant: "danger", onClick: () => {
|
|
204
202
|
o();
|
|
205
|
-
}, startIcon: /* @__PURE__ */ r(
|
|
206
|
-
/* @__PURE__ */ r(
|
|
207
|
-
/* @__PURE__ */ r(
|
|
203
|
+
}, startIcon: /* @__PURE__ */ r(L, { className: "w-4.5 h-4.5" }), ...a, children: s }), he = ({ children: o, slotProps: s, className: a, ...n }) => /* @__PURE__ */ S(q, { ...s?.popoverProps ?? {}, children: [
|
|
204
|
+
/* @__PURE__ */ r($, { ...s?.triggerProps ?? {}, children: /* @__PURE__ */ r(M, { className: "w-4.5 h-4.5 text-primary" }) }),
|
|
205
|
+
/* @__PURE__ */ r(j, { align: "end", className: x("w-40", a), ...n, children: o })
|
|
208
206
|
] });
|
|
209
207
|
export {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
208
|
+
ae as DataGrid,
|
|
209
|
+
ie as DataGridActionBar,
|
|
210
|
+
U as DataGridContent,
|
|
211
|
+
ue as DeleteAction,
|
|
212
|
+
he as ExtraActions,
|
|
213
|
+
ce as FreezeAction,
|
|
214
|
+
de as PrintAction,
|
|
215
|
+
le as RefreshAction,
|
|
216
|
+
se as SearchAction,
|
|
217
|
+
_ as dataGridDefaultTheme,
|
|
218
|
+
oe as useDataGrid
|
|
221
219
|
};
|
|
222
220
|
//# sourceMappingURL=datagrid.es.js.map
|
package/dist/datagrid.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagrid.es.js","sources":["../src/components/data-grid/DataGrid.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport React, { HTMLAttributes, useMemo } from \"react\";\r\nimport { AgGridReact, AgGridReactProps } from \"ag-grid-react\";\r\nimport { GridApi, GridReadyEvent, themeQuartz, AllCommunityModule, ModuleRegistry, Theme } from \"ag-grid-community\";\r\nimport { CircleXmark, ElipsisVertical, Magnifier, Print, Refresh, Snowflake, Trashcan } from \"@trsys-tech/matrix-icons\";\r\n\r\nimport { cn } from \"../../lib/utils\";\r\nimport { printHtml } from \"../../lib/printHtml\";\r\nimport { TextField } from \"../text-field/TextField\";\r\nimport { Button, ButtonProps } from \"../button/Button\";\r\nimport { IconButton, IconButtonProps } from \"../icon-botton/IconButton\";\r\nimport { Popover, PopoverContent, PopoverContentProps, PopoverProps, PopoverTrigger, PopoverTriggerProps } from \"../popover/Popover\";\r\n\r\n// Register all Community features\r\n// Todo: Register only the required features\r\nModuleRegistry.registerModules([AllCommunityModule]);\r\n\r\nconst dataGridDefaultTheme = themeQuartz.withParams({\r\n fontFamily: \"DMSans\",\r\n fontSize: \"12px\",\r\n headerFontSize: \"12px\",\r\n headerFontWeight: 700,\r\n headerBackgroundColor: \"hsl(var(--primary-50))\",\r\n backgroundColor: \"hsl(var(--gray-0))\",\r\n accentColor: \"hsl(var(--primary-300))\",\r\n foregroundColor: \"hsl(var(--text-500))\",\r\n cellTextColor: \"hsl(var(--text-500))\",\r\n});\r\n\r\ntype DataGridContext = {\r\n api: GridApi | null;\r\n setApi: (value: GridApi) => void;\r\n rowData: any[] | null | undefined;\r\n setRowData: (value: any[] | null | undefined) => void;\r\n gridId: string;\r\n quickFilterText: string;\r\n setQuickFilterText: (value: string) => void;\r\n actionbarExists: boolean;\r\n setActionbarExists: (value: boolean) => void;\r\n actionbarHeight: number;\r\n setActionbarHeight: (value: number) => void;\r\n};\r\n\r\nconst DataGridContext = React.createContext<DataGridContext | null>(null);\r\n\r\nconst useDataGrid = () => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"useDataGrid should be used within <DataGrid>\");\r\n }\r\n\r\n return context;\r\n};\r\n\r\ntype DataGridProps = {\r\n children: React.ReactNode;\r\n};\r\n\r\nconst DataGrid: React.FC<DataGridProps> = ({ children }) => {\r\n const gridId = React.useId();\r\n const [api, setApi] = React.useState<GridApi | null>(null);\r\n const [rowData, setRowData] = React.useState<any[] | null | undefined>([]);\r\n const [actionbarHeight, setActionbarHeight] = React.useState(0);\r\n\r\n const [quickFilterText, setQuickFilterText] = React.useState(\"\");\r\n const [actionbarExists, setActionbarExists] = React.useState(false);\r\n return (\r\n <DataGridContext.Provider\r\n value={{\r\n api,\r\n setApi,\r\n rowData,\r\n setRowData,\r\n gridId,\r\n quickFilterText,\r\n setQuickFilterText,\r\n actionbarExists,\r\n setActionbarExists,\r\n actionbarHeight,\r\n setActionbarHeight,\r\n }}\r\n >\r\n {children}\r\n </DataGridContext.Provider>\r\n );\r\n};\r\n\r\ntype DataGridContentProps = Omit<AgGridReactProps, \"theme\"> & {\r\n theme?: Theme;\r\n};\r\n\r\nconst DataGridContent: React.FC<DataGridContentProps> = ({\r\n theme: propTheme,\r\n onGridReady,\r\n quickFilterText: quickFilterTextProps,\r\n rowData: rowDataProps,\r\n containerStyle,\r\n ...props\r\n}) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"DataGridContent should be used within <DataGrid>\");\r\n }\r\n const { rowData, setRowData, actionbarExists, setApi, setQuickFilterText, quickFilterText, gridId, actionbarHeight } = context;\r\n\r\n const theme = useMemo(() => {\r\n return dataGridDefaultTheme.withParams({\r\n headerHeight: 40,\r\n wrapperBorderRadius: actionbarExists ? \"0px 0px 8px 8px\" : \"8px\",\r\n });\r\n }, [actionbarExists]);\r\n\r\n const handleGridReady = (e: GridReadyEvent) => {\r\n setApi(e.api);\r\n onGridReady?.(e);\r\n };\r\n\r\n React.useEffect(() => {\r\n setRowData(rowDataProps);\r\n }, [rowDataProps, setRowData]);\r\n\r\n React.useEffect(() => {\r\n if (quickFilterTextProps !== undefined) {\r\n setQuickFilterText(quickFilterTextProps ?? \"\");\r\n }\r\n }, [quickFilterTextProps, setQuickFilterText]);\r\n\r\n return (\r\n <AgGridReact\r\n gridId={gridId}\r\n theme={propTheme ?? theme}\r\n rowData={rowData}\r\n quickFilterText={quickFilterText}\r\n onGridReady={handleGridReady}\r\n containerStyle={{ height: `calc(100% - ${actionbarHeight}px)`, ...containerStyle }}\r\n {...props}\r\n />\r\n );\r\n};\r\n\r\ntype DatagridActionBarProps = HTMLAttributes<HTMLDivElement> & {};\r\n\r\nconst DataGridActionBar: React.FC<DatagridActionBarProps> = ({ className, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"DataGridActionBar should be used within <DataGrid>\");\r\n }\r\n const ref = React.useRef<HTMLDivElement | null>(null);\r\n const { setActionbarExists, setActionbarHeight } = context;\r\n const { children } = props;\r\n\r\n React.useEffect(() => {\r\n setActionbarExists(true);\r\n return () => setActionbarExists(false);\r\n }, [setActionbarExists]);\r\n\r\n React.useEffect(() => {\r\n if (ref.current) {\r\n setActionbarHeight(ref.current.clientHeight);\r\n }\r\n }, [setActionbarHeight]);\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"relative flex items-center p-2 h-12 w-full bg-gray-0 border border-gray-200 border-b-0 -mb-[1px] z-10 rounded-t-[8px]\",\r\n className,\r\n )}\r\n ref={ref}\r\n >\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\ntype SearchActionProps = HTMLAttributes<HTMLDivElement> & {\r\n defaultOpen?: boolean;\r\n};\r\n\r\nconst SearchAction: React.FC<SearchActionProps> = ({ defaultOpen = false, className, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"SearchAction should be used within <DataGrid>\");\r\n }\r\n\r\n const { quickFilterText, setQuickFilterText } = context;\r\n\r\n const [isSearchInputOpen, setIsSearchInputOpen] = React.useState(defaultOpen);\r\n const [isClosing, setIsClosing] = React.useState(false);\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n\r\n const handleClear = () => {\r\n context.setQuickFilterText(\"\");\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n };\r\n\r\n const handleOpen = () => {\r\n setIsSearchInputOpen(true);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (isSearchInputOpen && inputRef?.current) {\r\n inputRef.current.focus();\r\n }\r\n }, [isSearchInputOpen]);\r\n\r\n const handleClose = () => {\r\n setIsClosing(true);\r\n context.setQuickFilterText(\"\");\r\n setTimeout(() => {\r\n setIsSearchInputOpen(false);\r\n setIsClosing(false);\r\n }, 200);\r\n };\r\n\r\n return (\r\n <div className={cn(\"max-w-60\", className)} {...props}>\r\n {isSearchInputOpen || isClosing ? (\r\n <TextField\r\n ref={inputRef}\r\n className={cn(\"relative h-7.5\", isSearchInputOpen && !isClosing ? \"animate-input-open\" : \"\", isClosing && \"animate-input-close\")}\r\n onChange={e => setQuickFilterText(e.target.value)}\r\n value={quickFilterText}\r\n startAdornment={\r\n <IconButton variant=\"toolbar\" className=\"p-0.5 h-6 w-6 border-none mx-1\" onClick={handleClose}>\r\n <Magnifier className=\"w-5 h-5\" />\r\n </IconButton>\r\n }\r\n endAdornment={\r\n quickFilterText && (\r\n <IconButton variant=\"toolbar\" className=\"p-0.5 w-6 h-6 border-none mx-1\" onClick={handleClear}>\r\n <CircleXmark className=\"w-5 h-5\" />\r\n </IconButton>\r\n )\r\n }\r\n />\r\n ) : (\r\n <IconButton variant=\"toolbar\" className=\"p-0.5 w-6 h-6 m-1\" onClick={handleOpen}>\r\n <Magnifier className=\"w-5 h-5\" />\r\n </IconButton>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\ntype FreezeActionProps = ButtonProps & {\r\n freezeText?: string;\r\n unFreezeText?: string;\r\n};\r\n\r\nconst FreezeAction: React.FC<FreezeActionProps> = ({ freezeText, unFreezeText, onClick, disabled, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"FreezeAction should be used within <DataGrid>\");\r\n }\r\n\r\n const [pinnedRowCount, setPinnedRowCount] = React.useState(0);\r\n const [selectedRowsCount, setSelectedRowsCount] = React.useState(0);\r\n\r\n const { api, rowData } = context;\r\n\r\n const freezeRows = () => {\r\n if (!api) return;\r\n\r\n // Get currently selected rows\r\n const selectedRows = api.getSelectedNodes();\r\n\r\n if (selectedRows.length > 0) {\r\n // Pin the selected rows\r\n api.setGridOption(\r\n \"pinnedTopRowData\",\r\n selectedRows.map(row => row.data),\r\n );\r\n\r\n // Get current row data\r\n const allData = api.getRenderedNodes();\r\n // Filter out pinned rows from the main data\r\n const updatedNodes = allData.filter(row => !selectedRows.some(pinnedRow => pinnedRow.id === row.id));\r\n\r\n // Update the grid with the filtered data\r\n api.setGridOption(\r\n \"rowData\",\r\n updatedNodes.map(node => node.data),\r\n );\r\n }\r\n };\r\n\r\n const unfreezeRows = () => {\r\n if (!api) return;\r\n api.setGridOption(\"pinnedTopRowData\", []);\r\n api.setGridOption(\"rowData\", rowData);\r\n };\r\n\r\n const handleFreezing = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n if (api) {\r\n const pinnedRowsCount = api.getPinnedTopRowCount();\r\n if (pinnedRowsCount > 0) {\r\n unfreezeRows();\r\n } else {\r\n freezeRows();\r\n }\r\n }\r\n onClick?.(e);\r\n };\r\n\r\n React.useEffect(() => {\r\n api?.addEventListener(\"pinnedRowDataChanged\", () => {\r\n setPinnedRowCount(api.getPinnedTopRowCount());\r\n });\r\n\r\n api?.addEventListener(\"selectionChanged\", () => {\r\n setSelectedRowsCount(api.getSelectedNodes().length);\r\n });\r\n\r\n return () => {\r\n api?.removeEventListener(\"pinnedRowDataChanged\", () => {\r\n setPinnedRowCount(api.getPinnedTopRowCount());\r\n });\r\n\r\n api?.removeEventListener(\"selectionChanged\", () => {\r\n setSelectedRowsCount(api.getSelectedNodes().length);\r\n });\r\n };\r\n }, [api]);\r\n\r\n return (\r\n <Button\r\n variant=\"text\"\r\n onClick={handleFreezing}\r\n startIcon={<Snowflake className=\"w-4.5 h-4.5\" />}\r\n disabled={(!pinnedRowCount && !selectedRowsCount) || disabled}\r\n {...props}\r\n >\r\n {pinnedRowCount ? (unFreezeText ?? \"Unfreeze\") : (freezeText ?? \"Freeze\")}\r\n </Button>\r\n );\r\n};\r\n\r\ntype PrintActionProps = IconButtonProps & {};\r\n\r\nconst PrintAction: React.FC<PrintActionProps> = ({ children, className, onClick, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"PrintAction should be used within <DataGrid>\");\r\n }\r\n\r\n const handlePrint = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n if (context.api) {\r\n context.api.setGridOption(\"domLayout\", \"print\");\r\n\r\n setTimeout(() => {\r\n const element = document.querySelector(\"[grid-id='\" + context.gridId + \"']\") as HTMLElement;\r\n const header = document.head;\r\n const html = `<html>\r\n ${header.innerHTML}\r\n ${element.outerHTML}\r\n </html>`;\r\n printHtml(html);\r\n context?.api?.setGridOption(\"domLayout\", undefined);\r\n });\r\n }\r\n onClick?.(e);\r\n };\r\n\r\n return (\r\n <IconButton variant=\"toolbar\" className={cn(\"p-0.5 w-6 h-6\", className)} onClick={handlePrint} {...props}>\r\n {children ?? <Print className=\"w-5 h-5\" />}\r\n </IconButton>\r\n );\r\n};\r\n\r\ntype RefreshActionProps = Omit<IconButtonProps, \"onClick\"> & {\r\n onRefresh: () => void;\r\n};\r\n\r\nconst RefreshAction: React.FC<RefreshActionProps> = ({ className, onRefresh, children, loading, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"RefreshAction should be used within <DataGrid>\");\r\n }\r\n\r\n const handleRefresh = () => {\r\n onRefresh();\r\n };\r\n\r\n return (\r\n <IconButton\r\n className={cn(\"p-0.5 w-6 h-6\", loading && \"disabled:bg-transparent\", className)}\r\n variant=\"toolbar\"\r\n onClick={handleRefresh}\r\n disabled={loading}\r\n {...props}\r\n >\r\n {children ?? <Refresh className={cn(\"w-4.5 h-4.5\", loading && \"animate-spin\")} />}\r\n </IconButton>\r\n );\r\n};\r\n\r\ntype DeleteActionProps = Omit<ButtonProps, \"onClick\"> & {\r\n onDelete: () => void;\r\n};\r\n\r\nconst DeleteAction: React.FC<DeleteActionProps> = ({ onDelete, children, ...props }) => {\r\n const handleDelete = () => {\r\n onDelete();\r\n };\r\n\r\n return (\r\n <Button variant=\"danger\" onClick={handleDelete} startIcon={<Trashcan className=\"w-4.5 h-4.5\" />} {...props}>\r\n {children}\r\n </Button>\r\n );\r\n};\r\n\r\ntype ExtraActionsProps = PopoverContentProps & {\r\n children: React.ReactNode;\r\n slotProps?: {\r\n triggerProps?: PopoverTriggerProps;\r\n popoverProps?: PopoverProps;\r\n };\r\n};\r\n\r\nconst ExtraActions: React.FC<ExtraActionsProps> = ({ children, slotProps, className, ...props }) => {\r\n return (\r\n <Popover {...(slotProps?.popoverProps ?? {})}>\r\n <PopoverTrigger {...(slotProps?.triggerProps ?? {})}>\r\n <ElipsisVertical className=\"w-4.5 h-4.5 text-primary\" />\r\n </PopoverTrigger>\r\n <PopoverContent align=\"end\" className={cn(\"w-40\", className)} {...props}>\r\n {children}\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport {\r\n DataGrid,\r\n DataGridContent,\r\n DataGridActionBar,\r\n SearchAction,\r\n FreezeAction,\r\n PrintAction,\r\n RefreshAction,\r\n ExtraActions,\r\n DeleteAction,\r\n type DataGridProps,\r\n type DataGridContentProps,\r\n type DatagridActionBarProps,\r\n type SearchActionProps,\r\n type FreezeActionProps,\r\n type RefreshActionProps,\r\n type ExtraActionsProps,\r\n type DeleteActionProps,\r\n useDataGrid,\r\n dataGridDefaultTheme,\r\n};\r\n"],"names":["ModuleRegistry","AllCommunityModule","dataGridDefaultTheme","themeQuartz","DataGridContext","React","useDataGrid","context","DataGrid","children","gridId","api","setApi","rowData","setRowData","actionbarHeight","setActionbarHeight","quickFilterText","setQuickFilterText","actionbarExists","setActionbarExists","jsx","DataGridContent","propTheme","onGridReady","quickFilterTextProps","rowDataProps","containerStyle","props","theme","useMemo","handleGridReady","e","AgGridReact","DataGridActionBar","className","ref","cn","SearchAction","defaultOpen","isSearchInputOpen","setIsSearchInputOpen","isClosing","setIsClosing","inputRef","handleClear","handleOpen","handleClose","TextField","IconButton","Magnifier","CircleXmark","FreezeAction","freezeText","unFreezeText","onClick","disabled","pinnedRowCount","setPinnedRowCount","selectedRowsCount","setSelectedRowsCount","freezeRows","selectedRows","row","updatedNodes","pinnedRow","node","unfreezeRows","handleFreezing","Button","Snowflake","PrintAction","handlePrint","element","html","printHtml","Print","RefreshAction","onRefresh","loading","handleRefresh","Refresh","DeleteAction","onDelete","Trashcan","ExtraActions","slotProps","Popover","PopoverTrigger","ElipsisVertical","PopoverContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"datagrid.es.js","sources":["../src/components/data-grid/DataGrid.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport React, { forwardRef, HTMLAttributes, useMemo } from \"react\";\r\nimport { AgGridReact, AgGridReactProps } from \"ag-grid-react\";\r\nimport { GridApi, GridReadyEvent, themeQuartz, AllCommunityModule, ModuleRegistry, Theme } from \"ag-grid-community\";\r\nimport { CircleXmark, ElipsisVertical, Magnifier, Print, Refresh, Snowflake, Trashcan } from \"@trsys-tech/matrix-icons\";\r\n\r\nimport { cn } from \"../../lib/utils\";\r\nimport { printHtml } from \"../../lib/printHtml\";\r\nimport { TextField } from \"../text-field/TextField\";\r\nimport { Button, ButtonProps } from \"../button/Button\";\r\nimport { IconButton, IconButtonProps } from \"../icon-botton/IconButton\";\r\nimport { Popover, PopoverContent, PopoverContentProps, PopoverProps, PopoverTrigger, PopoverTriggerProps } from \"../popover/Popover\";\r\n\r\n// Register all Community features\r\n// Todo: Register only the required features\r\nModuleRegistry.registerModules([AllCommunityModule]);\r\n\r\nconst dataGridDefaultTheme = themeQuartz.withParams({\r\n fontFamily: \"DMSans\",\r\n fontSize: \"12px\",\r\n headerFontSize: \"12px\",\r\n headerFontWeight: 700,\r\n headerBackgroundColor: \"hsl(var(--primary-50))\",\r\n backgroundColor: \"hsl(var(--gray-0))\",\r\n accentColor: \"hsl(var(--primary-300))\",\r\n foregroundColor: \"hsl(var(--text-500))\",\r\n cellTextColor: \"hsl(var(--text-500))\",\r\n});\r\n\r\ntype DataGridContext = {\r\n api: GridApi | null;\r\n setApi: (value: GridApi) => void;\r\n rowData: any[] | null | undefined;\r\n setRowData: (value: any[] | null | undefined) => void;\r\n gridId: string;\r\n quickFilterText: string;\r\n setQuickFilterText: (value: string) => void;\r\n actionbarExists: boolean;\r\n setActionbarExists: (value: boolean) => void;\r\n actionbarHeight: number;\r\n setActionbarHeight: (value: number) => void;\r\n};\r\n\r\nconst DataGridContext = React.createContext<DataGridContext | null>(null);\r\n\r\nconst useDataGrid = () => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"useDataGrid should be used within <DataGrid>\");\r\n }\r\n\r\n return context;\r\n};\r\n\r\ntype DataGridProps = {\r\n children: React.ReactNode;\r\n};\r\n\r\nconst DataGrid: React.FC<DataGridProps> = ({ children }) => {\r\n const gridId = React.useId();\r\n const [api, setApi] = React.useState<GridApi | null>(null);\r\n const [rowData, setRowData] = React.useState<any[] | null | undefined>([]);\r\n const [actionbarHeight, setActionbarHeight] = React.useState(0);\r\n\r\n const [quickFilterText, setQuickFilterText] = React.useState(\"\");\r\n const [actionbarExists, setActionbarExists] = React.useState(false);\r\n return (\r\n <DataGridContext.Provider\r\n value={{\r\n api,\r\n setApi,\r\n rowData,\r\n setRowData,\r\n gridId,\r\n quickFilterText,\r\n setQuickFilterText,\r\n actionbarExists,\r\n setActionbarExists,\r\n actionbarHeight,\r\n setActionbarHeight,\r\n }}\r\n >\r\n {children}\r\n </DataGridContext.Provider>\r\n );\r\n};\r\n\r\ntype DataGridContentProps = Omit<AgGridReactProps, \"theme\"> & {\r\n theme?: Theme;\r\n};\r\n\r\nconst DataGridContent = forwardRef<AgGridReact, DataGridContentProps>(\r\n ({ theme: propTheme, onGridReady, quickFilterText: quickFilterTextProps, rowData: rowDataProps, containerStyle, ...props }, ref) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"DataGridContent should be used within <DataGrid>\");\r\n }\r\n const { rowData, setRowData, actionbarExists, setApi, setQuickFilterText, quickFilterText, gridId, actionbarHeight } = context;\r\n\r\n const theme = useMemo(() => {\r\n return dataGridDefaultTheme.withParams({\r\n headerHeight: 40,\r\n wrapperBorderRadius: actionbarExists ? \"0px 0px 8px 8px\" : \"8px\",\r\n });\r\n }, [actionbarExists]);\r\n\r\n const handleGridReady = (e: GridReadyEvent) => {\r\n setApi(e.api);\r\n onGridReady?.(e);\r\n };\r\n\r\n React.useEffect(() => {\r\n setRowData(rowDataProps);\r\n }, [rowDataProps, setRowData]);\r\n\r\n React.useEffect(() => {\r\n if (quickFilterTextProps !== undefined) {\r\n setQuickFilterText(quickFilterTextProps ?? \"\");\r\n }\r\n }, [quickFilterTextProps, setQuickFilterText]);\r\n\r\n return (\r\n <AgGridReact\r\n gridId={gridId}\r\n theme={propTheme ?? theme}\r\n rowData={rowData}\r\n quickFilterText={quickFilterText}\r\n onGridReady={handleGridReady}\r\n containerStyle={{ height: `calc(100% - ${actionbarHeight}px)`, ...containerStyle }}\r\n {...props}\r\n ref={ref}\r\n />\r\n );\r\n },\r\n);\r\n\r\nDataGridContent.displayName = \"DataGridContent\";\r\n\r\ntype DatagridActionBarProps = HTMLAttributes<HTMLDivElement> & {};\r\n\r\nconst DataGridActionBar: React.FC<DatagridActionBarProps> = ({ className, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"DataGridActionBar should be used within <DataGrid>\");\r\n }\r\n const ref = React.useRef<HTMLDivElement | null>(null);\r\n const { setActionbarExists, setActionbarHeight } = context;\r\n const { children } = props;\r\n\r\n React.useEffect(() => {\r\n setActionbarExists(true);\r\n return () => setActionbarExists(false);\r\n }, [setActionbarExists]);\r\n\r\n React.useEffect(() => {\r\n if (ref.current) {\r\n setActionbarHeight(ref.current.clientHeight);\r\n }\r\n }, [setActionbarHeight]);\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"relative flex items-center p-2 h-12 w-full bg-gray-0 border border-gray-200 border-b-0 -mb-[1px] z-10 rounded-t-[8px]\",\r\n className,\r\n )}\r\n ref={ref}\r\n >\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\ntype SearchActionProps = HTMLAttributes<HTMLDivElement> & {\r\n defaultOpen?: boolean;\r\n};\r\n\r\nconst SearchAction: React.FC<SearchActionProps> = ({ defaultOpen = false, className, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"SearchAction should be used within <DataGrid>\");\r\n }\r\n\r\n const { quickFilterText, setQuickFilterText } = context;\r\n\r\n const [isSearchInputOpen, setIsSearchInputOpen] = React.useState(defaultOpen);\r\n const [isClosing, setIsClosing] = React.useState(false);\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n\r\n const handleClear = () => {\r\n context.setQuickFilterText(\"\");\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n };\r\n\r\n const handleOpen = () => {\r\n setIsSearchInputOpen(true);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (isSearchInputOpen && inputRef?.current) {\r\n inputRef.current.focus();\r\n }\r\n }, [isSearchInputOpen]);\r\n\r\n const handleClose = () => {\r\n setIsClosing(true);\r\n context.setQuickFilterText(\"\");\r\n setTimeout(() => {\r\n setIsSearchInputOpen(false);\r\n setIsClosing(false);\r\n }, 200);\r\n };\r\n\r\n return (\r\n <div className={cn(\"max-w-60\", className)} {...props}>\r\n {isSearchInputOpen || isClosing ? (\r\n <TextField\r\n ref={inputRef}\r\n className={cn(\"relative h-7.5\", isSearchInputOpen && !isClosing ? \"animate-input-open\" : \"\", isClosing && \"animate-input-close\")}\r\n onChange={e => setQuickFilterText(e.target.value)}\r\n value={quickFilterText}\r\n startAdornment={\r\n <IconButton variant=\"toolbar\" className=\"p-0.5 h-6 w-6 border-none mx-1\" onClick={handleClose}>\r\n <Magnifier className=\"w-5 h-5\" />\r\n </IconButton>\r\n }\r\n endAdornment={\r\n quickFilterText && (\r\n <IconButton variant=\"toolbar\" className=\"p-0.5 w-6 h-6 border-none mx-1\" onClick={handleClear}>\r\n <CircleXmark className=\"w-5 h-5\" />\r\n </IconButton>\r\n )\r\n }\r\n />\r\n ) : (\r\n <IconButton variant=\"toolbar\" className=\"p-0.5 w-6 h-6 m-1\" onClick={handleOpen}>\r\n <Magnifier className=\"w-5 h-5\" />\r\n </IconButton>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\ntype FreezeActionProps = ButtonProps & {\r\n freezeText?: string;\r\n unFreezeText?: string;\r\n};\r\n\r\nconst FreezeAction: React.FC<FreezeActionProps> = ({ freezeText, unFreezeText, onClick, disabled, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"FreezeAction should be used within <DataGrid>\");\r\n }\r\n\r\n const [pinnedRowCount, setPinnedRowCount] = React.useState(0);\r\n const [selectedRowsCount, setSelectedRowsCount] = React.useState(0);\r\n\r\n const { api, rowData } = context;\r\n\r\n const freezeRows = () => {\r\n if (!api) return;\r\n\r\n // Get currently selected rows\r\n const selectedRows = api.getSelectedNodes();\r\n\r\n if (selectedRows.length > 0) {\r\n // Pin the selected rows\r\n api.setGridOption(\r\n \"pinnedTopRowData\",\r\n selectedRows.map(row => row.data),\r\n );\r\n\r\n // Get current row data\r\n const allData = api.getRenderedNodes();\r\n // Filter out pinned rows from the main data\r\n const updatedNodes = allData.filter(row => !selectedRows.some(pinnedRow => pinnedRow.id === row.id));\r\n\r\n // Update the grid with the filtered data\r\n api.setGridOption(\r\n \"rowData\",\r\n updatedNodes.map(node => node.data),\r\n );\r\n }\r\n };\r\n\r\n const unfreezeRows = () => {\r\n if (!api) return;\r\n api.setGridOption(\"pinnedTopRowData\", []);\r\n api.setGridOption(\"rowData\", rowData);\r\n };\r\n\r\n const handleFreezing = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n if (api) {\r\n const pinnedRowsCount = api.getPinnedTopRowCount();\r\n if (pinnedRowsCount > 0) {\r\n unfreezeRows();\r\n } else {\r\n freezeRows();\r\n }\r\n }\r\n onClick?.(e);\r\n };\r\n\r\n React.useEffect(() => {\r\n api?.addEventListener(\"pinnedRowDataChanged\", () => {\r\n setPinnedRowCount(api.getPinnedTopRowCount());\r\n });\r\n\r\n api?.addEventListener(\"selectionChanged\", () => {\r\n setSelectedRowsCount(api.getSelectedNodes().length);\r\n });\r\n\r\n return () => {\r\n api?.removeEventListener(\"pinnedRowDataChanged\", () => {\r\n setPinnedRowCount(api.getPinnedTopRowCount());\r\n });\r\n\r\n api?.removeEventListener(\"selectionChanged\", () => {\r\n setSelectedRowsCount(api.getSelectedNodes().length);\r\n });\r\n };\r\n }, [api]);\r\n\r\n return (\r\n <Button\r\n variant=\"text\"\r\n onClick={handleFreezing}\r\n startIcon={<Snowflake className=\"w-4.5 h-4.5\" />}\r\n disabled={(!pinnedRowCount && !selectedRowsCount) || disabled}\r\n {...props}\r\n >\r\n {pinnedRowCount ? (unFreezeText ?? \"Unfreeze\") : (freezeText ?? \"Freeze\")}\r\n </Button>\r\n );\r\n};\r\n\r\ntype PrintActionProps = IconButtonProps & {};\r\n\r\nconst PrintAction: React.FC<PrintActionProps> = ({ children, className, onClick, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"PrintAction should be used within <DataGrid>\");\r\n }\r\n\r\n const handlePrint = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n if (context.api) {\r\n context.api.setGridOption(\"domLayout\", \"print\");\r\n\r\n setTimeout(() => {\r\n const element = document.querySelector(\"[grid-id='\" + context.gridId + \"']\") as HTMLElement;\r\n const header = document.head;\r\n const html = `<html>\r\n ${header.innerHTML}\r\n ${element.outerHTML}\r\n </html>`;\r\n printHtml(html);\r\n context?.api?.setGridOption(\"domLayout\", undefined);\r\n });\r\n }\r\n onClick?.(e);\r\n };\r\n\r\n return (\r\n <IconButton variant=\"toolbar\" className={cn(\"p-0.5 w-6 h-6\", className)} onClick={handlePrint} {...props}>\r\n {children ?? <Print className=\"w-5 h-5\" />}\r\n </IconButton>\r\n );\r\n};\r\n\r\ntype RefreshActionProps = Omit<IconButtonProps, \"onClick\"> & {\r\n onRefresh: () => void;\r\n};\r\n\r\nconst RefreshAction: React.FC<RefreshActionProps> = ({ className, onRefresh, children, loading, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"RefreshAction should be used within <DataGrid>\");\r\n }\r\n\r\n const handleRefresh = () => {\r\n onRefresh();\r\n };\r\n\r\n return (\r\n <IconButton\r\n className={cn(\"p-0.5 w-6 h-6\", loading && \"disabled:bg-transparent\", className)}\r\n variant=\"toolbar\"\r\n onClick={handleRefresh}\r\n disabled={loading}\r\n {...props}\r\n >\r\n {children ?? <Refresh className={cn(\"w-4.5 h-4.5\", loading && \"animate-spin\")} />}\r\n </IconButton>\r\n );\r\n};\r\n\r\ntype DeleteActionProps = Omit<ButtonProps, \"onClick\"> & {\r\n onDelete: () => void;\r\n};\r\n\r\nconst DeleteAction: React.FC<DeleteActionProps> = ({ onDelete, children, ...props }) => {\r\n const handleDelete = () => {\r\n onDelete();\r\n };\r\n\r\n return (\r\n <Button variant=\"danger\" onClick={handleDelete} startIcon={<Trashcan className=\"w-4.5 h-4.5\" />} {...props}>\r\n {children}\r\n </Button>\r\n );\r\n};\r\n\r\ntype ExtraActionsProps = PopoverContentProps & {\r\n children: React.ReactNode;\r\n slotProps?: {\r\n triggerProps?: PopoverTriggerProps;\r\n popoverProps?: PopoverProps;\r\n };\r\n};\r\n\r\nconst ExtraActions: React.FC<ExtraActionsProps> = ({ children, slotProps, className, ...props }) => {\r\n return (\r\n <Popover {...(slotProps?.popoverProps ?? {})}>\r\n <PopoverTrigger {...(slotProps?.triggerProps ?? {})}>\r\n <ElipsisVertical className=\"w-4.5 h-4.5 text-primary\" />\r\n </PopoverTrigger>\r\n <PopoverContent align=\"end\" className={cn(\"w-40\", className)} {...props}>\r\n {children}\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport {\r\n DataGrid,\r\n DataGridContent,\r\n DataGridActionBar,\r\n SearchAction,\r\n FreezeAction,\r\n PrintAction,\r\n RefreshAction,\r\n ExtraActions,\r\n DeleteAction,\r\n type DataGridProps,\r\n type DataGridContentProps,\r\n type DatagridActionBarProps,\r\n type SearchActionProps,\r\n type FreezeActionProps,\r\n type RefreshActionProps,\r\n type ExtraActionsProps,\r\n type DeleteActionProps,\r\n useDataGrid,\r\n dataGridDefaultTheme,\r\n};\r\n"],"names":["ModuleRegistry","AllCommunityModule","dataGridDefaultTheme","themeQuartz","DataGridContext","React","useDataGrid","context","DataGrid","children","gridId","api","setApi","rowData","setRowData","actionbarHeight","setActionbarHeight","quickFilterText","setQuickFilterText","actionbarExists","setActionbarExists","jsx","DataGridContent","forwardRef","propTheme","onGridReady","quickFilterTextProps","rowDataProps","containerStyle","props","ref","theme","useMemo","handleGridReady","e","AgGridReact","DataGridActionBar","className","cn","SearchAction","defaultOpen","isSearchInputOpen","setIsSearchInputOpen","isClosing","setIsClosing","inputRef","handleClear","handleOpen","handleClose","TextField","IconButton","Magnifier","CircleXmark","FreezeAction","freezeText","unFreezeText","onClick","disabled","pinnedRowCount","setPinnedRowCount","selectedRowsCount","setSelectedRowsCount","freezeRows","selectedRows","row","updatedNodes","pinnedRow","node","unfreezeRows","handleFreezing","Button","Snowflake","PrintAction","handlePrint","element","html","printHtml","Print","RefreshAction","onRefresh","loading","handleRefresh","Refresh","DeleteAction","onDelete","Trashcan","ExtraActions","slotProps","Popover","PopoverTrigger","ElipsisVertical","PopoverContent"],"mappings":"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"}
|