@addev-be/ui 0.2.2 → 0.2.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 (71) hide show
  1. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.d.ts +14 -0
  2. package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.js +76 -0
  3. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.d.ts +22 -0
  4. package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.js +156 -0
  5. package/dist/components/data/AdvancedRequestDataGrid/helpers/index.d.ts +2 -0
  6. package/dist/components/data/AdvancedRequestDataGrid/helpers/index.js +18 -0
  7. package/dist/components/data/AdvancedRequestDataGrid/index.d.ts +2 -0
  8. package/dist/components/data/AdvancedRequestDataGrid/index.js +215 -0
  9. package/dist/components/data/AdvancedRequestDataGrid/types.d.ts +21 -0
  10. package/dist/components/data/AdvancedRequestDataGrid/types.js +2 -0
  11. package/dist/components/data/DataGrid/DataGridCell.js +2 -2
  12. package/dist/components/data/DataGrid/DataGridFooter.js +2 -2
  13. package/dist/components/data/DataGrid/DataGridHeader.js +62 -12
  14. package/dist/components/data/DataGrid/FilterModalContent/index.d.ts +1 -1
  15. package/dist/components/data/DataGrid/VirtualScroller.js +1 -6
  16. package/dist/components/data/DataGrid/helpers/columns.d.ts +12 -13
  17. package/dist/components/data/DataGrid/helpers/columns.js +17 -68
  18. package/dist/components/data/DataGrid/helpers/filters.d.ts +5 -5
  19. package/dist/components/data/DataGrid/helpers/filters.js +15 -18
  20. package/dist/components/data/DataGrid/helpers/index.d.ts +1 -2
  21. package/dist/components/data/DataGrid/helpers/index.js +1 -2
  22. package/dist/components/data/DataGrid/hooks/index.d.ts +2 -2
  23. package/dist/components/data/DataGrid/hooks/index.js +4 -4
  24. package/dist/components/data/DataGrid/hooks/useDataGrid.js +26 -4
  25. package/dist/components/data/DataGrid/index.js +12 -16
  26. package/dist/components/data/DataGrid/styles.d.ts +3 -1
  27. package/dist/components/data/DataGrid/styles.js +3 -3
  28. package/dist/components/data/DataGrid/types.d.ts +33 -45
  29. package/dist/components/data/SqlRequestDataGrid/helpers/columns.d.ts +16 -0
  30. package/dist/components/data/SqlRequestDataGrid/helpers/columns.js +114 -0
  31. package/dist/components/data/SqlRequestDataGrid/helpers/index.d.ts +2 -0
  32. package/dist/components/data/SqlRequestDataGrid/helpers/index.js +18 -0
  33. package/dist/components/data/SqlRequestDataGrid/helpers/sqlRequests.d.ts +3 -0
  34. package/dist/components/data/SqlRequestDataGrid/helpers/sqlRequests.js +18 -0
  35. package/dist/components/data/SqlRequestDataGrid/index.d.ts +2 -0
  36. package/dist/components/data/SqlRequestDataGrid/index.js +208 -0
  37. package/dist/components/data/SqlRequestDataGrid/types.d.ts +20 -0
  38. package/dist/components/data/SqlRequestDataGrid/types.js +2 -0
  39. package/dist/components/data/index.d.ts +5 -2
  40. package/dist/components/data/index.js +5 -2
  41. package/dist/components/forms/IconButton.js +1 -1
  42. package/dist/components/forms/IndeterminateCheckbox.js +1 -1
  43. package/dist/components/layout/Modal/index.js +1 -1
  44. package/dist/providers/PortalsProvider/index.d.ts +1 -1
  45. package/dist/providers/PortalsProvider/index.js +1 -1
  46. package/dist/services/HttpService.d.ts +10 -0
  47. package/dist/services/HttpService.js +117 -0
  48. package/dist/services/advancedRequests.d.ts +3 -3
  49. package/dist/services/advancedRequests.js +2 -2
  50. package/dist/services/hooks.d.ts +2 -1
  51. package/dist/services/hooks.js +10 -3
  52. package/dist/services/sqlRequests.d.ts +40 -0
  53. package/dist/services/sqlRequests.js +10 -0
  54. package/package.json +1 -1
  55. package/src/components/data/DataGrid/DataGridCell.tsx +3 -5
  56. package/src/components/data/DataGrid/DataGridHeader.tsx +3 -5
  57. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +5 -4
  58. package/src/components/data/DataGrid/helpers/columns.tsx +1 -4
  59. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +4 -1
  60. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +0 -1
  61. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +0 -1
  62. package/src/components/data/DataGrid/index.tsx +5 -6
  63. package/src/components/data/DataGrid/styles.ts +36 -9
  64. package/src/components/data/DataGrid/types.ts +10 -3
  65. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +22 -4
  66. package/src/components/data/SqlRequestDataGrid/index.tsx +58 -27
  67. package/src/components/data/SqlRequestDataGrid/types.ts +1 -0
  68. package/src/components/data/index.ts +2 -0
  69. package/src/helpers/dates.ts +9 -0
  70. package/src/services/sqlRequests.ts +1 -0
  71. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __rest = (this && this.__rest) || function (s, e) {
37
+ var t = {};
38
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
39
+ t[p] = s[p];
40
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
41
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
42
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
43
+ t[p[i]] = s[p[i]];
44
+ }
45
+ return t;
46
+ };
47
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
48
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
49
+ if (ar || !(i in from)) {
50
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
51
+ ar[i] = from[i];
52
+ }
53
+ }
54
+ return to.concat(ar || Array.prototype.slice.call(from));
55
+ };
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.SqlRequestDataGrid = void 0;
58
+ var jsx_runtime_1 = require("react/jsx-runtime");
59
+ var sqlRequests_1 = require("../../../services/sqlRequests");
60
+ var lodash_1 = __importStar(require("lodash"));
61
+ var react_1 = require("react");
62
+ var DataGrid_1 = require("../DataGrid");
63
+ var helpers_1 = require("./helpers");
64
+ var helpers_2 = require("../DataGrid/helpers");
65
+ var SqlRequestDataGrid = function (_a) {
66
+ var onSelectionChangeFromProps = _a.onSelectionChange, props = __rest(_a, ["onSelectionChange"]);
67
+ var currentRows = (0, react_1.useRef)([]);
68
+ var _b = (0, react_1.useState)([]), rows = _b[0], setRows = _b[1];
69
+ var _c = (0, react_1.useState)(0), start = _c[0], setStart = _c[1];
70
+ var _d = (0, react_1.useState)(50), length = _d[0], setLength = _d[1];
71
+ var _e = (0, react_1.useState)(-1), total = _e[0], setTotal = _e[1];
72
+ var _f = (0, sqlRequests_1.useSqlRequestHandler)(props.type), sqlRequest = _f[0], sqlIdRequest = _f[1];
73
+ var _g = (0, react_1.useState)({}), conditions = _g[0], setConditions = _g[1];
74
+ var _h = (0, react_1.useState)([]), orderBy = _h[0], setOrderBy = _h[1];
75
+ var _j = (0, react_1.useMemo)(function () { return [
76
+ Object.keys(props.columns),
77
+ Object.keys(props.columns).filter(function (key) {
78
+ return (0, helpers_2.isColumnVisible)(props.columns[key]);
79
+ }),
80
+ ]; }, [props.columns]), columnsKeys = _j[0], visibleColumnsKeys = _j[1];
81
+ var refresh = (0, react_1.useCallback)(function () {
82
+ setRows([]);
83
+ setStart(0);
84
+ setLength(50);
85
+ setTotal(-1);
86
+ }, []);
87
+ var onFiltersChanged = (0, react_1.useCallback)(function (filters) {
88
+ var newConditions = (0, helpers_1.convertSqlFiltersToConditions)(filters);
89
+ setTotal(-1);
90
+ setConditions(newConditions);
91
+ }, []);
92
+ var onSortsChanged = (0, react_1.useCallback)(function (sorts) {
93
+ refresh();
94
+ var newOrderBy = Object.entries(sorts).map(function (_a) {
95
+ var columnKey = _a[0], direction = _a[1];
96
+ return ({
97
+ field: columnKey,
98
+ direction: direction.toUpperCase(),
99
+ });
100
+ });
101
+ console.log('newOrderBy=', newOrderBy);
102
+ setOrderBy(newOrderBy);
103
+ }, [refresh]);
104
+ var loadRows = (0, react_1.useRef)((0, lodash_1.debounce)(function (columns, returnColumns, conditions, orderBy, start, length, getTotal) {
105
+ if (conditions === void 0) { conditions = []; }
106
+ if (orderBy === void 0) { orderBy = []; }
107
+ if (start === void 0) { start = 0; }
108
+ if (length === void 0) { length = 100; }
109
+ if (getTotal === void 0) { getTotal = false; }
110
+ sqlRequest({
111
+ columns: columns.includes('Id') ? columns : __spreadArray(__spreadArray([], columns, true), ['Id'], false),
112
+ returnColumns: returnColumns,
113
+ conditions: conditions,
114
+ orderBy: orderBy,
115
+ start: start,
116
+ length: length,
117
+ getTotal: getTotal,
118
+ }).then(function (response) {
119
+ var _a;
120
+ var _b;
121
+ if (getTotal) {
122
+ currentRows.current = Array(response.total).fill(null);
123
+ if (getTotal)
124
+ setTotal((_b = response.total) !== null && _b !== void 0 ? _b : 0);
125
+ }
126
+ var parsedRows = props.parser
127
+ ? response.data.map(props.parser)
128
+ : response.data;
129
+ (_a = currentRows.current).splice.apply(_a, __spreadArray([start, length], parsedRows, false));
130
+ setRows(__spreadArray([], currentRows.current, true));
131
+ });
132
+ }, 100));
133
+ var loadFilterValues = (0, react_1.useCallback)(function (columnKey) {
134
+ var _a, _b, _c, _d, _e, _f;
135
+ return sqlRequest({
136
+ columns: columnsKeys,
137
+ returnColumns: [columnKey],
138
+ conditions: __spreadArray(__spreadArray([], ((_a = props.conditions) !== null && _a !== void 0 ? _a : []), true), Object.values(lodash_1.default.pickBy(conditions, function (condition, key) { return key !== columnKey; })), true).filter(function (condition) { return condition.field !== columnKey; }),
139
+ orderBy: [
140
+ {
141
+ field: (_f = (_d = (_b = props.columns[columnKey].filterField) !== null && _b !== void 0 ? _b : (_c = props.columns[columnKey].field) === null || _c === void 0 ? void 0 : _c.fieldAlias) !== null && _d !== void 0 ? _d : (_e = props.columns[columnKey].field) === null || _e === void 0 ? void 0 : _e.fieldName) !== null && _f !== void 0 ? _f : columnKey,
142
+ direction: 'ASC',
143
+ },
144
+ ],
145
+ getTotal: false,
146
+ unique: true,
147
+ }).then(function (response) {
148
+ return response.data.map(function (row) { var _a, _b, _c; return (_c = (_b = (_a = props.columns[columnKey].filter) === null || _a === void 0 ? void 0 : _a.getter) === null || _b === void 0 ? void 0 : _b.call(_a, row)) !== null && _c !== void 0 ? _c : null; });
149
+ });
150
+ }, [columnsKeys, conditions, props.columns, props.conditions, sqlRequest]);
151
+ (0, react_1.useEffect)(function () {
152
+ var _a, _b;
153
+ return loadRows.current(columnsKeys, visibleColumnsKeys, __spreadArray(__spreadArray([], ((_a = props.conditions) !== null && _a !== void 0 ? _a : []), true), ((_b = Object.values(conditions)) !== null && _b !== void 0 ? _b : []), true), orderBy, start, length, total < 0);
154
+ }, [
155
+ props.columns,
156
+ conditions,
157
+ orderBy,
158
+ start,
159
+ length,
160
+ total,
161
+ props.conditions,
162
+ columnsKeys,
163
+ visibleColumnsKeys,
164
+ ]);
165
+ var loadCopyRows = (0, react_1.useCallback)(function () {
166
+ var _a, _b;
167
+ return sqlRequest({
168
+ columns: columnsKeys,
169
+ returnColumns: visibleColumnsKeys,
170
+ conditions: __spreadArray(__spreadArray([], ((_a = props.conditions) !== null && _a !== void 0 ? _a : []), true), ((_b = Object.values(conditions)) !== null && _b !== void 0 ? _b : []), true),
171
+ orderBy: orderBy,
172
+ start: 0,
173
+ length: total,
174
+ }).then(function (response) {
175
+ return props.parser ? response.data.map(props.parser) : response.data;
176
+ });
177
+ }, [
178
+ sqlRequest,
179
+ columnsKeys,
180
+ visibleColumnsKeys,
181
+ props.conditions,
182
+ props.parser,
183
+ conditions,
184
+ orderBy,
185
+ total,
186
+ ]);
187
+ var loadAllIds = (0, react_1.useCallback)(function () {
188
+ var _a, _b;
189
+ return sqlIdRequest({
190
+ columns: ['Id'],
191
+ conditions: __spreadArray(__spreadArray([], ((_a = props.conditions) !== null && _a !== void 0 ? _a : []), true), ((_b = Object.values(conditions)) !== null && _b !== void 0 ? _b : []), true),
192
+ orderBy: orderBy,
193
+ start: 0,
194
+ length: total,
195
+ }).then(function (response) { return response.data.map(function (row) { return row['Id']; }); });
196
+ }, [conditions, orderBy, props.conditions, sqlIdRequest, total]);
197
+ var onVisibleRowsChanged = (0, react_1.useCallback)(function (newStart, newLength) {
198
+ if (newStart !== start || newLength !== length) {
199
+ setStart(newStart);
200
+ setLength(newLength);
201
+ }
202
+ }, [length, start]);
203
+ var onSelectionChange = (0, react_1.useCallback)(function (selectedKeys) {
204
+ onSelectionChangeFromProps === null || onSelectionChangeFromProps === void 0 ? void 0 : onSelectionChangeFromProps(selectedKeys);
205
+ }, [onSelectionChangeFromProps]);
206
+ return ((0, jsx_runtime_1.jsx)(DataGrid_1.DataGrid, __assign({ onVisibleRowsChange: onVisibleRowsChanged, filter: false, sort: false, onFiltersChanged: onFiltersChanged, onSortsChanged: onSortsChanged, filterValuesLoader: loadFilterValues, rows: rows, loadCopyRows: loadCopyRows, refresh: refresh, onSelectionChange: onSelectionChange, getAllIds: loadAllIds }, props)));
207
+ };
208
+ exports.SqlRequestDataGrid = SqlRequestDataGrid;
@@ -0,0 +1,20 @@
1
+ import { ConditionDTO, FieldDTO, OrderByDTO, SqlRequestRow } from '../../../services/sqlRequests';
2
+ import { DataGridColumn, DataGridFilter, DataGridFilterType, DataGridProps } from '../DataGrid/types';
3
+ export type SqlRequestDataGridFilter<T extends DataGridFilterType = DataGridFilterType> = DataGridFilter<T> & {
4
+ field?: FieldDTO;
5
+ };
6
+ export type SqlRequestDataGridFilters = Record<string, SqlRequestDataGridFilter>;
7
+ export type SqlRequestDataGridColumn<R> = DataGridColumn<R> & {
8
+ filter?: SqlRequestDataGridFilter;
9
+ field?: FieldDTO;
10
+ filterField?: string;
11
+ sortField?: string;
12
+ };
13
+ export type SqlRequestDataGridColumns<R> = Record<string, SqlRequestDataGridColumn<R>>;
14
+ export type SqlRequestDataGridProps<R> = Omit<DataGridProps<R>, 'rows' | 'columns'> & {
15
+ columns: SqlRequestDataGridColumns<R>;
16
+ type: string;
17
+ orderBy?: OrderByDTO[];
18
+ conditions?: ConditionDTO[];
19
+ parser?: (row: SqlRequestRow<R>) => R;
20
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,3 +1,6 @@
1
1
  export * from './DataGrid';
2
- export * from './DataGrid/AdvancedRequestDataGrid';
3
- export * from './DataGrid/helpers/columns';
2
+ export * from './DataGrid/helpers';
3
+ export * from './AdvancedRequestDataGrid';
4
+ export * from './SqlRequestDataGrid';
5
+ export * from './SqlRequestDataGrid/helpers';
6
+ export * from './AdvancedRequestDataGrid/helpers';
@@ -15,5 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./DataGrid"), exports);
18
- __exportStar(require("./DataGrid/AdvancedRequestDataGrid"), exports);
19
- __exportStar(require("./DataGrid/helpers/columns"), exports);
18
+ __exportStar(require("./DataGrid/helpers"), exports);
19
+ __exportStar(require("./AdvancedRequestDataGrid"), exports);
20
+ __exportStar(require("./SqlRequestDataGrid"), exports);
21
+ __exportStar(require("./SqlRequestDataGrid/helpers"), exports);
22
+ __exportStar(require("./AdvancedRequestDataGrid/helpers"), exports);
@@ -37,7 +37,7 @@ var styled_components_1 = __importDefault(require("styled-components"));
37
37
  var styles = {
38
38
  IconButton: (0, styled_components_1.default)(Button_1.Button).attrs({
39
39
  className: 'IconButton',
40
- })(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n border-radius: 100%;\n &.small {\n padding: var(--space-1);\n height: var(--space-6);\n width: var(--space-6);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n &.medium {\n padding: var(--space-2);\n height: var(--space-8);\n width: var(--space-8);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n &.large {\n padding: var(--space-3);\n height: var(--space-10);\n width: var(--space-10);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n "], ["\n border-radius: 100%;\n &.small {\n padding: var(--space-1);\n height: var(--space-6);\n width: var(--space-6);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n &.medium {\n padding: var(--space-2);\n height: var(--space-8);\n width: var(--space-8);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n &.large {\n padding: var(--space-3);\n height: var(--space-10);\n width: var(--space-10);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n "])), function (_a) {
40
+ })(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n &.small {\n padding: var(--space-1);\n height: var(--space-6);\n width: var(--space-6);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n &.medium {\n padding: var(--space-2);\n height: var(--space-8);\n width: var(--space-8);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n &.large {\n padding: var(--space-3);\n height: var(--space-10);\n width: var(--space-10);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n "], ["\n &.small {\n padding: var(--space-1);\n height: var(--space-6);\n width: var(--space-6);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n &.medium {\n padding: var(--space-2);\n height: var(--space-8);\n width: var(--space-8);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n &.large {\n padding: var(--space-3);\n height: var(--space-10);\n width: var(--space-10);\n svg {\n margin-right: 0;\n width: ", ";\n height: ", ";\n }\n }\n "])), function (_a) {
41
41
  var _b = _a.$iconSize, $iconSize = _b === void 0 ? 'var(--space-4)' : _b;
42
42
  return $iconSize;
43
43
  }, function (_a) {
@@ -36,6 +36,6 @@ var IndeterminateCheckbox = function (_a) {
36
36
  return ((0, jsx_runtime_1.jsx)("input", __assign({ type: "checkbox", className: (0, lodash_1.join)([
37
37
  'h-4 w-4 rounded border-gray-300 text-sky-600 focus:ring-sky-600',
38
38
  className,
39
- ], ' '), ref: checkbox, checked: checked, onChange: onChange }, props)));
39
+ ], ' '), ref: checkbox, checked: !!checked, onChange: onChange }, props)));
40
40
  };
41
41
  exports.IndeterminateCheckbox = IndeterminateCheckbox;
@@ -56,7 +56,7 @@ var Modal = function (_a) {
56
56
  var modalPortal = (0, react_1.useMemo)(function () {
57
57
  return createPortal((0, jsx_runtime_1.jsx)(styles.ModalBackdrop, { onClick: closeOnBackdropClick ? onClose : undefined, children: (0, jsx_runtime_1.jsx)(styles.ModalContainer, __assign({}, props, { children: children })) }));
58
58
  }, [children, closeOnBackdropClick, createPortal, onClose, props]);
59
- return modalPortal;
59
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: modalPortal });
60
60
  };
61
61
  exports.Modal = Modal;
62
62
  exports.Modal.Header = styles.ModalHeader;
@@ -4,7 +4,7 @@ export type PortalProps = {
4
4
  children: ReactNode;
5
5
  };
6
6
  export type PortalsContextType = {
7
- createPortal: (children: ReactNode) => ReactPortal | undefined;
7
+ createPortal: (children: ReactNode) => ReactPortal | null;
8
8
  };
9
9
  export declare const PortalsContext: import("react").Context<PortalsContextType>;
10
10
  export declare const PortalsProvider: FC<PropsWithChildren>;
@@ -29,7 +29,7 @@ var styles = __importStar(require("./styles"));
29
29
  var react_1 = require("react");
30
30
  var react_dom_1 = require("react-dom");
31
31
  exports.PortalsContext = (0, react_1.createContext)({
32
- createPortal: function () { return undefined; },
32
+ createPortal: function () { return null; },
33
33
  });
34
34
  var PortalsProvider = function (_a) {
35
35
  var children = _a.children;
@@ -0,0 +1,10 @@
1
+ import { Config } from '../config';
2
+ export declare class HttpService {
3
+ private static instance;
4
+ private config;
5
+ private promises;
6
+ constructor(config: Config);
7
+ static getInstance(): HttpService;
8
+ sendRequest<TReq, TRes>(name: string, data: TReq): Promise<TRes>;
9
+ private parseMessage;
10
+ }
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.HttpService = void 0;
40
+ var lodash_1 = require("lodash");
41
+ var uuid_1 = require("uuid");
42
+ var HttpService = /** @class */ (function () {
43
+ function HttpService(config) {
44
+ this.promises = {};
45
+ HttpService.instance = this;
46
+ this.config = config;
47
+ }
48
+ HttpService.getInstance = function () {
49
+ return HttpService.instance;
50
+ };
51
+ HttpService.prototype.sendRequest = function (name, data) {
52
+ var _this = this;
53
+ var id = (0, uuid_1.v4)();
54
+ var promise = new Promise(function (resolve, reject) {
55
+ var request = { id: id, name: name, data: data };
56
+ _this.promises[id] = { resolve: resolve, reject: reject };
57
+ console.log('[HTTP] Sending request:', request);
58
+ fetch("".concat((0, lodash_1.trimEnd)(_this.config.httpServerUrl, '/'), "/").concat(name), {
59
+ method: 'POST',
60
+ headers: {
61
+ 'Content-Type': 'application/json',
62
+ },
63
+ body: JSON.stringify(request),
64
+ })
65
+ .then(function (response) { return __awaiter(_this, void 0, void 0, function () {
66
+ var body;
67
+ return __generator(this, function (_a) {
68
+ switch (_a.label) {
69
+ case 0:
70
+ if (!response.ok) {
71
+ throw new Error('HTTP request failed');
72
+ }
73
+ return [4 /*yield*/, response.text()];
74
+ case 1:
75
+ body = _a.sent();
76
+ this.parseMessage(body);
77
+ return [2 /*return*/];
78
+ }
79
+ });
80
+ }); })
81
+ .catch(function (error) {
82
+ reject(error);
83
+ });
84
+ });
85
+ return promise;
86
+ };
87
+ HttpService.prototype.parseMessage = function (message) {
88
+ var _a;
89
+ try {
90
+ var response = JSON.parse(message);
91
+ if (!response.id) {
92
+ throw new Error('Received message is not valid');
93
+ }
94
+ if (this.promises[response.id]) {
95
+ console.log('[HTTP] Received response:', response);
96
+ if (typeof ((_a = response.data) === null || _a === void 0 ? void 0 : _a.status) === 'number' &&
97
+ response.data.status < 0) {
98
+ this.promises[response.id].reject(new Error(response.data.message));
99
+ }
100
+ else {
101
+ this.promises[response.id].resolve(response.data);
102
+ }
103
+ delete this.promises[response.id];
104
+ }
105
+ else {
106
+ console.log('[HTTP] Received request:', response);
107
+ // TODO : Implement request handling
108
+ throw new Error('Not yet implemented');
109
+ }
110
+ }
111
+ catch (error) {
112
+ console.error('[HTTP] Error parsing message:', error);
113
+ }
114
+ };
115
+ return HttpService;
116
+ }());
117
+ exports.HttpService = HttpService;
@@ -7,13 +7,13 @@ export type FieldDTO<T extends string = string> = {
7
7
  groupBy?: boolean;
8
8
  };
9
9
  export type ConditionDTO = {
10
- field: FieldDTO;
11
- operator: 'lessThan' | 'lessThanOrEqual' | 'lessThanOrEquals' | 'equals' | 'notEquals' | 'greaterThanOrEqual' | 'greaterThanOrEquals' | 'greaterThan' | 'like' | 'contains' | 'startsWith' | 'endsWith' | 'notLike' | 'inRange' | 'between' | 'isNull' | 'inArray' | 'in' | 'not' | 'and' | 'or';
10
+ field: string;
11
+ operator: 'lessThan' | 'lessThanOrEqual' | 'lessThanOrEquals' | 'equals' | 'notEquals' | 'greaterThanOrEqual' | 'greaterThanOrEquals' | 'greaterThan' | 'like' | 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'notLike' | 'inRange' | 'between' | 'isNull' | 'inArray' | 'in' | 'not' | 'and' | 'or';
12
12
  value?: string | number | boolean | null | (string | number | boolean | null)[];
13
13
  children?: boolean;
14
14
  };
15
15
  export type OrderByDTO = {
16
- field: FieldDTO;
16
+ field: string;
17
17
  direction?: 'ASC' | 'DESC';
18
18
  };
19
19
  export type AdvancedRequestDTO = {
@@ -4,10 +4,10 @@ exports.useRawAdvancedRequestHandler = exports.useAdvancedRequestHandler = void
4
4
  var hooks_1 = require("./hooks");
5
5
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
6
  var useAdvancedRequestHandler = function () {
7
- return (0, hooks_1.useRequestHandler)('AdvancedRequest');
7
+ return (0, hooks_1.useWebSocketRequestHandler)('AdvancedRequest');
8
8
  };
9
9
  exports.useAdvancedRequestHandler = useAdvancedRequestHandler;
10
10
  var useRawAdvancedRequestHandler = function () {
11
- return (0, hooks_1.useRequestHandler)('RawAdvancedRequest');
11
+ return (0, hooks_1.useWebSocketRequestHandler)('RawAdvancedRequest');
12
12
  };
13
13
  exports.useRawAdvancedRequestHandler = useRawAdvancedRequestHandler;
@@ -1 +1,2 @@
1
- export declare const useRequestHandler: <TReq, TRes>(name: string) => ((data: TReq) => Promise<TRes>);
1
+ export declare const useWebSocketRequestHandler: <TReq, TRes>(name: string) => ((data: TReq) => Promise<TRes>);
2
+ export declare const useHttpRequestHandler: <TReq, TRes>(name: string) => ((data: TReq) => Promise<TRes>);
@@ -1,11 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useRequestHandler = void 0;
3
+ exports.useHttpRequestHandler = exports.useWebSocketRequestHandler = void 0;
4
+ var HttpService_1 = require("./HttpService");
4
5
  var WebSocketService_1 = require("./WebSocketService");
5
6
  var react_1 = require("react");
6
- var useRequestHandler = function (name) {
7
+ var useWebSocketRequestHandler = function (name) {
7
8
  return (0, react_1.useCallback)(function (data) {
8
9
  return WebSocketService_1.WebSocketService.getInstance().sendRequest(name, data);
9
10
  }, [name]);
10
11
  };
11
- exports.useRequestHandler = useRequestHandler;
12
+ exports.useWebSocketRequestHandler = useWebSocketRequestHandler;
13
+ var useHttpRequestHandler = function (name) {
14
+ return (0, react_1.useCallback)(function (data) {
15
+ return HttpService_1.HttpService.getInstance().sendRequest(name, data);
16
+ }, [name]);
17
+ };
18
+ exports.useHttpRequestHandler = useHttpRequestHandler;
@@ -0,0 +1,40 @@
1
+ export type FieldDTO<T extends string = string> = {
2
+ fieldName?: T;
3
+ fieldAlias?: string;
4
+ operator?: 'add' | 'concat' | 'divide' | 'groupConcat' | 'if' | 'ifNull' | 'jsonObject' | 'length' | 'modulo' | 'multiply' | 'subtract' | 'sum' | 'trim';
5
+ operands?: FieldDTO[];
6
+ constantValue?: string | number | boolean | null;
7
+ groupBy?: boolean;
8
+ };
9
+ export type ConditionDTO = {
10
+ field: string;
11
+ operator: 'lessThan' | 'lessThanOrEqual' | 'lessThanOrEquals' | 'equals' | 'notEquals' | 'greaterThanOrEqual' | 'greaterThanOrEquals' | 'greaterThan' | 'like' | 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'notLike' | 'inRange' | 'between' | 'isNull' | 'inArray' | 'in' | 'not' | 'and' | 'or';
12
+ value?: string | number | boolean | null | (string | number | boolean | null)[];
13
+ children?: boolean;
14
+ };
15
+ export type OrderByDTO = {
16
+ field: string;
17
+ direction?: 'ASC' | 'DESC';
18
+ };
19
+ export type SqlRequestDTO = {
20
+ columns?: string[];
21
+ returnColumns?: string[];
22
+ conditions?: ConditionDTO[];
23
+ orderBy?: OrderByDTO[];
24
+ start?: number;
25
+ length?: number;
26
+ getTotal?: boolean;
27
+ unique?: boolean;
28
+ };
29
+ export type SqlRequestRow<R> = {
30
+ [K in keyof R]: R[K] extends string | number | null ? R[K] : string | number | null;
31
+ };
32
+ export type SqlResponseDTO<T = any> = {
33
+ data: SqlRequestRow<T>[];
34
+ total?: number;
35
+ };
36
+ type SqlRequestHandler<T> = (request: SqlRequestDTO) => Promise<SqlResponseDTO<T>>;
37
+ export declare const useSqlRequestHandler: <T = any>(name: string) => [SqlRequestHandler<T>, SqlRequestHandler<{
38
+ Id: string;
39
+ }>];
40
+ export {};
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSqlRequestHandler = void 0;
4
+ var hooks_1 = require("./hooks");
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ var useSqlRequestHandler = function (name) { return [
7
+ (0, hooks_1.useWebSocketRequestHandler)(name),
8
+ (0, hooks_1.useWebSocketRequestHandler)(name),
9
+ ]; };
10
+ exports.useSqlRequestHandler = useSqlRequestHandler;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@addev-be/ui",
3
- "version": "0.2.2",
3
+ "version": "0.2.5",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "watch": "tsc -b --watch",
@@ -7,7 +7,6 @@ import { DataGridCellProps, DataGridColumn } from './types';
7
7
  import { MouseEvent, useCallback } from 'react';
8
8
 
9
9
  import { DataGridEditableCell } from './DataGridEditableCell';
10
- import { join } from 'lodash';
11
10
  import { useDataGridContext } from './hooks';
12
11
 
13
12
  const defaultRender = <R,>(row: R, col: DataGridColumn<R>) => {
@@ -22,7 +21,6 @@ export const DataGridCell = <R,>({
22
21
  columnIndex,
23
22
  column,
24
23
  context,
25
- className,
26
24
  style,
27
25
  }: DataGridCellProps<R>) => {
28
26
  const {
@@ -36,6 +34,7 @@ export const DataGridCell = <R,>({
36
34
  !!editable && !!column.editable && column.type && column.getter;
37
35
  const isEditing =
38
36
  isEditable && editingCell[0] === rowIndex && editingCell[1] === columnIndex;
37
+ const DataGridCellComponent = column.component ?? styles.DataGridCell;
39
38
 
40
39
  const onDoubleClick = useCallback(
41
40
  (e: MouseEvent) => {
@@ -63,13 +62,12 @@ export const DataGridCell = <R,>({
63
62
  }
64
63
 
65
64
  return (
66
- <styles.DataGridCell
65
+ <DataGridCellComponent
67
66
  key={`${name}-${rowIndex}-${columnIndex}`}
68
- className={join([className, column.className, column.bodyClassName], ' ')}
69
67
  onDoubleClick={onDoubleClick}
70
68
  style={style}
71
69
  >
72
70
  {(column.render ?? defaultRender)(row, column)}
73
- </styles.DataGridCell>
71
+ </DataGridCellComponent>
74
72
  );
75
73
  };
@@ -102,14 +102,12 @@ export const DataGridHeader = <R,>({
102
102
  $headerColor={headerColor}
103
103
  >
104
104
  {!!selectable && (
105
- <styles.SelectionCell
106
- // className="inline-flex items-center justify-center w-12 select-none"
107
- >
105
+ <styles.HeaderSelectionCell $headerColor={headerColor}>
108
106
  <IndeterminateCheckbox
109
107
  checked={checkboxStatus}
110
- onChange={() => toggleAll(!checkboxStatus)}
108
+ onChange={() => toggleAll(!(checkboxStatus ?? true))}
111
109
  />
112
- </styles.SelectionCell>
110
+ </styles.HeaderSelectionCell>
113
111
  )}
114
112
  {visibleColumns.map(([key, col], index) => (
115
113
  <DataGridHeaderCell
@@ -120,6 +120,8 @@ export const DataGridHeaderCell = <R,>({
120
120
  setIsFilterDropdownVisible(true);
121
121
  }, []);
122
122
 
123
+ const hasFilters = filters[columnKey]?.values.length > 0;
124
+
123
125
  return (
124
126
  <styles.DataGridHeaderCellContainer
125
127
  $headerColor={headerColor}
@@ -138,11 +140,10 @@ export const DataGridHeaderCell = <R,>({
138
140
  {!!column.filter && (
139
141
  <IconButton
140
142
  size="small"
143
+ className={hasFilters ? 'danger' : ''}
141
144
  ref={filterButtonRef}
142
- icon={
143
- filters[columnKey]?.values.length > 0 ? FilterFullIcon : FilterIcon
144
- }
145
- color={filters[columnKey]?.values.length > 0 ? 'danger' : headerColor}
145
+ icon={hasFilters ? FilterFullIcon : FilterIcon}
146
+ color={hasFilters ? 'danger' : headerColor}
146
147
  onClick={onFilterButtonClicked}
147
148
  />
148
149
  )}