@michalrakus/x-react-web-lib 1.22.0 → 1.23.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/XMultiSelect.d.ts +3 -0
- package/XMultiSelect.js +5 -0
- package/XMultiSelectBase.d.ts +3 -0
- package/XMultiSelectBase.js +5 -0
- package/gulpfile.js +2 -0
- package/lib/administration/XBrowseMetaBrowse.d.ts +2 -2
- package/lib/administration/XBrowseMetaForm.d.ts +2 -2
- package/lib/administration/XParamBrowse.d.ts +2 -2
- package/lib/administration/XParamForm.d.ts +2 -2
- package/lib/administration/XUserBrowse.d.ts +2 -2
- package/lib/administration/XUserForm.d.ts +2 -2
- package/lib/components/SourceCodeLinkEntity.d.ts +2 -2
- package/lib/components/XAutoComplete.d.ts +2 -1
- package/lib/components/XAutoComplete.js +2 -2
- package/lib/components/XAutoCompleteBase.d.ts +5 -11
- package/lib/components/XAutoCompleteBase.js +28 -11
- package/lib/components/XAutoCompleteDT.d.ts +1 -1
- package/lib/components/XButton.d.ts +1 -1
- package/lib/components/XButtonIconMedium.d.ts +1 -1
- package/lib/components/XButtonIconNarrow.d.ts +1 -1
- package/lib/components/XButtonIconSmall.d.ts +1 -1
- package/lib/components/XCalendar.d.ts +2 -2
- package/lib/components/XCalendar.js +1 -1
- package/lib/components/XChangePasswordForm.d.ts +2 -2
- package/lib/components/XCheckboxDT.d.ts +2 -2
- package/lib/components/XDataTable.d.ts +2 -2
- package/lib/components/XDropdown.d.ts +2 -2
- package/lib/components/XDropdown.js +1 -1
- package/lib/components/XDropdownDT.d.ts +2 -2
- package/lib/components/XDropdownDTFilter.d.ts +2 -2
- package/lib/components/XDropdownForEntity.d.ts +2 -2
- package/lib/components/XDropdownForEntity.js +1 -1
- package/lib/components/XDropdownFormDTFilter.d.ts +2 -2
- package/lib/components/XEditBrowse.d.ts +2 -2
- package/lib/components/XEditColumnDialog.d.ts +2 -2
- package/lib/components/XEditor.d.ts +1 -1
- package/lib/components/XEditorBase.d.ts +1 -1
- package/lib/components/XEditorBase.js +1 -1
- package/lib/components/XFieldSelector.d.ts +2 -2
- package/lib/components/XFormComponent.d.ts +1 -0
- package/lib/components/XFormDataTable2.d.ts +1 -1
- package/lib/components/XFormFooter.d.ts +2 -2
- package/lib/components/XFormHeader.d.ts +2 -2
- package/lib/components/XFormNavigator3.d.ts +2 -2
- package/lib/components/XFormRowCol/XFormCol.d.ts +1 -1
- package/lib/components/XFormRowCol/XFormInlineRow.d.ts +1 -1
- package/lib/components/XFormRowCol/XFormRow.d.ts +1 -1
- package/lib/components/XFormRowCol/XFormRowCol.d.ts +1 -1
- package/lib/components/XFtsInput.d.ts +2 -2
- package/lib/components/XHolders.d.ts +3 -3
- package/lib/components/XInputDate.d.ts +2 -2
- package/lib/components/XInputDateDT.d.ts +2 -2
- package/lib/components/XInputDecimal.d.ts +1 -1
- package/lib/components/XInputDecimalBase.d.ts +2 -2
- package/lib/components/XInputDecimalDT.d.ts +2 -2
- package/lib/components/XInputDecimalDT.js +1 -1
- package/lib/components/XInputFileList.d.ts +2 -1
- package/lib/components/XInputInterval.d.ts +1 -1
- package/lib/components/XInputIntervalBase.d.ts +2 -2
- package/lib/components/XInputIntervalBase.js +1 -1
- package/lib/components/XInputIntervalDT.d.ts +2 -2
- package/lib/components/XInputText.d.ts +2 -2
- package/lib/components/XInputText.js +14 -3
- package/lib/components/XInputTextDT.d.ts +2 -2
- package/lib/components/XInputTextarea.d.ts +1 -1
- package/lib/components/XInputTextarea.js +13 -3
- package/lib/components/XInputTextareaBase.d.ts +3 -1
- package/lib/components/XInputTextareaBase.js +1 -1
- package/lib/components/XInputTextareaDT.d.ts +2 -2
- package/lib/components/XLazyDataTable/XExportRowsDialog.d.ts +2 -2
- package/lib/components/XLazyDataTable/XLazyDataTable.d.ts +1 -1
- package/lib/components/XLazyDataTable/XMultilineSwitch.d.ts +2 -2
- package/lib/components/XLazyDataTable/XOcfDropdown.d.ts +2 -2
- package/lib/components/XLoginDialog.d.ts +2 -2
- package/lib/components/XLoginForm.d.ts +2 -2
- package/lib/components/XMultiSelect.d.ts +25 -0
- package/lib/components/XMultiSelect.js +97 -0
- package/lib/components/XMultiSelectBase.d.ts +27 -0
- package/lib/components/XMultiSelectBase.js +145 -0
- package/lib/components/XSearchBrowseParams.d.ts +1 -1
- package/lib/components/XSearchButton.d.ts +1 -1
- package/lib/components/XSearchButtonDT.d.ts +2 -2
- package/lib/components/XSearchButtonOld.d.ts +1 -1
- package/lib/components/XToOneAssocButton.d.ts +2 -2
- package/lib/components/XToken.d.ts +1 -1
- package/lib/components/XUtils.d.ts +9 -2
- package/lib/components/XUtils.js +41 -21
- package/lib/serverApi/XUtilsMetadataCommon.d.ts +3 -1
- package/lib/serverApi/XUtilsMetadataCommon.js +9 -3
- package/package.json +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { XFormComponentProps } from "./XFormComponent";
|
|
3
3
|
import { XInput } from "./XInput";
|
|
4
4
|
export interface XInputDateProps extends XFormComponentProps<number> {
|
|
@@ -8,5 +8,5 @@ export declare class XInputDate extends XInput<Date, XInputDateProps> {
|
|
|
8
8
|
constructor(props: XInputDateProps);
|
|
9
9
|
getValue(): Date | null;
|
|
10
10
|
onValueChange(value: Date | null): void;
|
|
11
|
-
render(): JSX.Element;
|
|
11
|
+
render(): React.JSX.Element;
|
|
12
12
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { XInputDT, XInputDTProps } from "./XInputDT";
|
|
3
3
|
export interface XInputDateDTProps extends XInputDTProps {
|
|
4
4
|
}
|
|
@@ -6,5 +6,5 @@ export declare class XInputDateDT extends XInputDT<XInputDateDTProps> {
|
|
|
6
6
|
constructor(props: XInputDateDTProps);
|
|
7
7
|
getValue(): Date | null;
|
|
8
8
|
onValueChange(value: Date | null): void;
|
|
9
|
-
render(): JSX.Element;
|
|
9
|
+
render(): React.JSX.Element;
|
|
10
10
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
2
|
export declare const XInputDecimalBase: (props: {
|
|
3
3
|
id?: string | undefined;
|
|
4
4
|
value: number | null;
|
|
@@ -10,4 +10,4 @@ export declare const XInputDecimalBase: (props: {
|
|
|
10
10
|
max?: number | undefined;
|
|
11
11
|
size?: number | undefined;
|
|
12
12
|
className?: string | undefined;
|
|
13
|
-
}) => JSX.Element;
|
|
13
|
+
}) => React.JSX.Element;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { XInputDT, XInputDTProps } from "./XInputDT";
|
|
3
3
|
export interface XInputDecimalDTProps extends XInputDTProps {
|
|
4
4
|
}
|
|
@@ -7,5 +7,5 @@ export declare class XInputDecimalDT extends XInputDT<XInputDecimalDTProps> {
|
|
|
7
7
|
getValue(): number | undefined;
|
|
8
8
|
onValueChange(e: any): void;
|
|
9
9
|
onBlur(e: any): void;
|
|
10
|
-
render(): JSX.Element;
|
|
10
|
+
render(): React.JSX.Element;
|
|
11
11
|
}
|
|
@@ -67,7 +67,7 @@ var XInputDecimalDT = /** @class */ (function (_super) {
|
|
|
67
67
|
};
|
|
68
68
|
XInputDecimalDT.prototype.render = function () {
|
|
69
69
|
var _a = XUtilsMetadata_1.XUtilsMetadata.getParamsForInputNumber(this.xField), useGrouping = _a.useGrouping, fractionDigits = _a.fractionDigits, min = _a.min, max = _a.max;
|
|
70
|
-
return (react_1.default.createElement(inputnumber_1.InputNumber, __assign({ id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), mode: "decimal", locale: "de-DE", useGrouping: useGrouping, minFractionDigits: fractionDigits, maxFractionDigits: fractionDigits, min: min, max: max, onBlur: this.onBlur }, XUtils_1.XUtils.addClassName(XUtils_1.XUtils.
|
|
70
|
+
return (react_1.default.createElement(inputnumber_1.InputNumber, __assign({ id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), mode: "decimal", locale: "de-DE", useGrouping: useGrouping, minFractionDigits: fractionDigits, maxFractionDigits: fractionDigits, min: min, max: max, onBlur: this.onBlur }, XUtils_1.XUtils.addClassName(XUtils_1.XUtils.createTooltipOrErrorProps(this.getError()), "x-input-to-resize"))));
|
|
71
71
|
};
|
|
72
72
|
return XInputDecimalDT;
|
|
73
73
|
}(XInputDT_1.XInputDT));
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import { Component } from "react";
|
|
2
3
|
import { FileUploadHandlerEvent } from "primereact/fileupload";
|
|
3
4
|
import { XFormBase } from "./XFormBase";
|
|
@@ -31,6 +32,6 @@ export declare class XInputFileList extends Component<XInputFileListProps> {
|
|
|
31
32
|
static sizeInMB(size: number): string;
|
|
32
33
|
onDownloadFile(xFile: XFile): Promise<void>;
|
|
33
34
|
onRemoveFile(fileItem: any): Promise<void>;
|
|
34
|
-
render(): JSX.Element;
|
|
35
|
+
render(): React.JSX.Element;
|
|
35
36
|
}
|
|
36
37
|
export {};
|
|
@@ -10,5 +10,5 @@ export declare class XInputInterval extends XInput<number, XInputIntervalProps>
|
|
|
10
10
|
constructor(props: XInputIntervalProps);
|
|
11
11
|
getValue(): IPostgresInterval | null;
|
|
12
12
|
onValueChange(value: IPostgresInterval | null): void;
|
|
13
|
-
render(): JSX.Element;
|
|
13
|
+
render(): React.JSX.Element;
|
|
14
14
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CSSProperties } from "react";
|
|
1
|
+
import React, { CSSProperties } from "react";
|
|
2
2
|
import { IPostgresInterval } from "./XUtils";
|
|
3
3
|
export declare const XInputIntervalBase: (props: {
|
|
4
4
|
id?: string | undefined;
|
|
@@ -7,4 +7,4 @@ export declare const XInputIntervalBase: (props: {
|
|
|
7
7
|
readOnly?: boolean | undefined;
|
|
8
8
|
error?: string | undefined;
|
|
9
9
|
style?: CSSProperties | undefined;
|
|
10
|
-
}) => JSX.Element;
|
|
10
|
+
}) => React.JSX.Element;
|
|
@@ -92,6 +92,6 @@ var XInputIntervalBase = function (props) {
|
|
|
92
92
|
return inputValue;
|
|
93
93
|
};
|
|
94
94
|
// remark - width:'3.5rem' is default, can be overriden by value from props.style, if needed
|
|
95
|
-
return (react_1.default.createElement(inputtext_1.InputText, __assign({ id: props.id, value: getInputValue(), onChange: onChange, onBlur: onBlur, readOnly: props.readOnly }, XUtils_1.XUtils.
|
|
95
|
+
return (react_1.default.createElement(inputtext_1.InputText, __assign({ id: props.id, value: getInputValue(), onChange: onChange, onBlur: onBlur, readOnly: props.readOnly }, XUtils_1.XUtils.createTooltipOrErrorProps(props.error), { style: __assign({ width: '3.5rem' }, props.style) })));
|
|
96
96
|
};
|
|
97
97
|
exports.XInputIntervalBase = XInputIntervalBase;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { IPostgresInterval } from "./XUtils";
|
|
3
3
|
import { XInputDT, XInputDTProps } from "./XInputDT";
|
|
4
4
|
export interface XInputIntervalDTProps extends XInputDTProps {
|
|
@@ -7,5 +7,5 @@ export declare class XInputIntervalDT extends XInputDT<XInputIntervalDTProps> {
|
|
|
7
7
|
constructor(props: XInputIntervalDTProps);
|
|
8
8
|
getValue(): IPostgresInterval | null;
|
|
9
9
|
onValueChange(value: IPostgresInterval | null): void;
|
|
10
|
-
render(): JSX.Element;
|
|
10
|
+
render(): React.JSX.Element;
|
|
11
11
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { XInput, XInputProps } from "./XInput";
|
|
3
3
|
export interface XInputTextProps extends XInputProps<string> {
|
|
4
4
|
size?: number;
|
|
@@ -8,5 +8,5 @@ export declare class XInputText extends XInput<string, XInputTextProps> {
|
|
|
8
8
|
getValue(): string;
|
|
9
9
|
onValueChange(e: any): void;
|
|
10
10
|
onBlur(e: any): void;
|
|
11
|
-
render(): JSX.Element;
|
|
11
|
+
render(): React.JSX.Element;
|
|
12
12
|
}
|
|
@@ -34,6 +34,8 @@ var react_1 = __importDefault(require("react"));
|
|
|
34
34
|
var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
|
|
35
35
|
var inputtext_1 = require("primereact/inputtext");
|
|
36
36
|
var XInput_1 = require("./XInput");
|
|
37
|
+
var XUtils_1 = require("./XUtils");
|
|
38
|
+
var tooltip_1 = require("primereact/tooltip");
|
|
37
39
|
var XInputText = /** @class */ (function (_super) {
|
|
38
40
|
__extends(XInputText, _super);
|
|
39
41
|
function XInputText(props) {
|
|
@@ -57,13 +59,22 @@ var XInputText = /** @class */ (function (_super) {
|
|
|
57
59
|
this.callOnChangeFromOnBlur();
|
|
58
60
|
};
|
|
59
61
|
XInputText.prototype.render = function () {
|
|
60
|
-
var _a;
|
|
62
|
+
var _a, _b;
|
|
63
|
+
var value = this.getValue();
|
|
64
|
+
var labelTooltip = undefined;
|
|
65
|
+
var labelElemId = undefined;
|
|
66
|
+
if (value) {
|
|
67
|
+
// nevidno placeholder, tak zobrazime desc ako label tooltip
|
|
68
|
+
labelTooltip = this.props.desc;
|
|
69
|
+
labelElemId = "".concat(this.props.field, "_label_id");
|
|
70
|
+
}
|
|
61
71
|
var size = (_a = this.props.size) !== null && _a !== void 0 ? _a : this.xField.length;
|
|
62
72
|
// note: style overrides size (width of the input according to character count)
|
|
63
73
|
var label = this.getLabel();
|
|
64
74
|
return (react_1.default.createElement("div", { className: "field grid" },
|
|
65
|
-
label !== undefined ? react_1.default.createElement("label", { htmlFor: this.props.field, className: "col-fixed", style: this.getLabelStyle() }, label) : null,
|
|
66
|
-
react_1.default.createElement(
|
|
75
|
+
label !== undefined ? react_1.default.createElement("label", { id: labelElemId, htmlFor: this.props.field, className: "col-fixed", style: this.getLabelStyle() }, label) : null,
|
|
76
|
+
labelTooltip ? react_1.default.createElement(tooltip_1.Tooltip, { target: "#".concat(labelElemId), content: labelTooltip }) : null,
|
|
77
|
+
react_1.default.createElement(inputtext_1.InputText, __assign({ id: this.props.field, value: value, onChange: this.onValueChange, onBlur: this.onBlur, readOnly: this.isReadOnly(), maxLength: this.xField.length, size: size, style: this.props.inputStyle }, XUtils_1.XUtils.createTooltipOrErrorProps(this.getError(), this.props.tooltip), { placeholder: (_b = this.props.placeholder) !== null && _b !== void 0 ? _b : this.props.desc }))));
|
|
67
78
|
};
|
|
68
79
|
return XInputText;
|
|
69
80
|
}(XInput_1.XInput));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { XFormBase } from "./XFormBase";
|
|
2
|
+
import React from "react";
|
|
3
3
|
import { XTableFieldReadOnlyProp } from "./XFormDataTable2";
|
|
4
4
|
export declare const XInputTextDT: (props: {
|
|
5
5
|
form: XFormBase;
|
|
@@ -7,4 +7,4 @@ export declare const XInputTextDT: (props: {
|
|
|
7
7
|
field: string;
|
|
8
8
|
rowData: any;
|
|
9
9
|
readOnly?: XTableFieldReadOnlyProp | undefined;
|
|
10
|
-
}) => JSX.Element;
|
|
10
|
+
}) => React.JSX.Element;
|
|
@@ -23,6 +23,7 @@ var react_1 = __importDefault(require("react"));
|
|
|
23
23
|
var XInput_1 = require("./XInput");
|
|
24
24
|
var XUtils_1 = require("./XUtils");
|
|
25
25
|
var XInputTextareaBase_1 = require("./XInputTextareaBase");
|
|
26
|
+
var tooltip_1 = require("primereact/tooltip");
|
|
26
27
|
var XInputTextarea = /** @class */ (function (_super) {
|
|
27
28
|
__extends(XInputTextarea, _super);
|
|
28
29
|
function XInputTextarea(props) {
|
|
@@ -41,7 +42,7 @@ var XInputTextarea = /** @class */ (function (_super) {
|
|
|
41
42
|
return this.props.labelOnTop ? ((_a = this.props.labelStyle) !== null && _a !== void 0 ? _a : {}) : _super.prototype.getLabelStyle.call(this);
|
|
42
43
|
};
|
|
43
44
|
XInputTextarea.prototype.render = function () {
|
|
44
|
-
var _a;
|
|
45
|
+
var _a, _b;
|
|
45
46
|
var inputStyle = (_a = this.props.inputStyle) !== null && _a !== void 0 ? _a : {};
|
|
46
47
|
var cols;
|
|
47
48
|
if (this.props.cols === "full") {
|
|
@@ -57,11 +58,20 @@ var XInputTextarea = /** @class */ (function (_super) {
|
|
|
57
58
|
// aj tak sa asi vzdy bude pouzivat "full"
|
|
58
59
|
cols = this.props.cols;
|
|
59
60
|
}
|
|
61
|
+
var value = this.getValue();
|
|
62
|
+
var labelTooltip = undefined;
|
|
63
|
+
var labelElemId = undefined;
|
|
64
|
+
if (value !== null) {
|
|
65
|
+
// nevidno placeholder, tak zobrazime desc ako label tooltip
|
|
66
|
+
labelTooltip = this.props.desc;
|
|
67
|
+
labelElemId = "".concat(this.props.field, "_label_id");
|
|
68
|
+
}
|
|
60
69
|
// InputTextarea renderujeme az ked mame nacitany object, lebo inac pri autoResize sa nam nenastavi spravna velkost (hodnota nie je k dispozicii pri prvom renderingu)
|
|
61
70
|
return (react_1.default.createElement("div", { className: !this.props.labelOnTop ? 'field grid' : 'field grid x-inputtextarea-label-on-top' },
|
|
62
|
-
react_1.default.createElement("label", { htmlFor: this.props.field, className: !this.props.labelOnTop ? 'col-fixed' : undefined, style: this.getLabelStyle() }, this.getLabel()),
|
|
71
|
+
react_1.default.createElement("label", { id: labelElemId, htmlFor: this.props.field, className: !this.props.labelOnTop ? 'col-fixed' : undefined, style: this.getLabelStyle() }, this.getLabel()),
|
|
72
|
+
labelTooltip ? react_1.default.createElement(tooltip_1.Tooltip, { target: "#".concat(labelElemId), content: labelTooltip }) : null,
|
|
63
73
|
this.props.form.state.object ?
|
|
64
|
-
react_1.default.createElement(XInputTextareaBase_1.XInputTextareaBase, { id: this.props.field, value:
|
|
74
|
+
react_1.default.createElement(XInputTextareaBase_1.XInputTextareaBase, { id: this.props.field, value: value, onChange: this.onValueChange, readOnly: this.isReadOnly(), maxLength: this.xField.length, style: inputStyle, rows: this.props.rows, cols: cols, autoResize: this.props.autoResize, error: this.getError(), tooltip: this.props.tooltip, placeholder: (_b = this.props.placeholder) !== null && _b !== void 0 ? _b : this.props.desc })
|
|
65
75
|
: null));
|
|
66
76
|
};
|
|
67
77
|
XInputTextarea.defaultProps = {
|
|
@@ -10,4 +10,6 @@ export declare const XInputTextareaBase: (props: {
|
|
|
10
10
|
error?: string | undefined;
|
|
11
11
|
style?: React.CSSProperties | undefined;
|
|
12
12
|
maxLength?: number | undefined;
|
|
13
|
-
|
|
13
|
+
tooltip?: string | undefined;
|
|
14
|
+
placeholder?: string | undefined;
|
|
15
|
+
}) => React.JSX.Element;
|
|
@@ -86,6 +86,6 @@ var XInputTextareaBase = function (props) {
|
|
|
86
86
|
}
|
|
87
87
|
return inputValue;
|
|
88
88
|
};
|
|
89
|
-
return (react_1.default.createElement(inputtextarea_1.InputTextarea, __assign({ id: props.id, value: getInputValue(), onChange: onChange, onBlur: onBlur, readOnly: props.readOnly, maxLength: props.maxLength, style: props.style, rows: props.rows, cols: props.cols, autoResize: props.autoResize }, XUtils_1.XUtils.
|
|
89
|
+
return (react_1.default.createElement(inputtextarea_1.InputTextarea, __assign({ id: props.id, value: getInputValue(), onChange: onChange, onBlur: onBlur, readOnly: props.readOnly, maxLength: props.maxLength, style: props.style, rows: props.rows, cols: props.cols, autoResize: props.autoResize }, XUtils_1.XUtils.createTooltipOrErrorProps(props.error, props.tooltip), { placeholder: props.placeholder })));
|
|
90
90
|
};
|
|
91
91
|
exports.XInputTextareaBase = XInputTextareaBase;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { XInputDT, XInputDTProps } from "./XInputDT";
|
|
3
3
|
export interface XInputTextareaDTProps extends XInputDTProps {
|
|
4
4
|
rows: number;
|
|
@@ -8,5 +8,5 @@ export declare class XInputTextareaDT extends XInputDT<XInputTextareaDTProps> {
|
|
|
8
8
|
constructor(props: XInputTextareaDTProps);
|
|
9
9
|
getValue(): string | null;
|
|
10
10
|
onValueChange(value: string | null): void;
|
|
11
|
-
render(): JSX.Element;
|
|
11
|
+
render(): React.JSX.Element;
|
|
12
12
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { ExportType, LazyDataTableQueryParam } from "../../serverApi/ExportImportParam";
|
|
2
|
+
import React from "react";
|
|
3
3
|
export interface XExportParams {
|
|
4
4
|
rowCount: number;
|
|
5
5
|
existsToManyAssoc: boolean;
|
|
@@ -17,4 +17,4 @@ export declare const XExportRowsDialog: (props: {
|
|
|
17
17
|
dialogState: XExportRowsDialogState;
|
|
18
18
|
hideDialog: () => void;
|
|
19
19
|
exportTypeOptions?: ExportType[];
|
|
20
|
-
}) => JSX.Element;
|
|
20
|
+
}) => React.JSX.Element;
|
|
@@ -75,7 +75,7 @@ export interface XLazyDataTableProps {
|
|
|
75
75
|
children: ReactChild[];
|
|
76
76
|
}
|
|
77
77
|
export declare const XLazyDataTable: {
|
|
78
|
-
(props: XLazyDataTableProps): JSX.Element;
|
|
78
|
+
(props: XLazyDataTableProps): React.JSX.Element;
|
|
79
79
|
defaultProps: {
|
|
80
80
|
paginator: boolean;
|
|
81
81
|
rows: number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { XMultilineRenderType } from "./XLazyDataTable";
|
|
3
3
|
export declare const XMultilineSwitch: (props: {
|
|
4
4
|
value: XMultilineRenderType;
|
|
5
5
|
onChange: (value: XMultilineRenderType) => void;
|
|
6
6
|
className?: string | undefined;
|
|
7
|
-
}) => JSX.Element;
|
|
7
|
+
}) => React.JSX.Element;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { XOptionalCustomFilter } from "./XLazyDataTable";
|
|
3
3
|
export declare const XOcfDropdown: (props: {
|
|
4
4
|
optionalCustomFilters: XOptionalCustomFilter[];
|
|
5
5
|
value: XOptionalCustomFilter | undefined;
|
|
6
6
|
onChange: (value: XOptionalCustomFilter | undefined) => void;
|
|
7
7
|
className?: string | undefined;
|
|
8
|
-
}) => JSX.Element;
|
|
8
|
+
}) => React.JSX.Element;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { XToken } from "./XToken";
|
|
3
3
|
export declare const XLoginDialog: (props: {
|
|
4
4
|
dialogOpened: boolean;
|
|
5
5
|
setXToken: (xToken: XToken | null) => void;
|
|
6
6
|
onHideDialog: (ok: boolean) => void;
|
|
7
7
|
customUserService?: string | undefined;
|
|
8
|
-
}) => JSX.Element;
|
|
8
|
+
}) => React.JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { XToken } from "./XToken";
|
|
2
|
+
import React from "react";
|
|
3
3
|
export declare const XLoginForm: (props: {
|
|
4
4
|
setXToken: (xToken: XToken | null) => void;
|
|
5
5
|
onLogin?: (() => void) | undefined;
|
|
6
6
|
customUserService?: string | undefined;
|
|
7
|
-
}) => JSX.Element;
|
|
7
|
+
}) => React.JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { XFilterProp, XFormComponent, XFormComponentProps } from "./XFormComponent";
|
|
3
|
+
import { XAssoc } from "../serverApi/XEntityMetadata";
|
|
4
|
+
import { XObject } from "./XObject";
|
|
5
|
+
import { DataTableSortMeta } from "primereact/datatable";
|
|
6
|
+
export interface XMultiSelectProps extends XFormComponentProps<XObject> {
|
|
7
|
+
assocToMany: string;
|
|
8
|
+
assocManyToOne?: string;
|
|
9
|
+
displayField: string;
|
|
10
|
+
filter?: XFilterProp;
|
|
11
|
+
sortField?: string | DataTableSortMeta[];
|
|
12
|
+
fields?: string[];
|
|
13
|
+
width?: string;
|
|
14
|
+
scrollHeight?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class XMultiSelect extends XFormComponent<XObject, XMultiSelectProps> {
|
|
17
|
+
protected xAssocToMany: XAssoc;
|
|
18
|
+
protected xAssocManyToOne?: XAssoc;
|
|
19
|
+
constructor(props: XMultiSelectProps);
|
|
20
|
+
getField(): string;
|
|
21
|
+
isNotNull(): boolean;
|
|
22
|
+
getValue(): any[];
|
|
23
|
+
onChange(value: any[]): void;
|
|
24
|
+
render(): React.JSX.Element;
|
|
25
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
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.XMultiSelect = void 0;
|
|
22
|
+
var react_1 = __importDefault(require("react"));
|
|
23
|
+
var XFormComponent_1 = require("./XFormComponent");
|
|
24
|
+
var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
|
|
25
|
+
var XMultiSelectBase_1 = require("./XMultiSelectBase");
|
|
26
|
+
var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
|
|
27
|
+
var XMultiSelect = /** @class */ (function (_super) {
|
|
28
|
+
__extends(XMultiSelect, _super);
|
|
29
|
+
function XMultiSelect(props) {
|
|
30
|
+
var _this = _super.call(this, props) || this;
|
|
31
|
+
_this.xAssocToMany = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToManyByPath(XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.form.getEntity()), props.assocToMany);
|
|
32
|
+
if (props.assocManyToOne) {
|
|
33
|
+
_this.xAssocManyToOne = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToOneByPath(XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(_this.xAssocToMany.entityName), props.assocManyToOne);
|
|
34
|
+
}
|
|
35
|
+
if (props.assocManyToOne) {
|
|
36
|
+
props.form.addField(props.assocToMany + '.' + props.assocManyToOne + '.' + props.displayField);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
props.form.addField(props.assocToMany + '.' + props.displayField);
|
|
40
|
+
}
|
|
41
|
+
_this.onChange = _this.onChange.bind(_this);
|
|
42
|
+
return _this;
|
|
43
|
+
}
|
|
44
|
+
XMultiSelect.prototype.getField = function () {
|
|
45
|
+
return this.props.assocToMany;
|
|
46
|
+
};
|
|
47
|
+
XMultiSelect.prototype.isNotNull = function () {
|
|
48
|
+
return !this.xAssocToMany.isNullable;
|
|
49
|
+
};
|
|
50
|
+
XMultiSelect.prototype.getValue = function () {
|
|
51
|
+
var _this = this;
|
|
52
|
+
var optionRowList;
|
|
53
|
+
var rowList = this.getValueFromObject();
|
|
54
|
+
if (this.props.assocManyToOne) {
|
|
55
|
+
// assoc "assocToMany" contains link rows - these link rows have to be transformed to option rows
|
|
56
|
+
if (rowList !== null) {
|
|
57
|
+
optionRowList = rowList.map(function (linkRow) { return XUtilsCommon_1.XUtilsCommon.getValueByPath(linkRow, _this.props.assocManyToOne); });
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// this.props.form.state.object was not initialised yet
|
|
61
|
+
optionRowList = [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// assoc "assocToMany" contains option rows - no transformation needed
|
|
66
|
+
optionRowList = rowList !== null && rowList !== void 0 ? rowList : [];
|
|
67
|
+
}
|
|
68
|
+
return optionRowList;
|
|
69
|
+
};
|
|
70
|
+
XMultiSelect.prototype.onChange = function (value) {
|
|
71
|
+
var _this = this;
|
|
72
|
+
// value coming from XMultiSelectBase is list of selected option rows
|
|
73
|
+
var rowList;
|
|
74
|
+
if (this.props.assocManyToOne) {
|
|
75
|
+
// assoc "assocToMany" expects link rows - we wrap options row into link rows, id is left undefined,
|
|
76
|
+
// during save will be all old links deleted and these new links will be inserted (because id is undefined)
|
|
77
|
+
rowList = value.map(function (optionRow) {
|
|
78
|
+
var linkRow = {};
|
|
79
|
+
linkRow[_this.props.assocManyToOne] = optionRow;
|
|
80
|
+
return linkRow;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// assoc "assocToMany" expects option rows - no transformation needed
|
|
85
|
+
rowList = value;
|
|
86
|
+
}
|
|
87
|
+
this.onValueChangeBase(rowList, this.props.onChange);
|
|
88
|
+
};
|
|
89
|
+
XMultiSelect.prototype.render = function () {
|
|
90
|
+
var _this = this;
|
|
91
|
+
return (react_1.default.createElement("div", { className: "field grid" },
|
|
92
|
+
react_1.default.createElement("label", { htmlFor: this.props.assocToMany, className: "col-fixed", style: this.getLabelStyle() }, this.getLabel()),
|
|
93
|
+
react_1.default.createElement(XMultiSelectBase_1.XMultiSelectBase, { value: this.getValue(), onChange: this.onChange, displayField: this.props.displayField, optionsQuery: { entity: this.xAssocManyToOne ? this.xAssocManyToOne.entityName : this.xAssocToMany.entityName, filter: function () { return _this.getFilterBase(_this.props.filter); }, sortField: this.props.sortField, fields: this.props.fields }, width: this.props.width, scrollHeight: this.props.scrollHeight, readOnly: this.isReadOnly(), error: this.getError() })));
|
|
94
|
+
};
|
|
95
|
+
return XMultiSelect;
|
|
96
|
+
}(XFormComponent_1.XFormComponent));
|
|
97
|
+
exports.XMultiSelect = XMultiSelect;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React, { Component } from "react";
|
|
2
|
+
import { XQuery } from "./XUtils";
|
|
3
|
+
import { DataTableSortMeta } from "primereact/datatable";
|
|
4
|
+
import { XDropdownForEntityProps } from "./XDropdownForEntity";
|
|
5
|
+
export interface XMultiSelectBaseProps {
|
|
6
|
+
value: any[];
|
|
7
|
+
onChange: (value: any[]) => void;
|
|
8
|
+
optionsQuery?: XQuery;
|
|
9
|
+
displayField: string;
|
|
10
|
+
maxSelectedLabels?: number;
|
|
11
|
+
width?: string;
|
|
12
|
+
scrollHeight?: string;
|
|
13
|
+
readOnly?: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class XMultiSelectBase extends Component<XMultiSelectBaseProps> {
|
|
17
|
+
static defaultProps: {};
|
|
18
|
+
protected idField: string;
|
|
19
|
+
state: {
|
|
20
|
+
options: any[];
|
|
21
|
+
};
|
|
22
|
+
constructor(props: XDropdownForEntityProps);
|
|
23
|
+
componentDidMount(): void;
|
|
24
|
+
loadOptions(): Promise<void>;
|
|
25
|
+
getSortField(): string | DataTableSortMeta[] | undefined;
|
|
26
|
+
render(): React.JSX.Element;
|
|
27
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
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 __assign = (this && this.__assign) || function () {
|
|
18
|
+
__assign = Object.assign || function(t) {
|
|
19
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
+
s = arguments[i];
|
|
21
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
+
t[p] = s[p];
|
|
23
|
+
}
|
|
24
|
+
return t;
|
|
25
|
+
};
|
|
26
|
+
return __assign.apply(this, arguments);
|
|
27
|
+
};
|
|
28
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
31
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
32
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
33
|
+
}
|
|
34
|
+
Object.defineProperty(o, k2, desc);
|
|
35
|
+
}) : (function(o, m, k, k2) {
|
|
36
|
+
if (k2 === undefined) k2 = k;
|
|
37
|
+
o[k2] = m[k];
|
|
38
|
+
}));
|
|
39
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
40
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
41
|
+
}) : function(o, v) {
|
|
42
|
+
o["default"] = v;
|
|
43
|
+
});
|
|
44
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
45
|
+
if (mod && mod.__esModule) return mod;
|
|
46
|
+
var result = {};
|
|
47
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
48
|
+
__setModuleDefault(result, mod);
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
52
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
53
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
54
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
55
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
56
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
57
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
61
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
62
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
63
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
64
|
+
function step(op) {
|
|
65
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
66
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
67
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
68
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
69
|
+
switch (op[0]) {
|
|
70
|
+
case 0: case 1: t = op; break;
|
|
71
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
72
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
73
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
74
|
+
default:
|
|
75
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
76
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
77
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
78
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
79
|
+
if (t[2]) _.ops.pop();
|
|
80
|
+
_.trys.pop(); continue;
|
|
81
|
+
}
|
|
82
|
+
op = body.call(thisArg, _);
|
|
83
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
84
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
88
|
+
exports.XMultiSelectBase = void 0;
|
|
89
|
+
var react_1 = __importStar(require("react"));
|
|
90
|
+
var XUtils_1 = require("./XUtils");
|
|
91
|
+
var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
|
|
92
|
+
var multiselect_1 = require("primereact/multiselect");
|
|
93
|
+
var XMultiSelectBase = /** @class */ (function (_super) {
|
|
94
|
+
__extends(XMultiSelectBase, _super);
|
|
95
|
+
function XMultiSelectBase(props) {
|
|
96
|
+
var _this = _super.call(this, props) || this;
|
|
97
|
+
if (!_this.props.optionsQuery) {
|
|
98
|
+
throw "XMultiSelectBase.optionsQuery: unexpected error - prop optionsQuery is undefined";
|
|
99
|
+
}
|
|
100
|
+
_this.idField = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(_this.props.optionsQuery.entity).idField;
|
|
101
|
+
_this.state = {
|
|
102
|
+
options: []
|
|
103
|
+
};
|
|
104
|
+
return _this;
|
|
105
|
+
}
|
|
106
|
+
XMultiSelectBase.prototype.componentDidMount = function () {
|
|
107
|
+
this.loadOptions();
|
|
108
|
+
};
|
|
109
|
+
XMultiSelectBase.prototype.loadOptions = function () {
|
|
110
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
111
|
+
var options;
|
|
112
|
+
return __generator(this, function (_a) {
|
|
113
|
+
switch (_a.label) {
|
|
114
|
+
case 0:
|
|
115
|
+
if (!this.props.optionsQuery) {
|
|
116
|
+
throw "XMultiSelectBase.optionsQuery: unexpected error - prop optionsQuery is undefined";
|
|
117
|
+
}
|
|
118
|
+
return [4 /*yield*/, XUtils_1.XUtils.fetchRows(this.props.optionsQuery.entity, XUtils_1.XUtils.evalFilter(this.props.optionsQuery.filter), this.getSortField(), this.props.optionsQuery.fields)];
|
|
119
|
+
case 1:
|
|
120
|
+
options = _a.sent();
|
|
121
|
+
this.setState({ options: options });
|
|
122
|
+
return [2 /*return*/];
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
XMultiSelectBase.prototype.getSortField = function () {
|
|
128
|
+
var sortField = this.props.optionsQuery.sortField;
|
|
129
|
+
if (!sortField) {
|
|
130
|
+
// ako default pouzivame displayField
|
|
131
|
+
sortField = this.props.displayField;
|
|
132
|
+
}
|
|
133
|
+
return sortField;
|
|
134
|
+
};
|
|
135
|
+
XMultiSelectBase.prototype.render = function () {
|
|
136
|
+
var _this = this;
|
|
137
|
+
// propertiesy na Dropdown-e: readOnly vyseduje, disabled znemoznuje vyber polozky
|
|
138
|
+
return (react_1.default.createElement(multiselect_1.MultiSelect, __assign({ options: this.state.options, optionLabel: this.props.displayField, dataKey: this.idField, maxSelectedLabels: this.props.maxSelectedLabels, display: "chip", value: this.props.value, onChange: function (e) { return _this.props.onChange(e.value); }, readOnly: this.props.readOnly, disabled: this.props.readOnly }, XUtils_1.XUtils.createTooltipOrErrorProps(this.props.error))));
|
|
139
|
+
};
|
|
140
|
+
XMultiSelectBase.defaultProps = {
|
|
141
|
+
//scrollHeight: '15rem' // primereact has 200px
|
|
142
|
+
};
|
|
143
|
+
return XMultiSelectBase;
|
|
144
|
+
}(react_1.Component));
|
|
145
|
+
exports.XMultiSelectBase = XMultiSelectBase;
|