@michalrakus/x-react-web-lib 1.32.11 → 1.33.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.
@@ -53,6 +53,7 @@ export declare class XAutoCompleteBase extends Component<XAutoCompleteBaseProps>
53
53
  scrollHeight: string;
54
54
  };
55
55
  autoCompleteRef: any;
56
+ autoCompleteInputRef: any;
56
57
  state: {
57
58
  inputChanged: boolean;
58
59
  inputValueState: string | undefined;
@@ -83,6 +84,7 @@ export declare class XAutoCompleteBase extends Component<XAutoCompleteBaseProps>
83
84
  onBlur(e: React.FocusEvent<HTMLInputElement>): void;
84
85
  createErrorMessage(): string;
85
86
  setFocusToInput(): void;
87
+ removeFocusFromInput(): void;
86
88
  setObjectValue(object: any, objectChange: OperationType): void;
87
89
  formDialogOnSaveOrCancel(object: any | null, objectChange: OperationType): void;
88
90
  formDialogOnHide(): void;
@@ -135,6 +135,7 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
135
135
  function XAutoCompleteBase(props) {
136
136
  var _this = _super.call(this, props) || this;
137
137
  _this.autoCompleteRef = react_1.default.createRef();
138
+ _this.autoCompleteInputRef = react_1.default.createRef();
138
139
  _this.state = {
139
140
  inputChanged: false,
140
141
  inputValueState: undefined,
@@ -368,11 +369,19 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
368
369
  }
369
370
  };
370
371
  XAutoCompleteBase.prototype.onSelect = function (e) {
372
+ var _this = this;
371
373
  // nevolame this.setObjectValue ak uz bol zavolany z onBlur
372
374
  if (!this.wasOnChangeCalled) {
373
375
  // nedovolime vybrat specialny zaznam ...
374
376
  if (!XAutoCompleteBase.isMoreSuggestions(e.value)) {
375
377
  this.setObjectValue(e.value, XUtils_1.OperationType.None);
378
+ // ak sme na mobile, nechceme aby sa otvorila klavesnica mobilu, preto zavolame removeFocus
379
+ // pouzivame setTimeout, priame volanie nefungovalo
380
+ if (XUtils_1.XUtils.isMobile()) {
381
+ setTimeout(function () {
382
+ _this.removeFocusFromInput();
383
+ }, 0); // Delaying blur to allow PrimeReact to finish its focus logic
384
+ }
376
385
  }
377
386
  }
378
387
  };
@@ -454,7 +463,11 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
454
463
  }
455
464
  */
456
465
  XAutoCompleteBase.prototype.setFocusToInput = function () {
457
- this.autoCompleteRef.current.focus();
466
+ //this.autoCompleteRef.current.focus(); bolo toto kedysi
467
+ this.autoCompleteInputRef.current.focus();
468
+ };
469
+ XAutoCompleteBase.prototype.removeFocusFromInput = function () {
470
+ this.autoCompleteInputRef.current.blur();
458
471
  };
