@michalrakus/x-react-web-lib 1.11.1 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/XFtsInput.d.ts +9 -0
- package/lib/components/XFtsInput.js +30 -0
- package/lib/components/XLazyDataTable.d.ts +2 -0
- package/lib/components/XLazyDataTable.js +37 -12
- package/lib/serverApi/ExportImportParam.d.ts +2 -1
- package/lib/serverApi/FindParam.d.ts +6 -0
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export interface XFtsInputValue {
|
|
3
|
+
value: string | null;
|
|
4
|
+
matchMode: 'startsWith' | 'contains' | 'endsWith' | 'equals';
|
|
5
|
+
}
|
|
6
|
+
export declare const XFtsInput: (props: {
|
|
7
|
+
value: XFtsInputValue;
|
|
8
|
+
onChange: (value: XFtsInputValue) => void;
|
|
9
|
+
}) => JSX.Element;
|
|
@@ -0,0 +1,30 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.XFtsInput = void 0;
|
|
18
|
+
var inputtext_1 = require("primereact/inputtext");
|
|
19
|
+
var react_1 = __importDefault(require("react"));
|
|
20
|
+
var XUtilsConversions_1 = require("./XUtilsConversions");
|
|
21
|
+
var XFtsInput = function (props) {
|
|
22
|
+
var onChange = function (e) {
|
|
23
|
+
var value = (0, XUtilsConversions_1.stringFromUI)(e.target.value);
|
|
24
|
+
props.value.value = value;
|
|
25
|
+
props.onChange(__assign({}, props.value)); // vyklonujeme aby react zaregistroval, ze sme urobili zmenu
|
|
26
|
+
};
|
|
27
|
+
// TODO - pridat input na zmenu matchMode
|
|
28
|
+
return (react_1.default.createElement(inputtext_1.InputText, { value: (0, XUtilsConversions_1.stringAsUI)(props.value.value), onChange: onChange, style: { height: '2.5rem', width: '17rem' }, className: "m-1" }));
|
|
29
|
+
};
|
|
30
|
+
exports.XFtsInput = XFtsInput;
|
|
@@ -42,6 +42,7 @@ export interface XLazyDataTableProps {
|
|
|
42
42
|
filters?: DataTableFilterMeta;
|
|
43
43
|
customFilter?: XCustomFilter;
|
|
44
44
|
sortField?: string;
|
|
45
|
+
fullTextSearch: boolean | string[];
|
|
45
46
|
searchBrowseParams?: XSearchBrowseParams;
|
|
46
47
|
width?: string;
|
|
47
48
|
dataLoadedState?: [boolean, React.Dispatch<React.SetStateAction<boolean>>];
|
|
@@ -56,6 +57,7 @@ export declare const XLazyDataTable: {
|
|
|
56
57
|
paginator: boolean;
|
|
57
58
|
rows: number;
|
|
58
59
|
filterDisplay: string;
|
|
60
|
+
fullTextSearch: boolean;
|
|
59
61
|
scrollable: boolean;
|
|
60
62
|
scrollWidth: string;
|
|
61
63
|
scrollHeight: string;
|
|
@@ -115,6 +115,7 @@ var api_1 = require("primereact/api");
|
|
|
115
115
|
var XCalendar_1 = require("./XCalendar");
|
|
116
116
|
var XInputDecimalBase_1 = require("./XInputDecimalBase");
|
|
117
117
|
var XLocale_1 = require("./XLocale");
|
|
118
|
+
var XFtsInput_1 = require("./XFtsInput");
|
|
118
119
|
var XLazyDataTable = function (props) {
|
|
119
120
|
var _a;
|
|
120
121
|
// must be here, is used in createInitFilters()
|
|
@@ -196,6 +197,9 @@ var XLazyDataTable = function (props) {
|
|
|
196
197
|
}
|
|
197
198
|
return filterItem;
|
|
198
199
|
};
|
|
200
|
+
var createInitFtsInputValue = function () {
|
|
201
|
+
return { value: null, matchMode: "contains" };
|
|
202
|
+
};
|
|
199
203
|
// premenne platne pre cely component (obdoba member premennych v class-e)
|
|
200
204
|
var dataTableEl = (0, react_1.useRef)(null);
|
|
201
205
|
var customFilterItems = XUtils_1.XUtils.createCustomFilterItems(props.customFilter);
|
|
@@ -219,12 +223,15 @@ var XLazyDataTable = function (props) {
|
|
|
219
223
|
}
|
|
220
224
|
}
|
|
221
225
|
var _f = __read((0, react_1.useState)(filtersInit), 2), filters = _f[0], setFilters = _f[1]; // filtrovanie na "controlled manner" (moze sa sem nainicializovat nejaka hodnota)
|
|
222
|
-
var
|
|
223
|
-
var
|
|
224
|
-
var
|
|
225
|
-
var
|
|
226
|
-
var
|
|
227
|
-
var
|
|
226
|
+
var initFtsInputValue = props.fullTextSearch ? createInitFtsInputValue() : undefined;
|
|
227
|
+
var _g = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValue = _g[0], setFtsInputValue = _g[1];
|
|
228
|
+
var _h = __read((0, react_1.useState)(props.sortField ? [{ field: props.sortField, order: 1 }] : []), 2), multiSortMeta = _h[0], setMultiSortMeta = _h[1];
|
|
229
|
+
var _j = __read((0, react_1.useState)(null), 2), selectedRow = _j[0], setSelectedRow = _j[1];
|
|
230
|
+
var _k = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _k[0], setDataLoaded = _k[1]; // priznak kde si zapiseme, ci uz sme nacitali data
|
|
231
|
+
var _l = __read((0, react_1.useState)(false), 2), exportRowsDialogOpened = _l[0], setExportRowsDialogOpened = _l[1];
|
|
232
|
+
var _m = __read((0, react_1.useState)(), 2), exportRowsDialogRowCount = _m[0], setExportRowsDialogRowCount = _m[1]; // param pre dialog
|
|
233
|
+
var _o = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _o[0], setFiltersAfterFiltering = _o[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
|
|
234
|
+
var _p = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValueAfterFiltering = _p[0], setFtsInputValueAfterFiltering = _p[1]; // tak isto ako filtersAfterFiltering
|
|
228
235
|
// parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
|
|
229
236
|
(0, react_1.useEffect)(function () {
|
|
230
237
|
// jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
|
|
@@ -257,7 +264,7 @@ var XLazyDataTable = function (props) {
|
|
|
257
264
|
return __generator(this, function (_a) {
|
|
258
265
|
//console.log("zavolany onPage");
|
|
259
266
|
setFirst(event.first);
|
|
260
|
-
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: event.first, rows: rows, filters: filters, customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
267
|
+
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: event.first, rows: rows, filters: filters, fullTextSearch: createXFullTextSearch(ftsInputValue), customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
261
268
|
return [2 /*return*/];
|
|
262
269
|
});
|
|
263
270
|
}); };
|
|
@@ -271,7 +278,7 @@ var XLazyDataTable = function (props) {
|
|
|
271
278
|
//console.log("zavolany onSort - this.state.multiSortMeta = " + JSON.stringify(multiSortMeta));
|
|
272
279
|
//console.log("zavolany onSort - event.multiSortMeta = " + JSON.stringify(event.multiSortMeta));
|
|
273
280
|
setMultiSortMeta(event.multiSortMeta);
|
|
274
|
-
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilterItems: customFilterItems, multiSortMeta: event.multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
281
|
+
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, fullTextSearch: createXFullTextSearch(ftsInputValue), customFilterItems: customFilterItems, multiSortMeta: event.multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
275
282
|
};
|
|
276
283
|
var onClickFilter = function () {
|
|
277
284
|
//console.log("zavolany onClickFilter");
|
|
@@ -281,9 +288,12 @@ var XLazyDataTable = function (props) {
|
|
|
281
288
|
// najjednoduchsi sposob - pomeni aj pripadne nastavene matchMode hodnoty
|
|
282
289
|
var filtersInit = createInitFilters();
|
|
283
290
|
setFilters(filtersInit);
|
|
291
|
+
if (ftsInputValue) {
|
|
292
|
+
setFtsInputValue(createInitFtsInputValue());
|
|
293
|
+
}
|
|
284
294
|
};
|
|
285
295
|
var loadData = function () {
|
|
286
|
-
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
296
|
+
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, fullTextSearch: createXFullTextSearch(ftsInputValue), customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
287
297
|
};
|
|
288
298
|
var loadDataBase = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
|
|
289
299
|
var findResult;
|
|
@@ -299,6 +309,7 @@ var XLazyDataTable = function (props) {
|
|
|
299
309
|
setLoading(false);
|
|
300
310
|
// odlozime si filter hodnoty pre pripadny export - deep cloning vyzera ze netreba
|
|
301
311
|
setFiltersAfterFiltering(filters);
|
|
312
|
+
setFtsInputValueAfterFiltering(ftsInputValue ? __assign({}, ftsInputValue) : undefined);
|
|
302
313
|
return [2 /*return*/];
|
|
303
314
|
}
|
|
304
315
|
});
|
|
@@ -315,6 +326,17 @@ var XLazyDataTable = function (props) {
|
|
|
315
326
|
}
|
|
316
327
|
});
|
|
317
328
|
}); };
|
|
329
|
+
var createXFullTextSearch = function (ftsInputValue) {
|
|
330
|
+
var xFullTextSearch = undefined; // default
|
|
331
|
+
if (ftsInputValue && ftsInputValue.value !== null) {
|
|
332
|
+
xFullTextSearch = {
|
|
333
|
+
fields: Array.isArray(props.fullTextSearch) ? props.fullTextSearch : undefined,
|
|
334
|
+
value: ftsInputValue.value,
|
|
335
|
+
matchMode: ftsInputValue.matchMode
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
return xFullTextSearch;
|
|
339
|
+
};
|
|
318
340
|
var getFields = function () {
|
|
319
341
|
// krasne zobrazi cely objekt!
|
|
320
342
|
//console.log(dataTableEl.current);
|
|
@@ -451,7 +473,7 @@ var XLazyDataTable = function (props) {
|
|
|
451
473
|
return __generator(this, function (_a) {
|
|
452
474
|
switch (_a.label) {
|
|
453
475
|
case 0:
|
|
454
|
-
findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, first: first, rows: rows, filters: filtersAfterFiltering, customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems };
|
|
476
|
+
findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, first: first, rows: rows, filters: filtersAfterFiltering, fullTextSearch: createXFullTextSearch(ftsInputValueAfterFiltering), customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems };
|
|
455
477
|
return [4 /*yield*/, findByFilter(findParam)];
|
|
456
478
|
case 1:
|
|
457
479
|
findResult = _a.sent();
|
|
@@ -463,7 +485,7 @@ var XLazyDataTable = function (props) {
|
|
|
463
485
|
});
|
|
464
486
|
}); };
|
|
465
487
|
var createExportParams = function () {
|
|
466
|
-
var queryParam = { filters: filtersAfterFiltering, customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields() };
|
|
488
|
+
var queryParam = { filters: filtersAfterFiltering, fullTextSearch: createXFullTextSearch(ftsInputValueAfterFiltering), customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields() };
|
|
467
489
|
return {
|
|
468
490
|
path: "x-lazy-data-table-export",
|
|
469
491
|
queryParam: queryParam,
|
|
@@ -868,8 +890,10 @@ var XLazyDataTable = function (props) {
|
|
|
868
890
|
}
|
|
869
891
|
return react_1.default.createElement(column_1.Column, { field: childColumn.props.field, header: header, footer: footer, filter: true, sortable: true, filterElement: filterElement, dataType: dataType, showFilterMenu: showFilterMenu, showClearButton: showClearButton, body: body, headerStyle: headerStyle, align: align });
|
|
870
892
|
});
|
|
893
|
+
// align-items-center centruje vertikalne (posuva smerom doulu do stredu)
|
|
871
894
|
return (react_1.default.createElement("div", null,
|
|
872
|
-
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
895
|
+
react_1.default.createElement("div", { className: "flex justify-content-center align-items-center" },
|
|
896
|
+
ftsInputValue ? react_1.default.createElement(XFtsInput_1.XFtsInput, { value: ftsInputValue, onChange: function (value) { return setFtsInputValue(value); } }) : null,
|
|
873
897
|
react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
|
|
874
898
|
react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter })),
|
|
875
899
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
@@ -888,6 +912,7 @@ exports.XLazyDataTable.defaultProps = {
|
|
|
888
912
|
paginator: true,
|
|
889
913
|
rows: 10,
|
|
890
914
|
filterDisplay: "row",
|
|
915
|
+
fullTextSearch: true,
|
|
891
916
|
scrollable: true,
|
|
892
917
|
scrollWidth: 'viewport',
|
|
893
918
|
scrollHeight: 'viewport',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DataTableFilterMeta, DataTableSortMeta } from "primereact/datatable";
|
|
2
|
-
import { XCustomFilterItem } from "./FindParam";
|
|
2
|
+
import { XCustomFilterItem, XFullTextSearch } from "./FindParam";
|
|
3
3
|
export declare enum ExportType {
|
|
4
4
|
Csv = "csv",
|
|
5
5
|
Json = "json"
|
|
@@ -11,6 +11,7 @@ export interface ExportParam {
|
|
|
11
11
|
}
|
|
12
12
|
export interface LazyDataTableQueryParam {
|
|
13
13
|
filters: DataTableFilterMeta;
|
|
14
|
+
fullTextSearch?: XFullTextSearch;
|
|
14
15
|
customFilterItems?: XCustomFilterItem[];
|
|
15
16
|
multiSortMeta?: DataTableSortMeta[];
|
|
16
17
|
entity: string;
|
|
@@ -12,6 +12,11 @@ export interface XCustomFilterItem {
|
|
|
12
12
|
params: XParams;
|
|
13
13
|
}
|
|
14
14
|
export type XCustomFilter = XCustomFilterItem | XCustomFilterItem[];
|
|
15
|
+
export interface XFullTextSearch {
|
|
16
|
+
fields?: string[];
|
|
17
|
+
value: string;
|
|
18
|
+
matchMode: 'startsWith' | 'contains' | 'endsWith' | 'equals';
|
|
19
|
+
}
|
|
15
20
|
export declare enum XAggregateType {
|
|
16
21
|
Min = "MIN",
|
|
17
22
|
Max = "MAX",
|
|
@@ -27,6 +32,7 @@ export interface FindParam {
|
|
|
27
32
|
first?: number;
|
|
28
33
|
rows?: number;
|
|
29
34
|
filters?: DataTableFilterMeta;
|
|
35
|
+
fullTextSearch?: XFullTextSearch;
|
|
30
36
|
customFilterItems?: XCustomFilterItem[];
|
|
31
37
|
multiSortMeta?: DataTableSortMeta[];
|
|
32
38
|
entity: string;
|