@michalrakus/x-react-web-lib 1.5.0 → 1.5.1

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.
@@ -0,0 +1,3 @@
1
+ // generated by gulp
2
+
3
+ export * from './lib/components/XButtonIconMedium';
@@ -0,0 +1,5 @@
1
+ // generated by gulp
2
+
3
+ 'use strict';
4
+
5
+ module.exports = require('./lib/components/XButtonIconMedium.js');
package/gulpfile.js CHANGED
@@ -18,6 +18,7 @@ function generateApi(cb) {
18
18
  "./lib/components/XAutoCompleteBase",
19
19
  "./lib/components/XBrowse",
20
20
  "./lib/components/XButton",
21
+ "./lib/components/XButtonIconMedium",
21
22
  "./lib/components/XButtonIconNarrow",
22
23
  "./lib/components/XButtonIconSmall",
23
24
  "./lib/components/XCalendar",
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import { ButtonProps } from "primereact/button";
3
+ import { IconType } from "primereact/utils";
4
+ export declare const XButtonIconMedium: (props: {
5
+ icon: IconType<ButtonProps>;
6
+ onClick: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
7
+ disabled?: boolean | undefined;
8
+ tooltip?: any;
9
+ }) => JSX.Element;
@@ -0,0 +1,13 @@
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.XButtonIconMedium = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ var button_1 = require("primereact/button");
9
+ // button trochu mensi (priblizne 30px x 30px) od klasickeho Button, pri pouziti v datatable nastavuje v TD malicky padding (cez css) -> nezvecsuje vysku riadku
10
+ var XButtonIconMedium = function (props) {
11
+ return (react_1.default.createElement(button_1.Button, { icon: props.icon, onClick: props.onClick, disabled: props.disabled, className: 'x-button-icon-medium p-button-sm', tooltip: props.tooltip }));
12
+ };
13
+ exports.XButtonIconMedium = XButtonIconMedium;
@@ -5,6 +5,7 @@ import { XObject } from "./XObject";
5
5
  export interface XDropdownProps extends XFormComponentProps<XObject> {
6
6
  assocField: string;
7
7
  displayField: string;
8
+ sortField?: string;
8
9
  filter?: XFilterProp;
9
10
  }
10
11
  export declare class XDropdown extends XFormComponent<XObject, XDropdownProps> {
@@ -50,7 +50,7 @@ var XDropdown = /** @class */ (function (_super) {
50
50
  // planuje sa to riesit bud zavedenim cache pre options alebo vytiahnutim options na uroven XFormBase
51
51
  return (react_1.default.createElement("div", { className: "field grid" },
52
52
  react_1.default.createElement("label", { htmlFor: this.props.assocField, className: "col-fixed", style: this.getLabelStyle() }, this.getLabel()),
53
- react_1.default.createElement(XDropdownForEntity_1.XDropdownForEntity, { id: this.props.assocField, entity: this.xAssoc.entityName, displayField: this.props.displayField, value: this.getValue(), onChange: function (value) { return _this.onValueChangeBase(value, _this.props.onChange); }, readOnly: this.isReadOnly(), isNotNull: this.isNotNull(), error: this.getError(), filter: this.getFilterBase(this.props.filter) })));
53
+ react_1.default.createElement(XDropdownForEntity_1.XDropdownForEntity, { id: this.props.assocField, entity: this.xAssoc.entityName, displayField: this.props.displayField, sortField: this.props.sortField, value: this.getValue(), onChange: function (value) { return _this.onValueChangeBase(value, _this.props.onChange); }, readOnly: this.isReadOnly(), isNotNull: this.isNotNull(), error: this.getError(), filter: this.getFilterBase(this.props.filter) })));
54
54
  };
55
55
  return XDropdown;
56
56
  }(XFormComponent_1.XFormComponent));
