@michalrakus/x-react-web-lib 1.32.6 → 1.32.8

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/gulpfile.js CHANGED
@@ -30,6 +30,7 @@ function generateApi(cb) {
30
30
  "./lib/components/XLazyDataTable/XLazyDataTable",
31
31
  "./lib/components/XLazyDataTable/XMultilineRenderer",
32
32
 
33
+ "./lib/components/useXStateSession",
33
34
  "./lib/components/useXToken",
34
35
  "./lib/components/XAutoComplete",
35
36
  "./lib/components/XAutoCompleteBase",
@@ -75,5 +75,6 @@ export type XFieldXFieldMetaMap = Map<string, XFieldMeta>;
75
75
  export declare class XFieldSetBase {
76
76
  static createXFieldXFieldMetaMap(xFieldSetMeta: XFieldSetMeta, filterFromParent?: string): XFieldXFieldMetaMap;
77
77
  static xFieldSetValuesAsUI(xFieldSetValues: XFieldSetValues, xFieldXFieldMetaMap: XFieldXFieldMetaMap): string;
78
+ static xFieldSetValueAsUI(xFieldMeta: XFieldMeta, value: any): string;
78
79
  private static createMapForXFieldMeta;
79
80
  }
@@ -75,27 +75,14 @@ var XFieldSetBase = /** @class */ (function () {
75
75
  // logicky patri do src/serverApi/XUtilsConversions.ts a zisla by sa aj pri exporte do excelu ale XFieldXFieldMetaMap (a jeho "parent"-a XFieldSetBase) mame len na frontende
76
76
  XFieldSetBase.xFieldSetValuesAsUI = function (xFieldSetValues, xFieldXFieldMetaMap) {
77
77
  var e_1, _a;
78
- var _b;
79
78
  // budeme mat vzdy spravne poradie? nebudeme... asi najjednoduchsie zosortovat tu "valueUIList" podla abecedy
80
79
  var valueUIList = [];
81
80
  try {
82
- for (var _c = __values(Object.entries(xFieldSetValues)), _d = _c.next(); !_d.done; _d = _c.next()) {
83
- var _e = __read(_d.value, 2), field = _e[0], value = _e[1];
81
+ for (var _b = __values(Object.entries(xFieldSetValues)), _c = _b.next(); !_c.done; _c = _b.next()) {
82
+ var _d = __read(_c.value, 2), field = _d[0], value = _d[1];
84
83
  var xFieldMeta = xFieldXFieldMetaMap.get(field);
85
84
  if (xFieldMeta) {
86
- if (xFieldMeta.type === XFieldType.checkbox) {
87
- valueUIList.push(xFieldMeta.label);
88
- }
89
- else if (xFieldMeta.type === XFieldType.inputText) {
90
- valueUIList.push("".concat(xFieldMeta.label, ": \"").concat(value, "\""));
91
- }
92
- else if (xFieldMeta.type === XFieldType.inputDecimal) {
93
- valueUIList.push("".concat(xFieldMeta.label, ": ").concat((0, XUtilsConversions_1.numberAsUI)((0, XUtilsConversions_1.numberFromModel)(value), (_b = xFieldMeta.decimalProps) === null || _b === void 0 ? void 0 : _b.scale)));
94
- }
95
- else {
96
- // neznamy typ
97
- valueUIList.push("".concat(xFieldMeta.label, ": \"").concat(value, "\""));
98
- }
85
+ valueUIList.push(XFieldSetBase.xFieldSetValueAsUI(xFieldMeta, value));
99
86
  }
100
87
  else {
101
88
  // field bol z formulara odstraneny (nemalo by sa to takto pouzivat, skor by sa mala datumom ohranicit platnost fieldu)
@@ -107,12 +94,30 @@ var XFieldSetBase = /** @class */ (function () {
107
94
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
108
95
  finally {
109
96
  try {
110
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
97
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
111
98
  }
112
99
  finally { if (e_1) throw e_1.error; }
113
100
  }
114
101
  return valueUIList.join(", ");
115
102
  };
103
+ XFieldSetBase.xFieldSetValueAsUI = function (xFieldMeta, value) {
104
+ var _a;
105
+ var valueAsUI;
106
+ if (xFieldMeta.type === XFieldType.checkbox) {
107
+ valueAsUI = xFieldMeta.label;
108
+ }
109
+ else if (xFieldMeta.type === XFieldType.inputText) {
110
+ valueAsUI = "".concat(xFieldMeta.label, ": \"").concat(value, "\"");
111
+ }
112
+ else if (xFieldMeta.type === XFieldType.inputDecimal) {
113
+ valueAsUI = "".concat(xFieldMeta.label, ": ").concat((0, XUtilsConversions_1.numberAsUI)((0, XUtilsConversions_1.numberFromModel)(value), (_a = xFieldMeta.decimalProps) === null || _a === void 0 ? void 0 : _a.scale));
114
+ }
115
+ else {
116
+ // neznamy typ
117
+ valueAsUI = "".concat(xFieldMeta.label, ": \"").concat(value, "\"");
118
+ }
119
+ return valueAsUI;
120
+ };
116
121
  XFieldSetBase.createMapForXFieldMeta = function (xFieldMeta, filterFromParent, xFieldXFieldMetaMap) {
117
122
  var e_2, _a;
118
123
  if (filterFromParent === undefined) {
@@ -37,8 +37,18 @@ export interface XBrowseProps {
37
37
  export interface XSearchBrowseProps {
38
38
  searchBrowseParams?: XSearchBrowseParams;
39
39
  }
40
+ export declare enum XStateKeySuffix {
41
+ filters = "filters",
42
+ ftsInputValue = "fts-input-value",
43
+ optionalCustomFilter = "optional-custom-filter",
44
+ multiSortMeta = "multi-sort-meta",
45
+ pagingFirst = "paging-first",
46
+ selectedRow = "selected-row",
47
+ multilineSwitchValue = "multiline-switch-value"
48
+ }
40
49
  export interface XLazyDataTableProps {
41
50
  entity: string;
51
+ stateKey?: string;
42
52
  label?: string;
43
53
  dataKey?: string;
44
54
  rowExpansionTemplate?: (row: any, options: DataTableRowExpansionTemplate) => React.ReactNode;
@@ -55,6 +65,7 @@ export interface XLazyDataTableProps {
55
65
  scrollHeight: string;
56
66
  formFooterHeight?: string;
57
67
  shrinkWidth: boolean;
68
+ onResetTable?: () => void;
58
69
  onAddRow?: () => void;
59
70
  onEdit?: (selectedRow: any) => void;
60
71
  removeRow?: ((selectedRow: any) => Promise<boolean>) | boolean;
@@ -130,6 +141,7 @@ export interface XLazyColumnProps {
130
141
  autoComplete?: XAutoCompleteInFilterProps | true;
131
142
  showFilterMenu?: boolean;
132
143
  betweenFilter?: XBetweenFilterProp | "noBetween";
144
+ autoFilter: boolean;
133
145
  width?: string;
134
146
  contentType?: XContentType;
135
147
  fieldSetId?: string;
@@ -145,5 +157,6 @@ export declare const XLazyColumn: {
145
157
  (props: XLazyColumnProps): null;
146
158
  defaultProps: {
147
159
  columnViewStatus: boolean;
160
+ autoFilter: boolean;
148
161
  };
149
162
  };
@@ -106,7 +106,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
106
106
  return to.concat(ar || Array.prototype.slice.call(from));
107
107
  };
108
108
  Object.defineProperty(exports, "__esModule", { value: true });
109
- exports.XLazyColumn = exports.XLazyDataTable = void 0;
109
+ exports.XLazyColumn = exports.XLazyDataTable = exports.XStateKeySuffix = void 0;
110
110
  var react_1 = __importStar(require("react"));
111
111
  var datatable_1 = require("primereact/datatable");
112
112
  var column_1 = require("primereact/column");
@@ -134,9 +134,22 @@ var XOcfDropdown_1 = require("./XOcfDropdown");
134
134
  var XFieldSetBase_1 = require("../XFieldSet/XFieldSetBase");
135
135
  var XAutoCompleteBase_1 = require("../XAutoCompleteBase");
136
136
  var XInputTextBase_1 = require("../XInputTextBase");
137
+ var useXStateSession_1 = require("../useXStateSession");
138
+ var useXStateSessionBase_1 = require("../useXStateSessionBase");
139
+ var _ = __importStar(require("lodash"));
140
+ var XStateKeySuffix;
141
+ (function (XStateKeySuffix) {
142
+ XStateKeySuffix["filters"] = "filters";
143
+ XStateKeySuffix["ftsInputValue"] = "fts-input-value";
144
+ XStateKeySuffix["optionalCustomFilter"] = "optional-custom-filter";
145
+ XStateKeySuffix["multiSortMeta"] = "multi-sort-meta";
146
+ XStateKeySuffix["pagingFirst"] = "paging-first";
147
+ XStateKeySuffix["selectedRow"] = "selected-row";
148
+ XStateKeySuffix["multilineSwitchValue"] = "multiline-switch-value";
149
+ })(XStateKeySuffix = exports.XStateKeySuffix || (exports.XStateKeySuffix = {}));
137
150
  var XLazyDataTable = function (props) {
138
151
  var _a, _b;
139
- // must be here, is used in createInitFilters()
152
+ // must be here, is used in createFiltersInit()
140
153
  var xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.entity);
141
154
  var createAggregateItems = function () {
142
155
  var e_1, _a;
@@ -160,9 +173,16 @@ var XLazyDataTable = function (props) {
160
173
  }
161
174
  return aggregateItems;
162
175
  };
163
- var createInitFilters = function () {
176
+ var overrideFilters = function (filters, filtersHigherPrio) {
177
+ if (filtersHigherPrio) {
178
+ // deep clone is needed, otherwise filter elements write into "filters" and override the values in filtersHigherPrio ("props.filters") (simple cloning "..." is not enough to create 2 instances of filter values)
179
+ filters = __assign(__assign({}, filters), _.cloneDeep(filtersHigherPrio)); // items from filtersHigherPrio will replace existing items in filters
180
+ }
181
+ return filters;
182
+ };
183
+ var createFiltersInit = function () {
164
184
  var e_2, _a;
165
- var initFilters = {};
185
+ var filtersInit = {};
166
186
  //let columns = dataTableEl.current.props.children; - does not work
167
187
  var columns = props.children;
168
188
  try {
@@ -173,7 +193,7 @@ var XLazyDataTable = function (props) {
173
193
  var xField = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXFieldByPath(xEntity, field);
174
194
  // TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
175
195
  var filterMatchMode = getInitFilterMatchMode(xLazyColumn.props, xField);
176
- initFilters[field] = createFilterItem(props.filterDisplay, { value: null, matchMode: filterMatchMode });
196
+ filtersInit[field] = createFilterItem(props.filterDisplay, { value: null, matchMode: filterMatchMode });
177
197
  }
178
198
  }
179
199
  catch (e_2_1) { e_2 = { error: e_2_1 }; }
@@ -183,7 +203,14 @@ var XLazyDataTable = function (props) {
183
203
  }
184
204
  finally { if (e_2) throw e_2.error; }
185
205
  }
186
- return initFilters;
206
+ filtersInit = overrideFilters(filtersInit, props.filters);
207
+ if (props.searchBrowseParams !== undefined) {
208
+ var displayFieldFilter = props.searchBrowseParams.displayFieldFilter;
209
+ if (displayFieldFilter !== undefined) {
210
+ filtersInit[displayFieldFilter.field] = createFilterItem(props.filterDisplay, displayFieldFilter.constraint);
211
+ }
212
+ }
213
+ return filtersInit;
187
214
  };
188
215
  var getInitFilterMatchMode = function (xLazyColumnProps, xField) {
189
216
  var filterMatchMode;
@@ -255,11 +282,37 @@ var XLazyDataTable = function (props) {
255
282
  var createInitFtsInputValue = function () {
256
283
  return { value: null, matchMode: "contains" };
257
284
  };
285
+ /*
286
+ // TODO turn off/on storage
287
+ const saveValueIntoStorage = (stateKeySuffix: XStateKeySuffix, value: any) => {
288
+ XUtils.saveValueIntoStorage(`${getTableStateKey()}-${stateKeySuffix}`, value);
289
+ }
290
+
291
+ // TODO turn off/on storage
292
+ const getValueFromStorage = (stateKeySuffix: XStateKeySuffix, initValue: any): any => {
293
+ return XUtils.getValueFromStorage(`${getTableStateKey()}-${stateKeySuffix}`, initValue);
294
+ }
295
+ */
296
+ var getStateKey = function (stateKeySuffix) {
297
+ var _a;
298
+ return "x-ldt-state-".concat((_a = props.stateKey) !== null && _a !== void 0 ? _a : props.entity, "-").concat(stateKeySuffix);
299
+ };
300
+ var removePagingFromStorage = function () {
301
+ XUtils_1.XUtils.removeValueFromStorage(getStateKey(XStateKeySuffix.pagingFirst));
302
+ };
258
303
  // premenne platne pre cely component (obdoba member premennych v class-e)
259
304
  var primeReactContext = react_1.default.useContext(api_1.PrimeReactContext); // probably does not work and deprecated PrimeReact.filterMatchModeOptions is used
260
305
  var dataTableEl = (0, react_1.useRef)(null);
261
306
  var customFilterItems = XUtilsCommon_1.XUtilsCommon.createCustomFilterItems(props.customFilter);
307
+ if (props.searchBrowseParams !== undefined) {
308
+ // ak mame props.searchBrowseParams.customFilterFunction, pridame filter
309
+ if (props.searchBrowseParams.customFilter) {
310
+ customFilterItems = XUtilsCommon_1.XUtilsCommon.filterAnd(customFilterItems, XUtils_1.XUtils.evalFilter(props.searchBrowseParams.customFilter));
311
+ }
312
+ }
262
313
  var aggregateItems = createAggregateItems();
314
+ // poznamka k useXStateSession - v buducnosti nahradit useXStateStorage, ktory bude mat parameter session/local/none a parameter bude riadit aky storage sa pouzije
315
+ // zatial vzdy ukladame do session
263
316
  // ak mame fieldSet stlpce (stlpce ktore maju zadany fieldSetId a zobrazuju hodnoty podla fieldSet-u),
264
317
  // tak sem nacitame mapy umoznujuce ziskanie labelov zakliknutych field-ov
265
318
  // poznamka: uz by sa zislo mat vytvorene objekty (instancie) pre stlpce a do nich zapisovat pripadny XFieldSetMap, filter (teraz je vo "filters")
@@ -267,35 +320,34 @@ var XLazyDataTable = function (props) {
267
320
  var _d = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _d[0], setValue = _d[1];
268
321
  var _e = __read((0, react_1.useState)(undefined), 2), expandedRows = _e[0], setExpandedRows = _e[1];
269
322
  var _f = __read((0, react_1.useState)(false), 2), loading = _f[0], setLoading = _f[1];
270
- var _g = __read((0, react_1.useState)(0), 2), first = _g[0], setFirst = _g[1];
323
+ var _g = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.pagingFirst), 0), 2), first = _g[0], setFirst = _g[1];
271
324
  var _h = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rows = _h[0], setRows = _h[1];
272
- var filtersInit = createInitFilters();
273
- if (props.filters) {
274
- filtersInit = __assign(__assign({}, filtersInit), props.filters); // items from props.filters will replace existing items in filtersInit
275
- }
276
- if (props.searchBrowseParams !== undefined) {
277
- var displayFieldFilter = props.searchBrowseParams.displayFieldFilter;
278
- if (displayFieldFilter !== undefined) {
279
- filtersInit[displayFieldFilter.field] = createFilterItem(props.filterDisplay, displayFieldFilter.constraint);
325
+ // "filters" have special initialState function different from that used in useXStateSession
326
+ var filtersInitialStateFunction = function () {
327
+ var filtersInit = XUtils_1.XUtils.getValueFromStorage(getStateKey(XStateKeySuffix.filters), null);
328
+ if (filtersInit != null) {
329
+ // we have filters from session - if we have props.filters, we always override the values from session (values from props.filters have higher priority)
330
+ filtersInit = overrideFilters(filtersInit, props.filters);
280
331
  }
281
- // ak mame props.searchBrowseParams.customFilterFunction, pridame filter
282
- if (props.searchBrowseParams.customFilter) {
283
- customFilterItems = XUtilsCommon_1.XUtilsCommon.filterAnd(customFilterItems, XUtils_1.XUtils.evalFilter(props.searchBrowseParams.customFilter));
332
+ else {
333
+ // no filters in session
334
+ filtersInit = createFiltersInit();
284
335
  }
285
- }
286
- var _j = __read((0, react_1.useState)(filtersInit), 2), filters = _j[0], setFilters = _j[1]; // filtrovanie na "controlled manner" (moze sa sem nainicializovat nejaka hodnota)
336
+ return filtersInit;
337
+ };
338
+ var _j = __read((0, useXStateSessionBase_1.useXStateSessionBase)(getStateKey(XStateKeySuffix.filters), filtersInitialStateFunction), 2), filters = _j[0], setFilters = _j[1]; // filtrovanie na "controlled manner" (moze sa sem nainicializovat nejaka hodnota)
287
339
  var initFtsInputValue = props.fullTextSearch ? createInitFtsInputValue() : undefined;
288
- var _k = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValue = _k[0], setFtsInputValue = _k[1];
289
- var _l = __read((0, react_1.useState)(undefined), 2), optionalCustomFilter = _l[0], setOptionalCustomFilter = _l[1];
290
- var _m = __read((_a = props.multilineSwitchValue) !== null && _a !== void 0 ? _a : (0, react_1.useState)(props.multilineSwitchInitValue), 2), multilineSwitchValue = _m[0], setMultilineSwitchValue = _m[1];
291
- var _o = __read((0, react_1.useState)(XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _o[0], setMultiSortMeta = _o[1];
292
- var _p = __read((0, react_1.useState)(null), 2), selectedRow = _p[0], setSelectedRow = _p[1];
340
+ var _k = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.ftsInputValue), initFtsInputValue), 2), ftsInputValue = _k[0], setFtsInputValue = _k[1];
341
+ var _l = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.optionalCustomFilter), undefined), 2), optionalCustomFilter = _l[0], setOptionalCustomFilter = _l[1];
342
+ var _m = __read((_a = props.multilineSwitchValue) !== null && _a !== void 0 ? _a : (0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.multilineSwitchValue), props.multilineSwitchInitValue), 2), multilineSwitchValue = _m[0], setMultilineSwitchValue = _m[1];
343
+ var _o = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.multiSortMeta), XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _o[0], setMultiSortMeta = _o[1];
344
+ var _p = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.selectedRow), null), 2), selectedRow = _p[0], setSelectedRow = _p[1];
293
345
  var _q = __read((_b = props.dataLoadedState) !== null && _b !== void 0 ? _b : (0, react_1.useState)(false), 2), dataLoaded = _q[0], setDataLoaded = _q[1]; // priznak kde si zapiseme, ci uz sme nacitali data
294
346
  var _r = __read((0, react_1.useState)({ dialogOpened: false }), 2), exportRowsDialogState = _r[0], setExportRowsDialogState = _r[1];
295
347
  //const [exportRowsDialogRowCount, setExportRowsDialogRowCount] = useState<number>(); // param pre dialog
296
- var _s = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _s[0], setFiltersAfterFiltering = _s[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
297
- var _t = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValueAfterFiltering = _t[0], setFtsInputValueAfterFiltering = _t[1]; // tak isto ako filtersAfterFiltering
298
- var _u = __read((0, react_1.useState)(undefined), 2), optionalCustomFilterAfterFiltering = _u[0], setOptionalCustomFilterAfterFiltering = _u[1]; // tak isto ako filtersAfterFiltering
348
+ var _s = __read((0, react_1.useState)(filters), 2), filtersAfterFiltering = _s[0], setFiltersAfterFiltering = _s[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
349
+ var _t = __read((0, react_1.useState)(ftsInputValue), 2), ftsInputValueAfterFiltering = _t[0], setFtsInputValueAfterFiltering = _t[1]; // tak isto ako filtersAfterFiltering
350
+ var _u = __read((0, react_1.useState)(optionalCustomFilter), 2), optionalCustomFilterAfterFiltering = _u[0], setOptionalCustomFilterAfterFiltering = _u[1]; // tak isto ako filtersAfterFiltering
299
351
  // parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
300
352
  (0, react_1.useEffect)(function () {
301
353
  // jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
@@ -341,7 +393,8 @@ var XLazyDataTable = function (props) {
341
393
  //console.log("zavolany onFilter - event.filters = " + JSON.stringify(event.filters));
342
394
  // tymto zavolanim sa zapise znak zapisany klavesnicou do inputu filtra (ak prikaz zakomentujeme, input filtra zostane prazdny)
343
395
  setFilters(event.filters);
344
- loadDataBaseIfAutoFilter(event.filters);
396
+ removePagingFromStorage();
397
+ loadDataBaseIfAutoFilter(event.filters, false);
345
398
  };
346
399
  var onSort = function (event) {
347
400
  //console.log("zavolany onSort - this.state.multiSortMeta = " + JSON.stringify(multiSortMeta));
@@ -351,8 +404,8 @@ var XLazyDataTable = function (props) {
351
404
  findParam.multiSortMeta = event.multiSortMeta; // prepiseme multiSortMeta, lebo je tam stara hodnota (volanie setMultiSortMeta nezmeni multiSortMeta hned)
352
405
  loadDataBase(findParam);
353
406
  };
354
- var loadDataBaseIfAutoFilter = function (filters) {
355
- if (props.autoFilter) {
407
+ var loadDataBaseIfAutoFilter = function (filters, fieldAutoFilter) {
408
+ if (props.autoFilter || fieldAutoFilter) {
356
409
  var findParam = createFindParam();
357
410
  findParam.filters = filters; // prepiseme filters, lebo je tam stara hodnota
358
411
  loadDataBase(findParam);
@@ -362,16 +415,49 @@ var XLazyDataTable = function (props) {
362
415
  //console.log("zavolany onClickFilter");
363
416
  loadData();
364
417
  };
365
- var onClickClearFilter = function () {
366
- // najjednoduchsi sposob - pomeni aj pripadne nastavene matchMode hodnoty
367
- var filtersInit = createInitFilters();
368
- setFilters(filtersInit);
369
- if (ftsInputValue) {
370
- setFtsInputValue(createInitFtsInputValue());
371
- }
372
- if (props.optionalCustomFilters) {
373
- setOptionalCustomFilter(undefined);
374
- }
418
+ /* povodna metoda, ktora iba vycistila filter
419
+ const onClickClearFilter = () => {
420
+ // najjednoduchsi sposob - pomeni aj pripadne nastavene matchMode hodnoty
421
+ let filtersInit: DataTableFilterMeta = createFiltersInit();
422
+ setFilters(filtersInit);
423
+
424
+ if (ftsInputValue) {
425
+ setFtsInputValue(createInitFtsInputValue());
426
+ }
427
+
428
+ if (props.optionalCustomFilters) {
429
+ setOptionalCustomFilter(undefined);
430
+ }
431
+ };
432
+ */
433
+ var onClickResetTable = function () {
434
+ // every session state variable set to init value from "props" or default value
435
+ // (this code corresponds to init values in useXStateSession hooks)
436
+ var firstLocal = 0;
437
+ setFirst(firstLocal);
438
+ var filtersLocal = createFiltersInit();
439
+ setFilters(filtersLocal);
440
+ var ftsInputValueLocal = createInitFtsInputValue();
441
+ setFtsInputValue(ftsInputValueLocal);
442
+ var optionalCustomFilterLocal = undefined;
443
+ setOptionalCustomFilter(optionalCustomFilterLocal);
444
+ setMultilineSwitchValue(props.multilineSwitchInitValue);
445
+ var multiSortMetaLocal = XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(props.sortField);
446
+ setMultiSortMeta(multiSortMetaLocal);
447
+ setSelectedRow(null);
448
+ // custom operations
449
+ if (props.onResetTable) {
450
+ props.onResetTable();
451
+ }
452
+ // at least because of sort change (icon shows sorting column) we have to read data from db right now
453
+ var findParam = createFindParam();
454
+ // overwrite first, filters, ... with (potentially) new values
455
+ findParam.first = firstLocal;
456
+ findParam.filters = filtersLocal;
457
+ findParam.fullTextSearch = createXFullTextSearch(ftsInputValueLocal);
458
+ findParam.customFilterItems = createXCustomFilterItems(customFilterItems, optionalCustomFilterLocal);
459
+ findParam.multiSortMeta = multiSortMetaLocal;
460
+ loadDataBase(findParam);
375
461
  };
376
462
  var loadData = function () { return __awaiter(void 0, void 0, void 0, function () {
377
463
  return __generator(this, function (_a) {
@@ -452,6 +538,8 @@ var XLazyDataTable = function (props) {
452
538
  setValue(findResult);
453
539
  setupExpandedRows(findResult, multilineSwitchValue);
454
540
  setLoading(false);
541
+ // save table state into session/local
542
+ //saveTableState(findParam); <- old solution, state is saved immediatelly after change of some filter field, sorting, etc.
455
543
  // odlozime si filter hodnoty pre pripadny export - deep cloning vyzera ze netreba
456
544
  setFiltersAfterFiltering(filters);
457
545
  setFtsInputValueAfterFiltering(ftsInputValue ? __assign({}, ftsInputValue) : undefined);
@@ -500,6 +588,13 @@ var XLazyDataTable = function (props) {
500
588
  }
501
589
  });
502
590
  }); };
591
+ /*
592
+ const saveTableState = (findParam: FindParam) => {
593
+ saveValueIntoStorage(XStateKeySuffix.filters, findParam.filters);
594
+ saveValueIntoStorage(XStateKeySuffix.ftsInputValue, ftsInputValue);
595
+ saveValueIntoStorage(XStateKeySuffix.optionalCustomFilter, optionalCustomFilter);
596
+ }
597
+ */
503
598
  var createXFullTextSearch = function (ftsInputValue) {
504
599
  var xFullTextSearch = undefined; // default
505
600
  if (ftsInputValue && ftsInputValue.value !== null) {
@@ -773,9 +868,9 @@ var XLazyDataTable = function (props) {
773
868
  };
774
869
  // ****** dropdown vo filtri ********
775
870
  // pouziva sa len pre simple filtrovanie (filterDisplay="row")
776
- var onDropdownFilterChange = function (field, displayValue) {
871
+ var onDropdownFilterChange = function (field, displayValue, fieldAutoFilter) {
777
872
  var filterValue = displayValue !== XUtils_1.XUtils.dropdownEmptyOptionValue ? displayValue : null;
778
- setFilterValue(field, filterValue, api_1.FilterMatchMode.EQUALS);
873
+ setFilterValue(field, filterValue, api_1.FilterMatchMode.EQUALS, undefined, fieldAutoFilter);
779
874
  };
780
875
  var getDropdownFilterValue = function (field) {
781
876
  var filterValue = getFilterValue(field);
@@ -789,7 +884,8 @@ var XLazyDataTable = function (props) {
789
884
  // neskusal som, ci treba aj toto klonovat ale pravdepodobne hej
790
885
  var filtersCloned = __assign({}, filters);
791
886
  setFilters(filtersCloned);
792
- loadDataBaseIfAutoFilter(filtersCloned);
887
+ removePagingFromStorage();
888
+ loadDataBaseIfAutoFilter(filtersCloned, false);
793
889
  };
794
890
  // vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
795
891
  var getFilterItem = function (field) {
@@ -797,7 +893,7 @@ var XLazyDataTable = function (props) {
797
893
  };
798
894
  // vseobecna metodka - nastavi hodnotu do filtra
799
895
  // ak je matchMode === undefined, tak zachova povodnu hodnotu matchMode
800
- var setFilterValue = function (field, value, matchMode, customFilterItems) {
896
+ var setFilterValue = function (field, value, matchMode, customFilterItems, fieldAutoFilter) {
801
897
  var filterValue = filters[field]; // funguje len pre filterDisplay="row"
802
898
  filterValue.value = value;
803
899
  if (matchMode !== undefined) {
@@ -807,7 +903,10 @@ var XLazyDataTable = function (props) {
807
903
  // treba klonovat, inac react nezobrazi zmenenu hodnotu
808
904
  var filtersCloned = __assign({}, filters);
809
905
  setFilters(filtersCloned);
810
- loadDataBaseIfAutoFilter(filtersCloned);
906
+ // we had problem when page was set to e.g. 3 (more than 1), after setting some filter value that caused that only 1 page should be returned
907
+ // - after returning back to browse no rows were displayed (because requested page was 3) (this is quick fix)
908
+ removePagingFromStorage();
909
+ loadDataBaseIfAutoFilter(filtersCloned, fieldAutoFilter);
811
910
  };
812
911
  // vseobecna metodka - precita hodnotu z filtra (vrati napr. typ Date | null)
813
912
  var getFilterValue = function (field) {
@@ -822,7 +921,7 @@ var XLazyDataTable = function (props) {
822
921
  // ****** vseobecne metodky pre set/get do/z filtra - pre betweenFilter ********
823
922
  // do DataTableFilterMetaData.value ulozime dvojprvkove pole [value1, value2]
824
923
  // na backende spracujeme toto dvojprvkove pole
825
- var setFilterValue1 = function (field, value) {
924
+ var setFilterValue1 = function (field, value, fieldAutoFilter) {
826
925
  // na zaciatku (po inicializacii lazy table) je filterValue = null
827
926
  var filterValue = getFilterValue(field);
828
927
  if (filterValue !== null) {
@@ -831,9 +930,9 @@ var XLazyDataTable = function (props) {
831
930
  else {
832
931
  filterValue = [value, null];
833
932
  }
834
- setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
933
+ setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN, undefined, fieldAutoFilter);
835
934
  };
836
- var setFilterValue2 = function (field, value) {
935
+ var setFilterValue2 = function (field, value, fieldAutoFilter) {
837
936
  // na zaciatku (po inicializacii lazy table) je filterValue = null
838
937
  var filterValue = getFilterValue(field);
839
938
  if (filterValue !== null) {
@@ -842,7 +941,7 @@ var XLazyDataTable = function (props) {
842
941
  else {
843
942
  filterValue = [null, value];
844
943
  }
845
- setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
944
+ setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN, undefined, fieldAutoFilter);
846
945
  };
847
946
  var getFilterValue1 = function (field) {
848
947
  return getFilterValue1or2(field, 0);
@@ -1116,20 +1215,20 @@ var XLazyDataTable = function (props) {
1116
1215
  }
1117
1216
  var xAssoc = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToOneByPath(xEntity, assocField_1);
1118
1217
  var object = getFilterValue(childColumn.props.field);
1119
- filterElement = react_1.default.createElement(XAutoCompleteBase_1.XAutoCompleteBase, { value: object, onChange: function (object, objectChange) { return setFilterValue(childColumn.props.field, object, undefined, object !== null ? [{ where: "[".concat(assocField_1, "] = ").concat(object['id']), params: {} }] : undefined); }, error: undefined, onErrorChange: function (error) { }, idField: "id", field: displayField, suggestionsQuery: { entity: xAssoc.entityName, filter: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.filter, sortField: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.sortField }, searchBrowse: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.searchBrowse, valueForm: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.valueForm, addRowEnabled: false, width: "100%", scrollHeight: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.scrollHeight, suggestionsLoad: "lazy", lazyLoadMaxRows: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.lazyLoadMaxRows, minLength: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.minLength });
1218
+ filterElement = react_1.default.createElement(XAutoCompleteBase_1.XAutoCompleteBase, { value: object, onChange: function (object, objectChange) { return setFilterValue(childColumn.props.field, object, undefined, object !== null ? [{ where: "[".concat(assocField_1, "] = ").concat(object['id']), params: {} }] : undefined, childColumn.props.autoFilter); }, error: undefined, onErrorChange: function (error) { }, idField: "id", field: displayField, suggestionsQuery: { entity: xAssoc.entityName, filter: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.filter, sortField: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.sortField }, searchBrowse: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.searchBrowse, valueForm: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.valueForm, addRowEnabled: false, width: "100%", scrollHeight: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.scrollHeight, suggestionsLoad: "lazy", lazyLoadMaxRows: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.lazyLoadMaxRows, minLength: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.minLength });
1120
1219
  }
1121
1220
  else {
1122
1221
  if (xField.type === "boolean") {
1123
1222
  var checkboxValue = getFilterValue(childColumn.props.field);
1124
- filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return setFilterValue(childColumn.props.field, e.value, api_1.FilterMatchMode.EQUALS); } });
1223
+ filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return setFilterValue(childColumn.props.field, e.value, api_1.FilterMatchMode.EQUALS, undefined, childColumn.props.autoFilter); } });
1125
1224
  }
1126
1225
  else if (childColumn.props.dropdownInFilter) {
1127
1226
  var dropdownValue = getDropdownFilterValue(childColumn.props.field);
1128
- filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: props.entity, path: childColumn.props.field, value: dropdownValue, onValueChange: onDropdownFilterChange, filter: childColumn.props.dropdownFilter, sortField: childColumn.props.dropdownSortField });
1227
+ filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: props.entity, path: childColumn.props.field, value: dropdownValue, onValueChange: function (field, displayValue) { return onDropdownFilterChange(field, displayValue, childColumn.props.autoFilter); }, filter: childColumn.props.dropdownFilter, sortField: childColumn.props.dropdownSortField });
1129
1228
  }
1130
1229
  else if (xField.type === "string") {
1131
1230
  var stringValue = getFilterValue(childColumn.props.field);
1132
- filterElement = react_1.default.createElement(XInputTextBase_1.XInputTextBase, { value: stringValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); } });
1231
+ filterElement = react_1.default.createElement(XInputTextBase_1.XInputTextBase, { value: stringValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); } });
1133
1232
  }
1134
1233
  else if (xField.type === "date" || xField.type === "datetime") {
1135
1234
  betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
@@ -1137,12 +1236,12 @@ var XLazyDataTable = function (props) {
1137
1236
  // display: 'flex' umiestni XCalendar elementy vedla seba
1138
1237
  filterElement =
1139
1238
  react_1.default.createElement("div", { style: betweenFilter === "row" ? { display: 'flex' } : undefined },
1140
- react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); }, scale: xField.scale, datetime: xField.type === "datetime" }),
1141
- react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); }, scale: xField.scale, datetime: xField.type === "datetime" }));
1239
+ react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" }),
1240
+ react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" }));
1142
1241
  }
1143
1242
  else {
1144
1243
  var dateValue = getFilterValue(childColumn.props.field);
1145
- filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); }, scale: xField.scale, datetime: xField.type === "datetime" });
1244
+ filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" });
1146
1245
  }
1147
1246
  }
1148
1247
  else if (xField.type === "decimal" || xField.type === "number") {
@@ -1152,12 +1251,12 @@ var XLazyDataTable = function (props) {
1152
1251
  // display: 'flex' umiestni input elementy pod seba (betweenFilter = "column") resp. vedla seba (betweenFilter = "row")
1153
1252
  filterElement =
1154
1253
  react_1.default.createElement("div", { style: { display: 'flex', flexDirection: betweenFilter } },
1155
- react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); } }, params)),
1156
- react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); } }, params)));
1254
+ react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value, childColumn.props.autoFilter); } }, params)),
1255
+ react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value, childColumn.props.autoFilter); } }, params)));
1157
1256
  }
