@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.
@@ -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 _g = __read((0, react_1.useState)(props.sortField ? [{ field: props.sortField, order: 1 }] : []), 2), multiSortMeta = _g[0], setMultiSortMeta = _g[1];
223
- var _h = __read((0, react_1.useState)(null), 2), selectedRow = _h[0], setSelectedRow = _h[1];
224
- var _j = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _j[0], setDataLoaded = _j[1]; // priznak kde si zapiseme, ci uz sme nacitali data
225
- var _k = __read((0, react_1.useState)(false), 2), exportRowsDialogOpened = _k[0], setExportRowsDialogOpened = _k[1];
226
- var _l = __read((0, react_1.useState)(), 2), exportRowsDialogRowCount = _l[0], setExportRowsDialogRowCount = _l[1]; // param pre dialog
227
- var _m = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _m[0], setFiltersAfterFiltering = _m[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michalrakus/x-react-web-lib",
3
- "version": "1.11.1",
3
+ "version": "1.12.0",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "clean": "rimraf lib",