@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.
- package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.d.ts +14 -0
- package/dist/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.js +76 -0
- package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.d.ts +22 -0
- package/dist/components/data/AdvancedRequestDataGrid/helpers/columns.js +156 -0
- package/dist/components/data/AdvancedRequestDataGrid/helpers/index.d.ts +2 -0
- package/dist/components/data/AdvancedRequestDataGrid/helpers/index.js +18 -0
- package/dist/components/data/AdvancedRequestDataGrid/index.d.ts +2 -0
- package/dist/components/data/AdvancedRequestDataGrid/index.js +215 -0
- package/dist/components/data/AdvancedRequestDataGrid/types.d.ts +21 -0
- package/dist/components/data/AdvancedRequestDataGrid/types.js +2 -0
- package/dist/components/data/DataGrid/DataGridCell.js +2 -2
- package/dist/components/data/DataGrid/DataGridFooter.js +2 -2
- package/dist/components/data/DataGrid/DataGridHeader.js +62 -12
- package/dist/components/data/DataGrid/FilterModalContent/index.d.ts +1 -1
- package/dist/components/data/DataGrid/VirtualScroller.js +1 -6
- package/dist/components/data/DataGrid/helpers/columns.d.ts +12 -13
- package/dist/components/data/DataGrid/helpers/columns.js +17 -68
- package/dist/components/data/DataGrid/helpers/filters.d.ts +5 -5
- package/dist/components/data/DataGrid/helpers/filters.js +15 -18
- package/dist/components/data/DataGrid/helpers/index.d.ts +1 -2
- package/dist/components/data/DataGrid/helpers/index.js +1 -2
- package/dist/components/data/DataGrid/hooks/index.d.ts +2 -2
- package/dist/components/data/DataGrid/hooks/index.js +4 -4
- package/dist/components/data/DataGrid/hooks/useDataGrid.js +26 -4
- package/dist/components/data/DataGrid/index.js +12 -16
- package/dist/components/data/DataGrid/styles.d.ts +3 -1
- package/dist/components/data/DataGrid/styles.js +3 -3
- package/dist/components/data/DataGrid/types.d.ts +33 -45
- package/dist/components/data/SqlRequestDataGrid/helpers/columns.d.ts +16 -0
- package/dist/components/data/SqlRequestDataGrid/helpers/columns.js +114 -0
- package/dist/components/data/SqlRequestDataGrid/helpers/index.d.ts +2 -0
- package/dist/components/data/SqlRequestDataGrid/helpers/index.js +18 -0
- package/dist/components/data/SqlRequestDataGrid/helpers/sqlRequests.d.ts +3 -0
- package/dist/components/data/SqlRequestDataGrid/helpers/sqlRequests.js +18 -0
- package/dist/components/data/SqlRequestDataGrid/index.d.ts +2 -0
- package/dist/components/data/SqlRequestDataGrid/index.js +208 -0
- package/dist/components/data/SqlRequestDataGrid/types.d.ts +20 -0
- package/dist/components/data/SqlRequestDataGrid/types.js +2 -0
- package/dist/components/data/index.d.ts +5 -2
- package/dist/components/data/index.js +5 -2
- package/dist/components/forms/IconButton.js +1 -1
- package/dist/components/forms/IndeterminateCheckbox.js +1 -1
- package/dist/components/layout/Modal/index.js +1 -1
- package/dist/providers/PortalsProvider/index.d.ts +1 -1
- package/dist/providers/PortalsProvider/index.js +1 -1
- package/dist/services/HttpService.d.ts +10 -0
- package/dist/services/HttpService.js +117 -0
- package/dist/services/advancedRequests.d.ts +3 -3
- package/dist/services/advancedRequests.js +2 -2
- package/dist/services/hooks.d.ts +2 -1
- package/dist/services/hooks.js +10 -3
- package/dist/services/sqlRequests.d.ts +40 -0
- package/dist/services/sqlRequests.js +10 -0
- package/package.json +1 -1
- package/src/components/data/DataGrid/DataGridCell.tsx +3 -5
- package/src/components/data/DataGrid/DataGridHeader.tsx +3 -5
- package/src/components/data/DataGrid/DataGridHeaderCell.tsx +5 -4
- package/src/components/data/DataGrid/helpers/columns.tsx +1 -4
- package/src/components/data/DataGrid/hooks/useDataGrid.tsx +4 -1
- package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +0 -1
- package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +0 -1
- package/src/components/data/DataGrid/index.tsx +5 -6
- package/src/components/data/DataGrid/styles.ts +36 -9
- package/src/components/data/DataGrid/types.ts +10 -3
- package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +22 -4
- package/src/components/data/SqlRequestDataGrid/index.tsx +58 -27
- package/src/components/data/SqlRequestDataGrid/types.ts +1 -0
- package/src/components/data/index.ts +2 -0
- package/src/helpers/dates.ts +9 -0
- package/src/services/sqlRequests.ts +1 -0
- 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
|
+
};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export * from './DataGrid';
|
|
2
|
-
export * from './DataGrid/
|
|
3
|
-
export * from './
|
|
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/
|
|
19
|
-
__exportStar(require("./
|
|
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
|
|
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 |
|
|
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
|
|
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:
|
|
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:
|
|
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.
|
|
7
|
+
return (0, hooks_1.useWebSocketRequestHandler)('AdvancedRequest');
|
|
8
8
|
};
|
|
9
9
|
exports.useAdvancedRequestHandler = useAdvancedRequestHandler;
|
|
10
10
|
var useRawAdvancedRequestHandler = function () {
|
|
11
|
-
return (0, hooks_1.
|
|
11
|
+
return (0, hooks_1.useWebSocketRequestHandler)('RawAdvancedRequest');
|
|
12
12
|
};
|
|
13
13
|
exports.useRawAdvancedRequestHandler = useRawAdvancedRequestHandler;
|
package/dist/services/hooks.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export declare const
|
|
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>);
|
package/dist/services/hooks.js
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
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
|
|
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.
|
|
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
|
@@ -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
|
-
<
|
|
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
|
-
</
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
)}
|