459
472
  XAutoCompleteBase.prototype.setObjectValue = function (object, objectChange) {
460
473
  this.setState({ inputChanged: false, notValid: false });
@@ -727,7 +740,7 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
727
740
  // Dialog pre konkretny form:
728
741
  // <DobrovolnikForm id={this.formDialogObjectId} object={this.formDialogInitValuesForInsert} onSaveOrCancel={this.formDialogOnSaveOrCancel}/>
729
742
  // formgroup-inline lepi SplitButton na autocomplete a zarovna jeho vysku
730
- return (react_1.default.createElement.apply(react_1.default, __spreadArray(__spreadArray(["div", { className: "x-auto-complete-base", style: { width: this.props.width, maxWidth: this.props.maxWidth } }, react_1.default.createElement(autocomplete_1.AutoComplete, __assign({ value: inputValue, suggestions: this.state.filteredSuggestions, completeMethod: this.completeMethod, itemTemplate: this.itemTemplate, onChange: this.onChange, onSelect: this.onSelect, onBlur: this.onBlur, minLength: this.props.minLength, scrollHeight: this.props.scrollHeight, ref: this.autoCompleteRef, readOnly: readOnly, disabled: readOnly }, XUtils_1.XUtils.createTooltipOrErrorProps(error), { inputClassName: this.props.inputClassName, showEmptyMessage: true }))], __read(buttons), false), [this.props.valueForm != undefined ?
743
+ return (react_1.default.createElement.apply(react_1.default, __spreadArray(__spreadArray(["div", { className: "x-auto-complete-base", style: { width: this.props.width, maxWidth: this.props.maxWidth } }, react_1.default.createElement(autocomplete_1.AutoComplete, __assign({ value: inputValue, suggestions: this.state.filteredSuggestions, completeMethod: this.completeMethod, itemTemplate: this.itemTemplate, onChange: this.onChange, onSelect: this.onSelect, onBlur: this.onBlur, minLength: this.props.minLength, scrollHeight: this.props.scrollHeight, ref: this.autoCompleteRef, inputRef: this.autoCompleteInputRef, readOnly: readOnly, disabled: readOnly }, XUtils_1.XUtils.createTooltipOrErrorProps(error), { inputClassName: this.props.inputClassName, showEmptyMessage: true }))], __read(buttons), false), [this.props.valueForm != undefined ?
731
744
  react_1.default.createElement(dialog_1.Dialog, { key: "dialog-form", className: "x-dialog-without-header", visible: this.state.formDialogOpened, onHide: this.formDialogOnHide }, react_1.default.cloneElement(this.props.valueForm, {
732
745
  id: this.formDialogObjectId, initValues: this.formDialogInitValuesForInsert, onSaveOrCancel: this.formDialogOnSaveOrCancel
733
746
  } /*, this.props.valueForm.children*/))
@@ -11,6 +11,7 @@ import { XFormComponentDT } from "./XFormComponentDT";
11
11
  import { XErrorMap } from "./XErrors";
12
12
  import { IconType } from "primereact/utils";
13
13
  import { ButtonProps } from "primereact/button";
14
+ import { XSuggestionsLoadProp } from "./XAutoCompleteBase";
14
15
  export interface XRowTechData {
15
16
  xFormComponentDTList: Array<XFormComponentDT<any>>;
16
17
  errorMap: XErrorMap;
@@ -113,14 +114,18 @@ export interface XFormDropdownColumnProps extends XFormColumnBaseProps {
113
114
  }
114
115
  export interface XFormAutoCompleteColumnProps extends XFormColumnBaseProps {
115
116
  assocField: string;
116
- displayField: string;
117
+ displayField: string | string[];
118
+ itemTemplate?: (suggestion: any, index: number, createStringValue: boolean, defaultValue: (suggestion: any) => string) => React.ReactNode;
117
119
  searchBrowse?: JSX.Element;
118
120
  assocForm?: JSX.Element;
119
121
  addRowEnabled: boolean;
120
122
  filter?: XTableFieldFilterProp;
121
123
  sortField?: string | DataTableSortMeta[];
122
124
  fields?: string[];
125
+ scrollHeight?: string;
123
126
  suggestions?: any[];
127
+ suggestionsLoad?: XSuggestionsLoadProp;
128
+ lazyLoadMaxRows?: number;
124
129
  }
125
130
  export interface XFormSearchButtonColumnProps extends XFormColumnBaseProps {
126
131
  assocField: string;
@@ -145,7 +145,10 @@ var XFormDataTable2 = /** @class */ (function (_super) {
145
145
  }
146
146
  else if (columnProps.type === "autoComplete") {
147
147
  var columnPropsAutoComplete = columnProps;
148
- return columnPropsAutoComplete.assocField + '.' + columnPropsAutoComplete.displayField;
148
+ // for simplicity we use here the first column (is used for filtering/sorting)
149
+ // TODO - all columns add in constructor (through method props.form.addField(...))
150
+ var displayField = Array.isArray(columnPropsAutoComplete.displayField) ? columnPropsAutoComplete.displayField[0] : columnPropsAutoComplete.displayField;
151
+ return columnPropsAutoComplete.assocField + '.' + displayField;
149
152
  }
150
153
  else if (columnProps.type === "searchButton") {
151
154
  var columnPropsSearchButton = columnProps;
@@ -404,7 +407,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
404
407
  }
405
408
  else if (columnProps.type === "autoComplete") {
406
409
  var columnPropsAutoComplete = columnProps;
407
- body = react_1.default.createElement(XAutoCompleteDT_1.XAutoCompleteDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsAutoComplete.assocField, displayField: columnPropsAutoComplete.displayField, searchBrowse: columnPropsAutoComplete.searchBrowse, assocForm: columnPropsAutoComplete.assocForm, addRowEnabled: columnPropsAutoComplete.addRowEnabled, filter: columnPropsAutoComplete.filter, sortField: columnPropsAutoComplete.sortField, fields: columnPropsAutoComplete.fields, suggestions: columnPropsAutoComplete.suggestions, rowData: rowData, readOnly: readOnly });
410
+ body = react_1.default.createElement(XAutoCompleteDT_1.XAutoCompleteDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsAutoComplete.assocField, displayField: columnPropsAutoComplete.displayField, itemTemplate: columnPropsAutoComplete.itemTemplate, searchBrowse: columnPropsAutoComplete.searchBrowse, assocForm: columnPropsAutoComplete.assocForm, addRowEnabled: columnPropsAutoComplete.addRowEnabled, filter: columnPropsAutoComplete.filter, sortField: columnPropsAutoComplete.sortField, fields: columnPropsAutoComplete.fields, scrollHeight: columnPropsAutoComplete.scrollHeight, suggestions: columnPropsAutoComplete.suggestions, suggestionsLoad: columnPropsAutoComplete.suggestionsLoad, lazyLoadMaxRows: columnPropsAutoComplete.lazyLoadMaxRows, rowData: rowData, readOnly: readOnly });
408
411
  }
409
412
  else if (columnProps.type === "searchButton") {
410
413
  var columnPropsSearchButton = columnProps;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michalrakus/x-react-web-lib",
3
- "version": "1.32.11",
3
+ "version": "1.33.0",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "clean": "rimraf lib",