@michalrakus/x-react-web-lib 1.19.0 → 1.20.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.
Files changed (49) hide show
  1. package/XEditor.d.ts +3 -0
  2. package/XEditor.js +5 -0
  3. package/XEditorBase.d.ts +3 -0
  4. package/XEditorBase.js +5 -0
  5. package/XExportRowsDialog.d.ts +1 -1
  6. package/XExportRowsDialog.js +1 -1
  7. package/XHtmlRenderer.d.ts +3 -0
  8. package/XHtmlRenderer.js +5 -0
  9. package/XLazyDataTable.d.ts +1 -1
  10. package/XLazyDataTable.js +1 -1
  11. package/XMultilineRenderer.d.ts +3 -0
  12. package/XMultilineRenderer.js +5 -0
  13. package/gulpfile.js +7 -2
  14. package/lib/administration/XBrowseMetaBrowse.d.ts +1 -1
  15. package/lib/administration/XBrowseMetaBrowse.js +1 -1
  16. package/lib/administration/XUserBrowse.d.ts +1 -1
  17. package/lib/administration/XUserBrowse.js +1 -1
  18. package/lib/components/XAutoComplete.d.ts +2 -0
  19. package/lib/components/XAutoComplete.js +1 -1
  20. package/lib/components/XAutoCompleteBase.d.ts +5 -1
  21. package/lib/components/XAutoCompleteBase.js +34 -8
  22. package/lib/components/XAutoCompleteDT.d.ts +4 -2
  23. package/lib/components/XAutoCompleteDT.js +1 -1
  24. package/lib/components/XEditBrowse.js +1 -1
  25. package/lib/components/XEditor.d.ts +15 -0
  26. package/lib/components/XEditor.js +64 -0
  27. package/lib/components/XEditorBase.d.ts +9 -0
  28. package/lib/components/XEditorBase.js +91 -0
  29. package/lib/components/XFormBase.d.ts +1 -0
  30. package/lib/components/XFormBase.js +19 -4
  31. package/lib/components/XInputTextareaBase.js +3 -4
  32. package/lib/components/{XExportRowsDialog.d.ts → XLazyDataTable/XExportRowsDialog.d.ts} +1 -1
  33. package/lib/components/{XExportRowsDialog.js → XLazyDataTable/XExportRowsDialog.js} +5 -5
  34. package/lib/components/XLazyDataTable/XHtmlRenderer.d.ts +7 -0
  35. package/lib/components/XLazyDataTable/XHtmlRenderer.js +78 -0
  36. package/lib/components/{XLazyDataTable.d.ts → XLazyDataTable/XLazyDataTable.d.ts} +16 -6
  37. package/lib/components/{XLazyDataTable.js → XLazyDataTable/XLazyDataTable.js} +45 -32
  38. package/lib/components/XLazyDataTable/XMultilineRenderer.d.ts +8 -0
  39. package/lib/components/XLazyDataTable/XMultilineRenderer.js +80 -0
  40. package/lib/components/XLazyDataTable/XMultilineSwitch.d.ts +7 -0
  41. package/lib/components/XLazyDataTable/XMultilineSwitch.js +20 -0
  42. package/lib/components/XUtilsMetadata.d.ts +1 -1
  43. package/lib/serverApi/XUtilsCommon.d.ts +1 -0
  44. package/lib/serverApi/XUtilsCommon.js +26 -1
  45. package/lib/serverApi/XUtilsMetadataCommon.d.ts +1 -0
  46. package/lib/serverApi/XUtilsMetadataCommon.js +16 -0
  47. package/lib/serverApi/x-lib-api.d.ts +6 -0
  48. package/lib/serverApi/x-lib-api.js +3 -0
  49. package/package.json +2 -1
package/XEditor.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ // generated by gulp
2
+
3
+ export * from './lib/components/XEditor';
package/XEditor.js ADDED
@@ -0,0 +1,5 @@
1
+ // generated by gulp
2
+
3
+ 'use strict';
4
+
5
+ module.exports = require('./lib/components/XEditor.js');
@@ -0,0 +1,3 @@
1
+ // generated by gulp
2
+
3
+ export * from './lib/components/XEditorBase';
package/XEditorBase.js ADDED
@@ -0,0 +1,5 @@
1
+ // generated by gulp
2
+
3
+ 'use strict';
4
+
5
+ module.exports = require('./lib/components/XEditorBase.js');
@@ -1,3 +1,3 @@
1
1
  // generated by gulp
2
2
 
3
- export * from './lib/components/XExportRowsDialog';
3
+ export * from './lib/components/XLazyDataTable/XExportRowsDialog';
@@ -2,4 +2,4 @@
2
2
 
3
3
  'use strict';
4
4
 
5
- module.exports = require('./lib/components/XExportRowsDialog.js');
5
+ module.exports = require('./lib/components/XLazyDataTable/XExportRowsDialog.js');
@@ -0,0 +1,3 @@
1
+ // generated by gulp
2
+
3
+ export * from './lib/components/XLazyDataTable/XHtmlRenderer';
@@ -0,0 +1,5 @@
1
+ // generated by gulp
2
+
3
+ 'use strict';
4
+
5
+ module.exports = require('./lib/components/XLazyDataTable/XHtmlRenderer.js');
@@ -1,3 +1,3 @@
1
1
  // generated by gulp
2
2
 
3
- export * from './lib/components/XLazyDataTable';
3
+ export * from './lib/components/XLazyDataTable/XLazyDataTable';
package/XLazyDataTable.js CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  'use strict';
4
4
 
