ms-react-table 1.0.0

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/index.js ADDED
@@ -0,0 +1,517 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ MsReactTable: () => MsReactTable_default
34
+ });
35
+ module.exports = __toCommonJS(index_exports);
36
+
37
+ // src/MsReactTable.tsx
38
+ var import_react5 = __toESM(require("react"));
39
+
40
+ // src/contextAPI/MsTableProvider.tsx
41
+ var import_react3 = require("react");
42
+
43
+ // src/contextAPI/MsTableContext.tsx
44
+ var import_react = require("react");
45
+ var TableContext = (0, import_react.createContext)(
46
+ null
47
+ );
48
+ var MsTableContext_default = TableContext;
49
+ var useTable = () => {
50
+ const ctx = (0, import_react.useContext)(TableContext);
51
+ if (!ctx) throw new Error("useTable must be used inside TableProvider");
52
+ return ctx;
53
+ };
54
+
55
+ // src/components/HeaderActionMenu/HeaderActionMenu.tsx
56
+ var import_react2 = require("react");
57
+
58
+ // src/_assets/icons/index.tsx
59
+ var import_jsx_runtime = require("react/jsx-runtime");
60
+ var verticleThreeDotsIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { width: "3", height: "13", viewBox: "0 0 3 13", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
61
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ellipse", { cx: "1.5", cy: "1.5", rx: "1.5", ry: "1.5", transform: "matrix(-4.37114e-08 1 1 4.37114e-08 0 10)", fill: "#2F2F2F" }),
62
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ellipse", { cx: "1.5", cy: "1.5", rx: "1.5", ry: "1.5", transform: "matrix(-4.37114e-08 1 1 4.37114e-08 0 5)", fill: "#2F2F2F" }),
63
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ellipse", { cx: "1.5", cy: "1.5", rx: "1.5", ry: "1.5", transform: "matrix(-4.37114e-08 1 1 4.37114e-08 0 0)", fill: "#2F2F2F" })
64
+ ] });
65
+ var angleRightIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "32", height: "32", fill: "currentColor", viewBox: "0 0 256 256", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M141.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L124.69,128,50.34,53.66A8,8,0,0,1,61.66,42.34l80,80A8,8,0,0,1,141.66,133.66Zm80-11.32-80-80a8,8,0,0,0-11.32,11.32L204.69,128l-74.35,74.34a8,8,0,0,0,11.32,11.32l80-80A8,8,0,0,0,221.66,122.34Z" }) });
66
+ var angleLeftIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "32", height: "32", fill: "currentColor", viewBox: "0 0 256 256", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M205.66,202.34a8,8,0,0,1-11.32,11.32l-80-80a8,8,0,0,1,0-11.32l80-80a8,8,0,0,1,11.32,11.32L131.31,128ZM51.31,128l74.35-74.34a8,8,0,0,0-11.32-11.32l-80,80a8,8,0,0,0,0,11.32l80,80a8,8,0,0,0,11.32-11.32Z" }) });
67
+ var angleDownIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "32", height: "32", fill: "currentColor", viewBox: "0 0 256 256", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M213.66,130.34a8,8,0,0,1,0,11.32l-80,80a8,8,0,0,1-11.32,0l-80-80a8,8,0,0,1,11.32-11.32L128,204.69l74.34-74.35A8,8,0,0,1,213.66,130.34Zm-91.32,11.32a8,8,0,0,0,11.32,0l80-80a8,8,0,0,0-11.32-11.32L128,124.69,53.66,50.34A8,8,0,0,0,42.34,61.66Z" }) });
68
+ var angleUpIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "32", height: "32", fill: "currentColor", viewBox: "0 0 256 256", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M213.66,194.34a8,8,0,0,1-11.32,11.32L128,131.31,53.66,205.66a8,8,0,0,1-11.32-11.32l80-80a8,8,0,0,1,11.32,0Zm-160-68.68L128,51.31l74.34,74.35a8,8,0,0,0,11.32-11.32l-80-80a8,8,0,0,0-11.32,0l-80,80a8,8,0,0,0,11.32,11.32Z" }) });
69
+ var reloadIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", role: "img", width: "1em", height: "1em", viewBox: "0 0 256 256", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { fill: "currentColor", d: "M224 128a96 96 0 0 1-94.71 96H128a95.38 95.38 0 0 1-65.9-26.2a8 8 0 0 1 11-11.63a80 80 0 1 0-1.67-114.78a3 3 0 0 1-.26.25L44.59 96H72a8 8 0 0 1 0 16H24a8 8 0 0 1-8-8V56a8 8 0 0 1 16 0v29.8L60.25 60A96 96 0 0 1 224 128" }) });
70
+ var prevIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "32", height: "32", fill: "currentColor", viewBox: "0 0 256 256", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M165.66,202.34a8,8,0,0,1-11.32,11.32l-80-80a8,8,0,0,1,0-11.32l80-80a8,8,0,0,1,11.32,11.32L91.31,128Z" }) });
71
+ var nextIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "32", height: "32", fill: "currentColor", viewBox: "0 0 256 256", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" }) });
72
+ var doublePipeArrow = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "32", height: "32", fill: "currentColor", viewBox: "0 0 256 256", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M112,48V208a8,8,0,0,1-16,0V136H43.31l18.35,18.34a8,8,0,0,1-11.32,11.32l-32-32a8,8,0,0,1,0-11.32l32-32a8,8,0,0,1,11.32,11.32L43.31,120H96V48a8,8,0,0,1,16,0Zm125.66,74.34-32-32a8,8,0,0,0-11.32,11.32L212.69,120H160V48a8,8,0,0,0-16,0V208a8,8,0,0,0,16,0V136h52.69l-18.35,18.34a8,8,0,0,0,11.32,11.32l32-32A8,8,0,0,0,237.66,122.34Z" }) });
73
+ var hideShow = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "32", height: "32", fill: "currentColor", viewBox: "0 0 256 256", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M64,105V40a8,8,0,0,0-16,0v65a32,32,0,0,0,0,62v49a8,8,0,0,0,16,0V167a32,32,0,0,0,0-62Zm-8,47a16,16,0,1,1,16-16A16,16,0,0,1,56,152Zm80-95V40a8,8,0,0,0-16,0V57a32,32,0,0,0,0,62v97a8,8,0,0,0,16,0V119a32,32,0,0,0,0-62Zm-8,47a16,16,0,1,1,16-16A16,16,0,0,1,128,104Zm104,64a32.06,32.06,0,0,0-24-31V40a8,8,0,0,0-16,0v97a32,32,0,0,0,0,62v17a8,8,0,0,0,16,0V199A32.06,32.06,0,0,0,232,168Zm-32,16a16,16,0,1,1,16-16A16,16,0,0,1,200,184Z" }) });
74
+
75
+ // src/components/HeaderActionMenu/HeaderActionMenu.tsx
76
+ var import_jsx_runtime2 = require("react/jsx-runtime");
77
+ var HeaderActionMenu = (props) => {
78
+ const { state, api: { onColumnPin, onSortColumn, onAutoColumnResize, onColumnReset, updateState } } = useTable();
79
+ const [showColumnList, toggleColumnList] = (0, import_react2.useState)(false);
80
+ const [columnList, setColumnList] = (0, import_react2.useState)(state.colConfigs);
81
+ const [searchkey, setSearchkey] = (0, import_react2.useState)("");
82
+ (0, import_react2.useEffect)(() => {
83
+ setColumnList(state.colConfigs);
84
+ onSearchHeader(searchkey);
85
+ }, [state.colConfigs]);
86
+ const onCheckboxChange = (dataIndex, e) => {
87
+ let newConfig = state.colConfigs.map((item) => {
88
+ return {
89
+ ...item,
90
+ isHidden: item.dataIndex == dataIndex ? !e.target.checked : item.isHidden || false
91
+ };
92
+ });
93
+ updateState({
94
+ ...state,
95
+ colConfigs: newConfig
96
+ });
97
+ setColumnList(newConfig);
98
+ };
99
+ const onSearchHeader = (value) => {
100
+ let newlist = [];
101
+ if (value) {
102
+ state.colConfigs.map((item) => {
103
+ if (item.title.toLowerCase().includes(value.toLowerCase())) {
104
+ newlist.push(item);
105
+ }
106
+ });
107
+ setColumnList(newlist);
108
+ } else {
109
+ setColumnList(state.colConfigs);
110
+ }
111
+ setSearchkey(value);
112
+ };
113
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { ref: props.ref, className: "header-menu", style: props.style, children: showColumnList ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "column-list", children: [
114
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "search", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("input", { type: "text", placeholder: "Search header", className: "search-input", onChange: (e) => onSearchHeader(e.target.value) }) }),
115
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "list", children: columnList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "item", children: [
116
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("input", { className: "ms-checkbox-input", type: "checkbox", id: item.dataIndex, checked: !item.isHidden, onChange: (e) => onCheckboxChange(item.dataIndex, e) }),
117
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("label", { htmlFor: item.dataIndex, children: item.title })
118
+ ] }, item.dataIndex + "_item")) })
119
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("ul", { children: [
120
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("li", { onClick: () => onSortColumn(props.dataIndex, "asc"), children: [
121
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: angleUpIcon }),
122
+ `Sort By Ascending`
123
+ ] }),
124
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("li", { onClick: () => onSortColumn(props.dataIndex, "desc"), children: [
125
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: angleDownIcon }),
126
+ `Sort By Descending`
127
+ ] }),
128
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("li", { onClick: () => onAutoColumnResize("all"), children: [
129
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: doublePipeArrow }),
130
+ `Autosize All Column`
131
+ ] }),
132
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("li", { onClick: () => toggleColumnList(true), children: [
133
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: hideShow }),
134
+ `Hide/Show Columns`
135
+ ] }),
136
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("li", { onClick: onColumnReset, children: [
137
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: reloadIcon }),
138
+ `Reset Columns`
139
+ ] })
140
+ ] }) });
141
+ };
142
+ var HeaderActionMenu_default = HeaderActionMenu;
143
+
144
+ // src/components/Overlay.tsx
145
+ var import_jsx_runtime3 = require("react/jsx-runtime");
146
+ var Overlay = (props) => {
147
+ const { message = "No Records to show", style } = props;
148
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "overlay-message", style, children: message });
149
+ };
150
+ var Overlay_default = Overlay;
151
+
152
+ // src/components/HelperFunction.ts
153
+ function sortData(data, dataIndex, sortBy) {
154
+ return [...data].sort((a, b) => {
155
+ const valA = a[dataIndex];
156
+ const valB = b[dataIndex];
157
+ if (typeof valA === "number" && typeof valB === "number") {
158
+ return sortBy === "asc" ? valA - valB : valB - valA;
159
+ }
160
+ const strA = String(valA).toLowerCase();
161
+ const strB = String(valB).toLowerCase();
162
+ if (strA === strB) return 0;
163
+ const comparison = strA < strB ? -1 : 1;
164
+ return sortBy === "asc" ? comparison : -comparison;
165
+ });
166
+ }
167
+
168
+ // src/contextAPI/MsTableProvider.tsx
169
+ var import_jsx_runtime4 = require("react/jsx-runtime");
170
+ var TableProvider = (props) => {
171
+ const actionMenuRef = (0, import_react3.useRef)(null);
172
+ const {
173
+ columns,
174
+ data,
175
+ children,
176
+ pageSizeOptions = [],
177
+ isClientSideRendering = true,
178
+ totalRecords,
179
+ tbodyRef,
180
+ theadRef,
181
+ onRowClick
182
+ } = props;
183
+ const tbodyHeight = tbodyRef?.current?.clientHeight;
184
+ const theadHeight = theadRef?.current?.clientHeight;
185
+ const [showActionMenu, setActionMenu] = (0, import_react3.useState)(false);
186
+ const [selectedHeaderCell, setHeaderCell] = (0, import_react3.useState)("");
187
+ const [menuPosition, setMenuPosition] = (0, import_react3.useState)({
188
+ top: 0,
189
+ right: 0,
190
+ left: 0
191
+ });
192
+ const [state, setState] = (0, import_react3.useState)({
193
+ prevColConfig: columns,
194
+ colConfigs: columns,
195
+ rowData: [],
196
+ allRowData: data,
197
+ currentPage: 1,
198
+ pageSize: pageSizeOptions.length > 0 ? pageSizeOptions[0] : 50,
199
+ totalRecords: isClientSideRendering ? data.length : props?.totalRecords || 0,
200
+ selectedRows: [],
201
+ pageSizeOptions: pageSizeOptions.length > 0 ? pageSizeOptions : [50, 100, 200, 500],
202
+ isAutoSizeAllColumns: false
203
+ });
204
+ (0, import_react3.useEffect)(() => {
205
+ if (isClientSideRendering) {
206
+ const { currentPage, pageSize } = state;
207
+ let list = data.slice(currentPage - 1, pageSize * currentPage - 1);
208
+ setState((prevState) => ({
209
+ ...prevState,
210
+ rowData: list
211
+ }));
212
+ }
213
+ }, []);
214
+ const onRowSelect = (0, import_react3.useCallback)((rowData) => {
215
+ setState((prevState) => ({
216
+ ...prevState,
217
+ selectedRows: [...prevState.selectedRows, rowData]
218
+ }));
219
+ onRowClick ? onRowClick(rowData) : null;
220
+ }, []);
221
+ const onColumnResize = (0, import_react3.useCallback)((dataIndex, newWidth) => {
222
+ setState((prevState) => ({
223
+ ...prevState,
224
+ colConfigs: prevState.colConfigs.map(
225
+ (col) => col.dataIndex === dataIndex ? { ...col, width: newWidth } : col
226
+ ),
227
+ isAutoSizeAllColumns: false
228
+ }));
229
+ }, []);
230
+ const onPageChange = (direction) => {
231
+ const { pageSize, totalRecords: totalRecords2, allRowData, currentPage } = state;
232
+ var goToPageNo = 0;
233
+ if (direction == "first") {
234
+ goToPageNo = 1;
235
+ } else if (direction == "last") {
236
+ goToPageNo = Math.ceil(totalRecords2 / pageSize);
237
+ } else if (direction == "next") {
238
+ goToPageNo = currentPage + 1;
239
+ } else if (direction == "prev") {
240
+ goToPageNo = currentPage - 1;
241
+ }
242
+ let list = data.slice(goToPageNo - 1, pageSize * goToPageNo - 1);
243
+ setState((prevState) => ({
244
+ ...prevState,
245
+ currentPage: goToPageNo,
246
+ rowData: list
247
+ }));
248
+ };
249
+ const onPageSizeChange = (pageSize) => {
250
+ const { allRowData } = state;
251
+ let list = allRowData.slice(0, pageSize - 1);
252
+ setState((prevState) => ({
253
+ ...prevState,
254
+ currentPage: 1,
255
+ pageSize,
256
+ rowData: list
257
+ }));
258
+ };
259
+ const toggleActionMenu = (dataIndex, showMenu, ref) => {
260
+ const position = ref.current.getBoundingClientRect();
261
+ let left = position.x + position.width;
262
+ setMenuPosition({
263
+ top: position.height,
264
+ right: 0,
265
+ left: left > 200 ? left - 200 : position.x
266
+ });
267
+ setActionMenu(true);
268
+ setHeaderCell(dataIndex);
269
+ };
270
+ const onSortColumn = (dataIndex, sortBy) => {
271
+ let columns2 = state.colConfigs.map((item) => {
272
+ return {
273
+ ...item,
274
+ sortKey: dataIndex == item.dataIndex ? sortBy : ""
275
+ };
276
+ });
277
+ if (sortBy == "") {
278
+ setState((prevState) => ({
279
+ ...prevState,
280
+ colConfigs: columns2,
281
+ rowData: data
282
+ }));
283
+ return;
284
+ }
285
+ let sortedList = sortData(data, dataIndex, sortBy);
286
+ setState((prevState) => ({
287
+ ...prevState,
288
+ colConfigs: columns2,
289
+ rowData: sortedList
290
+ }));
291
+ setActionMenu(false);
292
+ setHeaderCell("");
293
+ };
294
+ const onColumnPin = (pinDirection) => {
295
+ const { colConfigs } = state;
296
+ let newConfig = colConfigs.map((item) => {
297
+ if (item.dataIndex === selectedHeaderCell) {
298
+ item.pinned = pinDirection;
299
+ }
300
+ return item;
301
+ });
302
+ setState((prevState) => ({
303
+ ...prevState,
304
+ colConfigs: newConfig
305
+ }));
306
+ };
307
+ const onAutoColumnResize = (dataIndex) => {
308
+ if (dataIndex == "all") {
309
+ setState((prevState) => ({
310
+ ...prevState,
311
+ isAutoSizeAllColumns: true
312
+ }));
313
+ setActionMenu(false);
314
+ } else {
315
+ }
316
+ };
317
+ const onColumnReset = () => {
318
+ setState({
319
+ prevColConfig: columns,
320
+ colConfigs: columns,
321
+ rowData: data,
322
+ allRowData: data,
323
+ currentPage: 1,
324
+ pageSize: pageSizeOptions.length > 0 ? pageSizeOptions[0] : 50,
325
+ totalRecords: isClientSideRendering ? data.length : props?.totalRecords || 0,
326
+ selectedRows: [],
327
+ pageSizeOptions: pageSizeOptions.length > 0 ? pageSizeOptions : [50, 100, 200, 500],
328
+ isAutoSizeAllColumns: false
329
+ });
330
+ setActionMenu(false);
331
+ };
332
+ const updateState = (0, import_react3.useCallback)((newState) => {
333
+ setState((prev) => ({
334
+ ...prev,
335
+ ...newState
336
+ }));
337
+ }, []);
338
+ const api = (0, import_react3.useMemo)(
339
+ () => ({
340
+ onRowSelect,
341
+ onColumnResize,
342
+ onAutoColumnResize,
343
+ onPageChange,
344
+ onPageSizeChange,
345
+ toggleActionMenu,
346
+ onColumnPin,
347
+ onSortColumn,
348
+ updateState,
349
+ onColumnReset
350
+ }),
351
+ [onRowSelect, onColumnResize, onAutoColumnResize, onPageChange, onPageSizeChange, toggleActionMenu, onColumnPin, onSortColumn, updateState, onColumnReset]
352
+ );
353
+ const contextValue = (0, import_react3.useMemo)(
354
+ () => ({ state, api }),
355
+ [state, api]
356
+ );
357
+ (0, import_react3.useEffect)(() => {
358
+ function handleClickOutside(event) {
359
+ if (actionMenuRef && "current" in actionMenuRef && actionMenuRef.current && !actionMenuRef.current.contains(event.target)) {
360
+ setActionMenu(false);
361
+ }
362
+ }
363
+ document.addEventListener("mousedown", handleClickOutside);
364
+ return () => document.removeEventListener("mousedown", handleClickOutside);
365
+ }, [actionMenuRef, setActionMenu]);
366
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MsTableContext_default.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: `table-wrapper ${state.isAutoSizeAllColumns ? "ms-auto-width" : ""}`, children: [
367
+ children,
368
+ state.rowData.length == 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Overlay_default, { style: { height: tbodyHeight, top: theadHeight } }),
369
+ showActionMenu && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(HeaderActionMenu_default, { ref: actionMenuRef, dataIndex: selectedHeaderCell, style: { top: menuPosition.top, left: menuPosition.left } })
370
+ ] }) });
371
+ };
372
+
373
+ // src/components/Header/HeaderCell.tsx
374
+ var import_react4 = require("react");
375
+ var import_jsx_runtime5 = require("react/jsx-runtime");
376
+ var HeaderCell = (props) => {
377
+ const thRef = (0, import_react4.useRef)(null);
378
+ const { title, cellRenderer, hideActionMenu, dataIndex, width: defaultWidth, resizable = true, pinned } = props;
379
+ const minWidth = title === "" ? 30 : 50;
380
+ const [width, setWidth] = (0, import_react4.useState)(defaultWidth || 80);
381
+ const startX = (0, import_react4.useRef)(0);
382
+ const startWidth = (0, import_react4.useRef)(0);
383
+ const { state: { isAutoSizeAllColumns, ...rest }, api } = useTable();
384
+ (0, import_react4.useEffect)(() => {
385
+ if (isAutoSizeAllColumns) {
386
+ let element = thRef.current.getBoundingClientRect();
387
+ if (api.onColumnResize) {
388
+ api.onColumnResize(dataIndex, element.width);
389
+ }
390
+ }
391
+ }, [isAutoSizeAllColumns]);
392
+ const onMouseDown = (e) => {
393
+ startX.current = e.clientX;
394
+ startWidth.current = thRef.current?.offsetWidth || width;
395
+ console.log("Start Width:", startWidth.current);
396
+ document.addEventListener("mousemove", onMouseMove);
397
+ document.addEventListener("mouseup", onMouseUp);
398
+ };
399
+ const onMouseMove = (e) => {
400
+ const newWidth = startWidth.current + (e.clientX - startX.current);
401
+ if (newWidth > minWidth) {
402
+ setWidth(newWidth);
403
+ api.updateState({
404
+ ...rest,
405
+ isAutoSizeAllColumns: false
406
+ });
407
+ api.onColumnResize && api.onColumnResize(dataIndex, newWidth);
408
+ }
409
+ };
410
+ const onMouseUp = () => {
411
+ document.removeEventListener("mousemove", onMouseMove);
412
+ document.removeEventListener("mouseup", onMouseUp);
413
+ };
414
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
415
+ "th",
416
+ {
417
+ className: `${props.headerCellClassName} ${pinned ? pinned + "-pinned" : ""}`,
418
+ ref: thRef,
419
+ style: { width: width || 80 },
420
+ children: [
421
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "ms-table-header-cell ", children: [
422
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "ms-table-header-cell-title", onClick: () => api.onSortColumn(dataIndex, !props.sortKey ? "asc" : props.sortKey == "asc" ? "desc" : ""), children: [
423
+ title,
424
+ props.sortKey == "asc" ? angleUpIcon : props.sortKey == "desc" ? angleDownIcon : null
425
+ ] }),
426
+ !hideActionMenu && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "ms-table-header-action", title: "View Menu", onClick: () => api.toggleActionMenu(dataIndex, true, thRef), children: verticleThreeDotsIcon })
427
+ ] }),
428
+ resizable && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "ms-table-column-resizer", onMouseDown })
429
+ ]
430
+ },
431
+ dataIndex
432
+ );
433
+ };
434
+ var HeaderCell_default = HeaderCell;
435
+
436
+ // src/components/Header/msTableHeader.tsx
437
+ var import_jsx_runtime6 = require("react/jsx-runtime");
438
+ var msTableHeader = (props) => {
439
+ const { state, api } = useTable();
440
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
441
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("colgroup", { children: state.colConfigs.map((col) => !col.isHidden && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("col", { width: col.width || 80 }, col.dataIndex)) }),
442
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("thead", { ref: props.ref, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("tr", { children: state.colConfigs.map((col) => {
443
+ if (!col.isHidden) {
444
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(HeaderCell_default, { ...col }, col.dataIndex);
445
+ }
446
+ }) }) })
447
+ ] });
448
+ };
449
+ var msTableHeader_default = msTableHeader;
450
+
451
+ // src/components/Body/DataRowCell.tsx
452
+ var import_jsx_runtime7 = require("react/jsx-runtime");
453
+ var DataRowCell = ({ dataIndex, value, cellRenderer, width, pinned }) => {
454
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("td", { style: dataIndex !== "name" ? { width: width || "80" } : { width: "80" }, className: `${pinned ? pinned + "-pinned" : ""}`, children: cellRenderer ? cellRenderer(value) : value });
455
+ };
456
+ var DataRowCell_default = DataRowCell;
457
+
458
+ // src/components/Body/msTableBody.tsx
459
+ var import_jsx_runtime8 = require("react/jsx-runtime");
460
+ var msTableBody = (props) => {
461
+ const { state, api } = useTable();
462
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("tbody", { ref: props.ref, children: state.rowData?.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("tr", { onClick: () => api.onRowSelect(row), children: state.colConfigs?.map((col, colIndex) => !col.isHidden && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DataRowCell_default, { dataIndex: col.dataIndex, value: row[col.dataIndex], width: col.width, cellRenderer: col.cellRenderer, pinned: col.pinned })) }, rowIndex)) });
463
+ };
464
+ var msTableBody_default = msTableBody;
465
+
466
+ // src/components/Footer/msTableFooter.tsx
467
+ var import_jsx_runtime9 = require("react/jsx-runtime");
468
+ var MsTableFooter = () => {
469
+ const { state, api } = useTable();
470
+ const { pageSizeOptions, currentPage, pageSize, totalRecords } = state;
471
+ const lastPageNo = Math.ceil(totalRecords / pageSize);
472
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "table-footer", children: [
473
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "extra-actions" }),
474
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "pagination-controls", children: [
475
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "pagination-info", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "page-size", children: [
476
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("label", { children: "Rows Per Page:" }),
477
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("select", { onChange: (e) => api.onPageSizeChange(parseInt(e.target.value)), value: pageSize, children: state.pageSizeOptions.map((size) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("option", { value: size, children: size }, size)) })
478
+ ] }) }),
479
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "record-info", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("label", { children: `${(currentPage - 1) * pageSize + 1} to ${Math.min(currentPage * pageSize, totalRecords)} of ${totalRecords}` }) }),
480
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "pagination-buttons", children: [
481
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: `${currentPage == 1 ? "cursor-disabled" : ""}`, title: "Go to First Page", onClick: () => api.onPageChange("first"), children: angleLeftIcon }),
482
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: `${currentPage == 1 ? "cursor-disabled" : ""}`, title: "Previous Page", onClick: () => api.onPageChange("prev"), children: prevIcon }),
483
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "current-page", children: [
484
+ currentPage,
485
+ " of ",
486
+ Math.ceil(totalRecords / pageSize)
487
+ ] }),
488
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: `${currentPage == lastPageNo ? "cursor-disabled" : ""}`, title: "Next Page", onClick: () => api.onPageChange("next"), children: nextIcon }),
489
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: `${currentPage == lastPageNo ? "cursor-disabled" : ""}`, title: "Go to Last Page", onClick: () => api.onPageChange("last"), children: angleRightIcon })
490
+ ] })
491
+ ] })
492
+ ] });
493
+ };
494
+ var msTableFooter_default = MsTableFooter;
495
+
496
+ // src/MsReactTable.tsx
497
+ var import_jsx_runtime10 = require("react/jsx-runtime");
498
+ var MsReactTable = (props) => {
499
+ const { showPagination = true } = props;
500
+ const containerRef = import_react5.default.useRef(null);
501
+ const tbodyRef = import_react5.default.useRef(null);
502
+ const theadRef = import_react5.default.useRef(null);
503
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(TableProvider, { ...props, tbodyRef, theadRef, children: [
504
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "table-container", ref: containerRef, style: { height: props.height || "200px" }, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("table", { ref: props.ref, className: `ms-react-table ${props.className}`, border: 0, cellPadding: 0, cellSpacing: 0, style: { width: "100%", ...props.style }, children: [
505
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(msTableHeader_default, { ref: theadRef }),
506
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(msTableBody_default, { ref: tbodyRef })
507
+ ] }) }),
508
+ showPagination && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(msTableFooter_default, {})
509
+ ] });
510
+ };
511
+ MsReactTable.displayName = "MsReactTable";
512
+ var MsReactTable_default = MsReactTable;
513
+ // Annotate the CommonJS export names for ESM import in node:
514
+ 0 && (module.exports = {
515
+ MsReactTable
516
+ });
517
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/MsReactTable.tsx","../src/contextAPI/MsTableProvider.tsx","../src/contextAPI/MsTableContext.tsx","../src/components/HeaderActionMenu/HeaderActionMenu.tsx","../src/_assets/icons/index.tsx","../src/components/Overlay.tsx","../src/components/HelperFunction.ts","../src/components/Header/HeaderCell.tsx","../src/components/Header/msTableHeader.tsx","../src/components/Body/DataRowCell.tsx","../src/components/Body/msTableBody.tsx","../src/components/Footer/msTableFooter.tsx"],"sourcesContent":["import './_assets/style.css';\r\n\r\nexport { default as MsReactTable } from './MsReactTable';\r\n\r\nexport type { MsTablePropsTypes, MsTableHeaderCellTypes } from './types/msTableTypes';","import React from 'react'\r\nimport { MsTablePropsTypes } from './types/msTableTypes'\r\nimport { TableProvider } from './contextAPI/MsTableProvider'\r\nimport MsTableHeader from './components/Header/msTableHeader'\r\nimport MsTableBody from './components/Body/msTableBody'\r\nimport MsTableFooter from './components/Footer/msTableFooter'\r\nimport './_assets/style.css'\r\n\r\nconst MsReactTable: React.FC<MsTablePropsTypes>=(props) => {\r\n const { showPagination = true } = props\r\n const containerRef = React.useRef<HTMLDivElement>(null!)\r\n const tbodyRef = React.useRef<HTMLTableSectionElement>(null!)\r\n const theadRef = React.useRef<HTMLTableSectionElement>(null!)\r\n return (\r\n <TableProvider {...props} tbodyRef={tbodyRef} theadRef={theadRef}>\r\n <div className='table-container' ref={containerRef} style={{height:props.height || '200px'}}>\r\n <table ref={props.ref} className={`ms-react-table ${props.className}`} border={0} cellPadding={0} cellSpacing={0} style={{ width: '100%', ...props.style }} > \r\n <MsTableHeader ref={theadRef} />\r\n <MsTableBody ref={tbodyRef} />\r\n </table>\r\n </div>\r\n {showPagination && <MsTableFooter />}\r\n </TableProvider>\r\n )\r\n}\r\n\r\nMsReactTable.displayName = 'MsReactTable'\r\n\r\nexport default MsReactTable\r\n","import React, { useState, useMemo, useCallback, useEffect, useRef } from \"react\";\r\nimport MaTableContext from \"./MsTableContext\";\r\nimport type { MsTablePropsTypes } from \"../types/msTableTypes\";\r\nimport { MsTableGlobalStateTypes, pinDirection, sortDirection } from \"../types/contextTypes\";\r\nimport HeaderActionMenu from \"../components/HeaderActionMenu/HeaderActionMenu\";\r\nimport Overlay from \"../components/Overlay\";\r\nimport { sortData } from \"../components/HelperFunction\";\r\ninterface TableProviderProps extends MsTablePropsTypes {\r\n children: React.ReactNode;\r\n tbodyRef?: React.RefObject<HTMLTableSectionElement>\r\n theadRef?: React.RefObject<HTMLTableSectionElement>\r\n}\r\n\r\ntype direction = 'first' | 'last' | 'prev' | 'next';\r\n\r\nexport const TableProvider: React.FC<TableProviderProps> = (props) => {\r\n const actionMenuRef = useRef<HTMLDivElement>(null!);\r\n const { \r\n columns, \r\n data, \r\n children, \r\n pageSizeOptions = [], \r\n isClientSideRendering = true, \r\n totalRecords, \r\n tbodyRef, \r\n theadRef,\r\n onRowClick\r\n } = props;\r\n const tbodyHeight = tbodyRef?.current?.clientHeight\r\n const theadHeight = theadRef?.current?.clientHeight\r\n const [showActionMenu, setActionMenu] = useState<boolean>(false)\r\n const [selectedHeaderCell, setHeaderCell] = useState<string>(\"\")\r\n // Position of action menu\r\n const [menuPosition, setMenuPosition] = useState({\r\n top: 0,\r\n right: 0,\r\n left: 0\r\n })\r\n // Global Variable of Table\r\n const [state, setState] = useState<MsTableGlobalStateTypes>({\r\n prevColConfig: columns,\r\n colConfigs: columns,\r\n rowData: [],\r\n allRowData: data,\r\n currentPage: 1,\r\n pageSize: pageSizeOptions.length > 0 ? pageSizeOptions[0] : 50,\r\n totalRecords: isClientSideRendering ? data.length : props?.totalRecords || 0,\r\n selectedRows: [],\r\n pageSizeOptions: pageSizeOptions.length > 0 ? pageSizeOptions : [50, 100, 200, 500],\r\n isAutoSizeAllColumns: false\r\n });\r\n\r\n useEffect(() => {\r\n if (isClientSideRendering) {\r\n const { currentPage, pageSize } = state;\r\n let list = data.slice(currentPage - 1, pageSize * currentPage - 1)\r\n setState((prevState) => ({\r\n ...prevState,\r\n rowData: list\r\n }));\r\n }\r\n }, [])\r\n\r\n const onRowSelect = useCallback((rowData: any) => {\r\n setState((prevState) => ({\r\n ...prevState,\r\n selectedRows: [...prevState.selectedRows, rowData],\r\n }));\r\n onRowClick ? onRowClick(rowData) : null\r\n }, []);\r\n\r\n const onColumnResize = useCallback((dataIndex: string, newWidth: number) => {\r\n setState((prevState) => ({\r\n ...prevState,\r\n colConfigs: prevState.colConfigs.map((col) =>\r\n col.dataIndex === dataIndex ? { ...col, width: newWidth } : col\r\n ),\r\n isAutoSizeAllColumns:false\r\n }));\r\n }, []);\r\n\r\n const onPageChange = (direction: direction) => {\r\n const { pageSize, totalRecords, allRowData, currentPage } = state;\r\n var goToPageNo = 0;\r\n if (direction == 'first') {\r\n goToPageNo = 1;\r\n }\r\n else if (direction == 'last') {\r\n goToPageNo = Math.ceil(totalRecords / pageSize)\r\n }\r\n else if (direction == 'next') {\r\n goToPageNo = currentPage + 1;\r\n }\r\n else if (direction == 'prev') {\r\n goToPageNo = currentPage - 1;\r\n }\r\n\r\n let list = data.slice(goToPageNo - 1, pageSize * goToPageNo - 1)\r\n setState((prevState) => ({\r\n ...prevState,\r\n currentPage: goToPageNo,\r\n rowData: list\r\n }));\r\n }\r\n\r\n const onPageSizeChange = (pageSize: number) => {\r\n const { allRowData } = state;\r\n let list = allRowData.slice(0, pageSize - 1)\r\n setState((prevState) => ({\r\n ...prevState,\r\n currentPage: 1,\r\n pageSize: pageSize,\r\n rowData: list\r\n }))\r\n }\r\n\r\n const toggleActionMenu = (dataIndex: string, showMenu: boolean, ref: React.RefObject<HTMLTableCellElement>) => {\r\n const position = ref.current.getBoundingClientRect()\r\n let left = position.x + position.width\r\n setMenuPosition({\r\n top: position.height,\r\n right: 0,\r\n left: left > 200 ? left - 200 : position.x\r\n })\r\n setActionMenu(true)\r\n setHeaderCell(dataIndex)\r\n }\r\n\r\n // Sorting Function\r\n const onSortColumn = (dataIndex: string, sortBy: sortDirection) => {\r\n let columns = state.colConfigs.map(item => {\r\n return {\r\n ...item,\r\n sortKey: dataIndex == item.dataIndex ? sortBy : ''\r\n }\r\n })\r\n if (sortBy == \"\") {\r\n setState((prevState) => ({\r\n ...prevState,\r\n colConfigs: columns,\r\n rowData: data\r\n }));\r\n return;\r\n }\r\n let sortedList = sortData(data, dataIndex, sortBy)\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n colConfigs: columns,\r\n rowData: sortedList\r\n }));\r\n setActionMenu(false)\r\n setHeaderCell(\"\")\r\n }\r\n\r\n // Pin column Function\r\n const onColumnPin = (pinDirection: pinDirection) => {\r\n const { colConfigs } = state;\r\n let newConfig = colConfigs.map((item) => {\r\n if (item.dataIndex === selectedHeaderCell) {\r\n item.pinned = pinDirection\r\n }\r\n return item;\r\n })\r\n setState((prevState) => ({\r\n ...prevState,\r\n colConfigs: newConfig\r\n }));\r\n }\r\n\r\n // Resize Columns\r\n const onAutoColumnResize = (dataIndex: string) => {\r\n if (dataIndex == 'all') {\r\n setState((prevState) => ({\r\n ...prevState,\r\n isAutoSizeAllColumns: true\r\n }))\r\n setActionMenu(false)\r\n }\r\n else{\r\n // setActionMenu(false)\r\n // setState((prevState) => ({\r\n // ...prevState,\r\n // isAutoSizeAllColumns: true\r\n // }))\r\n // //\r\n }\r\n }\r\n\r\n const onColumnReset = () => {\r\n setState({\r\n prevColConfig: columns,\r\n colConfigs: columns,\r\n rowData: data,\r\n allRowData: data,\r\n currentPage: 1,\r\n pageSize: pageSizeOptions.length > 0 ? pageSizeOptions[0] : 50,\r\n totalRecords: isClientSideRendering ? data.length : props?.totalRecords || 0,\r\n selectedRows: [],\r\n pageSizeOptions: pageSizeOptions.length > 0 ? pageSizeOptions : [50, 100, 200, 500],\r\n isAutoSizeAllColumns: false\r\n })\r\n setActionMenu(false)\r\n }\r\n\r\n // Update Global state from child\r\n const updateState = useCallback((newState: MsTableGlobalStateTypes) => {\r\n setState((prev)=>({\r\n ...prev,\r\n ...newState\r\n }))\r\n }, [])\r\n\r\n // All Table Action will register in api \r\n const api = useMemo(\r\n () => ({\r\n onRowSelect,\r\n onColumnResize,\r\n onAutoColumnResize,\r\n onPageChange,\r\n onPageSizeChange,\r\n toggleActionMenu,\r\n onColumnPin,\r\n onSortColumn,\r\n updateState,\r\n onColumnReset\r\n }),\r\n [onRowSelect, onColumnResize, onAutoColumnResize, onPageChange, onPageSizeChange, toggleActionMenu, onColumnPin, onSortColumn, updateState, onColumnReset]\r\n );\r\n\r\n const contextValue = useMemo(\r\n () => ({ state, api }),\r\n [state, api]\r\n );\r\n\r\n // Hide Action Menu when outside gets clicked\r\n useEffect(() => {\r\n function handleClickOutside(event: MouseEvent) {\r\n if (\r\n actionMenuRef && 'current' in actionMenuRef &&\r\n actionMenuRef.current &&\r\n !actionMenuRef.current.contains(event.target as Node)\r\n ) {\r\n setActionMenu(false)\r\n }\r\n }\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, [actionMenuRef, setActionMenu]);\r\n\r\n return (\r\n <MaTableContext.Provider value={contextValue}>\r\n <div className={`table-wrapper ${state.isAutoSizeAllColumns ? 'ms-auto-width' : ''}`}>\r\n {children}\r\n {/* default No data Message */}\r\n {\r\n state.rowData.length == 0 &&\r\n <Overlay style={{ height: tbodyHeight, top: theadHeight }} />\r\n }\r\n {\r\n showActionMenu && <HeaderActionMenu ref={actionMenuRef} dataIndex={selectedHeaderCell} style={{ top: menuPosition.top, left: menuPosition.left }} />\r\n }\r\n </div>\r\n </MaTableContext.Provider>\r\n );\r\n};","import React, { createContext, useContext, useState, useMemo } from \"react\";\r\nimport type { MsTableGlobalStateTypes, MsReactTableAPI } from \"../types/contextTypes\";\r\n\r\nconst TableContext = createContext<{ state: MsTableGlobalStateTypes; api: MsReactTableAPI } | null>(\r\n null\r\n);\r\n\r\nexport default TableContext;\r\n\r\nexport const useTable = () => {\r\n const ctx = useContext(TableContext);\r\n if (!ctx) throw new Error(\"useTable must be used inside TableProvider\");\r\n return ctx;\r\n};\r\n","import React, { ChangeEvent, useEffect, useRef, useState } from 'react'\r\nimport { angleDownIcon, angleUpIcon, pinIcon, checkIcon, doubleArrow, doublePipeArrow, hideShow, reloadIcon } from \"../../_assets/icons/index\"\r\nimport { useTable } from '../../contextAPI/MsTableContext'\r\nimport { MsTableGlobalStateTypes } from '../../types/contextTypes'\r\nimport { MsTableHeaderCellTypes } from '../../types/msTableTypes'\r\ninterface ActionMenuProps {\r\n ref: React.RefObject<HTMLDivElement>\r\n style?: React.CSSProperties\r\n dataIndex: string\r\n}\r\n\r\nconst HeaderActionMenu: React.FC<ActionMenuProps> = (props) => {\r\n const { state, api: { onColumnPin, onSortColumn, onAutoColumnResize, onColumnReset, updateState } } = useTable();\r\n const [showColumnList, toggleColumnList] = useState(false)\r\n\r\n const [columnList, setColumnList] = useState<MsTableHeaderCellTypes[]>(state.colConfigs)\r\n const [searchkey, setSearchkey] = useState(\"\")\r\n useEffect(() => {\r\n setColumnList(state.colConfigs)\r\n onSearchHeader(searchkey)\r\n }, [state.colConfigs])\r\n // Hide & Show Column start\r\n const onCheckboxChange = (dataIndex: string, e: ChangeEvent<HTMLInputElement>) => {\r\n let newConfig = state.colConfigs.map(item => {\r\n return {\r\n ...item,\r\n isHidden: item.dataIndex == dataIndex ? !e.target.checked : (item.isHidden || false)\r\n }\r\n })\r\n updateState({\r\n ...state,\r\n colConfigs: newConfig\r\n })\r\n setColumnList(newConfig)\r\n }\r\n // Hide & show column end\r\n\r\n const onSearchHeader = (value: string) => {\r\n let newlist: MsTableHeaderCellTypes[] = []\r\n if (value) {\r\n state.colConfigs.map(item => {\r\n if (item.title.toLowerCase().includes(value.toLowerCase())) {\r\n newlist.push(item)\r\n }\r\n })\r\n setColumnList(newlist)\r\n }\r\n else {\r\n setColumnList(state.colConfigs)\r\n }\r\n setSearchkey(value)\r\n }\r\n\r\n\r\n return (\r\n <div ref={props.ref} className='header-menu' style={props.style}>\r\n {\r\n showColumnList ?\r\n <div className='column-list'>\r\n <div className='search'>\r\n <input type='text' placeholder='Search header' className='search-input' onChange={e => onSearchHeader(e.target.value)} />\r\n </div>\r\n <div className='list'>\r\n {\r\n columnList.map(item => (\r\n <div className='item' key={item.dataIndex + \"_item\"}>\r\n <input className=\"ms-checkbox-input\" type=\"checkbox\" id={item.dataIndex} checked={!item.isHidden} onChange={e => onCheckboxChange(item.dataIndex, e)} />\r\n <label htmlFor={item.dataIndex}>{item.title}</label>\r\n </div>\r\n ))\r\n }\r\n </div>\r\n </div>\r\n :\r\n <ul>\r\n <li onClick={() => onSortColumn(props.dataIndex, 'asc')}>\r\n <span>{angleUpIcon}</span>\r\n {`Sort By Ascending`}\r\n </li>\r\n <li onClick={() => onSortColumn(props.dataIndex, 'desc')}>\r\n <span>{angleDownIcon}</span>\r\n {`Sort By Descending`}\r\n </li>\r\n {/* <li>\r\n <span>{pinIcon}</span>\r\n {`Pin Column`}\r\n <ul className=''>\r\n <li onClick={()=>onColumnPin(\"\")}><span>{checkIcon}</span> No Pin</li>\r\n <li onClick={()=>onColumnPin(\"left\")}><span></span> Pin Left</li>\r\n <li onClick={()=>onColumnPin(\"right\")}><span></span> Pin Right</li>\r\n </ul>\r\n </li> \r\n <li onClick={() => onAutoColumnResize(props.dataIndex)}>\r\n <span>{doubleArrow}</span>\r\n {`Autosize This Column`}\r\n </li> */}\r\n <li onClick={() => onAutoColumnResize('all')}>\r\n <span>{doublePipeArrow}</span>\r\n {`Autosize All Column`}\r\n </li>\r\n <li onClick={() => toggleColumnList(true)}>\r\n <span>{hideShow}</span>\r\n {`Hide/Show Columns`}\r\n </li>\r\n <li onClick={onColumnReset}>\r\n <span>{reloadIcon}</span>\r\n {`Reset Columns`}\r\n </li>\r\n </ul>\r\n }\r\n </div>\r\n )\r\n}\r\n\r\nexport default HeaderActionMenu\r\n","const verticleThreeDotsIcon = (\r\n <svg width=\"3\" height=\"13\" viewBox=\"0 0 3 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n<ellipse cx=\"1.5\" cy=\"1.5\" rx=\"1.5\" ry=\"1.5\" transform=\"matrix(-4.37114e-08 1 1 4.37114e-08 0 10)\" fill=\"#2F2F2F\"/>\r\n<ellipse cx=\"1.5\" cy=\"1.5\" rx=\"1.5\" ry=\"1.5\" transform=\"matrix(-4.37114e-08 1 1 4.37114e-08 0 5)\" fill=\"#2F2F2F\"/>\r\n<ellipse cx=\"1.5\" cy=\"1.5\" rx=\"1.5\" ry=\"1.5\" transform=\"matrix(-4.37114e-08 1 1 4.37114e-08 0 0)\" fill=\"#2F2F2F\"/>\r\n</svg>\r\n\r\n)\r\n\r\nconst angleRightIcon = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\"><path d=\"M141.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L124.69,128,50.34,53.66A8,8,0,0,1,61.66,42.34l80,80A8,8,0,0,1,141.66,133.66Zm80-11.32-80-80a8,8,0,0,0-11.32,11.32L204.69,128l-74.35,74.34a8,8,0,0,0,11.32,11.32l80-80A8,8,0,0,0,221.66,122.34Z\"></path></svg>\r\n)\r\n\r\nconst angleLeftIcon = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\"><path d=\"M205.66,202.34a8,8,0,0,1-11.32,11.32l-80-80a8,8,0,0,1,0-11.32l80-80a8,8,0,0,1,11.32,11.32L131.31,128ZM51.31,128l74.35-74.34a8,8,0,0,0-11.32-11.32l-80,80a8,8,0,0,0,0,11.32l80,80a8,8,0,0,0,11.32-11.32Z\"></path></svg>\r\n)\r\n\r\nconst angleDownIcon = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\"><path d=\"M213.66,130.34a8,8,0,0,1,0,11.32l-80,80a8,8,0,0,1-11.32,0l-80-80a8,8,0,0,1,11.32-11.32L128,204.69l74.34-74.35A8,8,0,0,1,213.66,130.34Zm-91.32,11.32a8,8,0,0,0,11.32,0l80-80a8,8,0,0,0-11.32-11.32L128,124.69,53.66,50.34A8,8,0,0,0,42.34,61.66Z\"></path></svg>\r\n)\r\n\r\nconst angleUpIcon = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\"><path d=\"M213.66,194.34a8,8,0,0,1-11.32,11.32L128,131.31,53.66,205.66a8,8,0,0,1-11.32-11.32l80-80a8,8,0,0,1,11.32,0Zm-160-68.68L128,51.31l74.34,74.35a8,8,0,0,0,11.32-11.32l-80-80a8,8,0,0,0-11.32,0l-80,80a8,8,0,0,0,11.32,11.32Z\"></path></svg>\r\n)\r\n\r\nconst pinIcon = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\"><path d=\"M216,168h-9.29L185.54,48H192a8,8,0,0,0,0-16H64a8,8,0,0,0,0,16h6.46L49.29,168H40a8,8,0,0,0,0,16h80v56a8,8,0,0,0,16,0V184h80a8,8,0,0,0,0-16ZM86.71,48h82.58l21.17,120H65.54Z\"></path></svg>\r\n)\r\n\r\nconst reloadIcon = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" role=\"img\" width=\"1em\" height=\"1em\" viewBox=\"0 0 256 256\"><path fill=\"currentColor\" d=\"M224 128a96 96 0 0 1-94.71 96H128a95.38 95.38 0 0 1-65.9-26.2a8 8 0 0 1 11-11.63a80 80 0 1 0-1.67-114.78a3 3 0 0 1-.26.25L44.59 96H72a8 8 0 0 1 0 16H24a8 8 0 0 1-8-8V56a8 8 0 0 1 16 0v29.8L60.25 60A96 96 0 0 1 224 128\"></path></svg>\r\n)\r\n\r\nconst prevIcon = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\"><path d=\"M165.66,202.34a8,8,0,0,1-11.32,11.32l-80-80a8,8,0,0,1,0-11.32l80-80a8,8,0,0,1,11.32,11.32L91.31,128Z\"></path></svg>\r\n)\r\n\r\nconst nextIcon = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\"><path d=\"M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z\"></path></svg>\r\n)\r\n\r\nconst checkIcon = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\"><path d=\"M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z\"></path></svg>\r\n)\r\n\r\nconst doubleArrow = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\"><path d=\"M237.66,133.66l-32,32a8,8,0,0,1-11.32-11.32L212.69,136H43.31l18.35,18.34a8,8,0,0,1-11.32,11.32l-32-32a8,8,0,0,1,0-11.32l32-32a8,8,0,0,1,11.32,11.32L43.31,120H212.69l-18.35-18.34a8,8,0,0,1,11.32-11.32l32,32A8,8,0,0,1,237.66,133.66Z\"></path></svg>\r\n)\r\n\r\nconst doublePipeArrow = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\"><path d=\"M112,48V208a8,8,0,0,1-16,0V136H43.31l18.35,18.34a8,8,0,0,1-11.32,11.32l-32-32a8,8,0,0,1,0-11.32l32-32a8,8,0,0,1,11.32,11.32L43.31,120H96V48a8,8,0,0,1,16,0Zm125.66,74.34-32-32a8,8,0,0,0-11.32,11.32L212.69,120H160V48a8,8,0,0,0-16,0V208a8,8,0,0,0,16,0V136h52.69l-18.35,18.34a8,8,0,0,0,11.32,11.32l32-32A8,8,0,0,0,237.66,122.34Z\"></path></svg>\r\n)\r\n\r\nconst hideShow = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\"><path d=\"M64,105V40a8,8,0,0,0-16,0v65a32,32,0,0,0,0,62v49a8,8,0,0,0,16,0V167a32,32,0,0,0,0-62Zm-8,47a16,16,0,1,1,16-16A16,16,0,0,1,56,152Zm80-95V40a8,8,0,0,0-16,0V57a32,32,0,0,0,0,62v97a8,8,0,0,0,16,0V119a32,32,0,0,0,0-62Zm-8,47a16,16,0,1,1,16-16A16,16,0,0,1,128,104Zm104,64a32.06,32.06,0,0,0-24-31V40a8,8,0,0,0-16,0v97a32,32,0,0,0,0,62v17a8,8,0,0,0,16,0V199A32.06,32.06,0,0,0,232,168Zm-32,16a16,16,0,1,1,16-16A16,16,0,0,1,200,184Z\"></path></svg>\r\n)\r\nexport {\r\n verticleThreeDotsIcon,\r\n angleRightIcon,\r\n angleLeftIcon,\r\n angleDownIcon,\r\n angleUpIcon,\r\n pinIcon,\r\n reloadIcon,\r\n prevIcon,\r\n nextIcon,\r\n checkIcon,\r\n doubleArrow,\r\n hideShow,\r\n doublePipeArrow\r\n}\r\n\r\n","import React from 'react'\r\ninterface OverlayProps {\r\n message?: string\r\n style: React.CSSProperties\r\n}\r\nconst Overlay:React.FC<OverlayProps> = (props) => {\r\n const {message=\"No Records to show\", style} = props\r\n\r\n return (\r\n <div className='overlay-message' style={style}>\r\n {message}\r\n </div>\r\n )\r\n}\r\n\r\nexport default Overlay\r\n","import { sortDirection } from \"../types/contextTypes\";\r\nimport { MsTableHeaderCellTypes } from \"../types/msTableTypes\";\r\n\r\nexport function sortData<T extends Record<string, any>>(\r\n data: T[],\r\n dataIndex: keyof T,\r\n sortBy: sortDirection\r\n): T[] {\r\n return [...data].sort((a, b) => {\r\n const valA = a[dataIndex];\r\n const valB = b[dataIndex];\r\n\r\n // Handle numbers\r\n if (typeof valA === \"number\" && typeof valB === \"number\") {\r\n return sortBy === \"asc\" ? valA - valB : valB - valA;\r\n }\r\n\r\n // Handle strings\r\n const strA = String(valA).toLowerCase();\r\n const strB = String(valB).toLowerCase();\r\n\r\n if (strA === strB) return 0;\r\n\r\n const comparison = strA < strB ? -1 : 1;\r\n return sortBy === \"asc\" ? comparison : -comparison;\r\n });\r\n}\r\n\r\n\r\nfunction isNumeric(value:any) {\r\n return !isNaN(parseFloat(value)) && isFinite(value);\r\n}","import React, { useEffect, useRef, useState } from 'react'\r\nimport { MsTableHeaderCellTypes } from '../../types/msTableTypes'\r\nimport { angleDownIcon, angleUpIcon, verticleThreeDotsIcon } from '../../_assets/icons';\r\nimport { useTable } from '../../contextAPI/MsTableContext';\r\n\r\nconst HeaderCell: React.FC<MsTableHeaderCellTypes> = (props) => {\r\n const thRef = useRef<HTMLTableCellElement>(null!);\r\n const { title, cellRenderer, hideActionMenu, dataIndex, width: defaultWidth, resizable = true, pinned } = props\r\n const minWidth = title === \"\" ? 30 : 50;\r\n const [width, setWidth] = useState<number>(defaultWidth || 80);\r\n const startX = useRef<any>(0);\r\n const startWidth = useRef<any>(0);\r\n // Get table state and api from context\r\n const { state:{isAutoSizeAllColumns, ...rest}, api } = useTable()\r\n\r\n useEffect(()=>{\r\n if(isAutoSizeAllColumns){\r\n let element = thRef.current.getBoundingClientRect()\r\n if(api.onColumnResize){\r\n api.onColumnResize(dataIndex, element.width)\r\n }\r\n \r\n }\r\n },[isAutoSizeAllColumns])\r\n\r\n const onMouseDown = (e: React.MouseEvent<HTMLSpanElement>) => {\r\n startX.current = e.clientX;\r\n startWidth.current = thRef.current?.offsetWidth || width;\r\n console.log('Start Width:', startWidth.current);\r\n document.addEventListener(\"mousemove\", onMouseMove);\r\n document.addEventListener(\"mouseup\", onMouseUp);\r\n };\r\n\r\n const onMouseMove = (e: MouseEvent) => {\r\n const newWidth = startWidth.current + (e.clientX - startX.current);\r\n if (newWidth > minWidth) {\r\n setWidth(newWidth);\r\n api.updateState({\r\n ...rest,\r\n isAutoSizeAllColumns: false\r\n })\r\n api.onColumnResize && api.onColumnResize(dataIndex, newWidth);\r\n }\r\n };\r\n\r\n const onMouseUp = () => {\r\n document.removeEventListener(\"mousemove\", onMouseMove);\r\n document.removeEventListener(\"mouseup\", onMouseUp);\r\n };\r\n\r\n return (\r\n <th\r\n key={dataIndex}\r\n className={`${props.headerCellClassName} ${pinned ? pinned + '-pinned' : ''}`}\r\n ref={thRef}\r\n style={{ width: width || 80 }}\r\n\r\n >\r\n <span className='ms-table-header-cell '>\r\n <span className='ms-table-header-cell-title' onClick={() => api.onSortColumn(dataIndex, !props.sortKey ? 'asc' : props.sortKey == 'asc' ? 'desc' : '')}>\r\n {title}\r\n {\r\n props.sortKey == 'asc' ? angleUpIcon : props.sortKey == 'desc' ? angleDownIcon : null\r\n }\r\n </span>\r\n {\r\n !hideActionMenu && (\r\n <span className='ms-table-header-action' title='View Menu' onClick={() => api.toggleActionMenu(dataIndex, true, thRef)}>{verticleThreeDotsIcon}</span>\r\n )\r\n }\r\n </span>\r\n\r\n {\r\n resizable && (\r\n <span className=\"ms-table-column-resizer\" onMouseDown={onMouseDown} ></span>\r\n )\r\n }\r\n </th>\r\n )\r\n}\r\n\r\nexport default HeaderCell\r\n","import React from 'react'\r\nimport { useTable } from '../../contextAPI/MsTableContext'\r\nimport HeaderCell from './HeaderCell'\r\ninterface THeaderProps {\r\n ref?: React.RefObject<HTMLTableSectionElement>\r\n}\r\nconst msTableHeader: React.FC<THeaderProps> = (props) => {\r\n const { state, api } = useTable()\r\n return (\r\n <>\r\n <colgroup>\r\n {\r\n state.colConfigs.map((col) => (\r\n\r\n !col.isHidden && <col key={col.dataIndex} width={col.width || 80} />\r\n ))\r\n }\r\n\r\n </colgroup>\r\n <thead ref={props.ref}>\r\n <tr>\r\n {\r\n state.colConfigs.map((col) => {\r\n if(!col.isHidden){\r\n return <HeaderCell key={col.dataIndex} {...col} />\r\n }\r\n })\r\n }\r\n </tr>\r\n </thead>\r\n </>\r\n )\r\n}\r\n\r\nexport default msTableHeader\r\n","import React, { JSX } from 'react'\r\ninterface DataRowCellProps {\r\n dataIndex: string\r\n value: any\r\n width?: number\r\n cellRenderer?: (data: any) => JSX.Element\r\n pinned?: 'left'|'right'|''\r\n}\r\n\r\nconst DataRowCell:React.FC<DataRowCellProps> = ({ dataIndex, value, cellRenderer, width, pinned }) => {\r\n return (\r\n <td style={dataIndex!=='name' ? {width: width || '80'}:{width:'80'}} className={`${pinned? pinned+'-pinned':''}`}>\r\n {/* Cell Content */}\r\n {cellRenderer ? cellRenderer(value) : value}\r\n </td>\r\n )\r\n}\r\n\r\nexport default DataRowCell\r\n","import React from 'react'\r\nimport { useTable } from '../../contextAPI/MsTableContext'\r\nimport DataRowCell from './DataRowCell'\r\ninterface TBodyProps {\r\n ref?: React.RefObject<HTMLTableSectionElement>\r\n}\r\nconst msTableBody: React.FC<TBodyProps> = (props) => {\r\n const { state, api } = useTable() // TODO: Add context here\r\n // console.log(props.ref?.current?.clientWidth)\r\n return (\r\n <tbody ref={props.ref}>\r\n {\r\n state.rowData?.map((row, rowIndex) => (\r\n <tr key={rowIndex} onClick={()=>api.onRowSelect(row)}>\r\n {\r\n state.colConfigs?.map((col, colIndex) => (\r\n !col.isHidden && <DataRowCell dataIndex={col.dataIndex} value={row[col.dataIndex]} width={col.width} cellRenderer={col.cellRenderer} pinned={col.pinned} />\r\n ))\r\n }\r\n </tr>\r\n ))\r\n }\r\n </tbody>\r\n )\r\n}\r\n\r\nexport default msTableBody\r\n","import React from 'react'\r\nimport { useTable } from '../../contextAPI/MsTableContext';\r\nimport { angleLeftIcon, prevIcon, nextIcon, angleRightIcon } from '../../_assets/icons';\r\n\r\nconst MsTableFooter:React.FC = () => {\r\n const { state, api } = useTable();\r\n const { pageSizeOptions, currentPage, pageSize, totalRecords } = state\r\n\r\n const lastPageNo = Math.ceil(totalRecords/pageSize)\r\n\r\n return (\r\n <div className='table-footer'>\r\n <div className='extra-actions'>\r\n {/* Extra Actions can be added here */}\r\n </div>\r\n <div className='pagination-controls'>\r\n {/* Pagination Controls can be added here */}\r\n <div className='pagination-info'>\r\n <div className='page-size'>\r\n <label>Rows Per Page:</label>\r\n <select onChange={(e)=>api.onPageSizeChange(parseInt(e.target.value))} value={pageSize}>\r\n {\r\n state.pageSizeOptions.map((size) => (\r\n <option key={size} value={size}>{size}</option>\r\n ))\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n <div className='record-info'>\r\n <label>{`${(currentPage - 1)*pageSize + 1} to ${Math.min(currentPage * pageSize, totalRecords)} of ${totalRecords}`}</label>\r\n </div>\r\n <div className='pagination-buttons'>\r\n <span className={`${currentPage==1 ? 'cursor-disabled' : ''}`} title='Go to First Page' onClick={()=>api.onPageChange('first')}>{angleLeftIcon}</span>\r\n <span className={`${currentPage==1 ? 'cursor-disabled' : ''}`} title='Previous Page' onClick={()=>api.onPageChange('prev')}>{prevIcon}</span>\r\n <span className='current-page'>{currentPage} of {Math.ceil(totalRecords / pageSize)}</span>\r\n <span className={`${currentPage==lastPageNo ? 'cursor-disabled' : ''}`} title='Next Page' onClick={()=>api.onPageChange('next')}>{nextIcon}</span>\r\n <span className={`${currentPage==lastPageNo ? 'cursor-disabled' : ''}`} title='Go to Last Page' onClick={()=>api.onPageChange('last')}>{angleRightIcon}</span>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n``\r\nexport default MsTableFooter\r\n"],"mappings":"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","names":["import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","totalRecords","columns","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React"]}