@michalrakus/x-react-web-lib 1.27.0 → 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/XAutoCompleteBase.js +4 -4
- package/lib/components/XFormBase.d.ts +1 -1
- package/lib/components/XFormBase.js +4 -5
- package/lib/components/XInputDecimalBase.d.ts +1 -0
- package/lib/components/XInputDecimalBase.js +1 -1
- package/lib/components/XUtilsMetadata.d.ts +8 -0
- package/lib/components/XUtilsMetadata.js +10 -6
- package/lib/serverApi/XUtilsCommon.js +12 -8
- package/lib/serverApi/XUtilsConversions.d.ts +1 -0
- package/lib/serverApi/XUtilsConversions.js +14 -1
- package/package.json +1 -1
|
@@ -689,7 +689,7 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
|
|
|
689
689
|
}
|
|
690
690
|
this.createDropdownItem(buttonItems);
|
|
691
691
|
if (this.props.buttonsLayout === "buttons") {
|
|
692
|
-
buttons = buttonItems.map(function (value) { return react_1.default.createElement(button_1.Button, { icon: value.icon, tooltip: value.tooltip, tooltipOptions: { position: 'top' }, onClick: function (e) { return value.command(e); }, className: 'x-dropdownbutton' + XUtils_1.XUtils.mobileCssSuffix() }); });
|
|
692
|
+
buttons = buttonItems.map(function (value, index) { return react_1.default.createElement(button_1.Button, { key: "button".concat(index), icon: value.icon, tooltip: value.tooltip, tooltipOptions: { position: 'top' }, onClick: function (e) { return value.command(e); }, className: 'x-dropdownbutton' + XUtils_1.XUtils.mobileCssSuffix() }); });
|
|
693
693
|
}
|
|
694
694
|
else {
|
|
695
695
|
// buttonsLayout === "splitButton"
|
|
@@ -728,15 +728,15 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
|
|
|
728
728
|
// <DobrovolnikForm id={this.formDialogObjectId} object={this.formDialogInitValuesForInsert} onSaveOrCancel={this.formDialogOnSaveOrCancel}/>
|
|
729
729
|
// formgroup-inline lepi SplitButton na autocomplete a zarovna jeho vysku
|
|
730
730
|
return (react_1.default.createElement("div", { className: "x-auto-complete-base", style: { width: this.props.width, maxWidth: this.props.maxWidth } },
|
|
731
|
-
react_1.default.createElement(autocomplete_1.AutoComplete, __assign({ value: inputValue, suggestions: this.state.filteredSuggestions, completeMethod: this.completeMethod, itemTemplate: this.itemTemplate, onChange: this.onChange, onSelect: this.onSelect, onBlur: this.onBlur, minLength: this.props.minLength, scrollHeight: this.props.scrollHeight, ref: this.autoCompleteRef, readOnly: readOnly, disabled: readOnly }, XUtils_1.XUtils.createTooltipOrErrorProps(error), { inputClassName: this.props.inputClassName, showEmptyMessage: true })),
|
|
731
|
+
react_1.default.createElement(autocomplete_1.AutoComplete, __assign({ key: "autoComplete", value: inputValue, suggestions: this.state.filteredSuggestions, completeMethod: this.completeMethod, itemTemplate: this.itemTemplate, onChange: this.onChange, onSelect: this.onSelect, onBlur: this.onBlur, minLength: this.props.minLength, scrollHeight: this.props.scrollHeight, ref: this.autoCompleteRef, readOnly: readOnly, disabled: readOnly }, XUtils_1.XUtils.createTooltipOrErrorProps(error), { inputClassName: this.props.inputClassName, showEmptyMessage: true })),
|
|
732
732
|
buttons,
|
|
733
733
|
this.props.valueForm != undefined ?
|
|
734
|
-
react_1.default.createElement(dialog_1.Dialog, { className: "x-dialog-without-header", visible: this.state.formDialogOpened, onHide: this.formDialogOnHide }, react_1.default.cloneElement(this.props.valueForm, {
|
|
734
|
+
react_1.default.createElement(dialog_1.Dialog, { key: "dialogForm", className: "x-dialog-without-header", visible: this.state.formDialogOpened, onHide: this.formDialogOnHide }, react_1.default.cloneElement(this.props.valueForm, {
|
|
735
735
|
id: this.formDialogObjectId, initValues: this.formDialogInitValuesForInsert, onSaveOrCancel: this.formDialogOnSaveOrCancel
|
|
736
736
|
} /*, this.props.valueForm.children*/))
|
|
737
737
|
: undefined,
|
|
738
738
|
this.props.searchBrowse != undefined && !readOnly ?
|
|
739
|
-
react_1.default.createElement(dialog_1.Dialog, { className: "x-dialog-without-header", visible: this.state.searchDialogOpened, onHide: this.searchDialogOnHide }, react_1.default.cloneElement(this.props.searchBrowse, { searchBrowseParams: this.createSearchBrowseParams() } /*, props.searchBrowse.children*/))
|
|
739
|
+
react_1.default.createElement(dialog_1.Dialog, { key: "dialogBrowse", className: "x-dialog-without-header", visible: this.state.searchDialogOpened, onHide: this.searchDialogOnHide }, react_1.default.cloneElement(this.props.searchBrowse, { searchBrowseParams: this.createSearchBrowseParams() } /*, props.searchBrowse.children*/))
|
|
740
740
|
: undefined));
|
|
741
741
|
};
|
|
742
742
|
XAutoCompleteBase.valueMoreSuggestions = "...";
|
|
@@ -42,7 +42,7 @@ export declare abstract class XFormBase extends Component<XFormProps> {
|
|
|
42
42
|
* @deprecated - mal by sa pouzivat onTableFieldChange
|
|
43
43
|
*/
|
|
44
44
|
onObjectDataChange(row?: any, onChange?: XTableFieldOnChange): void;
|
|
45
|
-
setStateXForm(): void;
|
|
45
|
+
setStateXForm(callback?: () => void): void;
|
|
46
46
|
onTableAddRow(assocField: string, newRow: any, dataKey?: string, selectedRow?: {}): void;
|
|
47
47
|
static getNextRowId(rowList: any[], dataKey: string): number;
|
|
48
48
|
onTableRemoveRow(assocField: string, row: {}): void;
|
|
@@ -199,7 +199,7 @@ var XFormBase = /** @class */ (function (_super) {
|
|
|
199
199
|
case 5:
|
|
200
200
|
this.preInitForm(object, operationType);
|
|
201
201
|
//console.log("volany XFormBase.componentDidMount() - ideme setnut object");
|
|
202
|
-
this.setState({ object: object } /*, () => console.log("volany XFormBase.componentDidMount() - callback setState")*/);
|
|
202
|
+
this.setState({ object: object } /*, () => console.log("************** volany XFormBase.componentDidMount() - callback setState")*/);
|
|
203
203
|
return [2 /*return*/];
|
|
204
204
|
}
|
|
205
205
|
});
|
|
@@ -265,16 +265,15 @@ var XFormBase = /** @class */ (function (_super) {
|
|
|
265
265
|
// TODO - assocObjectChange dorobit
|
|
266
266
|
onChange({ object: object, tableRow: row, assocObjectChange: undefined });
|
|
267
267
|
}
|
|
268
|
-
// TODO - tu mozno treba setnut funkciu - koli moznej asynchronicite
|
|
269
268
|
this.setState({ object: object });
|
|
270
269
|
};
|
|
271
270
|
// lepsi nazov ako onObjectDataChange
|
|
272
271
|
// ak niekto zmenil this.state.object alebo this.state.errorMap, zmena sa prejavi vo formulari
|
|
273
272
|
// pouzivame napr. po zavolani onChange na XInputText
|
|
274
|
-
|
|
273
|
+
// callback je zavolany, ked dobehne update formulara (mozme pouzit na dalsi update formulara, ktory potrebuje aby boli vsetky komponenty vytvorene)
|
|
274
|
+
XFormBase.prototype.setStateXForm = function (callback) {
|
|
275
275
|
// TODO - je to ok ze object menime takto?
|
|
276
|
-
|
|
277
|
-
this.setState({ object: this.state.object, errorMap: this.state.errorMap });
|
|
276
|
+
this.setState({ object: this.state.object, errorMap: this.state.errorMap }, callback);
|
|
278
277
|
};
|
|
279
278
|
XFormBase.prototype.onTableAddRow = function (assocField, newRow, dataKey, selectedRow) {
|
|
280
279
|
var object = this.getXObject();
|
|
@@ -13,6 +13,6 @@ var XInputDecimalBase = function (props) {
|
|
|
13
13
|
props.onChange(e.value);
|
|
14
14
|
};
|
|
15
15
|
// null konvertujeme na undefined (zevraj InputNumber nechce null)
|
|
16
|
-
return (react_1.default.createElement(inputnumber_1.InputNumber, { id: props.id, value: props.value !== null ? props.value : undefined, onChange: onChange, readOnly: props.readOnly, mode: "decimal", locale: "de-DE", useGrouping: props.useGrouping, minFractionDigits: props.fractionDigits, maxFractionDigits: props.fractionDigits, min: props.min, max: props.max, size: props.size, className: props.className }));
|
|
16
|
+
return (react_1.default.createElement(inputnumber_1.InputNumber, { id: props.id, value: props.value !== null ? props.value : undefined, onChange: onChange, readOnly: props.readOnly, mode: "decimal", locale: "de-DE", useGrouping: props.useGrouping, minFractionDigits: props.fractionDigits, maxFractionDigits: props.fractionDigits, min: props.min, max: props.max, size: props.size, className: props.className, inputStyle: props.inputStyle }));
|
|
17
17
|
};
|
|
18
18
|
exports.XInputDecimalBase = XInputDecimalBase;
|
|
@@ -12,6 +12,14 @@ export declare class XUtilsMetadata {
|
|
|
12
12
|
max?: number;
|
|
13
13
|
size?: number;
|
|
14
14
|
};
|
|
15
|
+
static getParamsForInputNumberBase(useGrouping: boolean, scale: number | undefined, precision: number | undefined, // total number of digits (before + after decimal point (scale))
|
|
16
|
+
size: number | undefined): {
|
|
17
|
+
useGrouping: boolean;
|
|
18
|
+
fractionDigits?: number;
|
|
19
|
+
min?: number;
|
|
20
|
+
max?: number;
|
|
21
|
+
size?: number;
|
|
22
|
+
};
|
|
15
23
|
static CHAR_SIZE: number;
|
|
16
24
|
static computeColumnWidth(xField: XField, betweenFilter: XBetweenFilterProp, filterMenuInFilterRow: boolean, formColumnType: string | undefined, header: string | undefined, sortableButtonInHeader: boolean, filterButtonInHeader: boolean): string | undefined;
|
|
17
25
|
static computeColumnWidthBase(charSize?: number, paddingAndOther?: number): number | undefined;
|
|
@@ -82,12 +82,12 @@ var XUtilsMetadata = /** @class */ (function () {
|
|
|
82
82
|
// docasne sem, kym nemame jednotny XInputDecimal/XInputDecimalDT
|
|
83
83
|
XUtilsMetadata.getParamsForInputNumber = function (xField) {
|
|
84
84
|
var useGrouping = true;
|
|
85
|
-
var
|
|
85
|
+
var scale = undefined;
|
|
86
86
|
var precision = undefined; // total number of digits (before + after decimal point (scale))
|
|
87
87
|
var size = undefined;
|
|
88
88
|
if (xField.type === "decimal") {
|
|
89
89
|
useGrouping = true;
|
|
90
|
-
|
|
90
|
+
scale = xField.scale;
|
|
91
91
|
precision = xField.precision;
|
|
92
92
|
if (precision !== undefined) {
|
|
93
93
|
size = precision + Math.floor(precision / 3); // approximatly for 123.456.789,12
|
|
@@ -95,7 +95,7 @@ var XUtilsMetadata = /** @class */ (function () {
|
|
|
95
95
|
}
|
|
96
96
|
else if (xField.type === "number") {
|
|
97
97
|
useGrouping = false;
|
|
98
|
-
|
|
98
|
+
scale = 0;
|
|
99
99
|
precision = xField.width; // number pouziva width
|
|
100
100
|
if (precision === undefined) {
|
|
101
101
|
precision = xField.precision; // nech to aj takto zafunguje...
|
|
@@ -105,14 +105,18 @@ var XUtilsMetadata = /** @class */ (function () {
|
|
|
105
105
|
else {
|
|
106
106
|
throw "XInputDecimal: field ".concat(xField.name, " has unsupported type ").concat(xField.type, ". Supported types are decimal and number.");
|
|
107
107
|
}
|
|
108
|
+
return XUtilsMetadata.getParamsForInputNumberBase(useGrouping, scale, precision, size);
|
|
109
|
+
};
|
|
110
|
+
XUtilsMetadata.getParamsForInputNumberBase = function (useGrouping, scale, precision, // total number of digits (before + after decimal point (scale))
|
|
111
|
+
size) {
|
|
108
112
|
var min = undefined;
|
|
109
113
|
var max = undefined;
|
|
110
|
-
if (precision !== undefined &&
|
|
111
|
-
var digits = precision -
|
|
114
|
+
if (precision !== undefined && scale !== undefined) {
|
|
115
|
+
var digits = precision - scale;
|
|
112
116
|
min = -(Math.pow(10, digits) - 1);
|
|
113
117
|
max = Math.pow(10, digits) - 1;
|
|
114
118
|
}
|
|
115
|
-
return { useGrouping: useGrouping, fractionDigits:
|
|
119
|
+
return { useGrouping: useGrouping, fractionDigits: scale, min: min, max: max, size: size };
|
|
116
120
|
};
|
|
117
121
|
XUtilsMetadata.computeColumnWidth = function (xField, betweenFilter, filterMenuInFilterRow, formColumnType, header, sortableButtonInHeader, filterButtonInHeader) {
|
|
118
122
|
var width;
|
|
@@ -367,15 +367,19 @@ var XUtilsCommon = /** @class */ (function () {
|
|
|
367
367
|
XUtilsCommon.sqlMaxDateIfNull = function (sqlExp) {
|
|
368
368
|
return "coalesce(".concat(sqlExp, ", '9999-12-31'::DATE)");
|
|
369
369
|
};
|
|
370
|
+
// static today(): Date {
|
|
371
|
+
// const today = new Date();
|
|
372
|
+
// // vynulujeme casovu zlozku
|
|
373
|
+
// // poznamka: Date vzdy obsahuje aj casovu zlozku. Nase konverzne funkcie dateFromModel a dateFromUI pouzivaju konverziu new Date('YYYY-MM-DD')
|
|
374
|
+
// // 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'))
|
|
375
|
+
// //today.setHours(0, 0, 0, 0); // nastavi cas 00:00:00 v aktualnej timezone (stredoeuropsky 00:00:00, GMT 23:00:00)
|
|
376
|
+
// // - potom nam nefunguje porovnavanie s datumami vytvorenymi cez funkcie dateFromModel a dateFromUI
|
|
377
|
+
// today.setUTCHours(0, 0, 0, 0);
|
|
378
|
+
// return today;
|
|
379
|
+
// }
|
|
380
|
+
// oprava:
|
|
370
381
|
XUtilsCommon.today = function () {
|
|
371
|
-
|
|
372
|
-
// vynulujeme casovu zlozku
|
|
373
|
-
// poznamka: Date vzdy obsahuje aj casovu zlozku. Nase konverzne funkcie dateFromModel a dateFromUI pouzivaju konverziu new Date('YYYY-MM-DD')
|
|
374
|
-
// 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'))
|
|
375
|
-
//today.setHours(0, 0, 0, 0); // nastavi cas 00:00:00 v aktualnej timezone (stredoeuropsky 00:00:00, GMT 23:00:00)
|
|
376
|
-
// - potom nam nefunguje porovnavanie s datumami vytvorenymi cez funkcie dateFromModel a dateFromUI
|
|
377
|
-
today.setUTCHours(0, 0, 0, 0);
|
|
378
|
-
return today;
|
|
382
|
+
return new Date((0, XUtilsConversions_1.dateAsYYYY_MM_DD)(new Date()));
|
|
379
383
|
};
|
|
380
384
|
// vrati true ak sa string sklada iba z cislic, moze mat + alebo - na zaciatku
|
|
381
385
|
XUtilsCommon.isInt = function (stringValue) {
|
|
@@ -15,6 +15,7 @@ export declare enum XDateScale {
|
|
|
15
15
|
export declare function dateFromModel(value: any): Date | null;
|
|
16
16
|
export declare function dateFromUI(valueString: string, dateScale?: XDateScale): Date | null | undefined;
|
|
17
17
|
export declare function dateAsUI(value: Date | null, dateScale?: XDateScale): string;
|
|
18
|
+
export declare function dateAsYYYY_MM_DD(date: Date): string;
|
|
18
19
|
export declare function datetimeAsUI(value: Date | null): string;
|
|
19
20
|
export declare function timeFromModel(value: any): Date | null;
|
|
20
21
|
export declare function dateFormatUI(dateScale?: XDateScale): string;
|
|
@@ -27,7 +27,7 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
27
27
|
return ar;
|
|
28
28
|
};
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.convertValueBase = exports.convertValue = exports.convertObject = exports.AsUIType = exports.booleanAsUIText = exports.intervalAsUI = exports.intervalFromUI = exports.datetimeFormatUI = exports.dateFormatCalendar = exports.dateFormatUI = exports.timeFromModel = exports.datetimeAsUI = exports.dateAsUI = exports.dateFromUI = exports.dateFromModel = exports.XDateScale = exports.numberFromString = exports.numberFromModel = exports.numberAsUI = exports.intFromUI = exports.stringAsDB = exports.stringAsUI = exports.stringFromUI = void 0;
|
|
30
|
+
exports.convertValueBase = exports.convertValue = exports.convertObject = exports.AsUIType = exports.booleanAsUIText = exports.intervalAsUI = exports.intervalFromUI = exports.datetimeFormatUI = exports.dateFormatCalendar = exports.dateFormatUI = exports.timeFromModel = exports.datetimeAsUI = exports.dateAsYYYY_MM_DD = exports.dateAsUI = exports.dateFromUI = exports.dateFromModel = exports.XDateScale = exports.numberFromString = exports.numberFromModel = exports.numberAsUI = exports.intFromUI = exports.stringAsDB = exports.stringAsUI = exports.stringFromUI = void 0;
|
|
31
31
|
var XUtilsCommon_1 = require("./XUtilsCommon");
|
|
32
32
|
var XLocale_1 = require("../components/XLocale");
|
|
33
33
|
var XUtilsMetadataCommon_1 = require("./XUtilsMetadataCommon");
|
|
@@ -215,6 +215,19 @@ function dateAsUI(value, dateScale) {
|
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
217
|
exports.dateAsUI = dateAsUI;
|
|
218
|
+
// specialna funkcia - konvertuje Date na string YYYY-MM-DD
|
|
219
|
+
function dateAsYYYY_MM_DD(date) {
|
|
220
|
+
var monthStr = (date.getMonth() + 1).toString();
|
|
221
|
+
if (monthStr.length < 2) {
|
|
222
|
+
monthStr = "0" + monthStr;
|
|
223
|
+
}
|
|
224
|
+
var dayStr = date.getDate().toString();
|
|
225
|
+
if (dayStr.length < 2) {
|
|
226
|
+
dayStr = "0" + dayStr;
|
|
227
|
+
}
|
|
228
|
+
return "".concat(date.getFullYear(), "-").concat(monthStr, "-").concat(dayStr);
|
|
229
|
+
}
|
|
230
|
+
exports.dateAsYYYY_MM_DD = dateAsYYYY_MM_DD;
|
|
218
231
|
function datetimeAsUI(value) {
|
|
219
232
|
if (value !== null) {
|
|
220
233
|
return (0, XUtilsCommon_1.dateFormat)(value, datetimeFormatUI());
|