@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.
- package/XEditor.d.ts +3 -0
- package/XEditor.js +5 -0
- package/XEditorBase.d.ts +3 -0
- package/XEditorBase.js +5 -0
- package/XExportRowsDialog.d.ts +1 -1
- package/XExportRowsDialog.js +1 -1
- package/XHtmlRenderer.d.ts +3 -0
- package/XHtmlRenderer.js +5 -0
- package/XLazyDataTable.d.ts +1 -1
- package/XLazyDataTable.js +1 -1
- package/XMultilineRenderer.d.ts +3 -0
- package/XMultilineRenderer.js +5 -0
- package/gulpfile.js +7 -2
- package/lib/administration/XBrowseMetaBrowse.d.ts +1 -1
- package/lib/administration/XBrowseMetaBrowse.js +1 -1
- package/lib/administration/XUserBrowse.d.ts +1 -1
- package/lib/administration/XUserBrowse.js +1 -1
- package/lib/components/XAutoComplete.d.ts +2 -0
- package/lib/components/XAutoComplete.js +1 -1
- package/lib/components/XAutoCompleteBase.d.ts +5 -1
- package/lib/components/XAutoCompleteBase.js +34 -8
- package/lib/components/XAutoCompleteDT.d.ts +4 -2
- package/lib/components/XAutoCompleteDT.js +1 -1
- package/lib/components/XEditBrowse.js +1 -1
- package/lib/components/XEditor.d.ts +15 -0
- package/lib/components/XEditor.js +64 -0
- package/lib/components/XEditorBase.d.ts +9 -0
- package/lib/components/XEditorBase.js +91 -0
- package/lib/components/XFormBase.d.ts +1 -0
- package/lib/components/XFormBase.js +19 -4
- package/lib/components/XInputTextareaBase.js +3 -4
- package/lib/components/{XExportRowsDialog.d.ts → XLazyDataTable/XExportRowsDialog.d.ts} +1 -1
- package/lib/components/{XExportRowsDialog.js → XLazyDataTable/XExportRowsDialog.js} +5 -5
- package/lib/components/XLazyDataTable/XHtmlRenderer.d.ts +7 -0
- package/lib/components/XLazyDataTable/XHtmlRenderer.js +78 -0
- package/lib/components/{XLazyDataTable.d.ts → XLazyDataTable/XLazyDataTable.d.ts} +16 -6
- package/lib/components/{XLazyDataTable.js → XLazyDataTable/XLazyDataTable.js} +45 -32
- package/lib/components/XLazyDataTable/XMultilineRenderer.d.ts +8 -0
- package/lib/components/XLazyDataTable/XMultilineRenderer.js +80 -0
- package/lib/components/XLazyDataTable/XMultilineSwitch.d.ts +7 -0
- package/lib/components/XLazyDataTable/XMultilineSwitch.js +20 -0
- package/lib/components/XUtilsMetadata.d.ts +1 -1
- package/lib/serverApi/XUtilsCommon.d.ts +1 -0
- package/lib/serverApi/XUtilsCommon.js +26 -1
- package/lib/serverApi/XUtilsMetadataCommon.d.ts +1 -0
- package/lib/serverApi/XUtilsMetadataCommon.js +16 -0
- package/lib/serverApi/x-lib-api.d.ts +6 -0
- package/lib/serverApi/x-lib-api.js +3 -0
- package/package.json +2 -1
package/XEditor.d.ts
ADDED
package/XEditor.js
ADDED
package/XEditorBase.d.ts
ADDED
package/XEditorBase.js
ADDED
package/XExportRowsDialog.d.ts
CHANGED
package/XExportRowsDialog.js
CHANGED
package/XHtmlRenderer.js
ADDED
package/XLazyDataTable.d.ts
CHANGED
package/XLazyDataTable.js
CHANGED
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",
|
|
@@ -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) {
|
|
@@ -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
|
-
|
|
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.
|
|
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.
|
|
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
|
-
// (
|
|
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.
|
|
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.
|
|
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.
|
|
590
|
+
return this.computeItemTemplate(suggestion, index, false);
|
|
589
591
|
};
|
|
590
|
-
|
|
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
|
-
|
|
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*/,
|
|
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.
|
|
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 =
|
|
193
|
-
case
|
|
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
|
|
62
|
-
// false, ak
|
|
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 -
|
|
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 "
|
|
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("
|
|
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("
|
|
86
|
-
var XUtils_1 = require("
|
|
87
|
-
var XUtilsConversions_1 = require("
|
|
88
|
-
var XLocale_1 = require("
|
|
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,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 "
|
|
5
|
-
import { XSearchBrowseParams } from "
|
|
6
|
-
import { XAggregateType, XCustomFilter } from "
|
|
7
|
-
import { XOnSaveOrCancelProp } from "
|
|
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
|
-
|
|
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
|
-
|
|
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("
|
|
114
|
-
var XUtils_1 = require("
|
|
115
|
-
var XUtilsMetadata_1 = require("
|
|
116
|
-
var XDropdownDTFilter_1 = require("
|
|
117
|
-
var XUtilsConversions_1 = require("
|
|
118
|
-
var FindParam_1 = require("
|
|
119
|
-
var XButtonIconSmall_1 = require("
|
|
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("
|
|
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("
|
|
125
|
-
var XInputDecimalBase_1 = require("
|
|
126
|
-
var XLocale_1 = require("
|
|
127
|
-
var XFtsInput_1 = require("
|
|
128
|
-
var XUtilsMetadataCommon_1 = require("
|
|
129
|
-
var
|
|
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)(
|
|
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
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
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
|
|
648
|
-
bodyValue = react_1.default.createElement(
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@michalrakus/x-react-web-lib",
|
|
3
|
-
"version": "1.
|
|
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"
|