@michalrakus/x-react-web-lib 1.31.3 → 1.32.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.
@@ -15,16 +15,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.XFtsInput = void 0;
18
- var inputtext_1 = require("primereact/inputtext");
19
18
  var react_1 = __importDefault(require("react"));
20
- var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
19
+ var XInputTextBase_1 = require("./XInputTextBase");
21
20
  var XFtsInput = function (props) {
22
- var onChange = function (e) {
23
- var value = (0, XUtilsConversions_1.stringFromUI)(e.target.value);
21
+ var onChange = function (value) {
24
22
  props.value.value = value;
25
23
  props.onChange(__assign({}, props.value)); // vyklonujeme aby react zaregistroval, ze sme urobili zmenu
26
24
  };
27
25
  // 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" }));
26
+ // we use XInputTextBase - we save onChange calls
27
+ return (react_1.default.createElement(XInputTextBase_1.XInputTextBase, { value: props.value.value, onChange: onChange, style: { height: '2.5rem', width: '17rem' }, className: "m-1" }));
29
28
  };
30
29
  exports.XFtsInput = XFtsInput;
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ export declare const XInputTextBase: {
3
+ (props: {
4
+ id?: string | undefined;
5
+ value: string | null;
6
+ onChange: (value: string | null) => void;
7
+ readOnly?: boolean | undefined;
8
+ maxLength?: number | undefined;
9
+ size?: string | number | undefined;
10
+ placeholder?: string | undefined;
11
+ className?: string | undefined;
12
+ style?: React.CSSProperties | undefined;
13
+ error?: string | undefined;
14
+ }): React.JSX.Element;
15
+ defaultProps: {};
16
+ };
@@ -0,0 +1,98 @@
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 __read = (this && this.__read) || function (o, n) {
37
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
38
+ if (!m) return o;
39
+ var i = m.call(o), r, ar = [], e;
40
+ try {
41
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
42
+ }
43
+ catch (error) { e = { error: error }; }
44
+ finally {
45
+ try {
46
+ if (r && !r.done && (m = i["return"])) m.call(i);
47
+ }
48
+ finally { if (e) throw e.error; }
49
+ }
50
+ return ar;
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.XInputTextBase = void 0;
54
+ var react_1 = __importStar(require("react"));
55
+ var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
56
+ var XUtils_1 = require("./XUtils");
57
+ var inputtext_1 = require("primereact/inputtext");
58
+ // koli optimalizacii - typovany text si zapisuje do svojej stavovej premennej a onChange zavola az z onBlur
59
+ // used for filter element in XLazyDataTable - if there was many rows/columns in datatable, typing in filter was slow (if setState was called after every character change)
60
+ var XInputTextBase = function (props) {
61
+ // true, ak uzivatel typuje hodnotu
62
+ // false, ak uz uzivatel dotypoval (zavolal sa onBlur) - hodnotu berieme "z hora" (z prop.value)
63
+ var _a = __read((0, react_1.useState)(false), 2), inputChanged = _a[0], setInputChanged = _a[1];
64
+ // pouzivane, len ak inputChanged === true, je tu zapisana zmenena hodnota v inpute
65
+ var _b = __read((0, react_1.useState)(undefined), 2), inputValueState = _b[0], setInputValueState = _b[1];
66
+ var onChange = function (e) {
67
+ // standardne prichadza z Calendar e.value - typ Date alebo null
68
+ // typ Date prichadza ak uzivatel vyplnil validny datum, null (typeof e.value vracia "object") prichadza ak uzivatel vymazal datum
69
+ // alebo je este datum nekompletny (uzivatel prave zadava datum)
70
+ // nastavili sme keepInvalid={true} -> bude chodit nevalidny string (typeof e.value vracia "string")
71
+ // naviac sme vypli parsovanie na datum (metoda parseDateTime), takze vzdy chodi "string" a konverziu robime v onBlur
72
+ //const value: string | null = stringFromUI(e.target.value);
73
+ setInputChanged(true);
74
+ setInputValueState(e.target.value); // vzdycky string
75
+ };
76
+ var onBlur = function (e) {
77
+ if (inputChanged) {
78
+ // poznamka: e.target.value aj inputValueState obsahuju tu istu string hodnotu
79
+ var value = (0, XUtilsConversions_1.stringFromUI)(e.target.value);
80
+ props.onChange(value);
81
+ setInputChanged(false);
82
+ setInputValueState(undefined); // pre poriadok
83
+ }
84
+ };
85
+ var getInputValue = function () {
86
+ var inputValue;
87
+ if (inputChanged) {
88
+ inputValue = inputValueState; // vzdycky string
89
+ }
90
+ else {
91
+ inputValue = (0, XUtilsConversions_1.stringAsUI)(props.value);
92
+ }
93
+ return inputValue;
94
+ };
95
+ return (react_1.default.createElement(inputtext_1.InputText, __assign({ id: props.id, value: getInputValue(), onChange: onChange, onBlur: onBlur, readOnly: props.readOnly, maxLength: props.maxLength, size: props.size, className: props.className, style: props.style }, XUtils_1.XUtils.createTooltipOrErrorProps(props.error), { placeholder: props.placeholder })));
96
+ };
97
+ exports.XInputTextBase = XInputTextBase;
98
+ exports.XInputTextBase.defaultProps = {};
@@ -98,6 +98,17 @@ export type XFilterElementParams = {
98
98
  options: ColumnFilterElementTemplateOptions;
99
99
  };
100
100
  export type XFilterElementProp = (params: XFilterElementParams) => React.ReactNode;
101
+ export type XAutoCompleteInFilterProps = {
102
+ assocField?: string;
103
+ filter?: XCustomFilter;
104
+ sortField?: string | DataTableSortMeta[];
105
+ lazyLoadMaxRows?: number;
106
+ field?: string | string[];
107
+ searchBrowse?: JSX.Element;
108
+ valueForm?: JSX.Element;
109
+ minLength?: number;
110
+ scrollHeight?: string;
111
+ };
101
112
  export type XContentType = "multiline" | "html" | undefined;
102
113
  export interface XLazyColumnProps {
103
114
  field: string;
@@ -106,6 +117,7 @@ export interface XLazyColumnProps {
106
117
  dropdownInFilter?: boolean;
107
118
  dropdownFilter?: XCustomFilter;
108
119
  dropdownSortField?: string;
120
+ autoComplete?: XAutoCompleteInFilterProps | true;
109
121
  showFilterMenu?: boolean;
110
122
  betweenFilter?: XBetweenFilterProp | "noBetween";
111
123
  width?: string;
@@ -120,7 +120,7 @@ var XButtonIconSmall_1 = require("../XButtonIconSmall");
120
120
  var tristatecheckbox_1 = require("primereact/tristatecheckbox");
121
121
  var XUtilsCommon_1 = require("../../serverApi/XUtilsCommon");
122
122
  var XExportRowsDialog_1 = require("./XExportRowsDialog");
123
- var api_1 = require("primereact/api");
123
+ var api_1 = __importStar(require("primereact/api"));
124
124
  var XCalendar_1 = require("../XCalendar");
125
125
  var XInputDecimalBase_1 = require("../XInputDecimalBase");
126
126
  var XLocale_1 = require("../XLocale");
@@ -132,6 +132,8 @@ var XMultilineRenderer_1 = require("./XMultilineRenderer");
132
132
  var XHtmlRenderer_1 = require("./XHtmlRenderer");
133
133
  var XOcfDropdown_1 = require("./XOcfDropdown");
134
134
  var XFieldSetBase_1 = require("../XFieldSet/XFieldSetBase");
135
+ var XAutoCompleteBase_1 = require("../XAutoCompleteBase");
136
+ var XInputTextBase_1 = require("../XInputTextBase");
135
137
  var XLazyDataTable = function (props) {
136
138
  var _a;
137
139
  // must be here, is used in createInitFilters()
@@ -170,7 +172,7 @@ var XLazyDataTable = function (props) {
170
172
  var field = xLazyColumn.props.field;
171
173
  var xField = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXFieldByPath(xEntity, field);
172
174
  // TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
173
- var filterMatchMode = getFilterMatchMode(xField);
175
+ var filterMatchMode = getInitFilterMatchMode(xLazyColumn.props, xField);
174
176
  initFilters[field] = createFilterItem(props.filterDisplay, { value: null, matchMode: filterMatchMode });
175
177
  }
176
178
  }
@@ -183,9 +185,12 @@ var XLazyDataTable = function (props) {
183
185
  }
184
186
  return initFilters;
185
187
  };
186
- var getFilterMatchMode = function (xField) {
188
+ var getInitFilterMatchMode = function (xLazyColumnProps, xField) {
187
189
  var filterMatchMode;
188
- if (xField.type === "string" || xField.type === "jsonb") {
190
+ if (isAutoCompleteInFilterEnabled(xLazyColumnProps)) {
191
+ filterMatchMode = FindParam_1.XFilterMatchMode.X_AUTO_COMPLETE; // little hack
192
+ }
193
+ else if (xField.type === "string" || xField.type === "jsonb") {
189
194
  filterMatchMode = api_1.FilterMatchMode.CONTAINS;
190
195
  }
191
196
  // zatial vsetky ostatne EQUALS
@@ -197,6 +202,40 @@ var XLazyDataTable = function (props) {
197
202
  }
198
203
  return filterMatchMode;
199
204
  };
205
+ var isAutoCompleteInFilterEnabled = function (xLazyColumnProps) {
206
+ return xLazyColumnProps.autoComplete !== undefined;
207
+ };
208
+ /* old version - created for automatical use of autocomplete on every *toOne assoc with string attribute
209
+ - extra property was used: autoCompleteEnabled: true | false | "forStringOnly"
210
+ const isAutoCompleteInFilterEnabled = (xLazyColumnProps: XLazyColumnProps, xField: XField): boolean => {
211
+ let autoCompleteEnabled: boolean = false; // default
212
+ // condition1: field has to have the length >= 2
213
+ if (!XUtilsCommon.isSingleField(xLazyColumnProps.field)) {
214
+ // condition2: used assoc must be *toOne
215
+ let assocField: string;
216
+ if (xLazyColumnProps.autoComplete?.assocField) {
217
+ assocField = xLazyColumnProps.autoComplete?.assocField;
218
+ }
219
+ else {
220
+ const [assocFieldTemp, displayFieldTemp] = XUtilsCommon.getPathToAssocAndField(xLazyColumnProps.field);
221
+ assocField = assocFieldTemp!;
222
+ }
223
+ const xAssoc: XAssoc = XUtilsMetadataCommon.getXAssocToOneByPath(xEntity, assocField);
224
+ if (xAssoc.relationType === "many-to-one" || xAssoc.relationType === "one-to-one") {
225
+ if (xLazyColumnProps.autoCompleteEnabled === true) {
226
+ autoCompleteEnabled = true; // explicit enabled - works for all types (usually has not big sense)
227
+ }
228
+ else if (xLazyColumnProps.autoCompleteEnabled === "forStringOnly") {
229
+ // default usecase - the last attribute must be of type string
230
+ if (xField.type === "string") {
231
+ autoCompleteEnabled = true;
232
+ }
233
+ }
234
+ }
235
+ }
236
+ return autoCompleteEnabled;
237
+ }
238
+ */
200
239
  var createFilterItem = function (filterDisplay, constraint) {
201
240
  var filterItem;
202
241
  if (filterDisplay === "menu") {
@@ -217,6 +256,7 @@ var XLazyDataTable = function (props) {
217
256
  return { value: null, matchMode: "contains" };
218
257
  };
219
258
  // premenne platne pre cely component (obdoba member premennych v class-e)
259
+ var primeReactContext = react_1.default.useContext(api_1.PrimeReactContext); // probably does not work and deprecated PrimeReact.filterMatchModeOptions is used
220
260
  var dataTableEl = (0, react_1.useRef)(null);
221
261
  var customFilterItems = XUtilsCommon_1.XUtilsCommon.createCustomFilterItems(props.customFilter);
222
262
  var aggregateItems = createAggregateItems();
@@ -714,12 +754,13 @@ var XLazyDataTable = function (props) {
714
754
  };
715
755
  // vseobecna metodka - nastavi hodnotu do filtra
716
756
  // ak je matchMode === undefined, tak zachova povodnu hodnotu matchMode
717
- var setFilterValue = function (field, value, matchMode) {
757
+ var setFilterValue = function (field, value, matchMode, customFilterItems) {
718
758
  var filterValue = filters[field]; // funguje len pre filterDisplay="row"
719
759
  filterValue.value = value;
720
760
  if (matchMode !== undefined) {
721
761
  filterValue.matchMode = matchMode;
722
762
  }
763
+ filterValue.customFilterItems = customFilterItems;
723
764
  // treba klonovat, inac react nezobrazi zmenenu hodnotu
724
765
  var filtersCloned = __assign({}, filters);
725
766
  setFilters(filtersCloned);
@@ -729,6 +770,11 @@ var XLazyDataTable = function (props) {
729
770
  var filterValue = filters[field]; // funguje len pre filterDisplay="row"
730
771
  return filterValue.value;
731
772
  };
773
+ // vseobecna metodka - vrati nastaveny match mode
774
+ var getFilterMatchMode = function (field) {
775
+ var filterValue = filters[field]; // funguje len pre filterDisplay="row"
776
+ return filterValue.matchMode;
777
+ };
732
778
  // ****** vseobecne metodky pre set/get do/z filtra - pre betweenFilter ********
733
779
  // do DataTableFilterMetaData.value ulozime dvojprvkove pole [value1, value2]
734
780
  // na backende spracujeme toto dvojprvkove pole
@@ -778,6 +824,23 @@ var XLazyDataTable = function (props) {
778
824
  }
779
825
  return betweenFilter;
780
826
  };
827
+ // after change from match mode xAutoComplete input displays [object Object] - trying resolving this hug does not work - I have no idea why
828
+ /*
829
+ const onFilterMatchModeChange = (e: ColumnFilterMatchModeChangeEvent): void => {
830
+ console.log(e.matchMode);
831
+ console.log(e.field);
832
+ console.log(getFilterValue(e.field));
833
+ console.log(typeof (getFilterValue(e.field)));
834
+ if (e.matchMode !== XFilterMatchMode.X_AUTO_COMPLETE) {
835
+ const filterValue: any | null = getFilterValue(e.field);
836
+ if (filterValue !== null && typeof filterValue === 'object') {
837
+ console.log("idem volat setFilterValue");
838
+ setFilterValue(e.field, null);
839
+ console.log(getFilterValue(e.field));
840
+ }
841
+ }
842
+ }
843
+ */
781
844
  var valueAsUI = function (value, xField, contentType, fieldSetId) {
782
845
  var valueResult;
783
846
  if (xField.type === "boolean") {
@@ -946,6 +1009,42 @@ var XLazyDataTable = function (props) {
946
1009
  return childColumn.props.filterElement({ getFilterItem: getFilterItem, setFilterItem: setFilterItem, options: options });
947
1010
  };
948
1011
  }
1012
+ else if (getFilterMatchMode(childColumn.props.field) === FindParam_1.XFilterMatchMode.X_AUTO_COMPLETE) {
1013
+ var assocField_1 = undefined; // path to manyToOne assoc
1014
+ var displayField = undefined; // field/fields displayed in autocomplete (can be path)
1015
+ // if childColumn.props.autoComplete = true, then autoComplete = undefined and default autocomlete is created
1016
+ var autoComplete = (typeof childColumn.props.autoComplete === 'object' ? childColumn.props.autoComplete : undefined);
1017
+ if (autoComplete) {
1018
+ if (autoComplete.field) {
1019
+ displayField = autoComplete.field;
1020
+ }
1021
+ if (autoComplete.assocField) {
1022
+ // check - autoComplete.assocField must be prefix (part) of childColumn.props.field
1023
+ if (!childColumn.props.field.startsWith(autoComplete.assocField + ".")) {
1024
+ throw "XLazyColumn with field \"".concat(childColumn.props.field, "\": autoComplete.assocField \"").concat(autoComplete.assocField, "\" is not prefix of the field");
1025
+ }
1026
+ assocField_1 = autoComplete.assocField;
1027
+ if (displayField === undefined) {
1028
+ // take displayField from childColumn.props.field (rest of the path)
1029
+ displayField = childColumn.props.field.substring(autoComplete.assocField.length + 1);
1030
+ }
1031
+ }
1032
+ }
1033
+ if (assocField_1 === undefined) {
1034
+ // default - take assocField/displayField from childColumn.props.field
1035
+ var _a = __read(XUtilsCommon_1.XUtilsCommon.getPathToAssocAndField(childColumn.props.field), 2), assocFieldTemp = _a[0], displayFieldTemp = _a[1];
1036
+ if (assocFieldTemp === null) {
1037
+ throw "XLazyColumn with field \"".concat(childColumn.props.field, "\": unexpected error - path of length >= 2 expected");
1038
+ }
1039
+ assocField_1 = assocFieldTemp;
1040
+ if (displayField === undefined) {
1041
+ displayField = displayFieldTemp;
1042
+ }
1043
+ }
1044
+ var xAssoc = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToOneByPath(xEntity, assocField_1);
1045
+ var object = getFilterValue(childColumn.props.field);
1046
+ 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 });
1047
+ }
949
1048
  else {
950
1049
  if (xField.type === "boolean") {
951
1050
  var checkboxValue = getFilterValue(childColumn.props.field);
@@ -955,6 +1054,10 @@ var XLazyDataTable = function (props) {
955
1054
  var dropdownValue = getDropdownFilterValue(childColumn.props.field);
956
1055
  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 });
957
1056
  }
1057
+ else if (xField.type === "string") {
1058
+ var stringValue = getFilterValue(childColumn.props.field);
1059
+ filterElement = react_1.default.createElement(XInputTextBase_1.XInputTextBase, { value: stringValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); } });
1060
+ }
958
1061
  else if (xField.type === "date" || xField.type === "datetime") {
959
1062
  betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
960
1063
  if (betweenFilter !== undefined) {
@@ -987,7 +1090,7 @@ var XLazyDataTable = function (props) {
987
1090
  }
988
1091
  // ************** dataType **************
989
1092
  // depending on the dataType of the column, suitable match modes are displayed in filter
990
- var dataType = undefined;
1093
+ var dataType = "text";
991
1094
  if (xField.type === "decimal" || xField.type === "number") {
992
1095
  dataType = "numeric";
993
1096
  }
@@ -1007,6 +1110,18 @@ var XLazyDataTable = function (props) {
1007
1110
  }
1008
1111
  }
1009
1112
  }
1113
+ // *********** filterMatchModeOptions ***********
1114
+ // we use the same match mode lists like the default lists in primereact, but in case of ManyToOne assoc we add match mode for autocomplete
1115
+ var filterMatchModeOptions = undefined;
1116
+ if (showFilterMenu) {
1117
+ // copy of primereact code (ColumnFilter.js)
1118
+ //filterMatchModeOptions = primeReactContext.filterMatchModeOptions![dataType].map((key) => ({ label: prLocaleOption(key), value: key }));
1119
+ filterMatchModeOptions = (primeReactContext && primeReactContext.filterMatchModeOptions[dataType].map(function (key) { return ({ label: (0, XLocale_1.prLocaleOption)(key), value: key }); })) ||
1120
+ api_1.default.filterMatchModeOptions[dataType].map(function (key) { return ({ label: (0, XLocale_1.prLocaleOption)(key), value: key }); });
1121
+ if (isAutoCompleteInFilterEnabled(childColumn.props)) {
1122
+ filterMatchModeOptions.push({ label: (0, XLocale_1.xLocaleOption)('xAutoComplete'), value: FindParam_1.XFilterMatchMode.X_AUTO_COMPLETE });
1123
+ }
1124
+ }
1010
1125
  // *********** showClearButton ***********
1011
1126
  // pre filterDisplay = "row" nechceme clear button, chceme setrit miesto
1012
1127
  var showClearButton = props.filterDisplay === "menu";
@@ -1059,7 +1174,7 @@ var XLazyDataTable = function (props) {
1059
1174
  }
1060
1175
  footer = aggregateValue;
1061
1176
  }
1062
- 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 });
1177
+ 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, filterMatchModeOptions: filterMatchModeOptions, showClearButton: showClearButton, onFilterMatchModeChange: undefined /*onFilterMatchModeChange*/, body: body, headerStyle: headerStyle, align: align });
1063
1178
  });