1158
1257
  else {
1159
1258
  var numberValue = getFilterValue(childColumn.props.field);
1160
- filterElement = react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: numberValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); } }, params));
1259
+ filterElement = react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: numberValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); } }, params));
1161
1260
  }
1162
1261
  }
1163
1262
  }
@@ -1256,9 +1355,12 @@ var XLazyDataTable = function (props) {
1256
1355
  props.label ? react_1.default.createElement("div", { className: "x-lazy-datatable-label" }, props.label) : null,
1257
1356
  ftsInputValue ? react_1.default.createElement(XFtsInput_1.XFtsInput, { value: ftsInputValue, onChange: function (value) { return setFtsInputValue(value); } }) : null,
1258
1357
  props.showFilterButtons ? react_1.default.createElement(XButton_1.XButton, { key: "filter", icon: isMobile ? "pi pi-search" : undefined, label: !isMobile ? (0, XLocale_1.xLocaleOption)('filter') : undefined, onClick: onClickFilter }) : null,
1259
- props.showFilterButtons ? react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", icon: isMobile ? "pi pi-ban" : undefined, label: !isMobile ? (0, XLocale_1.xLocaleOption)('clearFilter') : undefined, onClick: onClickClearFilter }) : null,
1358
+ props.showFilterButtons ? react_1.default.createElement(XButton_1.XButton, { key: "resetTable", icon: isMobile ? "pi pi-ban" : undefined, label: !isMobile ? (0, XLocale_1.xLocaleOption)('resetTable') : undefined, onClick: onClickResetTable }) : null,
1260
1359
  props.optionalCustomFilters ? react_1.default.createElement(XOcfDropdown_1.XOcfDropdown, { optionalCustomFilters: props.optionalCustomFilters, value: optionalCustomFilter, onChange: function (value) { return setOptionalCustomFilter(value); }, className: "m-1" }) : null,
1261
- props.multilineSwitch ? react_1.default.createElement(XMultilineSwitch_1.XMultilineSwitch, { value: multilineSwitchValue, onChange: function (switchValue) { setMultilineSwitchValue(switchValue); setupExpandedRows(value, switchValue); }, className: "m-1" }) : null,
1360
+ props.multilineSwitch ? react_1.default.createElement(XMultilineSwitch_1.XMultilineSwitch, { value: multilineSwitchValue, onChange: function (switchValue) {
1361
+ setMultilineSwitchValue(switchValue);
1362
+ setupExpandedRows(value, switchValue);
1363
+ }, className: "m-1" }) : null,
1262
1364
  props.headerElementRight,
1263
1365
  props.label && !isMobile ? react_1.default.createElement("div", { className: "x-lazy-datatable-label-right-compensation" }) : null),