@@ -5,6 +5,7 @@ export interface XDropdownForEntityProps {
5
5
  id?: string;
6
6
  entity: string;
7
7
  displayField: string;
8
+ sortField?: string;
8
9
  value: any | null;
9
10
  onChange: (value: any | null) => void;
10
11
  readOnly?: boolean;
@@ -110,13 +110,14 @@ var XDropdownForEntity = /** @class */ (function (_super) {
110
110
  this.loadOptions();
111
111
  };
112
112
  XDropdownForEntity.prototype.loadOptions = function () {
113
+ var _a;
113
114
  return __awaiter(this, void 0, void 0, function () {
114
115
  var options;
115
- return __generator(this, function (_a) {
116
- switch (_a.label) {
117
- case 0: return [4 /*yield*/, XUtils_1.XUtils.fetchRows(this.props.entity, this.props.filter, this.props.displayField)];
116
+ return __generator(this, function (_b) {
117
+ switch (_b.label) {
118
+ case 0: return [4 /*yield*/, XUtils_1.XUtils.fetchRows(this.props.entity, this.props.filter, (_a = this.props.sortField) !== null && _a !== void 0 ? _a : this.props.displayField)];
118
119
  case 1:
119
- options = _a.sent();
120
+ options = _b.sent();
120
121
  if (this.props.isNotNull === undefined || !this.props.isNotNull) {
121
122
  // pridame prazdnu polozku
122
123
  options.splice(0, 0, {}); // null polozka
@@ -24,12 +24,14 @@ export interface XFormDataTableProps {
24
24
  rows?: number;
25
25
  filterDisplay: "menu" | "row" | "none";
26
26
  sortable: boolean;
27
+ sortField?: string;
27
28
  scrollable: boolean;
28
29
  scrollWidth?: string;
29
30
  scrollHeight?: string;
30
31
  shrinkWidth: boolean;
31
32
  label?: string;
32
33
  readOnly?: boolean;
34
+ showAddRemoveButtons?: boolean;
33
35
  onClickAddRow?: () => void;
34
36
  onClickRemoveRow?: (row: any) => void;
35
37
  removeButtonInRow: boolean;
@@ -48,6 +50,7 @@ export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
48
50
  scrollWidth: string;
49
51
  scrollHeight: string;
50
52
  shrinkWidth: boolean;
53
+ showAddRemoveButtons: boolean;
51
54
  removeButtonInRow: boolean;
52
55
  addRowLabel: string;
53
56
  removeRowLabel: string;
@@ -612,7 +612,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
612
612
  // }
613
613
  return react_1.default.createElement(column_1.Column, { field: field, header: header, filter: thisLocal.props.filterDisplay !== "none", sortable: thisLocal.props.sortable, filterElement: filterElement, showFilterMenu: showFilterMenu, showClearButton: showClearButton, headerStyle: headerStyle, align: align, body: function (rowData) { return thisLocal.bodyTemplate(childColumnProps, readOnly, rowData, xEntity); } });
614
614
  });
615
- if (this.props.removeButtonInRow) {
615
+ if (this.props.showAddRemoveButtons && this.props.removeButtonInRow) {
616
616
  // je dolezite nastavit sirku header-a, lebo inac ma stlpec sirku 0 a nevidno ho
617
617
  columnElemList.push(react_1.default.createElement(column_1.Column, { key: "removeButton", headerStyle: { width: '2rem' }, body: function (rowData) { return react_1.default.createElement(XButtonIconNarrow_1.XButtonIconNarrow, { icon: "pi pi-times", onClick: function () { return _this.removeRow(rowData); }, disabled: readOnly, addMargin: false }); } }));
618
618
  }
@@ -620,10 +620,12 @@ var XFormDataTable2 = /** @class */ (function (_super) {
620
620
  react_1.default.createElement("div", { className: "flex justify-content-center" },
621
621
  react_1.default.createElement("label", null, label)),
622
622
  react_1.default.createElement("div", { className: "flex justify-content-center" },
623
- react_1.default.createElement(datatable_1.DataTable, { ref: function (el) { return _this.dt = el; }, value: valueList, dataKey: this.dataKey, paginator: paginator, rows: rows, totalRecords: valueList.length, filterDisplay: filterDisplay, filters: this.state.filters, onFilter: this.onFilter, sortMode: "multiple", removableSort: true, selectionMode: "single", selection: this.state.selectedRow, onSelectionChange: this.onSelectionChange, className: "p-datatable-sm x-form-datatable", resizableColumns: true, columnResizeMode: "expand", tableStyle: tableStyle, scrollable: this.props.scrollable, scrollHeight: scrollHeight, style: style }, columnElemList)),
624
- react_1.default.createElement("div", { className: "flex justify-content-center" },
625
- react_1.default.createElement(XButton_1.XButton, { icon: this.props.addRowIcon, label: this.props.addRowLabel, onClick: this.onClickAddRow, disabled: readOnly }),
626
- this.props.removeButtonInRow ? undefined : react_1.default.createElement(XButton_1.XButton, { icon: this.props.removeRowIcon, label: this.props.removeRowLabel, onClick: this.onClickRemoveRowBySelection, disabled: readOnly }))));
623
+ react_1.default.createElement(datatable_1.DataTable, { ref: function (el) { return _this.dt = el; }, value: valueList, dataKey: this.dataKey, paginator: paginator, rows: rows, totalRecords: valueList.length, filterDisplay: filterDisplay, filters: this.state.filters, onFilter: this.onFilter, sortMode: "multiple", removableSort: true, multiSortMeta: this.props.sortField !== undefined ? [{ field: this.props.sortField, order: 1 }] : undefined, selectionMode: "single", selection: this.state.selectedRow, onSelectionChange: this.onSelectionChange, className: "p-datatable-sm x-form-datatable", resizableColumns: true, columnResizeMode: "expand", tableStyle: tableStyle, scrollable: this.props.scrollable, scrollHeight: scrollHeight, style: style }, columnElemList)),
624
+ this.props.showAddRemoveButtons ?
625
+ react_1.default.createElement("div", { className: "flex justify-content-center" },
626
+ react_1.default.createElement(XButton_1.XButton, { icon: this.props.addRowIcon, label: this.props.addRowLabel, onClick: this.onClickAddRow, disabled: readOnly }),
627
+ this.props.removeButtonInRow ? undefined : react_1.default.createElement(XButton_1.XButton, { icon: this.props.removeRowIcon, label: this.props.removeRowLabel, onClick: this.onClickRemoveRowBySelection, disabled: readOnly }))
628
+ : undefined));
627
629
  };
628
630
  XFormDataTable2.defaultProps = {
629
631
  filterDisplay: "row",
@@ -633,6 +635,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
633
635
  scrollHeight: '200vh',
634
636
  // tym ze pouzivame 200vh (max-height pre body), tak realne scrollovanie sa zapne az pri velmi vela riadkoch
635
637
  shrinkWidth: true,
638
+ showAddRemoveButtons: true,
636
639
  removeButtonInRow: false,
637
640
  addRowLabel: 'Add row',
638
641
  removeRowLabel: 'Remove row'
@@ -1,5 +1,5 @@
1
1
  import React, { ReactChild } from 'react';
2
- import { DataTableFilterMetaData, DataTableOperatorFilterMetaData } from 'primereact/datatable';
2
+ import { DataTableFilterMeta, DataTableFilterMetaData, DataTableOperatorFilterMetaData } from 'primereact/datatable';
3
3
  import { ColumnBodyOptions, ColumnFilterElementTemplateOptions } from 'primereact/column';
4
4
  import { SearchTableParams } from "./SearchTableParams";
5
5
  import { XAggregateType, XCustomFilter } from "../serverApi/FindParam";
@@ -32,8 +32,9 @@ export interface XLazyDataTableProps {
32
32
  removeRow?: ((selectedRow: any) => Promise<boolean>) | boolean;
33
33
  onRemoveRow?: XOnSaveOrCancelProp;
34
34
  appButtons?: any;
35
+ filters?: DataTableFilterMeta;
35
36
  customFilter?: XCustomFilter;
36
- initSortField?: string;
37
+ sortField?: string;
37
38
  searchTableParams?: SearchTableParams;
38
39
  width?: string;
39
40
  dataLoadedState?: [boolean, React.Dispatch<React.SetStateAction<boolean>>];
@@ -54,8 +55,14 @@ export declare const XLazyDataTable: {
54
55
  shrinkWidth: boolean;
55
56
  };
56
57
  };
58
+ export type XGetFilterItem = (field: string) => DataTableFilterMetaData | DataTableOperatorFilterMetaData;
57
59
  export type XSetFilterItem = (field: string, filterItem: DataTableFilterMetaData | DataTableOperatorFilterMetaData) => void;
58
- export type XFilterElementProp = (setFilterItem: XSetFilterItem, options: ColumnFilterElementTemplateOptions) => React.ReactNode;
60
+ export type XFilterElementParams = {
61
+ getFilterItem: XGetFilterItem;
62
+ setFilterItem: XSetFilterItem;
63
+ options: ColumnFilterElementTemplateOptions;
64
+ };
65
+ export type XFilterElementProp = (params: XFilterElementParams) => React.ReactNode;
59
66
  export interface XLazyColumnProps {
60
67
  field: string;
61
68
  header?: any;
@@ -204,6 +204,9 @@ var XLazyDataTable = function (props) {
204
204
  var _d = __read((0, react_1.useState)(0), 2), first = _d[0], setFirst = _d[1];
205
205
  var _e = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rows = _e[0], setRows = _e[1];
206
206
  var filtersInit = createInitFilters();
207
+ if (props.filters) {
208
+ filtersInit = __assign(__assign({}, filtersInit), props.filters); // items from props.filters will replace existing items in filtersInit
209
+ }
207
210
  if (props.searchTableParams !== undefined) {
208
211
  var displayFieldFilter = props.searchTableParams.displayFieldFilter;
209
212
  if (displayFieldFilter !== undefined) {
@@ -213,7 +216,7 @@ var XLazyDataTable = function (props) {
213
216
  customFilter = XUtils_1.XUtils.filterAnd(customFilter, props.searchTableParams.customFilter);
214
217
  }
215
218
  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)
216
- var _g = __read((0, react_1.useState)(props.initSortField ? [{ field: props.initSortField, order: 1 }] : []), 2), multiSortMeta = _g[0], setMultiSortMeta = _g[1];
219
+ var _g = __read((0, react_1.useState)(props.sortField ? [{ field: props.sortField, order: 1 }] : []), 2), multiSortMeta = _g[0], setMultiSortMeta = _g[1];
217
220
  var _h = __read((0, react_1.useState)(null), 2), selectedRow = _h[0], setSelectedRow = _h[1];
218
221
  var _j = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _j[0], setDataLoaded = _j[1]; // priznak kde si zapiseme, ci uz sme nacitali data
219
222
  var _k = __read((0, react_1.useState)(false), 2), exportRowsDialogOpened = _k[0], setExportRowsDialogOpened = _k[1];
@@ -271,6 +274,11 @@ var XLazyDataTable = function (props) {
271
274
  //console.log("zavolany onClickFilter");
272
275
  loadData();
273
276
  };
277
+ var onClickClearFilter = function () {
278
+ // najjednoduchsi sposob - pomeni aj pripadne nastavene matchMode hodnoty
279
+ var filtersInit = createInitFilters();
280
+ setFilters(filtersInit);
281
+ };
274
282
  var loadData = function () {
275
283
  loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
276
284
  };
@@ -522,6 +530,10 @@ var XLazyDataTable = function (props) {
522
530
  var filtersCloned = __assign({}, filters);
523
531
  setFilters(filtersCloned);
524
532
  };
533
+ // vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
534
+ var getFilterItem = function (field) {
535
+ return filters[field];
536
+ };
525
537
  // vseobecna metodka - nastavi hodnotu do filtra
526
538
  // ak je matchMode === undefined, tak zachova povodnu hodnotu matchMode
527
539
  var setFilterValue = function (field, value, matchMode) {
@@ -750,8 +762,8 @@ var XLazyDataTable = function (props) {
750
762
  var filterElement;
751
763
  if (childColumn.props.filterElement !== undefined) {
752
764
  filterElement = function (options) {
753
- // compilator sa stazoval ze childColumn.props.filterElement muze byt undefined, preto som pridal "!"
754
- return childColumn.props.filterElement(setFilterItem, options);
765
+ // compilator sa stazoval ze childColumn.props.filterElement moze byt undefined, preto som pridal "!"
766
+ return childColumn.props.filterElement({ getFilterItem: getFilterItem, setFilterItem: setFilterItem, options: options });
755
767
  };
756
768
  }
757
769
  else {
@@ -872,7 +884,8 @@ var XLazyDataTable = function (props) {
872
884
  });
873
885
  return (react_1.default.createElement("div", null,
874
886
  react_1.default.createElement("div", { className: "flex justify-content-center" },
875
- react_1.default.createElement(XButton_1.XButton, { label: "Filter", onClick: onClickFilter })),
887
+ react_1.default.createElement(XButton_1.XButton, { label: "Filter", onClick: onClickFilter }),
888
+ react_1.default.createElement(XButton_1.XButton, { label: "Clear filter", onClick: onClickClearFilter })),
876
889
  react_1.default.createElement("div", { className: "flex justify-content-center" },
877
890
  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, 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)),
878
891
  react_1.default.createElement("div", { className: "flex justify-content-center" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michalrakus/x-react-web-lib",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "clean": "rimraf lib",