5
- module.exports = require('./lib/components/XLazyDataTable.js');
5
+ module.exports = require('./lib/components/XLazyDataTable/XLazyDataTable.js');
@@ -0,0 +1,3 @@
1
+ // generated by gulp
2
+
3
+ export * from './lib/components/XLazyDataTable/XMultilineRenderer';
@@ -0,0 +1,5 @@
1
+ // generated by gulp
2
+
3
+ 'use strict';
4
+
5
+ module.exports = require('./lib/components/XLazyDataTable/XMultilineRenderer.js');
package/gulpfile.js CHANGED
@@ -23,6 +23,11 @@ function generateApi(cb) {
23
23
  "./lib/components/XFormRowCol/XFormRow",
24
24
  "./lib/components/XFormRowCol/XFormRowCol",
25
25
 
26
+ "./lib/components/XLazyDataTable/XExportRowsDialog",
27
+ "./lib/components/XLazyDataTable/XHtmlRenderer",
28
+ "./lib/components/XLazyDataTable/XLazyDataTable",
29
+ "./lib/components/XLazyDataTable/XMultilineRenderer",
30
+
26
31
  "./lib/components/useXToken",
27
32
  "./lib/components/XAutoComplete",
28
33
  "./lib/components/XAutoCompleteBase",
@@ -36,9 +41,10 @@ function generateApi(cb) {
36
41
  "./lib/components/XDropdown",
37
42
  "./lib/components/XDropdownForEntity",
38
43
  "./lib/components/XEditBrowse",
44
+ "./lib/components/XEditor",
45
+ "./lib/components/XEditorBase",
39
46
  "./lib/components/XEnvVars",
40
47
  "./lib/components/XErrors",
41
- "./lib/components/XExportRowsDialog",
42
48
  "./lib/components/XFieldChangeEvent",
43
49
  "./lib/components/XFormBase",
44
50
  "./lib/components/XFormBaseModif",
@@ -56,7 +62,6 @@ function generateApi(cb) {
56
62
  "./lib/components/XInputText",
57
63
  "./lib/components/XInputTextarea",
58
64
  "./lib/components/XInputTextareaBase",
59
- "./lib/components/XLazyDataTable",
60
65
  "./lib/components/XLocale",
61
66
  "./lib/components/XLoginDialog",
62
67
  "./lib/components/XLoginForm",
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
- import { XBrowseProps } from "../components/XLazyDataTable";
2
+ import { XBrowseProps } from "../components/XLazyDataTable/XLazyDataTable";
3
3
  export declare const XBrowseMetaBrowse: (props: XBrowseProps) => JSX.Element;
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.XBrowseMetaBrowse = void 0;
7
- var XLazyDataTable_1 = require("../components/XLazyDataTable");
7
+ var XLazyDataTable_1 = require("../components/XLazyDataTable/XLazyDataTable");
8
8
  var react_1 = __importDefault(require("react"));
9
9
  var XBrowseMetaForm_1 = require("./XBrowseMetaForm");
10
10
  var XBrowseMetaBrowse = function (props) {
@@ -1,3 +1,3 @@
1
1
  /// <reference types="react" />
2
- import { XBrowseProps } from "../components/XLazyDataTable";
2
+ import { XBrowseProps } from "../components/XLazyDataTable/XLazyDataTable";
3
3
  export declare const XUserBrowse: (props: XBrowseProps) => JSX.Element;
@@ -40,7 +40,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
40
40
  };
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.XUserBrowse = void 0;
43
- var XLazyDataTable_1 = require("../components/XLazyDataTable");
43
+ var XLazyDataTable_1 = require("../components/XLazyDataTable/XLazyDataTable");
44
44
  var react_1 = __importDefault(require("react"));
45
45
  var XUserForm_1 = require("./XUserForm");
46
46
  var XUtils_1 = require("../components/XUtils");
@@ -9,6 +9,7 @@ import { DataTableSortMeta } from "primereact/datatable";
9
9
  export interface XAutoCompleteProps extends XFormComponentProps<XObject> {
10
10
  assocField: string;
11
11
  displayField: string | string[];
12
+ itemTemplate?: (suggestion: any, index: number, createStringValue: boolean, defaultValue: (suggestion: any) => string) => React.ReactNode;
12
13
  searchBrowse?: JSX.Element;
13
14
  assocForm?: JSX.Element;
14
15
  suggestions?: any[];
@@ -21,6 +22,7 @@ export interface XAutoCompleteProps extends XFormComponentProps<XObject> {
21
22
  fields?: string[];
22
23
  width?: string;
23
24
  scrollHeight?: string;
25
+ inputClassName?: string;
24
26
  inputStyle?: React.CSSProperties;
25
27
  }
26
28
  export declare class XAutoComplete extends XFormComponent<XObject, XAutoCompleteProps> {
@@ -70,7 +70,7 @@ var XAutoComplete = /** @class */ (function (_super) {
70
70
  // div className="col" nam zabezpeci aby XAutoCompleteBase nezaberal celu dlzku grid-u (ma nastaveny width=100% vdaka "formgroup-inline")
71
71
  return (react_1.default.createElement("div", { className: "field grid" },
72
72
  react_1.default.createElement("label", { htmlFor: this.props.assocField, className: "col-fixed", style: this.getLabelStyle() }, this.getLabel()),
73
- react_1.default.createElement(XAutoCompleteBase_1.XAutoCompleteBase, { value: this.getValue(), onChange: this.onChangeAutoCompleteBase, field: this.props.displayField, searchBrowse: this.props.searchBrowse, valueForm: this.props.assocForm, idField: xEntityAssoc.idField, readOnly: this.isReadOnly(), error: this.getError(), onErrorChange: this.onErrorChangeAutoCompleteBase, width: this.props.width, scrollHeight: this.props.scrollHeight, suggestions: this.props.suggestions, suggestionsLoad: this.props.suggestionsLoad, lazyLoadMaxRows: this.props.lazyLoadMaxRows, splitQueryValue: this.props.splitQueryValue, minLength: this.props.minLength, suggestionsQuery: { entity: this.xAssoc.entityName, filter: function () { return _this.getFilterBase(_this.props.filter); }, sortField: this.props.sortField, fields: this.props.fields } })));
73
+ react_1.default.createElement(XAutoCompleteBase_1.XAutoCompleteBase, { value: this.getValue(), onChange: this.onChangeAutoCompleteBase, field: this.props.displayField, itemTemplate: this.props.itemTemplate, searchBrowse: this.props.searchBrowse, valueForm: this.props.assocForm, idField: xEntityAssoc.idField, readOnly: this.isReadOnly(), error: this.getError(), onErrorChange: this.onErrorChangeAutoCompleteBase, width: this.props.width, scrollHeight: this.props.scrollHeight, suggestions: this.props.suggestions, suggestionsLoad: this.props.suggestionsLoad, lazyLoadMaxRows: this.props.lazyLoadMaxRows, splitQueryValue: this.props.splitQueryValue, minLength: this.props.minLength, suggestionsQuery: { entity: this.xAssoc.entityName, filter: function () { return _this.getFilterBase(_this.props.filter); }, sortField: this.props.sortField, fields: this.props.fields }, inputClassName: this.props.inputClassName })));
74
74
  };
75
75
  return XAutoComplete;
76
76
  }(XFormComponent_1.XFormComponent));
@@ -22,6 +22,7 @@ export interface XAutoCompleteBaseProps {
22
22
  suggestionsQuery?: XQuery;
23
23
  lazyLoadMaxRows: number;
24
24
  field: string | string[];
25
+ itemTemplate?: (suggestion: any, index: number, createStringValue: boolean, defaultValue: (suggestion: any) => string) => React.ReactNode;
25
26
  splitQueryValue: boolean;
26
27
  searchBrowse?: JSX.Element;
27
28
  valueForm?: JSX.Element;
@@ -29,6 +30,7 @@ export interface XAutoCompleteBaseProps {
29
30
  minLength?: number;
30
31
  width?: string;
31
32
  scrollHeight?: string;
33
+ inputClassName?: string;
32
34
  readOnly?: boolean;
33
35
  error?: string;
34
36
  onErrorChange: (error: string | undefined) => void;
@@ -85,7 +87,9 @@ export declare class XAutoCompleteBase extends Component<XAutoCompleteBaseProps>
85
87
  onEditAssocValue(): void;
86
88
  computeInputValue(): any;
87
89
  itemTemplate(suggestion: any, index: number): React.ReactNode;
88
- computeDisplayValue(suggestion: any): string;
90
+ itemTemplateString(suggestion: any): string;
91
+ computeItemTemplate(suggestion: any, index: number, createStringValue: boolean): React.ReactNode;
92
+ computeDefaultDisplayValue(suggestion: any): string;
89
93
  static isMoreSuggestions(suggestion: any): boolean;
90
94
  createSearchBrowseParams(): XSearchBrowseParams;
91
95
  render(): JSX.Element;
@@ -150,7 +150,8 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
150
150
  _this.onSelect = _this.onSelect.bind(_this);
151
151
  _this.onBlur = _this.onBlur.bind(_this);
152
152
  _this.itemTemplate = _this.itemTemplate.bind(_this);
153
- _this.computeDisplayValue = _this.computeDisplayValue.bind(_this);
153
+ _this.itemTemplateString = _this.itemTemplateString.bind(_this);
154
+ _this.computeDefaultDisplayValue = _this.computeDefaultDisplayValue.bind(_this);
154
155
  _this.formDialogOnSaveOrCancel = _this.formDialogOnSaveOrCancel.bind(_this);
155
156
  _this.formDialogOnHide = _this.formDialogOnHide.bind(_this);
156
157
  _this.searchDialogOnChoose = _this.searchDialogOnChoose.bind(_this);
@@ -269,7 +270,7 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
269
270
  }
270
271
  filteredSuggestions = suggestions.filter(function (suggestion) {
271
272
  var e_1, _a;
272
- var fieldValue = _this.computeDisplayValue(suggestion);
273
+ var fieldValue = _this.itemTemplateString(suggestion);
273
274
  // specialna null polozka (prazdny objekt) - test dame az za test fieldValue na undefined - koli performance
274
275
  if (fieldValue === undefined && Object.keys(suggestion).length === 0) {
275
276
  return false;
@@ -328,11 +329,12 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
328
329
  findResult = _a.sent();
329
330
  filteredSuggestions = findResult.rowList;
330
331
  // ak sme nesortovali v DB (co je draha operacia) tak zosortujeme teraz
331
- // (computeDisplayValue sa vola duplicitne ale pre tych cca 20 zaznamov je to ok)
332
+ // (itemTemplateString sa vola duplicitne ale pre tych cca 20 zaznamov je to ok)
332
333
  if (this.props.suggestionsQuery.sortField === undefined) {
333
- filteredSuggestions = XUtils_1.XUtils.arraySort(filteredSuggestions, this.computeDisplayValue);
334
+ filteredSuggestions = XUtils_1.XUtils.arraySort(filteredSuggestions, this.itemTemplateString);
334
335
  }
335
336
  // ak mame o 1 zaznam viac ako je lazyLoadMaxRows, zmenime posledny zaznam na ...
337
+ // TODO - lepsie by bolo posledny zaznam vyhodit a popisok ... zobrazit do footer-a (odpadnu problemy z pripadnou selekciou pseudozaznamu ...)
336
338
  if (filteredSuggestions.length > this.props.lazyLoadMaxRows) {
337
339
  filteredSuggestions[filteredSuggestions.length - 1] = XAutoCompleteBase.valueMoreSuggestions; // zatial priamo string
338
340
  }
@@ -577,7 +579,7 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
577
579
  if (!this.state.inputChanged) {
578
580
  // poznamka: ak object === null tak treba do inputu zapisovat prazdny retazec, ak by sme pouzili null, neprejavila by sa zmena v modeli na null
579
581
  var object = this.props.value;
580
- inputValue = (object !== null) ? this.computeDisplayValue(object) : ""; // TODO - je "" ok?
582
+ inputValue = (object !== null) ? this.computeItemTemplate(object, -1, true) : ""; // TODO - je "" ok?
581
583
  }
582
584
  else {
583
585
  inputValue = this.state.inputValueState;
@@ -585,9 +587,33 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
585
587
  return inputValue;
586
588
  };
587
589
  XAutoCompleteBase.prototype.itemTemplate = function (suggestion, index) {
588
- return this.computeDisplayValue(suggestion);
590
+ return this.computeItemTemplate(suggestion, index, false);
589
591
  };
590
- XAutoCompleteBase.prototype.computeDisplayValue = function (suggestion) {
592
+ // pouziva sa na vytvorenie hodnoty do inputu (vyselectovany zaznam) a tiez na pripadne sortovanie a filtrovanie na frontende (ak nepouzivame lazy nacitavanie)
593
+ XAutoCompleteBase.prototype.itemTemplateString = function (suggestion) {
594
+ var itemValue = this.computeItemTemplate(suggestion, -1, true);
595
+ if (typeof itemValue !== "string") {
596
+ throw "XAutoCompleteBase: function of the property itemTemplate created non-string value for suggestion. Please create string value if parameter createStringValue = true.";
597
+ }
598
+ return itemValue;
599
+ };
600
+ XAutoCompleteBase.prototype.computeItemTemplate = function (suggestion, index, createStringValue) {
601
+ var itemTemplate;
602
+ // osetrenie specialnej polozky ... dame sem, nech sa to nemusi inde riesit
603
+ if (XAutoCompleteBase.isMoreSuggestions(suggestion)) {
604
+ itemTemplate = suggestion;
605
+ }
606
+ else {
607
+ if (this.props.itemTemplate) {
608
+ itemTemplate = this.props.itemTemplate(suggestion, index, createStringValue, this.computeDefaultDisplayValue);
609
+ }
610
+ else {
611
+ itemTemplate = this.computeDefaultDisplayValue(suggestion);
612
+ }
613
+ }
614
+ return itemTemplate;
615
+ };
616
+ XAutoCompleteBase.prototype.computeDefaultDisplayValue = function (suggestion) {
591
617
  var e_2, _a;
592
618
  var displayValue = "";
593
619
  if (XAutoCompleteBase.isMoreSuggestions(suggestion)) {
@@ -685,7 +711,7 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
685
711
  // <DobrovolnikForm id={this.formDialogObjectId} object={this.formDialogInitValuesForInsert} onSaveOrCancel={this.formDialogOnSaveOrCancel}/>
686
712
  // formgroup-inline lepi SplitButton na autocomplete a zarovna jeho vysku
687
713
  return (react_1.default.createElement("div", { className: "x-auto-complete-base", style: { width: this.props.width } },
688
- 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.createErrorProps(error))),
714
+ 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.createErrorProps(error), { inputClassName: this.props.inputClassName })),
689
715
  dropdownButton,
690
716
  this.props.valueForm != undefined ?
691
717
  react_1.default.createElement(dialog_1.Dialog, { visible: this.state.formDialogOpened, onHide: this.formDialogOnHide, header: this.formDialogObjectId ? 'Modification' : 'New row' }, react_1.default.cloneElement(this.props.valueForm, {
@@ -1,4 +1,4 @@
1
- /// <reference types="react" />
1
+ import React from "react";
2
2
  import { XFormComponentDT, XFormComponentDTProps } from "./XFormComponentDT";
3
3
  import { XAssoc } from "../serverApi/XEntityMetadata";
4
4
  import { OperationType } from "./XUtils";
@@ -8,7 +8,8 @@ import { XTableFieldFilterProp } from "./XFormDataTable2";
8
8
  import { DataTableSortMeta } from "primereact/datatable";
9
9
  export interface XAutoCompleteDTProps extends XFormComponentDTProps {
10
10
  assocField: string;
11
- displayField: string;
11
+ displayField: string | string[];
12
+ itemTemplate?: (suggestion: any, index: number, createStringValue: boolean, defaultValue: (suggestion: any) => string) => React.ReactNode;
12
13
  searchBrowse?: JSX.Element;
13
14
  assocForm?: JSX.Element;
14
15
  suggestions?: any[];
@@ -20,6 +21,7 @@ export interface XAutoCompleteDTProps extends XFormComponentDTProps {
20
21
  sortField?: string | DataTableSortMeta[];
21
22
  fields?: string[];
22
23
  scrollHeight?: string;
24
+ inputClassName?: string;
23
25
  }
24
26
  export declare class XAutoCompleteDT extends XFormComponentDT<XAutoCompleteDTProps> {
25
27
  protected xAssoc: XAssoc;
@@ -68,7 +68,7 @@ var XAutoCompleteDT = /** @class */ (function (_super) {
68
68
  // TODO - size
69
69
  //const size = this.props.size ?? xDisplayField.length;
70
70
  // div className="col" nam zabezpeci aby XAutoCompleteBase nezaberal celu dlzku grid-u (ma nastaveny width=100% vdaka "formgroup-inline")
71
- return (react_1.default.createElement(XAutoCompleteBase_1.XAutoCompleteBase, { value: this.getValue(), onChange: this.onChangeAutoCompleteBase, field: this.props.displayField, searchBrowse: this.props.searchBrowse, valueForm: this.props.assocForm, idField: xEntityAssoc.idField, readOnly: this.isReadOnly(), error: this.getError(), onErrorChange: this.onErrorChangeAutoCompleteBase, suggestions: this.props.suggestions, suggestionsLoad: this.props.suggestionsLoad, lazyLoadMaxRows: this.props.lazyLoadMaxRows, splitQueryValue: this.props.splitQueryValue, minLength: this.props.minLength, scrollHeight: this.props.scrollHeight, suggestionsQuery: { entity: this.xAssoc.entityName, filter: function () { return _this.getFilterBase(_this.props.filter); }, sortField: this.props.sortField, fields: this.props.fields } }));
71
+ return (react_1.default.createElement(XAutoCompleteBase_1.XAutoCompleteBase, { value: this.getValue(), onChange: this.onChangeAutoCompleteBase, field: this.props.displayField, itemTemplate: this.props.itemTemplate, searchBrowse: this.props.searchBrowse, valueForm: this.props.assocForm, idField: xEntityAssoc.idField, readOnly: this.isReadOnly(), error: this.getError(), onErrorChange: this.onErrorChangeAutoCompleteBase, suggestions: this.props.suggestions, suggestionsLoad: this.props.suggestionsLoad, lazyLoadMaxRows: this.props.lazyLoadMaxRows, splitQueryValue: this.props.splitQueryValue, minLength: this.props.minLength, scrollHeight: this.props.scrollHeight, suggestionsQuery: { entity: this.xAssoc.entityName, filter: function () { return _this.getFilterBase(_this.props.filter); }, sortField: this.props.sortField, fields: this.props.fields }, inputClassName: this.props.inputClassName }));
72
72
  };
73
73
  return XAutoCompleteDT;
74
74
  }(XFormComponentDT_1.XFormComponentDT));
@@ -108,7 +108,7 @@ var XEditColumnDialog_1 = require("./XEditColumnDialog");
108
108
  var _ = __importStar(require("lodash"));
109
109
  var XUtilsMetadata_1 = require("./XUtilsMetadata");
110
110
  var XUtils_1 = require("./XUtils");
111
- var XLazyDataTable_1 = require("./XLazyDataTable");
111
+ var XLazyDataTable_1 = require("./XLazyDataTable/XLazyDataTable");
112
112
  var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
113
113
  // TODO - pouzit extends XEditBrowseBase, ako je tomu pri CarForm?
114
114
  var XEditBrowse = /** @class */ (function (_super) {
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ import { XInput, XInputProps } from "./XInput";
3
+ export interface XEditorProps extends XInputProps<string> {
4
+ labelOnTop: boolean;
5
+ }
6
+ export declare class XEditor extends XInput<string, XEditorProps> {
7
+ static defaultProps: {
8
+ labelOnTop: boolean;
9
+ };
10
+ constructor(props: XEditorProps);
11
+ getValue(): string | null;
12
+ onValueChange(value: string | null): void;
13
+ getLabelStyle(): React.CSSProperties;
14
+ render(): JSX.Element;
15
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __importDefault = (this && this.__importDefault) || function (mod) {
18
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.XEditor = void 0;
22
+ var react_1 = __importDefault(require("react"));
23
+ var XInput_1 = require("./XInput");
24
+ var XUtils_1 = require("./XUtils");
25
+ var XEditorBase_1 = require("./XEditorBase");
26
+ var XEditor = /** @class */ (function (_super) {
27
+ __extends(XEditor, _super);
28
+ function XEditor(props) {
29
+ var _this = _super.call(this, props) || this;
30
+ _this.onValueChange = _this.onValueChange.bind(_this);
31
+ return _this;
32
+ }
33
+ XEditor.prototype.getValue = function () {
34
+ return this.getValueFromObject();
35
+ };
36
+ XEditor.prototype.onValueChange = function (value) {
37
+ this.onValueChangeBase(value, this.props.onChange);
38
+ };
39
+ XEditor.prototype.getLabelStyle = function () {
40
+ var _a;
41
+ return this.props.labelOnTop ? ((_a = this.props.labelStyle) !== null && _a !== void 0 ? _a : {}) : _super.prototype.getLabelStyle.call(this);
42
+ };
43
+ XEditor.prototype.render = function () {
44
+ // TODO - neni to otestovane
45
+ var _a;
46
+ var style = (_a = this.props.inputStyle) !== null && _a !== void 0 ? _a : {};
47
+ // defaultne pridame width:100%
48
+ // ak nemame labelOnTop=true, musime odratat sirku labelu, inac sa label dostane nad input (koli flex-wrap: wrap)
49
+ var widthValue = this.props.labelOnTop ? '100%' : "calc(100% - ".concat(XUtils_1.XUtils.FIELD_LABEL_WIDTH, ")");
50
+ XUtils_1.XUtils.addCssPropIfNotExists(style, { width: widthValue });
51
+ // x-editor-label-on-top - nastavuje orientation: column, aby boli label a XEditorBase pod sebou (robene podla XInputTextarea)
52
+ // XEditorBase renderujeme az ked mame nacitany object, lebo inac sa nam nenastavi spravna velkost (hodnota nie je k dispozicii pri prvom renderingu) (robene podla XInputTextarea)
53
+ return (react_1.default.createElement("div", { className: !this.props.labelOnTop ? 'field grid' : 'field grid x-editor-label-on-top' },
54
+ react_1.default.createElement("label", { htmlFor: this.props.field, className: !this.props.labelOnTop ? 'col-fixed' : undefined, style: this.getLabelStyle() }, this.getLabel()),
55
+ this.props.form.state.object ?
56
+ react_1.default.createElement(XEditorBase_1.XEditorBase, { id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), style: style, error: this.getError() })
57
+ : null));
58
+ };
59
+ XEditor.defaultProps = {
60
+ labelOnTop: false
61
+ };
62
+ return XEditor;
63
+ }(XInput_1.XInput));
64
+ exports.XEditor = XEditor;
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ export declare const XEditorBase: (props: {
3
+ id?: string | undefined;
4
+ value: string | null;
5
+ onChange: (value: string | null) => void;
6
+ readOnly?: boolean | undefined;
7
+ error?: string | undefined;
8
+ style?: React.CSSProperties | undefined;
9
+ }) => JSX.Element;
@@ -0,0 +1,91 @@
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.XEditorBase = void 0;
54
+ var react_1 = __importStar(require("react"));
55
+ var XUtils_1 = require("./XUtils");
56
+ var editor_1 = require("primereact/editor");
57
+ // koli optimalizacii - typovany text si zapisuje do svojej stavovej premennej a onChange zavola az z onBlur
58
+ // pri velkych formularoch je totiz volanie zmeny stavu this.setState({object: this.state.object, errorMap: this.state.errorMap}); pomale
59
+ var XEditorBase = function (props) {
60
+ // true, ak uzivatel typuje hodnotu
61
+ // false, ak bol zavolany onBlur
62
+ var _a = __read((0, react_1.useState)(false), 2), editorValueChanged = _a[0], setEditorValueChanged = _a[1];
63
+ // pouzivane, len ak editorValueChanged === true, je tu zapisana zmenena hodnota v editore
64
+ var _b = __read((0, react_1.useState)(null), 2), editorValue = _b[0], setEditorValue = _b[1];
65
+ var onTextChange = function (e) {
66
+ setEditorValueChanged(true);
67
+ setEditorValue(e.htmlValue);
68
+ };
69
+ var onBlur = function (e) {
70
+ // optimalizacia - onChange volame len ak editorValueChanged === true
71
+ if (editorValueChanged) {
72
+ // TODO - bude vzdy onBlur volany az potom co bude setnuta editorValue? lebo ak nie tak treba hodnotu vytiahnut z "e"
73
+ //const htmlValue: string | null = e.target.??;
74
+ props.onChange(editorValue);
75
+ setEditorValueChanged(false);
76
+ setEditorValue(null); // pre poriadok
77
+ }
78
+ };
79
+ var getValue = function () {
80
+ var htmlValue;
81
+ if (editorValueChanged) {
82
+ htmlValue = editorValue;
83
+ }
84
+ else {
85
+ htmlValue = props.value;
86
+ }
87
+ return htmlValue !== null ? htmlValue : undefined; // value v Editor nechce null, chce undefined
88
+ };
89
+ return (react_1.default.createElement(editor_1.Editor, __assign({ id: props.id, value: getValue(), onTextChange: onTextChange, onBlur: onBlur, readOnly: props.readOnly, style: props.style }, XUtils_1.XUtils.createErrorProps(props.error))));
90
+ };
91
+ exports.XEditorBase = XEditorBase;
@@ -62,6 +62,7 @@ export declare abstract class XFormBase extends Component<XFormProps> {
62
62
  static saveErrorsIntoXRowTechData(row: any, xErrors: XErrors): void;
63
63
  formReadOnly(object: XObject, field: string): boolean;
64
64
  createNewObject(): XObject;
65
+ createNewObjectAsync(): Promise<XObject>;
65
66
  preInitForm(object: XObject, operationType: OperationType.Insert | OperationType.Update): void;
66
67
  validate(object: XObject): Promise<XErrors>;
67
68
  preSave(object: XObject): void;
@@ -180,17 +180,23 @@ var XFormBase = /** @class */ (function (_super) {
180
180
  }
181
181
  finally { if (e_1) throw e_1.error; }
182
182
  }
183
- return [3 /*break*/, 3];
183
+ return [3 /*break*/, 5];
184
184
  case 2:
185
185
  // add new row
186
186
  object = this.createNewObject();
187
+ if (!(Object.keys(object).length === 0)) return [3 /*break*/, 4];
188
+ return [4 /*yield*/, this.createNewObjectAsync()];
189
+ case 3:
190
+ object = _d.sent();
191
+ _d.label = 4;
192
+ case 4:
187
193
  // pridame pripadne "init values", ktore pridu cez prop object (pouziva sa napr. pri insertovani cez XAutoComplete na predplnenie hodnoty)
188
194
  if (this.props.initValues !== undefined) {
189
- object = __assign(__assign({}, object), this.props.initValues); // values from this.props.object will override values from object (if key is the same)
195
+ object = __assign(__assign({}, object), this.props.initValues); // values from this.props.initValues will override values from object (if key is the same)
190
196
  }
191
197
  operationType = XUtils_1.OperationType.Insert;
192
- _d.label = 3;
193
- case 3:
198
+ _d.label = 5;
199
+ case 5:
194
200
  this.preInitForm(object, operationType);
195
201
  //console.log("volany XFormBase.componentDidMount() - ideme setnut object");
196
202
  this.setState({ object: object } /*, () => console.log("volany XFormBase.componentDidMount() - callback setState")*/);
@@ -618,6 +624,15 @@ var XFormBase = /** @class */ (function (_super) {
618
624
  XFormBase.prototype.createNewObject = function () {
619
625
  return {};
620
626
  };
627
+ // this method can be overriden in subclass if needed (to set some default values for insert)
628
+ // if createNewObject() returns empty object {}, then createNewObjectAsync() is called
629
+ XFormBase.prototype.createNewObjectAsync = function () {
630
+ return __awaiter(this, void 0, void 0, function () {
631
+ return __generator(this, function (_a) {
632
+ return [2 /*return*/, {}];
633
+ });
634
+ });
635
+ };
621
636
  // this method can be overriden in subclass if needed (to modify/save object after read from DB and before set into the form)
622
637
  XFormBase.prototype.preInitForm = function (object, operationType) {
623
638
  };
@@ -58,18 +58,17 @@ var inputtextarea_1 = require("primereact/inputtextarea");
58
58
  // koli optimalizacii - typovany text si zapisuje do svojej stavovej premennej a onChange zavola az z onBlur
59
59
  // pri velkych formularoch je totiz volanie zmeny stavu this.setState({object: this.state.object, errorMap: this.state.errorMap}); pomale
60
60
  var XInputTextareaBase = function (props) {
61
- // true, ak uzivatel typuje hodnotu ale hodnota sa este neda skonvertovat na korektny interval (este nevieme vytvorit IPostgresInterval)
62
- // false, ak uz mame v inpute korektnu hodnotu - vtedy zavolame props.onChange a posleme mu IPostgresInterval
61
+ // true, ak uzivatel typuje hodnotu
62
+ // false, ak bol zavolany onBlur
63
63
  var _a = __read((0, react_1.useState)(false), 2), inputChanged = _a[0], setInputChanged = _a[1];
64
64
  // pouzivane, len ak inputChanged === true, je tu zapisana zmenena hodnota v inpute
65
65
  var _b = __read((0, react_1.useState)(undefined), 2), inputValueState = _b[0], setInputValueState = _b[1];
66
66
  var onChange = function (e) {
67
- // conversion to IPostgresInterval will be done in onBlur
68
67
  setInputChanged(true);
69
68
  setInputValueState(e.target.value);
70
69
  };
71
70
  var onBlur = function (e) {
72
- // optimalizacia - testujeme len ak inputChanged === true
71
+ // optimalizacia - onChange volame len ak inputChanged === true
73
72
  if (inputChanged) {
74
73
  var value = (0, XUtilsConversions_1.stringFromUI)(e.target.value);
75
74
  props.onChange(value);
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { ExportType, LazyDataTableQueryParam } from "../serverApi/ExportImportParam";
2
+ import { ExportType, LazyDataTableQueryParam } from "../../serverApi/ExportImportParam";
3
3
  export interface XExportParams {
4
4
  path: string;
5
5
  queryParam: LazyDataTableQueryParam | any;
@@ -76,16 +76,16 @@ var __read = (this && this.__read) || function (o, n) {
76
76
  };
77
77
  Object.defineProperty(exports, "__esModule", { value: true });
78
78
  exports.XExportRowsDialog = void 0;
79
- var ExportImportParam_1 = require("../serverApi/ExportImportParam");
79
+ var ExportImportParam_1 = require("../../serverApi/ExportImportParam");
80
80
  var react_1 = __importStar(require("react"));
81
81
  var dialog_1 = require("primereact/dialog");
82
82
  var inputtext_1 = require("primereact/inputtext");
83
83
  var dropdown_1 = require("primereact/dropdown");
84
84
  var checkbox_1 = require("primereact/checkbox");
85
- var XButton_1 = require("./XButton");
86
- var XUtils_1 = require("./XUtils");
87
- var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
88
- var XLocale_1 = require("./XLocale");
85
+ var XButton_1 = require("../XButton");
86
+ var XUtils_1 = require("../XUtils");
87
+ var XUtilsConversions_1 = require("../../serverApi/XUtilsConversions");
88
+ var XLocale_1 = require("../XLocale");
89
89
  var XExportRowsDialog = function (props) {
90
90
  var _a, _b;
91
91
  var _c = __read((0, react_1.useState)(ExportImportParam_1.ExportType.Csv), 2), exportType = _c[0], setExportType = _c[1];
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { XMultilineRenderType } from "./XLazyDataTable";
3
+ export declare const XHtmlRenderer: (props: {
4
+ htmlValue: string | null;
5
+ renderType: XMultilineRenderType;
6
+ fewLinesCount: number;
7
+ }) => JSX.Element;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __read = (this && this.__read) || function (o, n) {
26
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
27
+ if (!m) return o;
28
+ var i = m.call(o), r, ar = [], e;
29
+ try {
30
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
31
+ }
32
+ catch (error) { e = { error: error }; }
33
+ finally {
34
+ try {
35
+ if (r && !r.done && (m = i["return"])) m.call(i);
36
+ }
37
+ finally { if (e) throw e.error; }
38
+ }
39
+ return ar;
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.XHtmlRenderer = void 0;
43
+ var react_1 = __importStar(require("react"));
44
+ var button_1 = require("primereact/button");
45
+ var XHtmlRenderer = function (props) {
46
+ var _a;
47
+ // used only for props.renderType === "fewLines"
48
+ var _b = __read((0, react_1.useState)(false), 2), showAllLines = _b[0], setShowAllLines = _b[1];
49
+ var className;
50
+ var htmlValue = (_a = props.htmlValue) !== null && _a !== void 0 ? _a : "";
51
+ var buttonExpandCollapse = null;
52
+ if (props.renderType === "singleLine") {
53
+ className = "x-html-content-single-line";
54
+ }
55
+ else {
56
+ // "fewLines" or "allLines"
57
+ className = "x-html-content";
58
+ if (props.renderType === "fewLines" && htmlValue) {
59
+ var parser = new DOMParser();
60
+ var xmlDoc = parser.parseFromString(htmlValue, "text/html");
61
+ var pElemList = xmlDoc.getElementsByTagName("p");
62
+ if (pElemList.length > props.fewLinesCount) {
63
+ if (!showAllLines) {
64
+ htmlValue = "";
65
+ for (var i = 0; i < props.fewLinesCount; i++) {
66
+ htmlValue += pElemList[i].outerHTML; // naspet do <p>line 1</p>
67
+ }
68
+ }
69
+ // pridame button na koniec posledneho riadku
70
+ buttonExpandCollapse = react_1.default.createElement(button_1.Button, { icon: showAllLines ? "pi pi-angle-double-left" : "pi pi-angle-double-right", onClick: function () { return setShowAllLines(!showAllLines); }, className: "x-button-multiline-expand-collapse", style: { marginLeft: '0rem' } });
71
+ }
72
+ }
73
+ }
74
+ return (react_1.default.createElement("div", { className: "p-editor-content ql-snow" },
75
+ react_1.default.createElement("div", { className: "ql-editor " + className, dangerouslySetInnerHTML: { __html: htmlValue } }),
76
+ buttonExpandCollapse));
77
+ };
78
+ exports.XHtmlRenderer = XHtmlRenderer;
@@ -1,13 +1,14 @@
1
1
  import React, { ReactChild } from 'react';
2
2
  import { DataTableFilterMeta, DataTableFilterMetaData, DataTableOperatorFilterMetaData, DataTableSortMeta } from 'primereact/datatable';
3
3
  import { ColumnBodyOptions, ColumnFilterElementTemplateOptions } from 'primereact/column';
4
- import { XViewStatusOrBoolean } from "./XUtils";
5
- import { XSearchBrowseParams } from "./XSearchBrowseParams";
6
- import { XAggregateType, XCustomFilter } from "../serverApi/FindParam";
7
- import { XOnSaveOrCancelProp } from "./XFormBase";
4
+ import { XViewStatusOrBoolean } from "../XUtils";
5
+ import { XSearchBrowseParams } from "../XSearchBrowseParams";
6
+ import { XAggregateType, XCustomFilter } from "../../serverApi/FindParam";
7
+ import { XOnSaveOrCancelProp } from "../XFormBase";
8
8
  import { IconType } from "primereact/utils";
9
9
  import { ButtonProps } from "primereact/button";
10
10
  export type XBetweenFilterProp = "row" | "column" | undefined;
11
+ export type XMultilineRenderType = "singleLine" | "fewLines" | "allLines";
11
12
  export interface XAppButtonForRow {
12
13
  key?: string;
13
14
  icon?: IconType<ButtonProps>;
@@ -54,7 +55,9 @@ export interface XLazyDataTableProps {
54
55
  sortField?: string | DataTableSortMeta[];
55
56
  fullTextSearch: boolean | string[];
56
57
  fields?: string[];
57
- multiLineSwitch: boolean;
58
+ multilineSwitch: boolean;
59
+ multilineSwitchInitValue: XMultilineRenderType;
60
+ multilineSwitchFewLinesCount: number;
58
61
  searchBrowseParams?: XSearchBrowseParams;
59
62
  width?: string;
60
63
  rowClassName?: (data: any) => object | string | undefined;
@@ -71,7 +74,9 @@ export declare const XLazyDataTable: {
71
74
  rows: number;
72
75
  filterDisplay: string;
73
76
  fullTextSearch: boolean;
74
- multiLineSwitch: boolean;
77
+ multilineSwitch: boolean;
78
+ multilineSwitchInitValue: string;
79
+ multilineSwitchFewLinesCount: number;
75
80
  scrollable: boolean;
76
81
  scrollWidth: string;
77
82
  scrollHeight: string;
@@ -86,6 +91,7 @@ export type XFilterElementParams = {
86
91
  options: ColumnFilterElementTemplateOptions;
87
92
  };
88
93
  export type XFilterElementProp = (params: XFilterElementParams) => React.ReactNode;
94
+ export type XContentType = "multiline" | "html" | undefined;
89
95
  export interface XLazyColumnProps {
90
96
  field: string;
91
97
  header?: any;
@@ -96,11 +102,15 @@ export interface XLazyColumnProps {
96
102
  showFilterMenu?: boolean;
97
103
  betweenFilter?: XBetweenFilterProp | "noBetween";
98
104
  width?: string;
105
+ contentType?: XContentType;
99
106
  aggregateType?: XAggregateType;
100
107
  columnViewStatus: XViewStatusOrBoolean;
101
108
  filterElement?: XFilterElementProp;
102
109
  body?: React.ReactNode | ((data: any, options: ColumnBodyOptions) => React.ReactNode);
103
110
  }
111
+ export type XLazyColumnType = {
112
+ props: XLazyColumnProps;
113
+ };
104
114
  export declare const XLazyColumn: {
105
115
  (props: XLazyColumnProps): null;
106
116
  defaultProps: {
@@ -110,23 +110,26 @@ exports.XLazyColumn = exports.XLazyDataTable = 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");
113
- var XButton_1 = require("./XButton");
114
- var XUtils_1 = require("./XUtils");
115
- var XUtilsMetadata_1 = require("./XUtilsMetadata");
116
- var XDropdownDTFilter_1 = require("./XDropdownDTFilter");
117
- var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
118
- var FindParam_1 = require("../serverApi/FindParam");
119
- var XButtonIconSmall_1 = require("./XButtonIconSmall");
113
+ var XButton_1 = require("../XButton");
114
+ var XUtils_1 = require("../XUtils");
115
+ var XUtilsMetadata_1 = require("../XUtilsMetadata");
116
+ var XDropdownDTFilter_1 = require("../XDropdownDTFilter");
117
+ var XUtilsConversions_1 = require("../../serverApi/XUtilsConversions");
118
+ var FindParam_1 = require("../../serverApi/FindParam");
119
+ var XButtonIconSmall_1 = require("../XButtonIconSmall");
120
120
  var tristatecheckbox_1 = require("primereact/tristatecheckbox");
121
- var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
121
+ var XUtilsCommon_1 = require("../../serverApi/XUtilsCommon");
122
122
  var XExportRowsDialog_1 = require("./XExportRowsDialog");
123
123
  var api_1 = require("primereact/api");
124
- var XCalendar_1 = require("./XCalendar");
125
- var XInputDecimalBase_1 = require("./XInputDecimalBase");
126
- var XLocale_1 = require("./XLocale");
127
- var XFtsInput_1 = require("./XFtsInput");
128
- var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
129
- var inputswitch_1 = require("primereact/inputswitch");
124
+ var XCalendar_1 = require("../XCalendar");
125
+ var XInputDecimalBase_1 = require("../XInputDecimalBase");
126
+ var XLocale_1 = require("../XLocale");
127
+ var XFtsInput_1 = require("../XFtsInput");
128
+ var XUtilsMetadataCommon_1 = require("../../serverApi/XUtilsMetadataCommon");
129
+ var editor_1 = require("primereact/editor");
130
+ var XMultilineSwitch_1 = require("./XMultilineSwitch");
131
+ var XMultilineRenderer_1 = require("./XMultilineRenderer");
132
+ var XHtmlRenderer_1 = require("./XHtmlRenderer");
130
133
  var XLazyDataTable = function (props) {
131
134
  var _a;
132
135
  // must be here, is used in createInitFilters()
@@ -236,7 +239,7 @@ var XLazyDataTable = function (props) {
236
239
  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)
237
240
  var initFtsInputValue = props.fullTextSearch ? createInitFtsInputValue() : undefined;
238
241
  var _g = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValue = _g[0], setFtsInputValue = _g[1];
239
- var _h = __read((0, react_1.useState)(true), 2), multiLineSwitchValue = _h[0], setMultiLineSwitchValue = _h[1];
242
+ var _h = __read((0, react_1.useState)(props.multilineSwitchInitValue), 2), multilineSwitchValue = _h[0], setMultilineSwitchValue = _h[1];
240
243
  var _j = __read((0, react_1.useState)(XUtils_1.XUtils.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _j[0], setMultiSortMeta = _j[1];
241
244
  var _k = __read((0, react_1.useState)(null), 2), selectedRow = _k[0], setSelectedRow = _k[1];
242
245
  var _l = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _l[0], setDataLoaded = _l[1]; // priznak kde si zapiseme, ci uz sme nacitali data
@@ -396,6 +399,10 @@ var XLazyDataTable = function (props) {
396
399
  }
397
400
  return headers;
398
401
  };
402
+ var hasContentTypeHtml = function () {
403
+ var columns = props.children;
404
+ return columns.some(function (column) { return column.props.contentType === "html"; });
405
+ };
399
406
  var onSelectionChange = function (event) {
400
407
  //console.log("zavolany onSelectionChange");
401
408
  //console.log(event.value);
@@ -617,23 +624,26 @@ var XLazyDataTable = function (props) {
617
624
  }
618
625
  return betweenFilter;
619
626
  };
620
- var valueAsUI = function (value, xField) {
627
+ var valueAsUI = function (value, xField, contentType) {
621
628
  var valueResult;
622
629
  if (xField.type === "boolean") {
623
630
  // TODO - efektivnejsie by bolo renderovat len prislusne ikonky
624
631
  valueResult = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: value, disabled: true });
625
632
  }
626
633
  else {
627
- // ine typy - convertValue vrati string
628
- // mame zapnutu konverziu fromModel, lebo z json-u nam prichadzaju objekty typu string (napr. pri datumoch)
629
- valueResult = (0, XUtilsConversions_1.convertValue)(xField, value, true, XUtilsConversions_1.AsUIType.Form);
630
- // ak mame viacriadkovy text a zapnuty multiLineSwitch (defaultne je zapnuty aj ked nie je zobrazeny)
631
- if (multiLineSwitchValue) {
632
- if (xField.type === "string" && typeof valueResult === "string" && valueResult) {
633
- var lines = valueResult.split(XUtilsCommon_1.XUtilsCommon.newLine);
634
- if (lines.length >= 2) {
635
- var elemList = lines.map(function (value, index) { return react_1.default.createElement("div", { key: index }, value); });
636
- valueResult = react_1.default.createElement("div", null, elemList);
634
+ if (contentType === "html") {
635
+ // value should be always string (xField.type === "string")
636
+ valueResult = react_1.default.createElement(XHtmlRenderer_1.XHtmlRenderer, { htmlValue: value, renderType: multilineSwitchValue, fewLinesCount: props.multilineSwitchFewLinesCount });
637
+ }
638
+ else {
639
+ // ine typy - convertValue vrati string
640
+ // mame zapnutu konverziu fromModel, lebo z json-u nam prichadzaju objekty typu string (napr. pri datumoch)
641
+ valueResult = (0, XUtilsConversions_1.convertValue)(xField, value, true, XUtilsConversions_1.AsUIType.Form);
642
+ // ak mame viacriadkovy text a multilineSwitch nastaveny na viac ako 1 riadok (defaultne je nastaveny na "allLines") pouzijeme XMultilineRenderer
643
+ if (contentType === "multiline" && multilineSwitchValue !== "singleLine") {
644
+ if (xField.type === "string" && typeof valueResult === "string" && valueResult) {
645
+ var lines = valueResult.split(XUtilsCommon_1.XUtilsCommon.newLine);
646
+ valueResult = react_1.default.createElement(XMultilineRenderer_1.XMultilineRenderer, { valueList: lines, renderType: multilineSwitchValue, fewLinesCount: props.multilineSwitchFewLinesCount, multilineContent: true });
637
647
  }
638
648
  }
639
649
  }
@@ -644,11 +654,11 @@ var XLazyDataTable = function (props) {
644
654
  var bodyValue;
645
655
  var rowDataValue = XUtilsCommon_1.XUtilsCommon.getValueOrValueListByPath(rowData, columnProps.field);
646
656
  if (Array.isArray(rowDataValue)) {
647
- var elemList = rowDataValue.map(function (value, index) { return react_1.default.createElement("div", { key: index }, valueAsUI(value, xField)); });
648
- bodyValue = react_1.default.createElement("div", null, elemList);
657
+ var elemList = rowDataValue.map(function (value) { return valueAsUI(value, xField, columnProps.contentType); });
658
+ bodyValue = react_1.default.createElement(XMultilineRenderer_1.XMultilineRenderer, { valueList: elemList, renderType: multilineSwitchValue, fewLinesCount: props.multilineSwitchFewLinesCount });
649
659
  }
650
660
  else {
651
- bodyValue = valueAsUI(rowDataValue, xField);
661
+ bodyValue = valueAsUI(rowDataValue, xField, columnProps.contentType);
652
662
  }
653
663
  return bodyValue;
654
664
  };
@@ -898,7 +908,7 @@ var XLazyDataTable = function (props) {
898
908
  ftsInputValue ? react_1.default.createElement(XFtsInput_1.XFtsInput, { value: ftsInputValue, onChange: function (value) { return setFtsInputValue(value); } }) : null,
899
909
  react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
900
910
  react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter }),
901
- props.multiLineSwitch ? react_1.default.createElement(inputswitch_1.InputSwitch, { checked: multiLineSwitchValue, onChange: function (e) { return setMultiLineSwitchValue(e.value); }, className: "m-1" }) : null),
911
+ props.multilineSwitch ? react_1.default.createElement(XMultilineSwitch_1.XMultilineSwitch, { value: multilineSwitchValue, onChange: function (value) { return setMultilineSwitchValue(value); }, className: "m-1" }) : null),
902
912
  react_1.default.createElement("div", { className: "flex justify-content-center" },
903
913
  react_1.default.createElement(datatable_1.DataTable, { value: value.rowList, dataKey: dataKey, paginator: props.paginator, rows: rows, totalRecords: value.totalRecords, lazy: true, first: first, onPage: onPage, loading: loading, filterDisplay: props.filterDisplay, filters: filters, onFilter: onFilter, sortMode: "multiple", removableSort: true, multiSortMeta: multiSortMeta, onSort: onSort, selectionMode: "single", selection: selectedRow, onSelectionChange: onSelectionChange, onRowDoubleClick: onRowDoubleClick, rowClassName: props.rowClassName, ref: dataTableEl, className: "p-datatable-sm x-lazy-datatable", resizableColumns: true, columnResizeMode: "expand", tableStyle: tableStyle, paginatorLeft: paginatorLeft, paginatorRight: paginatorRight, scrollable: props.scrollable, scrollHeight: scrollHeight, style: style }, columnElemList)),
904
914
  react_1.default.createElement("div", { className: "flex justify-content-center" },
@@ -909,7 +919,8 @@ var XLazyDataTable = function (props) {
909
919
  props.appButtonsForRow ? props.appButtonsForRow.map(function (xAppButton) { return react_1.default.createElement(XButton_1.XButton, { key: xAppButton.key, icon: xAppButton.icon, label: xAppButton.label, onClick: function () { return onClickAppButtonForRow(xAppButton.onClick); } }); }) : null,
910
920
  props.appButtons,
911
921
  props.searchBrowseParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "choose", label: (0, XLocale_1.xLocaleOption)('chooseRow'), onClick: onClickChoose }) : null,
912
- exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null)));
922
+ exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null),
923
+ hasContentTypeHtml() ? react_1.default.createElement(editor_1.Editor, { style: { display: 'none' }, showHeader: false }) : null /* we want to import css if needed (<style type="text/css" data-primereact-style-id="editor">) */));
913
924
  };
914
925
  exports.XLazyDataTable = XLazyDataTable;
915
926
  exports.XLazyDataTable.defaultProps = {
@@ -917,7 +928,9 @@ exports.XLazyDataTable.defaultProps = {
917
928
  rows: 10,
918
929
  filterDisplay: "row",
919
930
  fullTextSearch: true,
920
- multiLineSwitch: false,
931
+ multilineSwitch: false,
932
+ multilineSwitchInitValue: "allLines",
933
+ multilineSwitchFewLinesCount: 2,
921
934
  scrollable: true,
922
935
  scrollWidth: 'viewport',
923
936
  scrollHeight: 'viewport',
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { XMultilineRenderType } from "./XLazyDataTable";
3
+ export declare const XMultilineRenderer: (props: {
4
+ valueList: React.ReactNode[];
5
+ renderType: XMultilineRenderType;
6
+ fewLinesCount: number;
7
+ multilineContent?: boolean;
8
+ }) => JSX.Element;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __read = (this && this.__read) || function (o, n) {
26
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
27
+ if (!m) return o;
28
+ var i = m.call(o), r, ar = [], e;
29
+ try {
30
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
31
+ }
32
+ catch (error) { e = { error: error }; }
33
+ finally {
34
+ try {
35
+ if (r && !r.done && (m = i["return"])) m.call(i);
36
+ }
37
+ finally { if (e) throw e.error; }
38
+ }
39
+ return ar;
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.XMultilineRenderer = void 0;
43
+ var react_1 = __importStar(require("react"));
44
+ var button_1 = require("primereact/button");
45
+ var XMultilineRenderer = function (props) {
46
+ // used only for props.renderType === "fewLines"
47
+ var _a = __read((0, react_1.useState)(false), 2), showAllLines = _a[0], setShowAllLines = _a[1];
48
+ var valueResult; // musime vracat element, ak chceme XMultilineRenderer volat priamo cez jsx
49
+ if (props.renderType === "singleLine") {
50
+ // TODO - joinovat elementy
51
+ valueResult = react_1.default.createElement("div", null, props.valueList.join(", ")); // pouziva sa hlavne pre oneToMany asociacie
52
+ }
53
+ else {
54
+ var valueListLocal = props.valueList;
55
+ if (props.renderType === "fewLines" && !showAllLines) {
56
+ valueListLocal = valueListLocal.slice(0, props.fewLinesCount);
57
+ }
58
+ var elemList = valueListLocal.map(function (value, index) { return react_1.default.createElement("div", { key: index }, value); });
59
+ if (props.renderType === "fewLines") {
60
+ if (props.valueList.length > props.fewLinesCount) {
61
+ // prepiseme posledny element v zozname - pridame mu button
62
+ var elemListLastIndex = elemList.length - 1;
63
+ elemList[elemListLastIndex] =
64
+ react_1.default.createElement("div", { key: elemListLastIndex },
65
+ valueListLocal[elemListLastIndex],
66
+ react_1.default.createElement(button_1.Button, { icon: showAllLines ? "pi pi-angle-double-left" : "pi pi-angle-double-right", onClick: function () { return setShowAllLines(!showAllLines); }, className: "x-button-multiline-expand-collapse" }));
67
+ // ak by bol nejaky problem s tym hore tak treba pouzit toto:
68
+ // elemList[elemListLastIndex] =
69
+ // <div className="flex flex-row flex-wrap">
70
+ // <div key={elemListLastIndex}>{valueListLocal[elemListLastIndex]}</div>
71
+ // <Button icon={showAllLines ? "pi pi-angle-double-left" : "pi pi-angle-double-right"} onClick={() => setShowAllLines(!showAllLines)}
72
+ // className="x-button-multiline-expand-collapse"/>
73
+ // </div>;
74
+ }
75
+ }
76
+ valueResult = react_1.default.createElement("div", { className: props.multilineContent ? "x-multiline-content" : undefined }, elemList);
77
+ }
78
+ return valueResult;
79
+ };
80
+ exports.XMultilineRenderer = XMultilineRenderer;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { XMultilineRenderType } from "./XLazyDataTable";
3
+ export declare const XMultilineSwitch: (props: {
4
+ value: XMultilineRenderType;
5
+ onChange: (value: XMultilineRenderType) => void;
6
+ className?: string | undefined;
7
+ }) => JSX.Element;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.XMultilineSwitch = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ var selectbutton_1 = require("primereact/selectbutton");
9
+ var XMultilineSwitch = function (props) {
10
+ var options = [
11
+ { icon: 'pi pi-minus', value: 'singleLine' },
12
+ { icon: 'pi pi-bars', value: 'fewLines' },
13
+ { icon: 'pi pi-align-justify', value: 'allLines' }
14
+ ];
15
+ var itemTemplate = function (option) {
16
+ return react_1.default.createElement("i", { className: option.icon });
17
+ };
18
+ return (react_1.default.createElement(selectbutton_1.SelectButton, { value: props.value, onChange: function (e) { return props.onChange(e.value); }, options: options, optionValue: "value", itemTemplate: itemTemplate, className: props.className }));
19
+ };
20
+ exports.XMultilineSwitch = XMultilineSwitch;
@@ -1,6 +1,6 @@
1
1
  import { XField } from "../serverApi/XEntityMetadata";
2
2
  import { XBrowseMeta } from "../serverApi/XBrowseMetadata";
3
- import { XBetweenFilterProp } from "./XLazyDataTable";
3
+ import { XBetweenFilterProp } from "./XLazyDataTable/XLazyDataTable";
4
4
  export declare class XUtilsMetadata {
5
5
  private static xBrowseMetaMap;
6
6
  static fetchAndSetXEntityMap(): Promise<any>;
@@ -10,6 +10,7 @@ export declare class XUtilsCommon {
10
10
  static isSingleField(path: string): boolean;
11
11
  static getPrefixAndField(path: string): [string | null, string];
12
12
  static objectAsJSON(value: any): string;
13
+ static arrayCreateMap<ID, T>(array: T[], idField: string): Map<ID, T>;
13
14
  static getDayName(date: Date | null | undefined): string | undefined;
14
15
  static dateAddDays(date: Date | null, days: number): Date | null;
15
16
  static findFirstMatch(pattern: RegExp, value: string): string | null;
@@ -190,6 +190,26 @@ var XUtilsCommon = /** @class */ (function () {
190
190
  Date.prototype.toJSON = dateToJSONOriginal;
191
191
  return json;
192
192
  };
193
+ XUtilsCommon.arrayCreateMap = function (array, idField) {
194
+ var e_2, _a;
195
+ var idRowMap = new Map();
196
+ try {
197
+ for (var array_1 = __values(array), array_1_1 = array_1.next(); !array_1_1.done; array_1_1 = array_1.next()) {
198
+ var row = array_1_1.value;
199
+ if (row) {
200
+ idRowMap.set(row[idField], row);
201
+ }
202
+ }
203
+ }
204
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
205
+ finally {
206
+ try {
207
+ if (array_1_1 && !array_1_1.done && (_a = array_1.return)) _a.call(array_1);
208
+ }
209
+ finally { if (e_2) throw e_2.error; }
210
+ }
211
+ return idRowMap;
212
+ };
193
213
  XUtilsCommon.getDayName = function (date) {
194
214
  var days = ['nedeľa', 'pondelok', 'utorok', 'streda', 'štvrtok', 'piatok', 'sobota'];
195
215
  return date ? days[date.getDay()] : undefined;
@@ -212,7 +232,12 @@ var XUtilsCommon = /** @class */ (function () {
212
232
  };
213
233
  XUtilsCommon.today = function () {
214
234
  var today = new Date();
215
- today.setHours(0, 0, 0, 0);
235
+ // vynulujeme casovu zlozku
236
+ // poznamka: Date vzdy obsahuje aj casovu zlozku. Nase konverzne funkcie dateFromModel a dateFromUI pouzivaju konverziu new Date('YYYY-MM-DD')
237
+ // a tato konverzia vytvara datum s GMT/UTC/Z casom 00:00:00 (stredoeuropsky 00:01:00 - akokeby sme zadavali new Date('YYYY-MM-DDT00:00:00Z'))
238
+ //today.setHours(0, 0, 0, 0); // nastavi cas 00:00:00 v aktualnej timezone (stredoeuropsky 00:00:00, GMT 23:00:00)
239
+ // - potom nam nefunguje porovnavanie s datumami vytvorenymi cez funkcie dateFromModel a dateFromUI
240
+ today.setUTCHours(0, 0, 0, 0);
216
241
  return today;
217
242
  };
218
243
  // vrati true ak sa string sklada iba z cislic, moze mat + alebo - na zaciatku
@@ -11,6 +11,7 @@ export declare class XUtilsMetadataCommon {
11
11
  static getXEntity(entity: string): XEntity;
12
12
  static getXFieldBase(xEntity: XEntity, field: string): XField | undefined;
13
13
  static getXField(xEntity: XEntity, field: string): XField;
14
+ static getXFieldByPathBase(xEntity: XEntity, path: string): XField | undefined;
14
15
  static getXFieldByPath(xEntity: XEntity, path: string): XField;
15
16
  static getXFieldByPathStr(entity: string, path: string): XField;
16
17
  static getXAssocBase(xEntity: XEntity, assocField: string): XAssoc | undefined;
@@ -64,6 +64,22 @@ var XUtilsMetadataCommon = /** @class */ (function () {
64
64
  }
65
65
  return xField;
66
66
  };
67
+ XUtilsMetadataCommon.getXFieldByPathBase = function (xEntity, path) {
68
+ var _a = __read(XUtilsCommon_1.XUtilsCommon.getFieldAndRestPath(path), 2), field = _a[0], restPath = _a[1];
69
+ if (restPath === null) {
70
+ return XUtilsMetadataCommon.getXFieldBase(xEntity, field);
71
+ }
72
+ else {
73
+ var xAssoc = XUtilsMetadataCommon.getXAssocBase(xEntity, field);
74
+ if (xAssoc) {
75
+ var xAssocEntity = XUtilsMetadataCommon.getXEntity(xAssoc.entityName);
76
+ return XUtilsMetadataCommon.getXFieldByPathBase(xAssocEntity, restPath);
77
+ }
78
+ else {
79
+ return undefined;
80
+ }
81
+ }
82
+ };
67
83
  XUtilsMetadataCommon.getXFieldByPath = function (xEntity, path) {
68
84
  var _a = __read(XUtilsCommon_1.XUtilsCommon.getFieldAndRestPath(path), 2), field = _a[0], restPath = _a[1];
69
85
  if (restPath === null) {
@@ -0,0 +1,6 @@
1
+ export interface XGetSequenceValueRequest {
2
+ name: string;
3
+ }
4
+ export interface XGetSequenceValueResponse {
5
+ value: number;
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // misc api used in lib
3
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michalrakus/x-react-web-lib",
3
- "version": "1.19.0",
3
+ "version": "1.20.0",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "clean": "rimraf lib",
@@ -41,6 +41,7 @@
41
41
  "primeflex": "^3.3.1",
42
42
  "primeicons": "^6.0.1",
43
43
  "primereact": "~10.4.0",
44
+ "quill": "^1.3.7",
44
45
  "react": "^18.2.0",
45
46
  "react-dom": "^18.2.0",
46
47
  "react-transition-group": "^4.4.5"