1064
1179
  // align-items-center centruje vertikalne (posuva smerom dolu do stredu)
1065
1180
  // x-lazy-datatable-label-right-compensation - vyvazuje label, aby item-y v strede isli aspon priblizne do stredu
@@ -1106,5 +1221,6 @@ var XLazyColumn = function (props) {
1106
1221
  };
1107
1222
  exports.XLazyColumn = XLazyColumn;
1108
1223
  exports.XLazyColumn.defaultProps = {
1224
+ //autoCompleteEnabled: "forStringOnly",
1109
1225
  columnViewStatus: true // XViewStatus.ReadWrite
1110
1226
  };
@@ -24,3 +24,4 @@ export interface XLocaleOptions {
24
24
  }
25
25
  export declare function xAddLocale(locale: string, xOptions: XLocaleOptions): void;
26
26
  export declare function xLocaleOption(xOptionKey: string, options?: any[string]): any;
27
+ export declare function prLocaleOption(key: string): any;
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.xLocaleOption = exports.xAddLocale = void 0;
29
+ exports.prLocaleOption = exports.xLocaleOption = exports.xAddLocale = void 0;
30
30
  var api_1 = __importStar(require("primereact/api"));
31
31
  // using json-loader module we import x-en.json file into variable xEnJsonObject
