@trsys-tech/matrix-library 0.5.7 → 0.5.8
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.
- package/dist/datagrid.es.js +46 -46
- package/dist/datagrid.es.js.map +1 -1
- package/package.json +1 -1
package/dist/datagrid.es.js
CHANGED
|
@@ -26,20 +26,20 @@ const Y = M.withParams({
|
|
|
26
26
|
throw new Error("useDataGrid should be used within <DataGrid>");
|
|
27
27
|
return r;
|
|
28
28
|
}, he = ({ children: r }) => {
|
|
29
|
-
const s = e.useId(), [
|
|
29
|
+
const s = e.useId(), [i, n] = e.useState(null), [a, d] = e.useState([]), [c, u] = e.useState(0), [l, h] = e.useState(/* @__PURE__ */ new Set()), [t, p] = e.useState(""), [f, g] = e.useState(!1);
|
|
30
30
|
return /* @__PURE__ */ o(
|
|
31
31
|
w.Provider,
|
|
32
32
|
{
|
|
33
33
|
value: {
|
|
34
|
-
api:
|
|
34
|
+
api: i,
|
|
35
35
|
setApi: n,
|
|
36
|
-
rowData:
|
|
36
|
+
rowData: a,
|
|
37
37
|
setRowData: d,
|
|
38
38
|
gridId: s,
|
|
39
39
|
quickFilterText: t,
|
|
40
40
|
setQuickFilterText: p,
|
|
41
41
|
actionbarExists: f,
|
|
42
|
-
setActionbarExists:
|
|
42
|
+
setActionbarExists: g,
|
|
43
43
|
actionbarHeight: c,
|
|
44
44
|
setActionbarHeight: u,
|
|
45
45
|
pinnedRowIds: l,
|
|
@@ -49,29 +49,29 @@ const Y = M.withParams({
|
|
|
49
49
|
}
|
|
50
50
|
);
|
|
51
51
|
}, Z = H(
|
|
52
|
-
({ theme: r, onGridReady: s, quickFilterText:
|
|
52
|
+
({ theme: r, onGridReady: s, quickFilterText: i, rowData: n, containerStyle: a, ...d }, c) => {
|
|
53
53
|
const u = e.useContext(w);
|
|
54
54
|
if (!u)
|
|
55
55
|
throw new Error("DataGridContent should be used within <DataGrid>");
|
|
56
|
-
const { rowData: l, setRowData: h, actionbarExists: t, setApi: p, setQuickFilterText: f, quickFilterText:
|
|
56
|
+
const { rowData: l, setRowData: h, actionbarExists: t, setApi: p, setQuickFilterText: f, quickFilterText: g, gridId: R, actionbarHeight: S, pinnedRowIds: m } = u, v = T(() => Y.withParams({
|
|
57
57
|
headerHeight: 40,
|
|
58
58
|
wrapperBorderRadius: t ? "0px 0px 8px 8px" : "8px"
|
|
59
|
-
}), [t]), b = (
|
|
60
|
-
p(
|
|
59
|
+
}), [t]), b = (x) => {
|
|
60
|
+
p(x.api), s?.(x);
|
|
61
61
|
};
|
|
62
62
|
e.useEffect(() => {
|
|
63
63
|
h(n);
|
|
64
64
|
}, [n, h]), e.useEffect(() => {
|
|
65
|
-
|
|
66
|
-
}, [
|
|
67
|
-
const E = T(() => d.getRowId ?? ((
|
|
65
|
+
i !== void 0 && f(i ?? "");
|
|
66
|
+
}, [i, f]);
|
|
67
|
+
const E = T(() => d.getRowId ?? ((x) => String(x.data.id)), [d.getRowId]), { finalRowData: y, finalPinnedTopRowData: F } = T(() => {
|
|
68
68
|
if (!l || m.size === 0)
|
|
69
69
|
return { finalRowData: l, finalPinnedTopRowData: [] };
|
|
70
|
-
const
|
|
70
|
+
const x = [], G = [];
|
|
71
71
|
return l.forEach((A) => {
|
|
72
72
|
const I = E({ data: A, level: 0 }), N = I !== void 0 ? String(I) : void 0;
|
|
73
|
-
N !== void 0 && m.has(N) ?
|
|
74
|
-
}), { finalRowData: G, finalPinnedTopRowData:
|
|
73
|
+
N !== void 0 && m.has(N) ? x.push(A) : G.push(A);
|
|
74
|
+
}), { finalRowData: G, finalPinnedTopRowData: x };
|
|
75
75
|
}, [l, m, E]);
|
|
76
76
|
return /* @__PURE__ */ o(
|
|
77
77
|
L,
|
|
@@ -80,9 +80,9 @@ const Y = M.withParams({
|
|
|
80
80
|
theme: r ?? v,
|
|
81
81
|
rowData: y,
|
|
82
82
|
pinnedTopRowData: F,
|
|
83
|
-
quickFilterText:
|
|
83
|
+
quickFilterText: g,
|
|
84
84
|
onGridReady: b,
|
|
85
|
-
containerStyle: { height: `calc(100% - ${S}px)`, ...
|
|
85
|
+
containerStyle: { height: `calc(100% - ${S}px)`, ...a },
|
|
86
86
|
...d,
|
|
87
87
|
getRowId: E,
|
|
88
88
|
ref: c
|
|
@@ -92,11 +92,11 @@ const Y = M.withParams({
|
|
|
92
92
|
);
|
|
93
93
|
Z.displayName = "DataGridContent";
|
|
94
94
|
const fe = ({ className: r, ...s }) => {
|
|
95
|
-
const
|
|
96
|
-
if (!
|
|
95
|
+
const i = e.useContext(w);
|
|
96
|
+
if (!i)
|
|
97
97
|
throw new Error("DataGridActionBar should be used within <DataGrid>");
|
|
98
|
-
const n = e.useRef(null), { setActionbarExists:
|
|
99
|
-
return e.useEffect(() => (
|
|
98
|
+
const n = e.useRef(null), { setActionbarExists: a, setActionbarHeight: d } = i, { children: c } = s;
|
|
99
|
+
return e.useEffect(() => (a(!0), () => a(!1)), [a]), e.useEffect(() => {
|
|
100
100
|
n.current && d(n.current.clientHeight);
|
|
101
101
|
}, [d]), /* @__PURE__ */ o(
|
|
102
102
|
"div",
|
|
@@ -109,11 +109,11 @@ const fe = ({ className: r, ...s }) => {
|
|
|
109
109
|
children: c
|
|
110
110
|
}
|
|
111
111
|
);
|
|
112
|
-
}, me = ({ defaultOpen: r = !1, className: s, ...
|
|
112
|
+
}, me = ({ defaultOpen: r = !1, className: s, ...i }) => {
|
|
113
113
|
const n = e.useContext(w);
|
|
114
114
|
if (!n)
|
|
115
115
|
throw new Error("SearchAction should be used within <DataGrid>");
|
|
116
|
-
const { quickFilterText:
|
|
116
|
+
const { quickFilterText: a, setQuickFilterText: d } = n, [c, u] = e.useState(r), [l, h] = e.useState(!1), t = e.useRef(null), p = () => {
|
|
117
117
|
n.setQuickFilterText(""), t.current && t.current.focus();
|
|
118
118
|
}, f = () => {
|
|
119
119
|
u(!0);
|
|
@@ -121,27 +121,27 @@ const fe = ({ className: r, ...s }) => {
|
|
|
121
121
|
e.useEffect(() => {
|
|
122
122
|
c && t?.current && t.current.focus();
|
|
123
123
|
}, [c]);
|
|
124
|
-
const
|
|
124
|
+
const g = () => {
|
|
125
125
|
h(!0), n.setQuickFilterText(""), setTimeout(() => {
|
|
126
126
|
u(!1), h(!1);
|
|
127
127
|
}, 200);
|
|
128
128
|
};
|
|
129
|
-
return /* @__PURE__ */ o("div", { className: C("max-w-60", s), ...
|
|
129
|
+
return /* @__PURE__ */ o("div", { className: C("max-w-60", s), ...i, children: c || l ? /* @__PURE__ */ o(
|
|
130
130
|
W,
|
|
131
131
|
{
|
|
132
132
|
ref: t,
|
|
133
133
|
className: C("relative h-7.5", c && !l ? "animate-input-open" : "", l && "animate-input-close"),
|
|
134
134
|
onChange: (R) => d(R.target.value),
|
|
135
|
-
value:
|
|
136
|
-
startAdornment: /* @__PURE__ */ o(D, { variant: "toolbar", className: "p-0.5 h-6 w-6 border-none mx-1", onClick:
|
|
137
|
-
endAdornment:
|
|
135
|
+
value: a,
|
|
136
|
+
startAdornment: /* @__PURE__ */ o(D, { variant: "toolbar", className: "p-0.5 h-6 w-6 border-none mx-1", onClick: g, children: /* @__PURE__ */ o(k, { className: "w-5 h-5" }) }),
|
|
137
|
+
endAdornment: a && /* @__PURE__ */ o(D, { variant: "toolbar", className: "p-0.5 w-6 h-6 border-none mx-1", onClick: p, children: /* @__PURE__ */ o(O, { className: "w-5 h-5" }) })
|
|
138
138
|
}
|
|
139
139
|
) : /* @__PURE__ */ o(D, { variant: "toolbar", className: "p-0.5 w-6 h-6 m-1", onClick: f, children: /* @__PURE__ */ o(k, { className: "w-5 h-5" }) }) });
|
|
140
|
-
}, we = ({ freezeText: r, unFreezeText: s, onClick:
|
|
140
|
+
}, we = ({ freezeText: r, unFreezeText: s, onClick: i, disabled: n, ...a }) => {
|
|
141
141
|
const d = e.useContext(w);
|
|
142
142
|
if (!d)
|
|
143
143
|
throw new Error("FreezeAction should be used within <DataGrid>");
|
|
144
|
-
const [c, u] = e.useState(0), [l, h] = e.useState(0), { api: t, pinnedRowIds: p, setPinnedRowIds: f } = d,
|
|
144
|
+
const [c, u] = e.useState(0), [l, h] = e.useState(0), { api: t, pinnedRowIds: p, setPinnedRowIds: f } = d, g = () => {
|
|
145
145
|
if (!t) return;
|
|
146
146
|
const m = t.getSelectedNodes();
|
|
147
147
|
if (m.length > 0) {
|
|
@@ -153,7 +153,7 @@ const fe = ({ className: r, ...s }) => {
|
|
|
153
153
|
}, R = () => {
|
|
154
154
|
f(/* @__PURE__ */ new Set());
|
|
155
155
|
}, S = (m) => {
|
|
156
|
-
t && (t.getPinnedTopRowCount() > 0 ? R() :
|
|
156
|
+
t && (t.getPinnedTopRowCount() > 0 ? R() : g()), i?.(m);
|
|
157
157
|
};
|
|
158
158
|
return e.useEffect(() => (t?.addEventListener("pinnedRowDataChanged", () => {
|
|
159
159
|
u(t.getPinnedTopRowCount());
|
|
@@ -172,25 +172,25 @@ const fe = ({ className: r, ...s }) => {
|
|
|
172
172
|
onClick: S,
|
|
173
173
|
startIcon: /* @__PURE__ */ o(q, { className: "w-4.5 h-4.5" }),
|
|
174
174
|
disabled: !c && !l || n,
|
|
175
|
-
...
|
|
175
|
+
...a,
|
|
176
176
|
children: c ? s ?? "Unfreeze" : r ?? "Freeze"
|
|
177
177
|
}
|
|
178
178
|
);
|
|
179
|
-
}, pe = ({ children: r, className: s, onClick:
|
|
180
|
-
const
|
|
181
|
-
if (!
|
|
179
|
+
}, pe = ({ children: r, className: s, onClick: i, ...n }) => {
|
|
180
|
+
const a = e.useContext(w);
|
|
181
|
+
if (!a)
|
|
182
182
|
throw new Error("PrintAction should be used within <DataGrid>");
|
|
183
183
|
const d = (c) => {
|
|
184
|
-
|
|
185
|
-
const u = document.querySelector("[grid-id='" +
|
|
184
|
+
a.api && (a.api.setGridOption("domLayout", "print"), setTimeout(() => {
|
|
185
|
+
const u = document.querySelector("[grid-id='" + a.gridId + "']"), h = `<html>
|
|
186
186
|
${document.head.innerHTML}
|
|
187
187
|
${u.outerHTML}
|
|
188
188
|
</html>`;
|
|
189
|
-
V(h),
|
|
190
|
-
})),
|
|
189
|
+
V(h), a?.api?.setGridOption("domLayout", void 0);
|
|
190
|
+
})), i?.(c);
|
|
191
191
|
};
|
|
192
192
|
return /* @__PURE__ */ o(D, { variant: "toolbar", className: C("p-0.5 w-6 h-6", s), onClick: d, ...n, children: r ?? /* @__PURE__ */ o($, { className: "w-5 h-5" }) });
|
|
193
|
-
},
|
|
193
|
+
}, ge = ({ className: r, onRefresh: s, children: i, loading: n, ...a }) => {
|
|
194
194
|
if (!e.useContext(w))
|
|
195
195
|
throw new Error("RefreshAction should be used within <DataGrid>");
|
|
196
196
|
const c = () => {
|
|
@@ -203,25 +203,25 @@ const fe = ({ className: r, ...s }) => {
|
|
|
203
203
|
variant: "toolbar",
|
|
204
204
|
onClick: c,
|
|
205
205
|
disabled: n,
|
|
206
|
-
...
|
|
207
|
-
children:
|
|
206
|
+
...a,
|
|
207
|
+
children: i ?? /* @__PURE__ */ o(j, { className: C("w-4.5 h-4.5", n && "animate-spin") })
|
|
208
208
|
}
|
|
209
209
|
);
|
|
210
|
-
},
|
|
210
|
+
}, xe = ({ onDelete: r, children: s, ...i }) => /* @__PURE__ */ o(P, { variant: "danger", onClick: () => {
|
|
211
211
|
r();
|
|
212
|
-
}, startIcon: /* @__PURE__ */ o(U, { className: "w-4.5 h-4.5" }), ...
|
|
212
|
+
}, startIcon: /* @__PURE__ */ o(U, { className: "w-4.5 h-4.5" }), ...i, children: s }), Ce = ({ children: r, slotProps: s, className: i, ...n }) => /* @__PURE__ */ z(X, { ...s?.popoverProps ?? {}, children: [
|
|
213
213
|
/* @__PURE__ */ o(J, { ...s?.triggerProps ?? {}, children: /* @__PURE__ */ o(_, { className: "w-4.5 h-4.5 text-primary" }) }),
|
|
214
|
-
/* @__PURE__ */ o(K, { align: "end", className: C("w-40",
|
|
214
|
+
/* @__PURE__ */ o(K, { align: "end", className: C("w-40", i), ...n, children: r })
|
|
215
215
|
] });
|
|
216
216
|
export {
|
|
217
217
|
he as DataGrid,
|
|
218
218
|
fe as DataGridActionBar,
|
|
219
219
|
Z as DataGridContent,
|
|
220
|
-
|
|
220
|
+
xe as DeleteAction,
|
|
221
221
|
Ce as ExtraActions,
|
|
222
222
|
we as FreezeAction,
|
|
223
223
|
pe as PrintAction,
|
|
224
|
-
|
|
224
|
+
ge as RefreshAction,
|
|
225
225
|
me as SearchAction,
|
|
226
226
|
Y as dataGridDefaultTheme,
|
|
227
227
|
ue as useDataGrid
|
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, { 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 pinnedRowIds: Set<string>;\r\n setPinnedRowIds: (value: Set<string>) => 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 const [pinnedRowIds, setPinnedRowIds] = React.useState<Set<string>>(new Set());\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 pinnedRowIds,\r\n setPinnedRowIds,\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, pinnedRowIds } = 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 const getRowId = useMemo(() => {\r\n return props.getRowId ?? ((params: any) => params.data.id);\r\n }, [props.getRowId]);\r\n\r\n const { finalRowData, finalPinnedTopRowData } = useMemo(() => {\r\n if (!rowData || pinnedRowIds.size === 0) {\r\n return { finalRowData: rowData, finalPinnedTopRowData: [] };\r\n }\r\n\r\n const pinned: any[] = [];\r\n const unpinned: any[] = [];\r\n\r\n rowData.forEach(data => {\r\n const id = getRowId({ data, level: 0 } as any);\r\n const stringId = id !== undefined ? String(id) : undefined;\r\n\r\n if (stringId !== undefined && pinnedRowIds.has(stringId)) {\r\n pinned.push(data);\r\n } else {\r\n unpinned.push(data);\r\n }\r\n });\r\n\r\n return { finalRowData: unpinned, finalPinnedTopRowData: pinned };\r\n }, [rowData, pinnedRowIds, getRowId]);\r\n\r\n return (\r\n <AgGridReact\r\n gridId={gridId}\r\n theme={propTheme ?? theme}\r\n rowData={finalRowData}\r\n pinnedTopRowData={finalPinnedTopRowData}\r\n quickFilterText={quickFilterText}\r\n onGridReady={handleGridReady}\r\n containerStyle={{ height: `calc(100% - ${actionbarHeight}px)`, ...containerStyle }}\r\n {...props}\r\n getRowId={getRowId}\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, pinnedRowIds, setPinnedRowIds } = 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 const newPinnedIds = new Set(pinnedRowIds);\r\n selectedRows.forEach(row => {\r\n if (row.id !== undefined) {\r\n newPinnedIds.add(row.id);\r\n }\r\n });\r\n setPinnedRowIds(newPinnedIds);\r\n api.deselectAll();\r\n }\r\n };\r\n\r\n const unfreezeRows = () => {\r\n setPinnedRowIds(new Set());\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 if (api?.isDestroyed()) 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","pinnedRowIds","setPinnedRowIds","quickFilterText","setQuickFilterText","actionbarExists","setActionbarExists","jsx","DataGridContent","forwardRef","propTheme","onGridReady","quickFilterTextProps","rowDataProps","containerStyle","props","ref","theme","useMemo","handleGridReady","e","getRowId","params","finalRowData","finalPinnedTopRowData","pinned","unpinned","data","id","stringId","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","newPinnedIds","row","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 pinnedRowIds: Set<string>;\r\n setPinnedRowIds: (value: Set<string>) => 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 const [pinnedRowIds, setPinnedRowIds] = React.useState<Set<string>>(new Set());\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 pinnedRowIds,\r\n setPinnedRowIds,\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, pinnedRowIds } = 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 const getRowId = useMemo(() => {\r\n return props.getRowId ?? ((params: any) => String(params.data.id));\r\n }, [props.getRowId]);\r\n\r\n const { finalRowData, finalPinnedTopRowData } = useMemo(() => {\r\n if (!rowData || pinnedRowIds.size === 0) {\r\n return { finalRowData: rowData, finalPinnedTopRowData: [] };\r\n }\r\n\r\n const pinned: any[] = [];\r\n const unpinned: any[] = [];\r\n\r\n rowData.forEach(data => {\r\n const id = getRowId({ data, level: 0 } as any);\r\n const stringId = id !== undefined ? String(id) : undefined;\r\n\r\n if (stringId !== undefined && pinnedRowIds.has(stringId)) {\r\n pinned.push(data);\r\n } else {\r\n unpinned.push(data);\r\n }\r\n });\r\n\r\n return { finalRowData: unpinned, finalPinnedTopRowData: pinned };\r\n }, [rowData, pinnedRowIds, getRowId]);\r\n\r\n return (\r\n <AgGridReact\r\n gridId={gridId}\r\n theme={propTheme ?? theme}\r\n rowData={finalRowData}\r\n pinnedTopRowData={finalPinnedTopRowData}\r\n quickFilterText={quickFilterText}\r\n onGridReady={handleGridReady}\r\n containerStyle={{ height: `calc(100% - ${actionbarHeight}px)`, ...containerStyle }}\r\n {...props}\r\n getRowId={getRowId}\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, pinnedRowIds, setPinnedRowIds } = 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 const newPinnedIds = new Set(pinnedRowIds);\r\n selectedRows.forEach(row => {\r\n if (row.id !== undefined) {\r\n newPinnedIds.add(row.id);\r\n }\r\n });\r\n setPinnedRowIds(newPinnedIds);\r\n api.deselectAll();\r\n }\r\n };\r\n\r\n const unfreezeRows = () => {\r\n setPinnedRowIds(new Set());\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 if (api?.isDestroyed()) 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","pinnedRowIds","setPinnedRowIds","quickFilterText","setQuickFilterText","actionbarExists","setActionbarExists","jsx","DataGridContent","forwardRef","propTheme","onGridReady","quickFilterTextProps","rowDataProps","containerStyle","props","ref","theme","useMemo","handleGridReady","e","getRowId","params","finalRowData","finalPinnedTopRowData","pinned","unpinned","data","id","stringId","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","newPinnedIds","row","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":";;;;;;;;;;;AAgBAA,EAAe,gBAAgB,CAACC,CAAkB,CAAC;AAEnD,MAAMC,IAAuBC,EAAY,WAAW;AAAA,EAClD,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,eAAe;AACjB,CAAC,GAkBKC,IAAkBC,EAAM,cAAsC,IAAI,GAElEC,KAAc,MAAM;AACxB,QAAMC,IAAUF,EAAM,WAAWD,CAAe;AAEhD,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,8CAA8C;AAGhE,SAAOA;AACT,GAMMC,KAAoC,CAAC,EAAE,UAAAC,QAAe;AAC1D,QAAMC,IAASL,EAAM,MAAA,GACf,CAACM,GAAKC,CAAM,IAAIP,EAAM,SAAyB,IAAI,GACnD,CAACQ,GAASC,CAAU,IAAIT,EAAM,SAAmC,CAAA,CAAE,GACnE,CAACU,GAAiBC,CAAkB,IAAIX,EAAM,SAAS,CAAC,GACxD,CAACY,GAAcC,CAAe,IAAIb,EAAM,SAAsB,oBAAI,KAAK,GAEvE,CAACc,GAAiBC,CAAkB,IAAIf,EAAM,SAAS,EAAE,GACzD,CAACgB,GAAiBC,CAAkB,IAAIjB,EAAM,SAAS,EAAK;AAClE,SACE,gBAAAkB;AAAA,IAACnB,EAAgB;AAAA,IAAhB;AAAA,MACC,OAAO;AAAA,QACL,KAAAO;AAAA,QACA,QAAAC;AAAA,QACA,SAAAC;AAAA,QACA,YAAAC;AAAA,QACA,QAAAJ;AAAA,QACA,iBAAAS;AAAA,QACA,oBAAAC;AAAA,QACA,iBAAAC;AAAA,QACA,oBAAAC;AAAA,QACA,iBAAAP;AAAA,QACA,oBAAAC;AAAA,QACA,cAAAC;AAAA,QACA,iBAAAC;AAAA,MAAA;AAAA,MAGD,UAAAT;AAAA,IAAA;AAAA,EAAA;AAGP,GAMMe,IAAkBC;AAAA,EACtB,CAAC,EAAE,OAAOC,GAAW,aAAAC,GAAa,iBAAiBC,GAAsB,SAASC,GAAc,gBAAAC,GAAgB,GAAGC,EAAA,GAASC,MAAQ;AAClI,UAAMzB,IAAUF,EAAM,WAAWD,CAAe;AAEhD,QAAI,CAACG;AACH,YAAM,IAAI,MAAM,kDAAkD;AAEpE,UAAM,EAAE,SAAAM,GAAS,YAAAC,GAAY,iBAAAO,GAAiB,QAAAT,GAAQ,oBAAAQ,GAAoB,iBAAAD,GAAiB,QAAAT,GAAQ,iBAAAK,GAAiB,cAAAE,EAAA,IAAiBV,GAE/H0B,IAAQC,EAAQ,MACbhC,EAAqB,WAAW;AAAA,MACrC,cAAc;AAAA,MACd,qBAAqBmB,IAAkB,oBAAoB;AAAA,IAAA,CAC5D,GACA,CAACA,CAAe,CAAC,GAEdc,IAAkB,CAACC,MAAsB;AAC7C,MAAAxB,EAAOwB,EAAE,GAAG,GACZT,IAAcS,CAAC;AAAA,IACjB;AAEA/B,IAAAA,EAAM,UAAU,MAAM;AACpB,MAAAS,EAAWe,CAAY;AAAA,IACzB,GAAG,CAACA,GAAcf,CAAU,CAAC,GAE7BT,EAAM,UAAU,MAAM;AACpB,MAAIuB,MAAyB,UAC3BR,EAAmBQ,KAAwB,EAAE;AAAA,IAEjD,GAAG,CAACA,GAAsBR,CAAkB,CAAC;AAE7C,UAAMiB,IAAWH,EAAQ,MAChBH,EAAM,aAAa,CAACO,MAAgB,OAAOA,EAAO,KAAK,EAAE,IAC/D,CAACP,EAAM,QAAQ,CAAC,GAEb,EAAE,cAAAQ,GAAc,uBAAAC,EAAA,IAA0BN,EAAQ,MAAM;AAC5D,UAAI,CAACrB,KAAWI,EAAa,SAAS;AACpC,eAAO,EAAE,cAAcJ,GAAS,uBAAuB,CAAA,EAAC;AAG1D,YAAM4B,IAAgB,CAAA,GAChBC,IAAkB,CAAA;AAExB,aAAA7B,EAAQ,QAAQ,CAAA8B,MAAQ;AACtB,cAAMC,IAAKP,EAAS,EAAE,MAAAM,GAAM,OAAO,GAAU,GACvCE,IAAWD,MAAO,SAAY,OAAOA,CAAE,IAAI;AAEjD,QAAIC,MAAa,UAAa5B,EAAa,IAAI4B,CAAQ,IACrDJ,EAAO,KAAKE,CAAI,IAEhBD,EAAS,KAAKC,CAAI;AAAA,MAEtB,CAAC,GAEM,EAAE,cAAcD,GAAU,uBAAuBD,EAAA;AAAA,IAC1D,GAAG,CAAC5B,GAASI,GAAcoB,CAAQ,CAAC;AAEpC,WACE,gBAAAd;AAAA,MAACuB;AAAA,MAAA;AAAA,QACC,QAAApC;AAAA,QACA,OAAOgB,KAAaO;AAAA,QACpB,SAASM;AAAA,QACT,kBAAkBC;AAAA,QAClB,iBAAArB;AAAA,QACA,aAAagB;AAAA,QACb,gBAAgB,EAAE,QAAQ,eAAepB,CAAe,OAAO,GAAGe,EAAA;AAAA,QACjE,GAAGC;AAAA,QACJ,UAAAM;AAAA,QACA,KAAAL;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAR,EAAgB,cAAc;AAI9B,MAAMuB,KAAsD,CAAC,EAAE,WAAAC,GAAW,GAAGjB,QAAY;AACvF,QAAMxB,IAAUF,EAAM,WAAWD,CAAe;AAEhD,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,oDAAoD;AAEtE,QAAMyB,IAAM3B,EAAM,OAA8B,IAAI,GAC9C,EAAE,oBAAAiB,GAAoB,oBAAAN,EAAA,IAAuBT,GAC7C,EAAE,UAAAE,MAAasB;AAErB1B,SAAAA,EAAM,UAAU,OACdiB,EAAmB,EAAI,GAChB,MAAMA,EAAmB,EAAK,IACpC,CAACA,CAAkB,CAAC,GAEvBjB,EAAM,UAAU,MAAM;AACpB,IAAI2B,EAAI,WACNhB,EAAmBgB,EAAI,QAAQ,YAAY;AAAA,EAE/C,GAAG,CAAChB,CAAkB,CAAC,GAGrB,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW0B;AAAA,QACT;AAAA,QACAD;AAAA,MAAA;AAAA,MAEF,KAAAhB;AAAA,MAEC,UAAAvB;AAAA,IAAA;AAAA,EAAA;AAGP,GAMMyC,KAA4C,CAAC,EAAE,aAAAC,IAAc,IAAO,WAAAH,GAAW,GAAGjB,QAAY;AAClG,QAAMxB,IAAUF,EAAM,WAAWD,CAAe;AAEhD,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,+CAA+C;AAGjE,QAAM,EAAE,iBAAAY,GAAiB,oBAAAC,EAAA,IAAuBb,GAE1C,CAAC6C,GAAmBC,CAAoB,IAAIhD,EAAM,SAAS8C,CAAW,GACtE,CAACG,GAAWC,CAAY,IAAIlD,EAAM,SAAS,EAAK,GAChDmD,IAAWnD,EAAM,OAAgC,IAAI,GAErDoD,IAAc,MAAM;AACxB,IAAAlD,EAAQ,mBAAmB,EAAE,GACzBiD,EAAS,WACXA,EAAS,QAAQ,MAAA;AAAA,EAErB,GAEME,IAAa,MAAM;AACvB,IAAAL,EAAqB,EAAI;AAAA,EAC3B;AAEAhD,EAAAA,EAAM,UAAU,MAAM;AACpB,IAAI+C,KAAqBI,GAAU,WACjCA,EAAS,QAAQ,MAAA;AAAA,EAErB,GAAG,CAACJ,CAAiB,CAAC;AAEtB,QAAMO,IAAc,MAAM;AACxB,IAAAJ,EAAa,EAAI,GACjBhD,EAAQ,mBAAmB,EAAE,GAC7B,WAAW,MAAM;AACf,MAAA8C,EAAqB,EAAK,GAC1BE,EAAa,EAAK;AAAA,IACpB,GAAG,GAAG;AAAA,EACR;AAEA,SACE,gBAAAhC,EAAC,OAAA,EAAI,WAAW0B,EAAG,YAAYD,CAAS,GAAI,GAAGjB,GAC5C,UAAAqB,KAAqBE,IACpB,gBAAA/B;AAAA,IAACqC;AAAA,IAAA;AAAA,MACC,KAAKJ;AAAA,MACL,WAAWP,EAAG,kBAAkBG,KAAqB,CAACE,IAAY,uBAAuB,IAAIA,KAAa,qBAAqB;AAAA,MAC/H,UAAU,CAAAlB,MAAKhB,EAAmBgB,EAAE,OAAO,KAAK;AAAA,MAChD,OAAOjB;AAAA,MACP,gBACE,gBAAAI,EAACsC,GAAA,EAAW,SAAQ,WAAU,WAAU,kCAAiC,SAASF,GAChF,UAAA,gBAAApC,EAACuC,GAAA,EAAU,WAAU,WAAU,GACjC;AAAA,MAEF,cACE3C,KACE,gBAAAI,EAACsC,GAAA,EAAW,SAAQ,WAAU,WAAU,kCAAiC,SAASJ,GAChF,UAAA,gBAAAlC,EAACwC,GAAA,EAAY,WAAU,WAAU,EAAA,CACnC;AAAA,IAAA;AAAA,EAAA,IAKN,gBAAAxC,EAACsC,GAAA,EAAW,SAAQ,WAAU,WAAU,qBAAoB,SAASH,GACnE,UAAA,gBAAAnC,EAACuC,GAAA,EAAU,WAAU,UAAA,CAAU,GACjC,GAEJ;AAEJ,GAOME,KAA4C,CAAC,EAAE,YAAAC,GAAY,cAAAC,GAAc,SAAAC,GAAS,UAAAC,GAAU,GAAGrC,QAAY;AAC/G,QAAMxB,IAAUF,EAAM,WAAWD,CAAe;AAEhD,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,+CAA+C;AAGjE,QAAM,CAAC8D,GAAgBC,CAAiB,IAAIjE,EAAM,SAAS,CAAC,GACtD,CAACkE,GAAmBC,CAAoB,IAAInE,EAAM,SAAS,CAAC,GAE5D,EAAE,KAAAM,GAAK,cAAAM,GAAc,iBAAAC,EAAA,IAAoBX,GAEzCkE,IAAa,MAAM;AACvB,QAAI,CAAC9D,EAAK;AAGV,UAAM+D,IAAe/D,EAAI,iBAAA;AAEzB,QAAI+D,EAAa,SAAS,GAAG;AAC3B,YAAMC,IAAe,IAAI,IAAI1D,CAAY;AACzC,MAAAyD,EAAa,QAAQ,CAAAE,MAAO;AAC1B,QAAIA,EAAI,OAAO,UACbD,EAAa,IAAIC,EAAI,EAAE;AAAA,MAE3B,CAAC,GACD1D,EAAgByD,CAAY,GAC5BhE,EAAI,YAAA;AAAA,IACN;AAAA,EACF,GAEMkE,IAAe,MAAM;AACzB,IAAA3D,EAAgB,oBAAI,KAAK;AAAA,EAC3B,GAEM4D,IAAiB,CAAC1C,MAA2C;AACjE,IAAIzB,MACsBA,EAAI,qBAAA,IACN,IACpBkE,EAAA,IAEAJ,EAAA,IAGJN,IAAU/B,CAAC;AAAA,EACb;AAEA/B,SAAAA,EAAM,UAAU,OACdM,GAAK,iBAAiB,wBAAwB,MAAM;AAClD,IAAA2D,EAAkB3D,EAAI,sBAAsB;AAAA,EAC9C,CAAC,GAEDA,GAAK,iBAAiB,oBAAoB,MAAM;AAC9C,IAAA6D,EAAqB7D,EAAI,iBAAA,EAAmB,MAAM;AAAA,EACpD,CAAC,GAEM,MAAM;AACX,IAAIA,GAAK,kBACTA,GAAK,oBAAoB,wBAAwB,MAAM;AACrD,MAAA2D,EAAkB3D,EAAI,sBAAsB;AAAA,IAC9C,CAAC,GAEDA,GAAK,oBAAoB,oBAAoB,MAAM;AACjD,MAAA6D,EAAqB7D,EAAI,iBAAA,EAAmB,MAAM;AAAA,IACpD,CAAC;AAAA,EACH,IACC,CAACA,CAAG,CAAC,GAGN,gBAAAY;AAAA,IAACwD;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,SAASD;AAAA,MACT,WAAW,gBAAAvD,EAACyD,GAAA,EAAU,WAAU,cAAA,CAAc;AAAA,MAC9C,UAAW,CAACX,KAAkB,CAACE,KAAsBH;AAAA,MACpD,GAAGrC;AAAA,MAEH,UAAAsC,IAAkBH,KAAgB,aAAeD,KAAc;AAAA,IAAA;AAAA,EAAA;AAGtE,GAIMgB,KAA0C,CAAC,EAAE,UAAAxE,GAAU,WAAAuC,GAAW,SAAAmB,GAAS,GAAGpC,QAAY;AAC9F,QAAMxB,IAAUF,EAAM,WAAWD,CAAe;AAEhD,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,8CAA8C;AAGhE,QAAM2E,IAAc,CAAC9C,MAA2C;AAC9D,IAAI7B,EAAQ,QACVA,EAAQ,IAAI,cAAc,aAAa,OAAO,GAE9C,WAAW,MAAM;AACf,YAAM4E,IAAU,SAAS,cAAc,eAAe5E,EAAQ,SAAS,IAAI,GAErE6E,IAAO;AAAA,UADE,SAAS,KAEf,SAAS;AAAA,UAChBD,EAAQ,SAAS;AAAA;AAEnB,MAAAE,EAAUD,CAAI,GACd7E,GAAS,KAAK,cAAc,aAAa,MAAS;AAAA,IACpD,CAAC,IAEH4D,IAAU/B,CAAC;AAAA,EACb;AAEA,2BACGyB,GAAA,EAAW,SAAQ,WAAU,WAAWZ,EAAG,iBAAiBD,CAAS,GAAG,SAASkC,GAAc,GAAGnD,GAChG,UAAAtB,uBAAa6E,GAAA,EAAM,WAAU,WAAU,GAC1C;AAEJ,GAMMC,KAA8C,CAAC,EAAE,WAAAvC,GAAW,WAAAwC,GAAW,UAAA/E,GAAU,SAAAgF,GAAS,GAAG1D,QAAY;AAG7G,MAAI,CAFY1B,EAAM,WAAWD,CAAe;AAG9C,UAAM,IAAI,MAAM,gDAAgD;AAGlE,QAAMsF,IAAgB,MAAM;AAC1B,IAAAF,EAAA;AAAA,EACF;AAEA,SACE,gBAAAjE;AAAA,IAACsC;AAAA,IAAA;AAAA,MACC,WAAWZ,EAAG,iBAAiBwC,KAAW,2BAA2BzC,CAAS;AAAA,MAC9E,SAAQ;AAAA,MACR,SAAS0C;AAAA,MACT,UAAUD;AAAA,MACT,GAAG1D;AAAA,MAEH,UAAAtB,uBAAakF,GAAA,EAAQ,WAAW1C,EAAG,eAAewC,KAAW,cAAc,EAAA,CAAG;AAAA,IAAA;AAAA,EAAA;AAGrF,GAMMG,KAA4C,CAAC,EAAE,UAAAC,GAAU,UAAApF,GAAU,GAAGsB,QAMxE,gBAAAR,EAACwD,GAAA,EAAO,SAAQ,UAAS,SALN,MAAM;AACzB,EAAAc,EAAA;AACF,GAGkD,WAAW,gBAAAtE,EAACuE,GAAA,EAAS,WAAU,cAAA,CAAc,GAAK,GAAG/D,GAClG,UAAAtB,GACH,GAYEsF,KAA4C,CAAC,EAAE,UAAAtF,GAAU,WAAAuF,GAAW,WAAAhD,GAAW,GAAGjB,0BAEnFkE,GAAA,EAAS,GAAID,GAAW,gBAAgB,CAAA,GACvC,UAAA;AAAA,EAAA,gBAAAzE,EAAC2E,GAAA,EAAgB,GAAIF,GAAW,gBAAgB,CAAA,GAC9C,UAAA,gBAAAzE,EAAC4E,GAAA,EAAgB,WAAU,2BAAA,CAA2B,EAAA,CACxD;AAAA,EACA,gBAAA5E,EAAC6E,GAAA,EAAe,OAAM,OAAM,WAAWnD,EAAG,QAAQD,CAAS,GAAI,GAAGjB,GAC/D,UAAAtB,EAAA,CACH;AAAA,GACF;"}
|