@tint-ui/data-table 0.3.5

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.
Files changed (122) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/adapters/boolean.d.ts +10 -0
  4. package/adapters/boolean.js +38 -0
  5. package/adapters/index.d.ts +6 -0
  6. package/adapters/index.js +18 -0
  7. package/adapters/number-format.d.ts +1 -0
  8. package/adapters/number-format.js +42 -0
  9. package/adapters/number.d.ts +12 -0
  10. package/adapters/number.js +51 -0
  11. package/adapters/text.d.ts +4 -0
  12. package/adapters/text.js +9 -0
  13. package/cell-adapter-type.d.ts +43 -0
  14. package/cell-adapter-type.js +306 -0
  15. package/cjs/adapters/boolean.js +43 -0
  16. package/cjs/adapters/index.js +21 -0
  17. package/cjs/adapters/number-format.js +46 -0
  18. package/cjs/adapters/number.js +56 -0
  19. package/cjs/adapters/text.js +13 -0
  20. package/cjs/cell-adapter-type.js +312 -0
  21. package/cjs/classes.js +27 -0
  22. package/cjs/context.js +14 -0
  23. package/cjs/data-table-content.js +105 -0
  24. package/cjs/data-table-pagination.js +38 -0
  25. package/cjs/data-table-text-filter.js +83 -0
  26. package/cjs/data-table-toolbar.js +103 -0
  27. package/cjs/data-table-views-options.js +137 -0
  28. package/cjs/data-table.js +63 -0
  29. package/cjs/filter-adapter-type.js +162 -0
  30. package/cjs/filter-adapters/index.js +10 -0
  31. package/cjs/filter-adapters/option.js +152 -0
  32. package/cjs/filter-adapters/use-option-filter.js +195 -0
  33. package/cjs/filter-classes.js +26 -0
  34. package/cjs/filter-fn.js +84 -0
  35. package/cjs/index.js +99 -0
  36. package/cjs/package.json +3 -0
  37. package/cjs/pagination-arrow.js +93 -0
  38. package/cjs/pagination-classes.js +20 -0
  39. package/cjs/pagination-number.js +66 -0
  40. package/cjs/pagination-size-options.js +48 -0
  41. package/cjs/row-button-menu.js +49 -0
  42. package/cjs/row-popover-menu.js +52 -0
  43. package/cjs/toolbar-classes.js +24 -0
  44. package/cjs/types.js +3 -0
  45. package/cjs/use-data-table.js +768 -0
  46. package/cjs/use-lexicon.js +155 -0
  47. package/cjs/use-row-menu.js +60 -0
  48. package/cjs/use-visibility-column.js +105 -0
  49. package/cjs/use-visibility-filter.js +149 -0
  50. package/cjs/utils.js +136 -0
  51. package/classes.d.ts +34 -0
  52. package/classes.js +23 -0
  53. package/context.d.ts +5 -0
  54. package/context.js +9 -0
  55. package/data-table-content.d.ts +9 -0
  56. package/data-table-content.js +98 -0
  57. package/data-table-pagination.d.ts +5 -0
  58. package/data-table-pagination.js +31 -0
  59. package/data-table-text-filter.d.ts +7 -0
  60. package/data-table-text-filter.js +76 -0
  61. package/data-table-toolbar.d.ts +5 -0
  62. package/data-table-toolbar.js +95 -0
  63. package/data-table-views-options.d.ts +2 -0
  64. package/data-table-views-options.js +133 -0
  65. package/data-table.d.ts +18 -0
  66. package/data-table.js +56 -0
  67. package/filter-adapter-type.d.ts +9 -0
  68. package/filter-adapter-type.js +155 -0
  69. package/filter-adapters/index.d.ts +5 -0
  70. package/filter-adapters/index.js +7 -0
  71. package/filter-adapters/option.d.ts +3 -0
  72. package/filter-adapters/option.js +147 -0
  73. package/filter-adapters/use-option-filter.d.ts +27 -0
  74. package/filter-adapters/use-option-filter.js +192 -0
  75. package/filter-classes.d.ts +32 -0
  76. package/filter-classes.js +22 -0
  77. package/filter-fn.d.ts +7 -0
  78. package/filter-fn.js +76 -0
  79. package/index.d.ts +16 -0
  80. package/index.js +16 -0
  81. package/package.json +97 -0
  82. package/pagination-arrow.d.ts +5 -0
  83. package/pagination-arrow.js +86 -0
  84. package/pagination-classes.d.ts +20 -0
  85. package/pagination-classes.js +16 -0
  86. package/pagination-number.d.ts +5 -0
  87. package/pagination-number.js +59 -0
  88. package/pagination-size-options.d.ts +3 -0
  89. package/pagination-size-options.js +44 -0
  90. package/row-button-menu.d.ts +5 -0
  91. package/row-button-menu.js +45 -0
  92. package/row-popover-menu.d.ts +5 -0
  93. package/row-popover-menu.js +48 -0
  94. package/styles-filter.css +1 -0
  95. package/styles-filter.module.css +64 -0
  96. package/styles-filter.module.scss +65 -0
  97. package/styles-pagination.css +1 -0
  98. package/styles-pagination.module.css +28 -0
  99. package/styles-pagination.module.scss +31 -0
  100. package/styles-toolbar.css +1 -0
  101. package/styles-toolbar.module.css +70 -0
  102. package/styles-toolbar.module.scss +67 -0
  103. package/styles.css +1 -0
  104. package/styles.json +8 -0
  105. package/styles.module.css +39 -0
  106. package/styles.module.scss +38 -0
  107. package/toolbar-classes.d.ts +26 -0
  108. package/toolbar-classes.js +20 -0
  109. package/types.d.ts +226 -0
  110. package/types.js +2 -0
  111. package/use-data-table.d.ts +3 -0
  112. package/use-data-table.js +768 -0
  113. package/use-lexicon.d.ts +12 -0
  114. package/use-lexicon.js +151 -0
  115. package/use-row-menu.d.ts +7 -0
  116. package/use-row-menu.js +58 -0
  117. package/use-visibility-column.d.ts +7 -0
  118. package/use-visibility-column.js +101 -0
  119. package/use-visibility-filter.d.ts +7 -0
  120. package/use-visibility-filter.js +145 -0
  121. package/utils.d.ts +14 -0
  122. package/utils.js +128 -0
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.numberFormat = numberFormat;
5
+ const nobrSpace = "\xa0";
6
+ const ditSign = ".";
7
+ function numberFormat(value, decimal = 2, decimalRequired = false) {
8
+ let number = String(value);
9
+ const ended = number.indexOf(".");
10
+ let end = "";
11
+ if (ended !== -1) {
12
+ end = number.substring(ended + 1);
13
+ if (end.length > decimal) {
14
+ if (decimal > 0) {
15
+ const endNum = parseInt(end.substring(0, decimal));
16
+ end = endNum === 0 ? "" : String(endNum);
17
+ } else {
18
+ end = "";
19
+ }
20
+ }
21
+ if (end.length) {
22
+ end = ditSign + end;
23
+ }
24
+ number = number.substring(0, ended);
25
+ }
26
+ if (decimalRequired && decimal > 0) {
27
+ if (!end) {
28
+ end = ".";
29
+ }
30
+ const delta = end.length - 1;
31
+ if (delta > 0 && delta < decimal) {
32
+ end += "0".repeat(delta);
33
+ }
34
+ }
35
+ let len = number.length;
36
+ if (len < 4) {
37
+ return number + end;
38
+ }
39
+ let ceil = "";
40
+ while (len > 3) {
41
+ len -= 3;
42
+ ceil = nobrSpace + number.substring(len) + ceil;
43
+ number = number.substring(0, len);
44
+ }
45
+ return number + ceil + end;
46
+ }
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ "use client";
3
+
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
+ exports.__esModule = true;
7
+ exports.numberAdapterOptions = exports.numberAdapter = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _numberFormat = require("./number-format");
11
+ var _classes = require("../classes");
12
+ const NumberType = props => {
13
+ const {
14
+ value,
15
+ format,
16
+ prefix,
17
+ suffix,
18
+ decimal = 2,
19
+ decimalRequired = false
20
+ } = props;
21
+ const numberValue = typeof value === "number" ? value : parseFloat(String(value));
22
+ const numberIsNaN = !Number.isFinite(numberValue);
23
+ let node;
24
+ if (numberIsNaN) {
25
+ node = Number.isNaN(numberValue) ? "NaN" : "Infinite";
26
+ } else {
27
+ if (format) {
28
+ node = (0, _numberFormat.numberFormat)(numberValue, decimal, decimalRequired);
29
+ } else {
30
+ node = String(numberValue);
31
+ }
32
+ if (prefix) {
33
+ node = prefix + node;
34
+ }
35
+ if (suffix) {
36
+ node += suffix;
37
+ }
38
+ }
39
+ const classes = (0, _classes.useDataTableClasses)();
40
+ return /*#__PURE__*/React.createElement("span", {
41
+ className: classes.numberCellType + (numberIsNaN ? ` ${classes.isNaN}` : "")
42
+ }, node);
43
+ };
44
+ NumberType.displayName = "NumberType";
45
+ const numberAdapter = (value, cell) => {
46
+ return /*#__PURE__*/React.createElement(NumberType, (0, _extends2.default)({
47
+ value: value
48
+ }, cell.config));
49
+ };
50
+ exports.numberAdapter = numberAdapter;
51
+ const numberAdapterOptions = exports.numberAdapterOptions = {
52
+ nullable() {
53
+ return "";
54
+ },
55
+ align: "end"
56
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.textAdapterOptions = exports.textAdapter = void 0;
5
+ const textAdapter = value => {
6
+ return String(value);
7
+ };
8
+ exports.textAdapter = textAdapter;
9
+ const textAdapterOptions = exports.textAdapterOptions = {
10
+ nullable() {
11
+ return "";
12
+ }
13
+ };
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ "use client";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+ exports.__esModule = true;
7
+ exports.renderDataTableCell = exports.hasCellAdapter = exports.addCellAdapterAsync = exports.addCellAdapter = exports.DataTableHead = exports.DataTableCell = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _reactTable = require("@tanstack/react-table");
12
+ var _table = require("@tint-ui/table");
13
+ var _proof = require("@tint-ui/tools/proof");
14
+ var _errorMessage = require("@tint-ui/tools/error-message");
15
+ var _adapters = require("./adapters");
16
+ var _classes = require("./classes");
17
+ var _context = require("./context");
18
+ const _excluded = ["cell", "withWidth", "style"],
19
+ _excluded2 = ["header", "withWidth", "children", "style"];
20
+ const adapters = new Map();
21
+ const defaultAdapters = new Map();
22
+ Object.entries(_adapters.adapters).forEach(([name, {
23
+ adapter,
24
+ options
25
+ }]) => {
26
+ defaultAdapters.set(name, {
27
+ adapter,
28
+ options
29
+ });
30
+ });
31
+ const getAdapt = type => {
32
+ const adapter = adapters.get(type) || defaultAdapters.get(type);
33
+ if (!adapter) {
34
+ return null;
35
+ }
36
+ return adapter;
37
+ };
38
+ const privateTypes = [];
39
+ const checkAdapt = type => {
40
+ if (!type) {
41
+ throw new Error(`Adapter type is empty`);
42
+ }
43
+ if (privateTypes.includes(type)) {
44
+ throw new Error(`The ${type} type is private`);
45
+ }
46
+ if (adapters.has(type)) {
47
+ throw new Error(`The ${type} form adapter already exists`);
48
+ }
49
+ };
50
+ const hasCellAdapter = type => adapters.has(type);
51
+ exports.hasCellAdapter = hasCellAdapter;
52
+ const addCellAdapter = function (name, adapter, options = {}) {
53
+ checkAdapt(name);
54
+ adapters.set(name, {
55
+ adapter,
56
+ options
57
+ });
58
+ };
59
+ exports.addCellAdapter = addCellAdapter;
60
+ const addCellAdapterAsync = function (name, handler, options = {}) {
61
+ checkAdapt(name);
62
+ adapters.set(name, {
63
+ adapter: createAsyncAdapterCallback(name, handler, options),
64
+ options
65
+ });
66
+ };
67
+ exports.addCellAdapterAsync = addCellAdapterAsync;
68
+ const getAsyncAdapter = function (type, result) {
69
+ const adapter = result?.default;
70
+ (0, _proof.invariant)(typeof adapter === "function", `Async ${type} adapter failure: default is not function`);
71
+ return adapter;
72
+ };
73
+ const createAsyncAdapterCallback = function (type, handler, options) {
74
+ const adapt = {
75
+ waiters: new Set(),
76
+ handler,
77
+ error: null,
78
+ options
79
+ };
80
+ const adapter = (value, cell, data) => {
81
+ return /*#__PURE__*/React.createElement(DataTableCellAdapterAsync, {
82
+ adapt: adapt,
83
+ type: type,
84
+ value: value,
85
+ cell: cell,
86
+ data: data
87
+ });
88
+ };
89
+ adapt.adapter = adapter;
90
+ return adapter;
91
+ };
92
+ const createAsyncPromise = async (type, adapt) => {
93
+ try {
94
+ const result = await adapt.handler();
95
+ const adapter = getAsyncAdapter(type, result);
96
+ adapt.error = null;
97
+ adapt.adapter = adapter;
98
+ adapters.set(type, {
99
+ adapter,
100
+ options: adapt.options
101
+ });
102
+ } catch (err) {
103
+ adapt.error = (0, _errorMessage.errorMessage)(err).message;
104
+ }
105
+ let event;
106
+ if (adapt.error != null) {
107
+ event = {
108
+ error: adapt.error
109
+ };
110
+ } else if (adapt.adapter) {
111
+ event = {
112
+ adapter: adapt.adapter
113
+ };
114
+ } else {
115
+ return;
116
+ }
117
+ const handlers = Array.from(adapt.waiters.values());
118
+ adapt.waiters.clear();
119
+ handlers.forEach(handler => {
120
+ handler(event);
121
+ });
122
+ };
123
+ const DataTableCellAdapterAsync = props => {
124
+ const classes = (0, _classes.useDataTableClasses)();
125
+ const {
126
+ adapt,
127
+ cell,
128
+ value,
129
+ data,
130
+ type
131
+ } = props;
132
+ const [state, setState] = React.useState(() => {
133
+ return adapt.adapter ? {
134
+ adapter: adapt.adapter
135
+ } : adapt.error != null ? {
136
+ error: adapt.error
137
+ } : null;
138
+ });
139
+ React.useEffect(() => {
140
+ const {
141
+ adapter,
142
+ error,
143
+ promise
144
+ } = adapt;
145
+ if (error != null || adapter != null) {
146
+ return;
147
+ }
148
+ if (promise == null) {
149
+ adapt.promise = createAsyncPromise(type, adapt);
150
+ }
151
+ adapt.waiters.add(setState);
152
+ return () => {
153
+ adapt.waiters.delete(setState);
154
+ };
155
+ }, [type, adapt]);
156
+ if (state == null) {
157
+ return /*#__PURE__*/React.createElement("div", {
158
+ className: classes.loader
159
+ });
160
+ }
161
+ if ("error" in state) {
162
+ return /*#__PURE__*/React.createElement("div", {
163
+ className: classes.error
164
+ }, state.error);
165
+ }
166
+ return /*#__PURE__*/React.createElement(React.Fragment, null, state.adapter(value, cell, data));
167
+ };
168
+ DataTableCellAdapterAsync.displayName = "DataTableCellAdapterAsync";
169
+ const renderDataTableCell = function (value, cell, data) {
170
+ const {
171
+ type = "text"
172
+ } = cell;
173
+ const adapt = getAdapt(type);
174
+ if (!adapt) {
175
+ (0, _proof.warningOnce)(`table-cell:${type}`, false, `The ${type} cell type not found`);
176
+ switch (typeof value) {
177
+ case "string":
178
+ case "number":
179
+ case "boolean":
180
+ return String(value);
181
+ }
182
+ return null;
183
+ }
184
+ const {
185
+ adapter
186
+ } = adapt;
187
+ if (value != null) {
188
+ return adapter(value, cell, data);
189
+ }
190
+ const {
191
+ options: {
192
+ nullable
193
+ }
194
+ } = adapt;
195
+ if (nullable) {
196
+ return nullable(cell, data);
197
+ }
198
+ return null;
199
+ };
200
+ exports.renderDataTableCell = renderDataTableCell;
201
+ const DataTableCell = exports.DataTableCell = /*#__PURE__*/React.forwardRef((_ref, ref) => {
202
+ let {
203
+ cell: tableCell,
204
+ withWidth,
205
+ style
206
+ } = _ref,
207
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
208
+ const colDef = tableCell.column.columnDef;
209
+ const cell = colDef.meta?._cell;
210
+ const minProps = Object.assign({}, props, {
211
+ style,
212
+ ref,
213
+ "data-cell-id": tableCell.id
214
+ });
215
+ if (!cell) {
216
+ if (withWidth && String(tableCell.column.id).startsWith("__#")) {
217
+ minProps.style = Object.assign({}, style, {
218
+ width: "1%"
219
+ });
220
+ }
221
+ return /*#__PURE__*/React.createElement(_table.TableCell, minProps);
222
+ }
223
+ const {
224
+ name,
225
+ type = "text"
226
+ } = cell;
227
+ const adapt = getAdapt(type);
228
+ if (!adapt) {
229
+ return /*#__PURE__*/React.createElement(_table.TableCell, (0, _extends2.default)({}, minProps, {
230
+ "data-cell-name": name
231
+ }));
232
+ }
233
+ let align = "start";
234
+ const {
235
+ options
236
+ } = adapt;
237
+ if (options.align) {
238
+ align = options.align;
239
+ }
240
+ if (withWidth && options.width) {
241
+ style = Object.assign({}, style, {
242
+ width: options.width
243
+ });
244
+ }
245
+ return /*#__PURE__*/React.createElement(_table.TableCell, (0, _extends2.default)({}, minProps, {
246
+ style: style,
247
+ align: align,
248
+ "data-cell-name": name,
249
+ "data-cell-type": type
250
+ }));
251
+ });
252
+ DataTableCell.displayName = "DataTableCell";
253
+ const DataTableHead = exports.DataTableHead = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
254
+ let {
255
+ header,
256
+ withWidth,
257
+ style
258
+ } = _ref2,
259
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref2, _excluded2);
260
+ const table = (0, _context.useDataTableContext)();
261
+ const colDef = header.column.columnDef;
262
+ const cell = colDef.meta?._cell;
263
+ const body = header.isPlaceholder ? null : (0, _reactTable.flexRender)(colDef.header, header.getContext());
264
+ const minProps = Object.assign({}, props, {
265
+ ref,
266
+ style,
267
+ "data-cell-id": header.id
268
+ });
269
+ if (!cell || body == null) {
270
+ if (withWidth && String(header.column.id).startsWith("__#")) {
271
+ minProps.style = Object.assign({}, style, {
272
+ width: "1%"
273
+ });
274
+ }
275
+ return /*#__PURE__*/React.createElement(_table.TableHead, minProps, body);
276
+ }
277
+ const {
278
+ name,
279
+ type = "text"
280
+ } = cell;
281
+ let node = body;
282
+ let align = "start";
283
+ const adapt = getAdapt(type);
284
+ if (adapt) {
285
+ const {
286
+ options
287
+ } = adapt;
288
+ if (options.align) {
289
+ align = options.align;
290
+ }
291
+ if (withWidth && options.width) {
292
+ style = Object.assign({}, style, {
293
+ width: options.width
294
+ });
295
+ }
296
+ }
297
+ if (header.column.getCanSort()) {
298
+ const sorted = header.column.getIsSorted();
299
+ node = /*#__PURE__*/React.createElement(_table.TableButtonSort, {
300
+ disabled: table.loading,
301
+ direction: sorted ? sorted : "none",
302
+ onClick: header.column.getToggleSortingHandler()
303
+ }, node);
304
+ }
305
+ return /*#__PURE__*/React.createElement(_table.TableHead, (0, _extends2.default)({}, minProps, {
306
+ style: style,
307
+ align: align,
308
+ "data-cell-name": name,
309
+ "data-cell-type": type
310
+ }), node);
311
+ });
312
+ DataTableHead.displayName = "DataTableHead";
package/cjs/classes.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.useDataTableClasses = exports.classes = void 0;
5
+ var _classGroup = require("@tint-ui/tools/class-group");
6
+ var _theme = require("@tint-ui/theme");
7
+ const {
8
+ base,
9
+ b
10
+ } = (0, _classGroup.classGroup)("data-table");
11
+ const classes = exports.classes = {
12
+ dataTable: base,
13
+ table: b("table"),
14
+ cellNotFound: b("cell", "not-found"),
15
+ loader: b("loader"),
16
+ error: b("error"),
17
+ booleanCellType: b("cell-type", "boolean"),
18
+ numberCellType: b("cell-type", "number"),
19
+ iconTrue: b("icon", "true"),
20
+ iconFalse: b("icon", "false"),
21
+ iconNull: b("icon", "null"),
22
+ isNaN: b("isNaN"),
23
+ menuGroup: b("menu-group"),
24
+ menuItemDestructive: b("menu-item-destructive")
25
+ };
26
+ const useDataTableClasses = () => (0, _theme.useClasses)("data-table", classes);
27
+ exports.useDataTableClasses = useDataTableClasses;
package/cjs/context.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ exports.__esModule = true;
5
+ exports.useDataTableContext = exports.DataTableContext = void 0;
6
+ var React = _interopRequireWildcard(require("react"));
7
+ var _proof = require("@tint-ui/tools/proof");
8
+ const DataTableContext = exports.DataTableContext = /*#__PURE__*/React.createContext(null);
9
+ const useDataTableContext = function () {
10
+ const ctx = React.useContext(DataTableContext);
11
+ (0, _proof.invariant)(ctx, "DataTableContextType is not defined");
12
+ return ctx;
13
+ };
14
+ exports.useDataTableContext = useDataTableContext;
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ exports.__esModule = true;
6
+ exports.DataTableContent = void 0;
7
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _clsx = _interopRequireDefault(require("clsx"));
11
+ var _reactTable = require("@tanstack/react-table");
12
+ var _table = require("@tint-ui/table");
13
+ var _isEmpty = require("@tint-ui/tools/is-empty");
14
+ var _context = require("./context");
15
+ var _cellAdapterType = require("./cell-adapter-type");
16
+ var _classes = require("./classes");
17
+ const _excluded = ["themePropsType", "className", "wrapperProps"];
18
+ const DataTableContent = exports.DataTableContent = /*#__PURE__*/React.forwardRef((_ref, ref) => {
19
+ let {
20
+ themePropsType,
21
+ className,
22
+ wrapperProps = {}
23
+ } = _ref,
24
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
25
+ const context = (0, _context.useDataTableContext)();
26
+ const classes = (0, _classes.useDataTableClasses)();
27
+ const {
28
+ table,
29
+ header: {
30
+ top,
31
+ bottom
32
+ },
33
+ invisible
34
+ } = context;
35
+ const rows = table.getRowModel().rows;
36
+ const widthArea = {
37
+ top: top,
38
+ bottom: bottom && !top,
39
+ cell: !top && !bottom
40
+ };
41
+ let notFound = "";
42
+ if (rows.length === 0) {
43
+ const {
44
+ lexicon
45
+ } = context;
46
+ const state = table.getState();
47
+ if ((0, _isEmpty.isEmpty)(state.globalFilter) && state.columnFilters.length === 0 && state.pagination.pageIndex === 0) {
48
+ notFound = lexicon.notFound;
49
+ } else {
50
+ notFound = lexicon.notFoundFiltered;
51
+ }
52
+ }
53
+ return /*#__PURE__*/React.createElement(_table.Table, (0, _extends2.default)({}, props, {
54
+ wrapperProps: Object.assign({}, wrapperProps, {
55
+ className: (0, _clsx.default)(wrapperProps.className, classes.dataTable)
56
+ }),
57
+ className: (0, _clsx.default)(className, classes.table),
58
+ themePropsType: themePropsType,
59
+ ref: ref
60
+ }), top && /*#__PURE__*/React.createElement(_table.TableHeader, {
61
+ themePropsType: themePropsType
62
+ }, table.getHeaderGroups().map(group => /*#__PURE__*/React.createElement(_table.TableRow, {
63
+ key: group.id,
64
+ themePropsType: themePropsType
65
+ }, group.headers.map(header => invisible[header.column.id] ? null : /*#__PURE__*/React.createElement(_cellAdapterType.DataTableHead, {
66
+ key: header.id,
67
+ header: header,
68
+ themePropsType: themePropsType,
69
+ withWidth: widthArea.top
70
+ }))))), /*#__PURE__*/React.createElement(_table.TableBody, {
71
+ themePropsType: themePropsType
72
+ }, rows.length === 0 ? /*#__PURE__*/React.createElement(_table.TableRow, {
73
+ key: "empty",
74
+ themePropsType: themePropsType
75
+ }, /*#__PURE__*/React.createElement(_table.TableCell, {
76
+ colSpan: table.getVisibleLeafColumns().filter(cell => invisible[cell.id] !== true).length,
77
+ className: classes.cellNotFound
78
+ }, notFound)) : rows.map((row, index) => {
79
+ const clickHandler = context.getRowClickHandler(row.original);
80
+ return /*#__PURE__*/React.createElement(_table.TableRow, {
81
+ key: row.id,
82
+ themePropsType: themePropsType,
83
+ onClick: clickHandler,
84
+ "data-click": clickHandler != null
85
+ }, row.getVisibleCells().map(cell => {
86
+ return invisible[cell.column.id] ? null : /*#__PURE__*/React.createElement(_cellAdapterType.DataTableCell, {
87
+ key: cell.id,
88
+ cell: cell,
89
+ themePropsType: themePropsType,
90
+ withWidth: widthArea.cell && index === 0
91
+ }, (0, _reactTable.flexRender)(cell.column.columnDef.cell, cell.getContext()));
92
+ }));
93
+ })), bottom && /*#__PURE__*/React.createElement(_table.TableFooter, {
94
+ themePropsType: themePropsType
95
+ }, table.getHeaderGroups().map(group => /*#__PURE__*/React.createElement(_table.TableRow, {
96
+ key: group.id,
97
+ themePropsType: themePropsType
98
+ }, group.headers.map(header => invisible[header.column.id] ? null : /*#__PURE__*/React.createElement(_cellAdapterType.DataTableHead, {
99
+ key: header.id,
100
+ header: header,
101
+ themePropsType: themePropsType,
102
+ withWidth: widthArea.bottom
103
+ }))))));
104
+ });
105
+ DataTableContent.displayName = "DataTableContent";
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ "use client";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+ exports.__esModule = true;
7
+ exports.DataTablePagination = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _clsx = _interopRequireDefault(require("clsx"));
12
+ var _paginationClasses = require("./pagination-classes");
13
+ var _context = require("./context");
14
+ var _paginationSizeOptions = require("./pagination-size-options");
15
+ var _paginationArrow = require("./pagination-arrow");
16
+ var _paginationNumber = require("./pagination-number");
17
+ const _excluded = ["className"];
18
+ const DataTablePagination = exports.DataTablePagination = /*#__PURE__*/React.forwardRef((_ref, ref) => {
19
+ let {
20
+ className
21
+ } = _ref,
22
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
23
+ const classes = (0, _paginationClasses.useDataTablePaginationClasses)();
24
+ const {
25
+ navbar: {
26
+ mode,
27
+ size
28
+ }
29
+ } = (0, _context.useDataTableContext)();
30
+ return /*#__PURE__*/React.createElement("div", (0, _extends2.default)({}, props, {
31
+ "data-navbar-size": size,
32
+ className: (0, _clsx.default)(classes.pagination, className),
33
+ ref: ref
34
+ }), /*#__PURE__*/React.createElement("span", {
35
+ className: classes.divider
36
+ }), /*#__PURE__*/React.createElement(_paginationSizeOptions.PaginationSizeOptions, null), mode === "arrow" ? /*#__PURE__*/React.createElement(_paginationArrow.PaginationArrow, null) : /*#__PURE__*/React.createElement(_paginationNumber.PaginationNumber, null));
37
+ });
38
+ DataTablePagination.displayName = "DataTablePagination";
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ "use client";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+ exports.__esModule = true;
7
+ exports.DataTableTextFilter = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _svgIcon = require("@tint-ui/svg-icon");
12
+ var _input = require("@tint-ui/input");
13
+ var _filterClasses = require("./filter-classes");
14
+ var _context = require("./context");
15
+ var _clsx = _interopRequireDefault(require("clsx"));
16
+ const _excluded = ["className", "isMobile"];
17
+ const getFilterText = table => {
18
+ const text = table.getState().globalFilter;
19
+ return typeof text === "string" ? text : "";
20
+ };
21
+ const DataTableTextFilter = exports.DataTableTextFilter = /*#__PURE__*/React.forwardRef((_ref, ref) => {
22
+ let {
23
+ className,
24
+ isMobile = false
25
+ } = _ref,
26
+ props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
27
+ const classes = (0, _filterClasses.useDataTableFilterClasses)();
28
+ const {
29
+ lexicon,
30
+ table,
31
+ toolbar: {
32
+ size
33
+ }
34
+ } = (0, _context.useDataTableContext)();
35
+ const [text, setText] = React.useState(() => getFilterText(table));
36
+ const focusRef = React.useRef(false);
37
+ const {
38
+ resetHandler,
39
+ inputProps
40
+ } = React.useMemo(() => {
41
+ const resetHandler = () => {
42
+ setText(getFilterText(table));
43
+ };
44
+ return {
45
+ resetHandler,
46
+ inputProps: {
47
+ onFocus() {
48
+ focusRef.current = true;
49
+ },
50
+ onBlur() {
51
+ focusRef.current = false;
52
+ resetHandler();
53
+ }
54
+ }
55
+ };
56
+ }, [table]);
57
+ const filterText = getFilterText(table);
58
+ React.useEffect(() => {
59
+ if (filterText !== text && !focusRef.current) {
60
+ resetHandler();
61
+ }
62
+ }, [filterText]);
63
+ return /*#__PURE__*/React.createElement(_input.InputGroup, (0, _extends2.default)({}, props, {
64
+ size: size,
65
+ className: (0, _clsx.default)(classes.text, className, isMobile && classes.textMobile),
66
+ ref: ref
67
+ }), /*#__PURE__*/React.createElement(_input.InputAddon, {
68
+ size: size,
69
+ variant: "label"
70
+ }, /*#__PURE__*/React.createElement(_svgIcon.SvgThemeIcon, {
71
+ icon: "search"
72
+ })), /*#__PURE__*/React.createElement(_input.InputText, (0, _extends2.default)({}, inputProps, {
73
+ size: size,
74
+ placeholder: lexicon.search,
75
+ value: text,
76
+ onChange: event => {
77
+ const value = event.target.value;
78
+ setText(value);
79
+ table.setGlobalFilter(value);
80
+ }
81
+ })));
82
+ });
83
+ DataTableTextFilter.displayName = "DataTableTextFilter";