32
32
  var x_en_json_1 = __importDefault(require("./locale/x-en.json"));
@@ -55,5 +55,11 @@ function xLocaleOption(xOptionKey, options) {
55
55
  }
56
56
  }
57
57
  exports.xLocaleOption = xLocaleOption;
58
+ // localeOption of primereact without locale param (helper)
59
+ function prLocaleOption(key) {
60
+ var _locale = api_1.default.locale || 'en';
61
+ return (0, api_1.localeOption)(key, _locale);
62
+ }
63
+ exports.prLocaleOption = prLocaleOption;
58
64
  // add en locale into PrimeReact locale (global variable "locales" declared in file Locale.js)
59
65
  xAddLocale('en', x_en_json_1.default.en);
@@ -16,6 +16,7 @@
16
16
  "save": "Save",
17
17
  "cancel": "Cancel",
18
18
  "formRemoveRowConfirm": "Are you sure to remove the row?",
19
+ "xAutoComplete": "Autocomplete",
19
20
  "expRowCount": "Row count",
20
21
  "expExportType": "Export type",
21
22
  "expCreateHeaderLine": "Create header line",
@@ -1,5 +1,5 @@
1
- import { DataTableFilterMeta, DataTableSortMeta } from "primereact/datatable";
2
- import { XCustomFilterItem, XFullTextSearch } from "./FindParam";
1
+ import { DataTableSortMeta } from "primereact/datatable";
2
+ import { XCustomFilterItem, XDataTableFilterMeta, XFullTextSearch } from "./FindParam";
3
3
  export declare enum ExportType {
4
4
  Excel = "excel",
5
5
  Csv = "csv",
@@ -19,7 +19,7 @@ export interface ExportJsonParam {
19
19
  queryParam: LazyDataTableQueryParam;
20
20
  }
21
21
  export interface LazyDataTableQueryParam {
22
- filters: DataTableFilterMeta;
22
+ filters: XDataTableFilterMeta;
23
23
  fullTextSearch?: XFullTextSearch;
24
24
  customFilterItems?: XCustomFilterItem[];
25
25
  multiSortMeta?: DataTableSortMeta[];
@@ -1,4 +1,4 @@
1
- import { DataTableFilterMeta, DataTableSortMeta } from "primereact/datatable";
1
+ import { DataTableFilterMetaData, DataTableOperatorFilterMetaData, DataTableSortMeta } from "primereact/datatable";
2
2
  export declare enum ResultType {
3
3
  OnlyRowCount = 0,
4
4
  OnlyPagedRows = 1,
@@ -13,6 +13,18 @@ export interface XCustomFilterItem {
13
13
  params: XParams;
14
14
  }
15
15
  export type XCustomFilter = XCustomFilterItem | XCustomFilterItem[];
16
+ export declare enum XFilterMatchMode {
17
+ X_AUTO_COMPLETE = "xAutoComplete"
18
+ }
19
+ export interface XDataTableFilterMetaData extends DataTableFilterMetaData {
20
+ customFilterItems?: XCustomFilterItem[];
21
+ }
22
+ export interface XDataTableFilterMeta {
23
+ /**
24
+ * Extra options.
25
+ */
26
+ [key: string]: XDataTableFilterMetaData | DataTableOperatorFilterMetaData;
27
+ }
16
28
  export interface XFullTextSearch {
17
29
  fields?: string[];
18
30
  value: string;
@@ -33,7 +45,7 @@ export interface FindParam {
33
45
  resultType: ResultType;
34
46
  first?: number;
35
47
  rows?: number;
36
- filters?: DataTableFilterMeta;
48
+ filters?: XDataTableFilterMeta;
37
49
  fullTextSearch?: XFullTextSearch;
38
50
  customFilterItems?: XCustomFilterItem[];
39
51
  multiSortMeta?: DataTableSortMeta[];
@@ -1,20 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.XAggregateFunction = exports.ResultType = void 0;
4
- // TODO - replaced with DataTableFilterMetaData
5
- // export interface FilterValue {
6
- // value : string;
7
- // matchMode : 'startsWith' | 'equals'; // matchMode ma konstanty napr. startsWith
8
- // }
9
- // TODO - replaced with DataTableFilterMeta
10
- // export interface Filters {
11
- // [field: string]: FilterValue; // specialny typ pre object (dictionary) ktory ma dynamicky pocet propertiesov
12
- // }
13
- // TODO - replace with DataTableSortMeta
14
- // export interface SortMeta {
15
- // field : string;
16
- // order : 1 | -1; // hodnoty 1 alebo -1
17
- // }
3
+ exports.XAggregateFunction = exports.XFilterMatchMode = exports.ResultType = void 0;
18
4
  var ResultType;
19
5
  (function (ResultType) {
20
6
  ResultType[ResultType["OnlyRowCount"] = 0] = "OnlyRowCount";
@@ -22,6 +8,11 @@ var ResultType;
22
8
  ResultType[ResultType["RowCountAndPagedRows"] = 2] = "RowCountAndPagedRows";
23
9
  ResultType[ResultType["AllRows"] = 3] = "AllRows";
24
10
  })(ResultType = exports.ResultType || (exports.ResultType = {}));
11
+ // additional match modes (extension to primereact enum FilterMatchMode)
12
+ var XFilterMatchMode;
13
+ (function (XFilterMatchMode) {
14
+ XFilterMatchMode["X_AUTO_COMPLETE"] = "xAutoComplete";
15
+ })(XFilterMatchMode = exports.XFilterMatchMode || (exports.XFilterMatchMode = {}));
25
16
  var XAggregateFunction;
26
17
  (function (XAggregateFunction) {
27
18
  XAggregateFunction["Min"] = "MIN";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michalrakus/x-react-web-lib",
3
- "version": "1.31.3",
3
+ "version": "1.32.0",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "clean": "rimraf lib",