@michalrakus/x-react-web-lib 1.28.0 → 1.30.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.
- package/lib/components/XAutoCompleteBase.js +8 -12
- package/lib/components/XEditBrowse.js +2 -1
- package/lib/components/XFieldSet/XFieldSetBase.d.ts +79 -0
- package/lib/components/XFieldSet/XFieldSetBase.js +135 -0
- package/lib/components/XFormBase.js +1 -1
- package/lib/components/XFormDataTable2.d.ts +5 -2
- package/lib/components/XFormDataTable2.js +14 -7
- package/lib/components/XLazyDataTable/XLazyDataTable.d.ts +3 -2
- package/lib/components/XLazyDataTable/XLazyDataTable.js +121 -40
- package/lib/components/XSearchButton.js +2 -1
- package/lib/components/XUtils.d.ts +1 -25
- package/lib/components/XUtils.js +5 -162
- package/lib/components/locale/x-en.json +6 -1
- package/lib/serverApi/FindParam.d.ts +4 -4
- package/lib/serverApi/FindParam.js +8 -8
- package/lib/serverApi/XUtilsCommon.d.ts +29 -0
- package/lib/serverApi/XUtilsCommon.js +165 -0
- package/lib/serverApi/XUtilsConversions.js +6 -0
- package/package.json +1 -1
|
@@ -335,8 +335,8 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
|
|
|
335
335
|
maxRows: this.props.lazyLoadMaxRows + 1,
|
|
336
336
|
fullTextSearch: { fields: this.getFields(), value: event.query.trim(), splitValue: this.props.splitQueryValue, matchMode: "contains" },
|
|
337
337
|
entity: this.props.suggestionsQuery.entity,
|
|
338
|
-
filterItems:
|
|
339
|
-
multiSortMeta:
|
|
338
|
+
filterItems: XUtilsCommon_1.XUtilsCommon.createCustomFilterItems(filter),
|
|
339
|
+
multiSortMeta: XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(this.getSortField()),
|
|
340
340
|
fields: this.props.suggestionsQuery.fields
|
|
341
341
|
};
|
|
342
342
|
return [4 /*yield*/, XUtils_1.XUtils.fetchOne('x-lazy-auto-complete-suggestions', suggestionsRequest)];
|
|
@@ -346,7 +346,7 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
|
|
|
346
346
|
// ak sme nesortovali v DB (co je draha operacia) tak zosortujeme teraz
|
|
347
347
|
// (itemTemplateString sa vola duplicitne ale pre tych cca 20 zaznamov je to ok)
|
|
348
348
|
if (this.props.suggestionsQuery.sortField === undefined) {
|
|
349
|
-
filteredSuggestions =
|
|
349
|
+
filteredSuggestions = XUtilsCommon_1.XUtilsCommon.arraySort(filteredSuggestions, this.itemTemplateString);
|
|
350
350
|
}
|
|
351
351
|
// ak mame o 1 zaznam viac ako je lazyLoadMaxRows, zmenime posledny zaznam na ...
|
|
352
352
|
// TODO - lepsie by bolo posledny zaznam vyhodit a popisok ... zobrazit do footer-a (odpadnu problemy z pripadnou selekciou pseudozaznamu ...)
|
|
@@ -727,17 +727,13 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
|
|
|
727
727
|
// Dialog pre konkretny form:
|
|
728
728
|
// <DobrovolnikForm id={this.formDialogObjectId} object={this.formDialogInitValuesForInsert} onSaveOrCancel={this.formDialogOnSaveOrCancel}/>
|
|
729
729
|
// formgroup-inline lepi SplitButton na autocomplete a zarovna jeho vysku
|
|
730
|
-
return (react_1.default.createElement("div", { className: "x-auto-complete-base", style: { width: this.props.width, maxWidth: this.props.maxWidth } },
|
|
731
|
-
|
|
732
|
-
buttons,
|
|
733
|
-
this.props.valueForm != undefined ?
|
|
734
|
-
react_1.default.createElement(dialog_1.Dialog, { key: "dialogForm", className: "x-dialog-without-header", visible: this.state.formDialogOpened, onHide: this.formDialogOnHide }, react_1.default.cloneElement(this.props.valueForm, {
|
|
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 ?
|
|
731
|
+
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, {
|
|
735
732
|
id: this.formDialogObjectId, initValues: this.formDialogInitValuesForInsert, onSaveOrCancel: this.formDialogOnSaveOrCancel
|
|
736
733
|
} /*, this.props.valueForm.children*/))
|
|
737
|
-
: undefined,
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
: undefined));
|
|
734
|
+
: undefined, this.props.searchBrowse != undefined && !readOnly ?
|
|
735
|
+
react_1.default.createElement(dialog_1.Dialog, { key: "dialog-browse", className: "x-dialog-without-header", visible: this.state.searchDialogOpened, onHide: this.searchDialogOnHide }, react_1.default.cloneElement(this.props.searchBrowse, { searchBrowseParams: this.createSearchBrowseParams() } /*, props.searchBrowse.children*/))
|
|
736
|
+
: undefined], false)));
|
|
741
737
|
};
|
|
742
738
|
XAutoCompleteBase.valueMoreSuggestions = "...";
|
|
743
739
|
XAutoCompleteBase.defaultProps = {
|
|
@@ -110,6 +110,7 @@ var XUtilsMetadata_1 = require("./XUtilsMetadata");
|
|
|
110
110
|
var XUtils_1 = require("./XUtils");
|
|
111
111
|
var XLazyDataTable_1 = require("./XLazyDataTable/XLazyDataTable");
|
|
112
112
|
var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
|
|
113
|
+
var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
|
|
113
114
|
// TODO - pouzit extends XEditBrowseBase, ako je tomu pri CarForm?
|
|
114
115
|
var XEditBrowse = /** @class */ (function (_super) {
|
|
115
116
|
__extends(XEditBrowse, _super);
|
|
@@ -281,7 +282,7 @@ var XEditBrowse = /** @class */ (function (_super) {
|
|
|
281
282
|
var index = this.getIndexForColumn(field);
|
|
282
283
|
if (index !== undefined) {
|
|
283
284
|
var xBrowseMeta = this.state.xBrowseMeta;
|
|
284
|
-
|
|
285
|
+
XUtilsCommon_1.XUtilsCommon.arrayMoveElement(xBrowseMeta.columnMetaList, index, offset);
|
|
285
286
|
// TODO - tu mozno treba setnut funkciu - koli moznej asynchronicite
|
|
286
287
|
this.setState({ xBrowseMeta: xBrowseMeta });
|
|
287
288
|
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export interface XFieldSetMeta {
|
|
3
|
+
id?: number;
|
|
4
|
+
fieldSetId: string;
|
|
5
|
+
xFieldMetaRoot: XFieldMeta;
|
|
6
|
+
modifDate: Date | null;
|
|
7
|
+
modifXUser: any | null;
|
|
8
|
+
version: number;
|
|
9
|
+
}
|
|
10
|
+
export declare enum XFieldType {
|
|
11
|
+
rootField = "rootField",
|
|
12
|
+
fieldGroup = "fieldGroup",
|
|
13
|
+
fieldGroupWithCheckbox = "fieldGroupWithCheckbox",
|
|
14
|
+
checkbox = "checkbox",
|
|
15
|
+
checkboxNullable = "checkboxNullable",
|
|
16
|
+
inputText = "inputText",
|
|
17
|
+
inputDecimal = "inputDecimal"
|
|
18
|
+
}
|
|
19
|
+
export declare enum XChildrenLayout {
|
|
20
|
+
column = "column",
|
|
21
|
+
row = "row",
|
|
22
|
+
tabView = "tabView",
|
|
23
|
+
tabViewWithHeaderGroup = "tabViewWithHeaderGroup"
|
|
24
|
+
}
|
|
25
|
+
export declare enum XFieldPropValuesFrom {
|
|
26
|
+
parent = "parent",
|
|
27
|
+
this = "this"
|
|
28
|
+
}
|
|
29
|
+
export interface XFieldMeta {
|
|
30
|
+
type?: XFieldType;
|
|
31
|
+
childrenLayout?: XChildrenLayout;
|
|
32
|
+
width?: string;
|
|
33
|
+
labelWidth?: string;
|
|
34
|
+
inputWidth?: string;
|
|
35
|
+
suppressFieldGroupPanel?: true;
|
|
36
|
+
field: string;
|
|
37
|
+
label: string;
|
|
38
|
+
tooltip?: string;
|
|
39
|
+
decimalProps?: {
|
|
40
|
+
scale: number;
|
|
41
|
+
};
|
|
42
|
+
dateFrom?: Date;
|
|
43
|
+
dateTo?: Date;
|
|
44
|
+
xFieldMetaList?: XFieldMeta[];
|
|
45
|
+
fieldPropValuesMapForEdit?: XFieldPropValuesMapForEdit;
|
|
46
|
+
fieldPropValuesMapCached?: XFieldPropValuesMap;
|
|
47
|
+
xFieldMetaParentCached?: XFieldMeta;
|
|
48
|
+
}
|
|
49
|
+
export interface XFieldPropValuesMapForEdit {
|
|
50
|
+
[field: string]: XFieldPropValuesForEdit;
|
|
51
|
+
}
|
|
52
|
+
export interface XFieldPropValuesMap {
|
|
53
|
+
[field: string]: XFieldPropValues;
|
|
54
|
+
}
|
|
55
|
+
export interface XFieldPropValuesForEdit {
|
|
56
|
+
valuesFrom: XFieldPropValuesFrom;
|
|
57
|
+
values?: XFieldPropValues;
|
|
58
|
+
error?: string;
|
|
59
|
+
}
|
|
60
|
+
export type XFieldPropValues = any | undefined;
|
|
61
|
+
export interface XFieldProp {
|
|
62
|
+
id: string;
|
|
63
|
+
label: string;
|
|
64
|
+
fieldPropEdit?: JSX.Element;
|
|
65
|
+
}
|
|
66
|
+
export interface XFieldPropEditProps {
|
|
67
|
+
value?: XFieldPropValues;
|
|
68
|
+
onChange?: (value: XFieldPropValues) => void;
|
|
69
|
+
onErrorChange?: (error: (string | undefined)) => void;
|
|
70
|
+
}
|
|
71
|
+
export interface XFieldSetValues {
|
|
72
|
+
[field: string]: any;
|
|
73
|
+
}
|
|
74
|
+
export type XFieldXFieldMetaMap = Map<string, XFieldMeta>;
|
|
75
|
+
export declare class XFieldSetBase {
|
|
76
|
+
static createXFieldXFieldMetaMap(xFieldSetMeta: XFieldSetMeta): XFieldXFieldMetaMap;
|
|
77
|
+
static xFieldSetValuesAsUI(xFieldSetValues: XFieldSetValues, xFieldXFieldMetaMap: XFieldXFieldMetaMap): string;
|
|
78
|
+
private static createMapForXFieldMeta;
|
|
79
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __values = (this && this.__values) || function(o) {
|
|
3
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
+
if (m) return m.call(o);
|
|
5
|
+
if (o && typeof o.length === "number") return {
|
|
6
|
+
next: function () {
|
|
7
|
+
if (o && i >= o.length) o = void 0;
|
|
8
|
+
return { value: o && o[i++], done: !o };
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
+
};
|
|
13
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
14
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
15
|
+
if (!m) return o;
|
|
16
|
+
var i = m.call(o), r, ar = [], e;
|
|
17
|
+
try {
|
|
18
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
19
|
+
}
|
|
20
|
+
catch (error) { e = { error: error }; }
|
|
21
|
+
finally {
|
|
22
|
+
try {
|
|
23
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
24
|
+
}
|
|
25
|
+
finally { if (e) throw e.error; }
|
|
26
|
+
}
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.XFieldSetBase = exports.XFieldPropValuesFrom = exports.XChildrenLayout = exports.XFieldType = void 0;
|
|
31
|
+
var XUtilsConversions_1 = require("../../serverApi/XUtilsConversions");
|
|
32
|
+
var XFieldType;
|
|
33
|
+
(function (XFieldType) {
|
|
34
|
+
XFieldType["rootField"] = "rootField";
|
|
35
|
+
XFieldType["fieldGroup"] = "fieldGroup";
|
|
36
|
+
XFieldType["fieldGroupWithCheckbox"] = "fieldGroupWithCheckbox";
|
|
37
|
+
XFieldType["checkbox"] = "checkbox";
|
|
38
|
+
XFieldType["checkboxNullable"] = "checkboxNullable";
|
|
39
|
+
XFieldType["inputText"] = "inputText";
|
|
40
|
+
XFieldType["inputDecimal"] = "inputDecimal";
|
|
41
|
+
})(XFieldType = exports.XFieldType || (exports.XFieldType = {}));
|
|
42
|
+
// children layout sa da nastavit len na type, ktory ma children - rootField, fieldGroup
|
|
43
|
+
var XChildrenLayout;
|
|
44
|
+
(function (XChildrenLayout) {
|
|
45
|
+
XChildrenLayout["column"] = "column";
|
|
46
|
+
XChildrenLayout["row"] = "row";
|
|
47
|
+
XChildrenLayout["tabView"] = "tabView";
|
|
48
|
+
XChildrenLayout["tabViewWithHeaderGroup"] = "tabViewWithHeaderGroup"; // to iste co tabView ale prvy fieldGroup (0-ty tab) zobrazi nad tabView (aby bol vzdy pristupny)
|
|
49
|
+
})(XChildrenLayout = exports.XChildrenLayout || (exports.XChildrenLayout = {}));
|
|
50
|
+
// poznamka - tabView a tabViewWithHeaderGroup odignoruju bezne simple children - ak take budu existovat, zobrazi sa uzivatelovi warning pri nastaveni tabView
|
|
51
|
+
// pouzijeme len checkbox supressFieldGroupPanel
|
|
52
|
+
// pouziva sa len pre typ fieldGroup a len v pripade ak dany fieldGroup nie je vyrenderovany v nejakej tab-ke (jeho parent ma nastaveny layout tabView*)
|
|
53
|
+
// export enum XFieldGroupPanelViewStatus {
|
|
54
|
+
// show = "show", // default - vyrenderuje Panel aj s labelom a vo vnutri panelu umiestni children
|
|
55
|
+
// hide = "hide" // nerenderuje Panel, children umiestni do div elementu (label sa nepouzije) - pouziva sa na vytvorenie stlpcov v (parent) fieldGroup-e
|
|
56
|
+
// }
|
|
57
|
+
var XFieldPropValuesFrom;
|
|
58
|
+
(function (XFieldPropValuesFrom) {
|
|
59
|
+
XFieldPropValuesFrom["parent"] = "parent";
|
|
60
|
+
XFieldPropValuesFrom["this"] = "this"; // field prop values preberame z current fieldu
|
|
61
|
+
})(XFieldPropValuesFrom = exports.XFieldPropValuesFrom || (exports.XFieldPropValuesFrom = {}));
|
|
62
|
+
// zatial provizorne len na staticke metody
|
|
63
|
+
var XFieldSetBase = /** @class */ (function () {
|
|
64
|
+
function XFieldSetBase() {
|
|
65
|
+
}
|
|
66
|
+
// api metoda na vytvorenie Map instancie, ktora sluzi na rychle najdenie prislusneho XFieldMeta podla nazvu fieldu
|
|
67
|
+
XFieldSetBase.createXFieldXFieldMetaMap = function (xFieldSetMeta) {
|
|
68
|
+
var xFieldXFieldMetaMap = new Map();
|
|
69
|
+
XFieldSetBase.createMapForXFieldMeta(xFieldSetMeta.xFieldMetaRoot, xFieldXFieldMetaMap);
|
|
70
|
+
return xFieldXFieldMetaMap;
|
|
71
|
+
};
|
|
72
|
+
// api metoda na vyrenderovanie field set atributu
|
|
73
|
+
// logicky patri do src/serverApi/XUtilsConversions.ts a zisla by sa aj pri exporte do excelu ale XFieldXFieldMetaMap (a jeho "parent"-a XFieldSetBase) mame len na frontende
|
|
74
|
+
XFieldSetBase.xFieldSetValuesAsUI = function (xFieldSetValues, xFieldXFieldMetaMap) {
|
|
75
|
+
var e_1, _a;
|
|
76
|
+
var _b;
|
|
77
|
+
// budeme mat vzdy spravne poradie? nebudeme... asi najjednoduchsie zosortovat tu "valueUIList" podla abecedy
|
|
78
|
+
var valueUIList = [];
|
|
79
|
+
try {
|
|
80
|
+
for (var _c = __values(Object.entries(xFieldSetValues)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
81
|
+
var _e = __read(_d.value, 2), field = _e[0], value = _e[1];
|
|
82
|
+
var xFieldMeta = xFieldXFieldMetaMap.get(field);
|
|
83
|
+
if (xFieldMeta) {
|
|
84
|
+
if (xFieldMeta.type === XFieldType.checkbox) {
|
|
85
|
+
valueUIList.push(xFieldMeta.label);
|
|
86
|
+
}
|
|
87
|
+
else if (xFieldMeta.type === XFieldType.inputText) {
|
|
88
|
+
valueUIList.push("".concat(xFieldMeta.label, ": \"").concat(value, "\""));
|
|
89
|
+
}
|
|
90
|
+
else if (xFieldMeta.type === XFieldType.inputDecimal) {
|
|
91
|
+
valueUIList.push("".concat(xFieldMeta.label, ": ").concat((0, XUtilsConversions_1.numberAsUI)((0, XUtilsConversions_1.numberFromModel)(value), (_b = xFieldMeta.decimalProps) === null || _b === void 0 ? void 0 : _b.scale)));
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// neznamy typ
|
|
95
|
+
valueUIList.push("".concat(xFieldMeta.label, ": \"").concat(value, "\""));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// field bol z formulara odstraneny (nemalo by sa to takto pouzivat, skor by sa mala datumom ohranicit platnost fieldu)
|
|
100
|
+
// zobrazime v surovom stave
|
|
101
|
+
valueUIList.push("".concat(field, ": ").concat(typeof value === 'string' ? '"' + value + '"' : value));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
106
|
+
finally {
|
|
107
|
+
try {
|
|
108
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
109
|
+
}
|
|
110
|
+
finally { if (e_1) throw e_1.error; }
|
|
111
|
+
}
|
|
112
|
+
return valueUIList.join(", ");
|
|
113
|
+
};
|
|
114
|
+
XFieldSetBase.createMapForXFieldMeta = function (xFieldMeta, xFieldXFieldMetaMap) {
|
|
115
|
+
var e_2, _a;
|
|
116
|
+
xFieldXFieldMetaMap.set(xFieldMeta.field, xFieldMeta);
|
|
117
|
+
if (xFieldMeta.xFieldMetaList) {
|
|
118
|
+
try {
|
|
119
|
+
for (var _b = __values(xFieldMeta.xFieldMetaList), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
120
|
+
var insideXFieldMeta = _c.value;
|
|
121
|
+
XFieldSetBase.createMapForXFieldMeta(insideXFieldMeta, xFieldXFieldMetaMap);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
125
|
+
finally {
|
|
126
|
+
try {
|
|
127
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
128
|
+
}
|
|
129
|
+
finally { if (e_2) throw e_2.error; }
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
return XFieldSetBase;
|
|
134
|
+
}());
|
|
135
|
+
exports.XFieldSetBase = XFieldSetBase;
|
|
@@ -169,7 +169,7 @@ var XFormBase = /** @class */ (function (_super) {
|
|
|
169
169
|
assocToSort = _b.value;
|
|
170
170
|
assocRowList = object[assocToSort.assoc];
|
|
171
171
|
if (assocRowList) {
|
|
172
|
-
object[assocToSort.assoc] =
|
|
172
|
+
object[assocToSort.assoc] = XUtilsCommon_1.XUtilsCommon.arraySort(assocRowList, assocToSort.sortField);
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { XFormBase } from "./XFormBase";
|
|
2
2
|
import React, { Component, ReactChild } from "react";
|
|
3
|
-
import { DataTableFilterMeta } from "primereact/datatable";
|
|
3
|
+
import { DataTableFilterMeta, DataTableSortMeta } from "primereact/datatable";
|
|
4
4
|
import { ColumnBodyOptions } from "primereact/column";
|
|
5
5
|
import { XEntity, XField } from "../serverApi/XEntityMetadata";
|
|
6
6
|
import { XViewStatusOrBoolean } from "./XUtils";
|
|
@@ -26,7 +26,7 @@ export interface XFormDataTableProps {
|
|
|
26
26
|
rows?: number;
|
|
27
27
|
filterDisplay: "menu" | "row" | "none";
|
|
28
28
|
sortable: boolean;
|
|
29
|
-
sortField
|
|
29
|
+
sortField: string;
|
|
30
30
|
scrollable: boolean;
|
|
31
31
|
scrollWidth?: string;
|
|
32
32
|
scrollHeight?: string;
|
|
@@ -48,6 +48,7 @@ export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
|
|
|
48
48
|
static defaultProps: {
|
|
49
49
|
filterDisplay: string;
|
|
50
50
|
sortable: boolean;
|
|
51
|
+
sortField: string;
|
|
51
52
|
scrollable: boolean;
|
|
52
53
|
scrollWidth: string;
|
|
53
54
|
scrollHeight: string;
|
|
@@ -116,6 +117,8 @@ export interface XFormAutoCompleteColumnProps extends XFormColumnBaseProps {
|
|
|
116
117
|
searchBrowse?: JSX.Element;
|
|
117
118
|
assocForm?: JSX.Element;
|
|
118
119
|
filter?: XTableFieldFilterProp;
|
|
120
|
+
sortField?: string | DataTableSortMeta[];
|
|
121
|
+
fields?: string[];
|
|
119
122
|
suggestions?: any[];
|
|
120
123
|
}
|
|
121
124
|
export interface XFormSearchButtonColumnProps extends XFormColumnBaseProps {
|
|
@@ -277,7 +277,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
277
277
|
};
|
|
278
278
|
XFormDataTable2.prototype.getFilterMatchMode = function (xField) {
|
|
279
279
|
var filterMatchMode;
|
|
280
|
-
if (xField.type === "string") {
|
|
280
|
+
if (xField.type === "string" || xField.type === "jsonb") {
|
|
281
281
|
filterMatchMode = api_1.FilterMatchMode.CONTAINS;
|
|
282
282
|
}
|
|
283
283
|
// zatial vsetky ostatne EQUALS
|
|
@@ -404,7 +404,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
404
404
|
}
|
|
405
405
|
else if (columnProps.type === "autoComplete") {
|
|
406
406
|
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, filter: columnPropsAutoComplete.filter, suggestions: columnPropsAutoComplete.suggestions, rowData: rowData, readOnly: readOnly });
|
|
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, filter: columnPropsAutoComplete.filter, sortField: columnPropsAutoComplete.sortField, fields: columnPropsAutoComplete.fields, suggestions: columnPropsAutoComplete.suggestions, rowData: rowData, readOnly: readOnly });
|
|
408
408
|
}
|
|
409
409
|
else if (columnProps.type === "searchButton") {
|
|
410
410
|
var columnPropsSearchButton = columnProps;
|
|
@@ -527,7 +527,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
527
527
|
};
|
|
528
528
|
XFormDataTable2.prototype.render = function () {
|
|
529
529
|
var _this = this;
|
|
530
|
-
var _a, _b
|
|
530
|
+
var _a, _b;
|
|
531
531
|
var xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(this.getEntity());
|
|
532
532
|
var paginator = this.props.paginator !== undefined ? this.props.paginator : false;
|
|
533
533
|
var rows = undefined;
|
|
@@ -540,8 +540,14 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
540
540
|
}
|
|
541
541
|
}
|
|
542
542
|
var filterDisplay = this.props.filterDisplay !== "none" ? this.props.filterDisplay : undefined;
|
|
543
|
-
|
|
544
|
-
|
|
543
|
+
var sortField = this.props.sortField;
|
|
544
|
+
if (sortField === "idFieldOnUpdate") {
|
|
545
|
+
// default sortovanie - ak mame insert tak nesortujeme (drzime poradie v akom user zaznam vytvoril), ak mame update tak podla id zosortujeme (nech je to zobrazene vzdy rovnako)
|
|
546
|
+
sortField = (this.props.form.isAddRow() ? undefined : xEntity.idField);
|
|
547
|
+
}
|
|
548
|
+
else if (sortField === "none") {
|
|
549
|
+
sortField = undefined;
|
|
550
|
+
}
|
|
545
551
|
var label = this.props.label !== undefined ? this.props.label : this.props.assocField;
|
|
546
552
|
var readOnly = this.isReadOnly();
|
|
547
553
|
// v bloku function (child) nejde pouzit priamo this, thisLocal uz ide pouzit
|
|
@@ -679,8 +685,8 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
679
685
|
var removeRowLabel = undefined;
|
|
680
686
|
if (this.props.showAddRemoveButtons) {
|
|
681
687
|
// calling xLocaleOption does not work in standard default values initialisation place (public static defaultProps)
|
|
682
|
-
addRowLabel = (
|
|
683
|
-
removeRowLabel = (
|
|
688
|
+
addRowLabel = (_a = this.props.addRowLabel) !== null && _a !== void 0 ? _a : (0, XLocale_1.xLocaleOption)('addRow');
|
|
689
|
+
removeRowLabel = (_b = this.props.removeRowLabel) !== null && _b !== void 0 ? _b : (0, XLocale_1.xLocaleOption)('removeRow');
|
|
684
690
|
}
|
|
685
691
|
return (react_1.default.createElement("div", null,
|
|
686
692
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
@@ -696,6 +702,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
696
702
|
XFormDataTable2.defaultProps = {
|
|
697
703
|
filterDisplay: "none",
|
|
698
704
|
sortable: false,
|
|
705
|
+
sortField: "idFieldOnUpdate",
|
|
699
706
|
scrollable: true,
|
|
700
707
|
scrollWidth: '100%',
|
|
701
708
|
scrollHeight: '200vh',
|
|
@@ -3,7 +3,7 @@ import { DataTableFilterMeta, DataTableFilterMetaData, DataTableOperatorFilterMe
|
|
|
3
3
|
import { ColumnBodyOptions, ColumnFilterElementTemplateOptions } from 'primereact/column';
|
|
4
4
|
import { XViewStatusOrBoolean } from "../XUtils";
|
|
5
5
|
import { XSearchBrowseParams } from "../XSearchBrowseParams";
|
|
6
|
-
import {
|
|
6
|
+
import { XAggregateFunction, XCustomFilter } from "../../serverApi/FindParam";
|
|
7
7
|
import { XOnSaveOrCancelProp } from "../XFormBase";
|
|
8
8
|
import { IconType } from "primereact/utils";
|
|
9
9
|
import { ButtonProps } from "primereact/button";
|
|
@@ -110,7 +110,8 @@ export interface XLazyColumnProps {
|
|
|
110
110
|
betweenFilter?: XBetweenFilterProp | "noBetween";
|
|
111
111
|
width?: string;
|
|
112
112
|
contentType?: XContentType;
|
|
113
|
-
|
|
113
|
+
fieldSetId?: string;
|
|
114
|
+
aggregateType?: XAggregateFunction;
|
|
114
115
|
columnViewStatus: XViewStatusOrBoolean;
|
|
115
116
|
filterElement?: XFilterElementProp;
|
|
116
117
|
body?: React.ReactNode | ((data: any, options: ColumnBodyOptions) => React.ReactNode);
|