1264
1366
  react_1.default.createElement("div", { className: "flex justify-content-center" },
@@ -1298,5 +1400,6 @@ var XLazyColumn = function (props) {
1298
1400
  exports.XLazyColumn = XLazyColumn;
1299
1401
  exports.XLazyColumn.defaultProps = {
1300
1402
  //autoCompleteEnabled: "forStringOnly",
1301
- columnViewStatus: true // XViewStatus.ReadWrite
1403
+ columnViewStatus: true,
1404
+ autoFilter: false
1302
1405
  };
@@ -48,6 +48,6 @@ var XOcfDropdown = function (props) {
48
48
  // polozku pridavame do kopie zoznamu, lebo inac sa nam "polozka" v props.optionalCustomFilters "mnozi"
49
49
  var options = __spreadArray([], __read(props.optionalCustomFilters), false);
50
50
  options.splice(0, 0, { label: "" });
51
- return (react_1.default.createElement(dropdown_1.Dropdown, { options: options, optionLabel: "label", value: props.value, onChange: onChange, className: props.className }));
51
+ return (react_1.default.createElement(dropdown_1.Dropdown, { options: options, dataKey: "label", optionLabel: "label", value: props.value, onChange: onChange, className: props.className }));
52
52
  };
53
53
  exports.XOcfDropdown = XOcfDropdown;
@@ -1,6 +1,6 @@
1
1
  export interface XLocaleOptions {
2
2
  filter?: string;
3
- clearFilter?: string;
3
+ resetTable?: string;
4
4
  addRow?: string;
5
5
  editRow?: string;
6
6
  removeRow?: string;
@@ -21,6 +21,17 @@ export interface XLocaleOptions {
21
21
  fileUploadSizeToBig?: string;
22
22
  fileUploadFailed?: string;
23
23
  fileDownloadFailed?: string;
24
+ fieldSetSaveEditConfirm?: string;
25
+ fieldSetCancelEditConfirm?: string;
26
+ fieldSetRemoveFieldConfirm?: string;
27
+ runStatisticMissingDateField?: string;
28
+ upload?: string;
29
+ yes?: string;
30
+ no?: string;
31
+ dateFrom?: string;
32
+ dateTo?: string;
33
+ year?: string;
34
+ yearForAgeCalculation?: string;
24
35
  }
25
36
  export declare function xAddLocale(locale: string, xOptions: XLocaleOptions): void;
26
37
  export declare function xLocaleOption(xOptionKey: string, options?: any[string]): any;
@@ -105,4 +105,7 @@ export declare class XUtils {
105
105
  static isTableRowInserted(tableRow: any): boolean;
106
106
  static xViewStatus(xViewStatusOrBoolean: XViewStatusOrBoolean): XViewStatus;
107
107
  static options(valueStringList: string[]): SelectItem[];
108
+ static saveValueIntoStorage(key: string, value: any): void;
109
+ static getValueFromStorage(key: string, initValue: any): any;
110
+ static removeValueFromStorage(key: string): void;
108
111
  }
@@ -700,6 +700,55 @@ var XUtils = /** @class */ (function () {
700
700
  XUtils.options = function (valueStringList) {
701
701
  return valueStringList.map(function (valueString) { return { value: valueString, label: valueString }; });
702
702
  };
703
+ XUtils.saveValueIntoStorage = function (key, value) {
704
+ // value can be also string or null or undefined
705
+ // if we don't have object that can be serialised to json, we create special object
706
+ var valueObject;
707
+ if (typeof value === 'object') {
708
+ valueObject = value;
709
+ }
710
+ else if (value === undefined) {
711
+ valueObject = { _xValue: "_undefined_" };
712
+ }
713
+ else {
714
+ // value is null or string or boolean or number or Date...
715
+ valueObject = { _xValue: value };
716
+ }
717
+ sessionStorage.setItem(key, XUtilsCommon_1.XUtilsCommon.objectAsJSON(valueObject));
718
+ };
719
+ XUtils.getValueFromStorage = function (key, initValue) {
720
+ // if the value is not found in storage, initValue is returned
721
+ var value;
722
+ var item = sessionStorage.getItem(key);
723
+ if (item !== null) {
724
+ try {
725
+ var valueObject = JSON.parse(item);
726
+ if ('_xValue' in valueObject) {
727
+ // we have special object with 1 value
728
+ value = valueObject._xValue;
729
+ if (value === "_undefined_") {
730
+ value = undefined;
731
+ }
732
+ }
733
+ else {
734
+ // standard object
735
+ value = valueObject;
736
+ }
737
+ }
738
+ catch (e) {
739
+ // exception should not happen
740
+ console.log("XUtils.getValueFromStorage: Could not parse/process item from session. key = ".concat(key, ", item = ").concat(item, ". Error: ").concat(e));
741
+ value = initValue;
742
+ }
743
+ }
744
+ else {
745
+ value = initValue;
746
+ }
747
+ return value;
748
+ };
749
+ XUtils.removeValueFromStorage = function (key) {
750
+ sessionStorage.removeItem(key);
751
+ };
703
752
  XUtils.dropdownEmptyOptionValue = " ";
704
753
  XUtils.xBackendUrl = undefined;
705
754
  // nacachovany XToken - na rozlicnych miestach potrebujeme vediet uzivatela
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "en": {
3
3
  "filter": "Filter",
4
- "clearFilter": "Clear filter",
4
+ "resetTable": "Reset filter",
5
5
  "addRow": "Add",
6
6
  "editRow": "Edit",
7
7
  "removeRow": "Remove",
@@ -0,0 +1,2 @@
1
+ import { Dispatch, SetStateAction } from "react";
2
+ export declare function useXStateSession<T>(key: string, initialState: T): [T, Dispatch<SetStateAction<T>>];
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useXStateSession = void 0;
4
+ var XUtils_1 = require("./XUtils");
5
+ var useXStateSessionBase_1 = require("./useXStateSessionBase");
6
+ // TODO - initialState sholud be value | function returning T, and the function should be called in function "initialStateFunction"
7
+ function useXStateSession(key, initialState) {
8
+ return (0, useXStateSessionBase_1.useXStateSessionBase)(key, function () { return XUtils_1.XUtils.getValueFromStorage(key, initialState); });
9
+ }
10
+ exports.useXStateSession = useXStateSession;
@@ -0,0 +1,2 @@
1
+ import { Dispatch, SetStateAction } from "react";
2
+ export declare function useXStateSessionBase<T>(key: string, initialStateFunction: () => T): [T, Dispatch<SetStateAction<T>>];
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.useXStateSessionBase = void 0;
20
+ var react_1 = require("react");
21
+ var XUtils_1 = require("./XUtils");
22
+ // this base version enables to use custom version of function that computes initialState
23
+ // (in usual case useXStateSession shoud be used)
24
+ function useXStateSessionBase(key, initialStateFunction) {
25
+ var _a = __read((0, react_1.useState)(initialStateFunction), 2), value = _a[0], setValue = _a[1];
26
+ var setValueIntoSession = function (value) {
27
+ setValue(value);
28
+ XUtils_1.XUtils.saveValueIntoStorage(key, value);
29
+ };
30
+ return [value, setValueIntoSession];
31
+ }
32
+ exports.useXStateSessionBase = useXStateSessionBase;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michalrakus/x-react-web-lib",
3
- "version": "1.32.6",
3
+ "version": "1.32.8",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "clean": "rimraf lib",
@@ -40,7 +40,7 @@
40
40
  "peerDependencies": {
41
41
  "primeflex": "^3.3.1",
42
42
  "primeicons": "^7.0.0",
43
- "primereact": "10.9.2",
43
+ "primereact": "10.8.5",
44
44
  "quill": "^2.0.3",
45
45
  "react": "^18.3.1",
46
46
  "react-dom": "^18.3.1",
@@ -0,0 +1,3 @@
1
+ // generated by gulp
2
+
3
+ export * from './lib/components/useXStateSession';
@@ -0,0 +1,5 @@
1
+ // generated by gulp
2
+
3
+ 'use strict';
4
+
5
+ module.exports = require('./lib/components/useXStateSession.js');