@clake/react-bootstrap4-window 0.4.6 → 0.5.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/CTable.js CHANGED
@@ -1,6 +1,6 @@
1
- /* @clake/react-bootstrap4-window v0.4.6 | by Clake
1
+ /* @clake/react-bootstrap4-window v0.5.0 | by Clake
2
2
  * Copyright (c) 2021 Clake,
3
- * 2021-02-19T15:58:51+0800
3
+ * 2021-12-29T15:26:43+0800
4
4
  */
5
5
  "use strict";
6
6
 
@@ -69,6 +69,18 @@ function (_React$Component) {
69
69
 
70
70
  _this = _possibleConstructorReturn(this, _getPrototypeOf(CTable).call(this, props));
71
71
 
72
+ _defineProperty(_assertThisInitialized(_this), "equals", function (a, b) {
73
+ if (a === b) return true;
74
+ if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime();
75
+ if (!a || !b || _typeof(a) !== 'object' && _typeof(b) !== 'object') return a === b;
76
+ if (a.prototype !== b.prototype) return false;
77
+ var keys = Object.keys(a);
78
+ if (keys.length !== Object.keys(b).length) return false;
79
+ return keys.every(function (k) {
80
+ return _this.equals(a[k], b[k]);
81
+ });
82
+ });
83
+
72
84
  _defineProperty(_assertThisInitialized(_this), "sortHandler", function (e) {
73
85
  var dom = e.currentTarget;
74
86
  var sort_type = dom.dataset.sort || 'asc';
@@ -85,22 +97,6 @@ function (_React$Component) {
85
97
  }
86
98
  });
87
99
 
88
- _defineProperty(_assertThisInitialized(_this), "menuContextHandler", function (e) {
89
- e.preventDefault();
90
- e.stopPropagation();
91
- var data = {
92
- field: e.currentTarget.dataset.field || '',
93
- data: _this.state.data[e.currentTarget.dataset.row],
94
- index: e.currentTarget.dataset.row
95
- };
96
-
97
- _this.mainMenu.show({
98
- evt: e,
99
- type: 'mouse',
100
- data: data
101
- });
102
- });
103
-
104
100
  _defineProperty(_assertThisInitialized(_this), "menuClickHandler", function (field, data) {
105
101
  switch (field) {
106
102
  case "asc":
@@ -148,7 +144,11 @@ function (_React$Component) {
148
144
 
149
145
  _defineProperty(_assertThisInitialized(_this), "editHandler", function (e, val, row) {
150
146
  var index = parseInt(e.target.dataset.row);
151
- var field = e.target.dataset.field;
147
+ var field = e.target.dataset.field; //如果是check组件
148
+
149
+ if (row === 'chk') {
150
+ val = val ? 1 : 0;
151
+ }
152
152
 
153
153
  if (_this.editRows.indexOf(index) === -1) {
154
154
  _this.editRows.push(index);
@@ -238,7 +238,7 @@ function (_React$Component) {
238
238
  value: function componentWillReceiveProps(nextProps) {
239
239
  if (this.state.data !== nextProps.data) {
240
240
  if (this.props.edit) {
241
- if (this.originalData === nextProps.data) {
241
+ if (this.equals(this.originalData, nextProps.data)) {
242
242
  return;
243
243
  }
244
244
 
@@ -344,6 +344,13 @@ function (_React$Component) {
344
344
  _this4.filter = [];
345
345
  break;
346
346
 
347
+ case "":
348
+ return {
349
+ field: item.field,
350
+ value: item.text,
351
+ flag: '='
352
+ };
353
+
347
354
  default:
348
355
  return {
349
356
  field: item.field,
@@ -491,6 +498,40 @@ function (_React$Component) {
491
498
  * @param e
492
499
  */
493
500
 
501
+ }, {
502
+ key: "menuContextHandler",
503
+
504
+ /**
505
+ * show menu list
506
+ * @param dataType
507
+ */
508
+ value: function menuContextHandler(dataType) {
509
+ var _this7 = this;
510
+
511
+ return function (e) {
512
+ e.preventDefault();
513
+ e.stopPropagation();
514
+ var data = {
515
+ field: e.currentTarget.dataset.field || '',
516
+ data: _this7.state.data[e.currentTarget.dataset.row],
517
+ index: e.currentTarget.dataset.row
518
+ };
519
+
520
+ if (dataType === "text") {
521
+ _this7.mainMenu.show({
522
+ evt: e,
523
+ type: 'mouse',
524
+ data: data
525
+ });
526
+ } else {
527
+ _this7.numMenu.show({
528
+ evt: e,
529
+ type: 'mouse',
530
+ data: data
531
+ });
532
+ }
533
+ };
534
+ }
494
535
  }, {
495
536
  key: "localFilter",
496
537
 
@@ -546,6 +587,7 @@ function (_React$Component) {
546
587
  }
547
588
  });
548
589
  this.mainMenu.hide();
590
+ this.numMenu.hide();
549
591
 
550
592
  if (typeof this.props.onFilter === 'function') {
551
593
  this.props.onFilter(text, field, type);
@@ -579,13 +621,13 @@ function (_React$Component) {
579
621
  }, {
580
622
  key: "filterChangeHandler",
581
623
  value: function filterChangeHandler(field) {
582
- var _this7 = this;
624
+ var _this8 = this;
583
625
 
584
626
  return function (val) {
585
- var filter = _this7.state.filter;
627
+ var filter = _this8.state.filter;
586
628
  filter[field] = val;
587
629
 
588
- _this7.setState({
630
+ _this8.setState({
589
631
  filter: filter
590
632
  });
591
633
  };
@@ -641,7 +683,7 @@ function (_React$Component) {
641
683
  }, {
642
684
  key: "deleteRow",
643
685
  value: function deleteRow(row_index) {
644
- var _this8 = this;
686
+ var _this9 = this;
645
687
 
646
688
  if (row_index < 0 || row_index >= this.state.data.length) {
647
689
  return;
@@ -656,7 +698,7 @@ function (_React$Component) {
656
698
 
657
699
  this.editRows.forEach(function (item, index) {
658
700
  if (item > row_index) {
659
- _this8.editRows[index] = item - 1;
701
+ _this9.editRows[index] = item - 1;
660
702
  }
661
703
  });
662
704
  this.setState({
@@ -688,10 +730,10 @@ function (_React$Component) {
688
730
  * @returns {*}
689
731
  */
690
732
  value: function getSelectRows() {
691
- var _this9 = this;
733
+ var _this10 = this;
692
734
 
693
735
  return this.selectRows.map(function (item) {
694
- return _this9.state.data[item];
736
+ return _this10.state.data[item];
695
737
  });
696
738
  }
697
739
  /**
@@ -703,17 +745,17 @@ function (_React$Component) {
703
745
  }, {
704
746
  key: "setSelectRows",
705
747
  value: function setSelectRows(key, list) {
706
- var _this10 = this;
748
+ var _this11 = this;
707
749
 
708
750
  this.state.data.forEach(function (row, i) {
709
751
  if (list.indexOf(row[key]) !== -1) {
710
- _this10.refs['row_' + i].setChecked(true);
752
+ _this11.refs['row_' + i].setChecked(true);
711
753
 
712
- _this10.setRowCheck(true, i);
754
+ _this11.setRowCheck(true, i);
713
755
  } else {
714
- _this10.refs['row_' + i].setChecked(false);
756
+ _this11.refs['row_' + i].setChecked(false);
715
757
 
716
- _this10.setRowCheck(false, i);
758
+ _this11.setRowCheck(false, i);
717
759
  }
718
760
  });
719
761
  this.checkAllCheckHalf();
@@ -725,50 +767,50 @@ function (_React$Component) {
725
767
  }, {
726
768
  key: "bindSplit",
727
769
  value: function bindSplit() {
728
- var _this11 = this;
770
+ var _this12 = this;
729
771
 
730
772
  if (this.props.move) {
731
773
  this.headerSplits.forEach(function (split) {
732
- if (!_this11.drag) {
733
- _this11.dragColumnLeft = 0;
734
- _this11.dragWidth = 0;
735
- _this11.drag = new _Drag["default"](_this11.split, split, {
774
+ if (!_this12.drag) {
775
+ _this12.dragColumnLeft = 0;
776
+ _this12.dragWidth = 0;
777
+ _this12.drag = new _Drag["default"](_this12.split, split, {
736
778
  start: function start(dragDom, eventDom) {
737
- var xy = _reactBootstrap.Common.GetDomXY(eventDom, _this11.mainDom);
779
+ var xy = _reactBootstrap.Common.GetDomXY(eventDom, _this12.mainDom);
738
780
 
739
- _this11.dragWidth = parseInt(eventDom.parentNode.style.width);
740
- _this11.dragColumnLeft = xy.left - _this11.table_rows.scrollLeft;
741
- dragDom.style.left = _this11.dragColumnLeft + 'px';
781
+ _this12.dragWidth = parseInt(eventDom.parentNode.style.width);
782
+ _this12.dragColumnLeft = xy.left - _this12.table_rows.scrollLeft;
783
+ dragDom.style.left = _this12.dragColumnLeft + 'px';
742
784
  dragDom.classList.remove('d-none');
743
785
  return true;
744
786
  },
745
787
  move: function move(_move, dragDom, eventDom) {
746
- if (_this11.dragWidth + (_move.x - _this11.dragColumnLeft) < 50) {
747
- _move.x = _this11.dragColumnLeft - _this11.dragWidth + 50;
788
+ if (_this12.dragWidth + (_move.x - _this12.dragColumnLeft) < 50) {
789
+ _move.x = _this12.dragColumnLeft - _this12.dragWidth + 50;
748
790
  }
749
791
  },
750
792
  end: function end(dragDom, eventDom) {
751
793
  dragDom.classList.add('d-none');
752
794
  var column_key = eventDom.dataset.key;
753
795
 
754
- var diff = parseInt(dragDom.style.left) - _this11.dragColumnLeft;
796
+ var diff = parseInt(dragDom.style.left) - _this12.dragColumnLeft;
755
797
 
756
- _this11.width = parseInt(_this11.width) + diff + 'px';
757
- _this11.table_head.style.width = _this11.width;
758
- _this11.table_body.style.width = _this11.width;
798
+ _this12.width = parseInt(_this12.width) + diff + 'px';
799
+ _this12.table_head.style.width = _this12.width;
800
+ _this12.table_body.style.width = _this12.width;
759
801
 
760
- if (_this11.table_total) {
761
- _this11.table_total.style.width = _this11.width;
802
+ if (_this12.table_total) {
803
+ _this12.table_total.style.width = _this12.width;
762
804
  }
763
805
 
764
806
  document.querySelectorAll("#".concat(column_key)).forEach(function (item) {
765
- item.style.width = "".concat(_this11.dragWidth + diff, "px");
807
+ item.style.width = "".concat(_this12.dragWidth + diff, "px");
766
808
  });
767
809
  return true;
768
810
  }
769
811
  });
770
812
  } else {
771
- _this11.drag.setEventDom(split);
813
+ _this12.drag.setEventDom(split);
772
814
  }
773
815
  });
774
816
  }
@@ -902,11 +944,11 @@ function (_React$Component) {
902
944
  }, {
903
945
  key: "render",
904
946
  value: function render() {
905
- var _this12 = this;
947
+ var _this13 = this;
906
948
 
907
949
  return _react["default"].createElement("div", {
908
950
  ref: function ref(c) {
909
- return _this12.mainDom = c;
951
+ return _this13.mainDom = c;
910
952
  },
911
953
  className: this.getMainClasses(),
912
954
  style: this.getStyles()
@@ -918,7 +960,7 @@ function (_React$Component) {
918
960
  selector: "#table-body-com-".concat(this.domId)
919
961
  })), this.renderFoot(), _react["default"].createElement("div", {
920
962
  ref: function ref(c) {
921
- return _this12.split = c;
963
+ return _this13.split = c;
922
964
  },
923
965
  className: "ck-split d-none"
924
966
  }));
@@ -926,15 +968,15 @@ function (_React$Component) {
926
968
  }, {
927
969
  key: "renderHeader",
928
970
  value: function renderHeader() {
929
- var _this13 = this;
971
+ var _this14 = this;
930
972
 
931
973
  return _react["default"].createElement("div", {
932
974
  ref: function ref(c) {
933
- return _this13.tableHeader = c;
975
+ return _this14.tableHeader = c;
934
976
  }
935
977
  }, _react["default"].createElement("table", {
936
978
  ref: function ref(c) {
937
- return _this13.table_head = c;
979
+ return _this14.table_head = c;
938
980
  },
939
981
  id: "table-head-".concat(this.domId),
940
982
  className: this.getClasses(),
@@ -950,11 +992,11 @@ function (_React$Component) {
950
992
  icon: "list"
951
993
  }) : _react["default"].createElement(_reactBootstrap.CCheckbox, {
952
994
  ref: function ref(c) {
953
- return _this13.allchk = c;
995
+ return _this14.allchk = c;
954
996
  },
955
997
  onChange: this.selectAll
956
998
  })) : null, _react["default"].Children.map(this.props.children, function (item, key) {
957
- _this13.cacheRow[item.props.field] = '';
999
+ _this14.cacheRow[item.props.field] = '';
958
1000
 
959
1001
  if (!item || item.props.hide) {
960
1002
  return null;
@@ -971,28 +1013,28 @@ function (_React$Component) {
971
1013
 
972
1014
  var sort_icon = '';
973
1015
 
974
- if (_this13.sortList[item.props.field]) {
975
- sort_icon = 'sort-alpha-' + (_this13.sortList[item.props.field] === 'asc' ? 'down' : 'up');
1016
+ if (_this14.sortList[item.props.field]) {
1017
+ sort_icon = 'sort-alpha-' + (_this14.sortList[item.props.field] === 'asc' ? 'down' : 'up');
976
1018
  }
977
1019
 
978
1020
  return _react["default"].createElement("th", {
979
- onContextMenu: _this13.menuContextHandler,
980
- id: _this13.domId + '-' + key,
1021
+ onContextMenu: _this14.menuContextHandler,
1022
+ id: _this14.domId + '-' + key,
981
1023
  "data-key": 'head_' + key,
982
1024
  style: style
983
- }, _this13.is_sort ? _react["default"].createElement("a", {
1025
+ }, _this14.is_sort ? _react["default"].createElement("a", {
984
1026
  className: "ck-ctable-sort",
985
1027
  href: "javascript://",
986
- id: "".concat(_this13.domId, "-sort-").concat(item.props.field),
1028
+ id: "".concat(_this14.domId, "-sort-").concat(item.props.field),
987
1029
  "data-field": item.props.field,
988
- onClick: _this13.sortHandler
1030
+ onClick: _this14.sortHandler
989
1031
  }, item.props.text, " ", _react["default"].createElement(_reactBootstrap.Icon, {
990
1032
  icon: sort_icon
991
- })) : item.props.text, _this13.props.move ? _react["default"].createElement("span", {
1033
+ })) : item.props.text, _this14.props.move ? _react["default"].createElement("span", {
992
1034
  ref: function ref(c) {
993
- return _this13.headerSplits.push(c);
1035
+ return _this14.headerSplits.push(c);
994
1036
  },
995
- "data-key": _this13.domId + '-' + key,
1037
+ "data-key": _this14.domId + '-' + key,
996
1038
  className: "ck-column-split"
997
1039
  }) : null);
998
1040
  })))));
@@ -1000,34 +1042,34 @@ function (_React$Component) {
1000
1042
  }, {
1001
1043
  key: "renderRows",
1002
1044
  value: function renderRows() {
1003
- var _this14 = this;
1045
+ var _this15 = this;
1004
1046
 
1005
1047
  return _react["default"].createElement("div", {
1006
1048
  ref: function ref(c) {
1007
- return _this14.table_rows = c;
1049
+ return _this15.table_rows = c;
1008
1050
  },
1009
1051
  id: "table-body-com-".concat(this.domId),
1010
1052
  className: "flex-grow-1 rows",
1011
1053
  onScroll: this.scrollHandler
1012
1054
  }, _react["default"].createElement("table", {
1013
1055
  ref: function ref(c) {
1014
- return _this14.table_body = c;
1056
+ return _this15.table_body = c;
1015
1057
  },
1016
1058
  id: "table-body-".concat(this.domId),
1017
1059
  className: this.getClasses(),
1018
1060
  style: this.getTableStyles()
1019
1061
  }, _react["default"].createElement("tbody", null, this.state.data.map(function (row, i) {
1020
- if (_this14.props.edit) {
1021
- return _this14.renderEditRow(row, i);
1062
+ if (_this15.props.edit) {
1063
+ return _this15.renderEditRow(row, i);
1022
1064
  }
1023
1065
 
1024
- return _this14.renderRow(row, i);
1025
- }), this.props.edit ? this.renderEditAddRow() : null)), this.props.menu ? this.renderMenu() : null);
1066
+ return _this15.renderRow(row, i);
1067
+ }), this.props.edit ? this.renderEditAddRow() : null)), this.props.menu ? this.renderMenu() : null, this.props.menu ? this.renderNumberMenu() : null);
1026
1068
  }
1027
1069
  }, {
1028
1070
  key: "renderRow",
1029
1071
  value: function renderRow(row, i, parentRow) {
1030
- var _this15 = this;
1072
+ var _this16 = this;
1031
1073
 
1032
1074
  return _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement("tr", {
1033
1075
  className: this.props.onClick ? 'click-row' : null,
@@ -1046,18 +1088,33 @@ function (_React$Component) {
1046
1088
  } //set style
1047
1089
 
1048
1090
 
1049
- var style = _objectSpread({}, _this15.props.columnStyle);
1091
+ var style = _objectSpread({}, _this16.props.columnStyle);
1050
1092
 
1051
- style.textAlign = item.props.align || _this15.props.align;
1093
+ style.textAlign = item.props.align || _this16.props.align;
1052
1094
 
1053
1095
  if (item.props.width) {
1054
1096
  style.width = item.props.width;
1055
1097
  }
1056
1098
 
1099
+ var dataType;
1100
+
1101
+ switch (item.props.dataType) {
1102
+ case "number":
1103
+ dataType = "number";
1104
+ break;
1105
+
1106
+ case "date":
1107
+ dataType = "date";
1108
+ break;
1109
+
1110
+ default:
1111
+ dataType = "text";
1112
+ }
1113
+
1057
1114
  if (item.props.children) {
1058
1115
  return _react["default"].createElement("td", {
1059
- onContextMenu: _this15.menuContextHandler,
1060
- id: _this15.domId + '-' + key,
1116
+ onContextMenu: _this16.menuContextHandler(dataType),
1117
+ id: _this16.domId + '-' + key,
1061
1118
  "data-row": "".concat(i),
1062
1119
  "data-field": item.props.field,
1063
1120
  className: item.props.className,
@@ -1071,9 +1128,13 @@ function (_React$Component) {
1071
1128
  value: row[item.props.field]
1072
1129
  }));
1073
1130
  } else {
1131
+ if (item.props.type) {
1132
+ item.props.disabled = true;
1133
+ }
1134
+
1074
1135
  return _react["default"].createElement("td", {
1075
- onContextMenu: _this15.menuContextHandler,
1076
- id: _this15.domId + '-' + key,
1136
+ onContextMenu: _this16.menuContextHandler(dataType),
1137
+ id: _this16.domId + '-' + key,
1077
1138
  "data-field": item.props.field,
1078
1139
  style: style,
1079
1140
  onClick: function onClick(e) {
@@ -1087,14 +1148,14 @@ function (_React$Component) {
1087
1148
  }
1088
1149
  },
1089
1150
  "data-row": "".concat(i)
1090
- }, item.props.onFormat ? item.props.onFormat(row[item.props.field], row, item.props.field) : row[item.props.field]);
1151
+ }, item.props.type ? _this16.renderEditComponent(item.props, row, i) : item.props.onFormat ? item.props.onFormat(row[item.props.field], row, item.props.field) : row[item.props.field]);
1091
1152
  }
1092
1153
  })));
1093
1154
  }
1094
1155
  }, {
1095
1156
  key: "renderEditRow",
1096
1157
  value: function renderEditRow(row, i) {
1097
- var _this16 = this;
1158
+ var _this17 = this;
1098
1159
 
1099
1160
  return _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement("tr", {
1100
1161
  className: this.props.onClick ? 'click-row' : null,
@@ -1114,18 +1175,19 @@ function (_React$Component) {
1114
1175
  } //set style
1115
1176
 
1116
1177
 
1117
- var style = _objectSpread({}, _this16.props.columnStyle);
1178
+ var style = _objectSpread({}, _this17.props.columnStyle);
1118
1179
 
1119
- style.textAlign = item.props.align || _this16.props.align;
1180
+ style.textAlign = item.props.align || _this17.props.align;
1120
1181
 
1121
1182
  if (item.props.width) {
1122
1183
  style.width = item.props.width;
1123
1184
  }
1124
1185
 
1186
+ var dataType = 'text';
1125
1187
  return _react["default"].createElement("td", {
1126
- onContextMenu: _this16.menuContextHandler,
1188
+ onContextMenu: _this17.menuContextHandler(dataType),
1127
1189
  className: item.props.disabled ? 'disabled' : '',
1128
- id: _this16.domId + '-' + key,
1190
+ id: _this17.domId + '-' + key,
1129
1191
  "data-field": item.props.field,
1130
1192
  style: style,
1131
1193
  onClick: function onClick(e) {
@@ -1139,13 +1201,13 @@ function (_React$Component) {
1139
1201
  }
1140
1202
  },
1141
1203
  "data-row": "".concat(i)
1142
- }, _this16.props.disabled ? item.props.onFormat ? item.props.onFormat(row[item.props.field], row, item.props.field) : row[item.props.field] : _this16.renderEditComponent(item.props, row, i));
1204
+ }, item.props.disabled ? item.props.onFormat ? item.props.onFormat(row[item.props.field], row, item.props.field) : row[item.props.field] : _this17.renderEditComponent(item.props, row, i));
1143
1205
  })));
1144
1206
  }
1145
1207
  }, {
1146
1208
  key: "renderEditAddRow",
1147
1209
  value: function renderEditAddRow() {
1148
- var _this17 = this;
1210
+ var _this18 = this;
1149
1211
 
1150
1212
  return _react["default"].createElement("tr", {
1151
1213
  id: this.domId + '-edit'
@@ -1167,13 +1229,15 @@ function (_React$Component) {
1167
1229
  return _react["default"].createElement("td", {
1168
1230
  style: style
1169
1231
  }, _react["default"].createElement(_CTableInput["default"], {
1170
- onFocus: _this17.addNewHandler
1232
+ onFocus: _this18.addNewHandler
1171
1233
  }));
1172
1234
  }));
1173
1235
  }
1174
1236
  }, {
1175
1237
  key: "renderEditComponent",
1176
1238
  value: function renderEditComponent(item, row, i) {
1239
+ var _this19 = this;
1240
+
1177
1241
  switch (item.type) {
1178
1242
  case "combo":
1179
1243
  return _react["default"].createElement(_CTableInput["default"], {
@@ -1200,7 +1264,16 @@ function (_React$Component) {
1200
1264
  });
1201
1265
 
1202
1266
  case "checkbox":
1203
- break;
1267
+ return _react["default"].createElement(_reactBootstrap.CCheckbox, {
1268
+ width: "20px",
1269
+ onChange: function onChange(chk, e) {
1270
+ _this19.editHandler(e, chk, 'chk');
1271
+ },
1272
+ "data-row": i,
1273
+ "data-field": item.field,
1274
+ checked: !!row[item.field],
1275
+ disabled: item.disabled
1276
+ });
1204
1277
 
1205
1278
  default:
1206
1279
  return _react["default"].createElement(_CTableInput["default"], {
@@ -1232,7 +1305,7 @@ function (_React$Component) {
1232
1305
  }, {
1233
1306
  key: "renderTotal",
1234
1307
  value: function renderTotal() {
1235
- var _this18 = this;
1308
+ var _this20 = this;
1236
1309
 
1237
1310
  if (!this.state.total) {
1238
1311
  return null;
@@ -1241,11 +1314,11 @@ function (_React$Component) {
1241
1314
  var total = this.state.total;
1242
1315
  return _react["default"].createElement("div", {
1243
1316
  ref: function ref(c) {
1244
- return _this18.tableTotal = c;
1317
+ return _this20.tableTotal = c;
1245
1318
  }
1246
1319
  }, _react["default"].createElement("table", {
1247
1320
  ref: function ref(c) {
1248
- return _this18.table_total = c;
1321
+ return _this20.table_total = c;
1249
1322
  },
1250
1323
  id: "table-total-".concat(this.domId),
1251
1324
  className: this.getClasses(),
@@ -1259,7 +1332,7 @@ function (_React$Component) {
1259
1332
  return null;
1260
1333
  }
1261
1334
 
1262
- var align = item.props.align || _this18.props.align;
1335
+ var align = item.props.align || _this20.props.align;
1263
1336
  var style = {
1264
1337
  'textAlign': align
1265
1338
  };
@@ -1269,7 +1342,7 @@ function (_React$Component) {
1269
1342
  }
1270
1343
 
1271
1344
  return _react["default"].createElement("td", {
1272
- id: _this18.domId + '-' + key,
1345
+ id: _this20.domId + '-' + key,
1273
1346
  "data-field": item.props.field,
1274
1347
  style: style
1275
1348
  }, item.props.onFormat ? item.props.onFormat(total[item.props.field], total, item.props.field) : total[item.props.field]);
@@ -1278,7 +1351,7 @@ function (_React$Component) {
1278
1351
  }, {
1279
1352
  key: "renderMenu",
1280
1353
  value: function renderMenu() {
1281
- var _this19 = this;
1354
+ var _this21 = this;
1282
1355
 
1283
1356
  var lang = this.props.lang;
1284
1357
 
@@ -1289,9 +1362,9 @@ function (_React$Component) {
1289
1362
  lang = _CTable2["default"][langStr];
1290
1363
  }
1291
1364
 
1292
- return _react["default"].createElement(_reactBootstrap.Menu, {
1365
+ return _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement(_reactBootstrap.Menu, {
1293
1366
  ref: function ref(c) {
1294
- return _this19.mainMenu = c;
1367
+ return _this21.mainMenu = c;
1295
1368
  },
1296
1369
  onClick: this.menuClickHandler
1297
1370
  }, _react["default"].createElement(_reactBootstrap.Menu.Item, {
@@ -1302,22 +1375,14 @@ function (_React$Component) {
1302
1375
  }, _react["default"].createElement(_reactBootstrap.Icon, {
1303
1376
  className: "mr-1",
1304
1377
  icon: "copy"
1305
- }), lang['Copy']), _react["default"].createElement(_reactBootstrap.Menu.Item, {
1306
- field: "cut",
1307
- onClick: function onClick() {
1308
- document.execCommand("cut");
1309
- }
1310
- }, _react["default"].createElement(_reactBootstrap.Icon, {
1311
- className: "mr-1",
1312
- icon: "cut"
1313
- }), lang['Cut']), this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1378
+ }), lang['Copy']), this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1314
1379
  step: true
1315
1380
  }) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1316
1381
  field: "select_filter",
1317
1382
  onClick: function onClick(e, field, data) {
1318
1383
  var select = document.getSelection();
1319
1384
 
1320
- _this19.filterHandler(select.toString(), data.field, 'contain');
1385
+ _this21.filterHandler(select.toString(), data.field, 'contain');
1321
1386
  }
1322
1387
  }, _react["default"].createElement(_reactBootstrap.Icon, {
1323
1388
  className: "mr-1",
@@ -1327,7 +1392,7 @@ function (_React$Component) {
1327
1392
  onClick: function onClick(e, field, data) {
1328
1393
  var select = document.getSelection();
1329
1394
 
1330
- _this19.filterHandler(select.toString(), data.field, 'exclude');
1395
+ _this21.filterHandler(select.toString(), data.field, 'exclude');
1331
1396
  }
1332
1397
  }, _react["default"].createElement(_reactBootstrap.Icon, {
1333
1398
  className: "mr-1",
@@ -1335,7 +1400,7 @@ function (_React$Component) {
1335
1400
  }), lang['Filter Excluding Selection']) : null, this.is_filter || this.is_sort ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1336
1401
  field: "clear_filter",
1337
1402
  onClick: function onClick() {
1338
- _this19.clearFilter();
1403
+ _this21.clearFilter();
1339
1404
  }
1340
1405
  }, _react["default"].createElement("span", {
1341
1406
  className: "text-danger"
@@ -1345,6 +1410,28 @@ function (_React$Component) {
1345
1410
  }), lang['Clear Filter / Sort'])) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1346
1411
  step: true
1347
1412
  }) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1413
+ field: "equal"
1414
+ }, _react["default"].createElement("span", {
1415
+ className: "mr-1",
1416
+ style: inputStyle
1417
+ }, lang['Equal With']), _react["default"].createElement(_reactBootstrap.Input, {
1418
+ className: "mr-1",
1419
+ size: "xs",
1420
+ width: "120px",
1421
+ data: this.state.filter.equal,
1422
+ onChange: this.filterChangeHandler('equal'),
1423
+ onMouseDown: stopEvent,
1424
+ onEnter: function onEnter() {
1425
+ _this21.filterHandler(_this21.state.filter.equal, _this21.mainMenu.data.field, 'equal');
1426
+ }
1427
+ }), _react["default"].createElement(_reactBootstrap.Button, {
1428
+ size: "xs",
1429
+ onMouseDown: stopEvent,
1430
+ onClick: function onClick(e) {
1431
+ _this21.filterHandler(_this21.state.filter.equal, _this21.mainMenu.data.field, 'equal');
1432
+ },
1433
+ icon: "search"
1434
+ })) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1348
1435
  field: "filter"
1349
1436
  }, _react["default"].createElement("span", {
1350
1437
  className: "mr-1",
@@ -1357,13 +1444,13 @@ function (_React$Component) {
1357
1444
  onChange: this.filterChangeHandler('start'),
1358
1445
  onMouseDown: stopEvent,
1359
1446
  onEnter: function onEnter() {
1360
- _this19.filterHandler(_this19.state.filter.start, _this19.mainMenu.data.field, 'start');
1447
+ _this21.filterHandler(_this21.state.filter.start, _this21.mainMenu.data.field, 'start');
1361
1448
  }
1362
1449
  }), _react["default"].createElement(_reactBootstrap.Button, {
1363
1450
  size: "xs",
1364
1451
  onMouseDown: stopEvent,
1365
1452
  onClick: function onClick(e) {
1366
- _this19.filterHandler(_this19.state.filter.start, _this19.mainMenu.data.field, 'start');
1453
+ _this21.filterHandler(_this21.state.filter.start, _this21.mainMenu.data.field, 'start');
1367
1454
  },
1368
1455
  icon: "search"
1369
1456
  })) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
@@ -1379,13 +1466,13 @@ function (_React$Component) {
1379
1466
  onChange: this.filterChangeHandler('end'),
1380
1467
  onMouseDown: stopEvent,
1381
1468
  onEnter: function onEnter() {
1382
- _this19.filterHandler(_this19.state.filter.start, _this19.mainMenu.data.field, 'end');
1469
+ _this21.filterHandler(_this21.state.filter.end, _this21.mainMenu.data.field, 'end');
1383
1470
  }
1384
1471
  }), _react["default"].createElement(_reactBootstrap.Button, {
1385
1472
  size: "xs",
1386
1473
  onMouseDown: stopEvent,
1387
1474
  onClick: function onClick(e) {
1388
- _this19.filterHandler(_this19.state.filter.end, _this19.mainMenu.data.field, 'end');
1475
+ _this21.filterHandler(_this21.state.filter.end, _this21.mainMenu.data.field, 'end');
1389
1476
  },
1390
1477
  icon: "search"
1391
1478
  })) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
@@ -1401,28 +1488,32 @@ function (_React$Component) {
1401
1488
  onChange: this.filterChangeHandler('contain'),
1402
1489
  onMouseDown: stopEvent,
1403
1490
  onEnter: function onEnter() {
1404
- _this19.filterHandler(_this19.state.filter.start, _this19.mainMenu.data.field, 'contain');
1491
+ _this21.filterHandler(_this21.state.filter.contain, _this21.mainMenu.data.field, 'contain');
1405
1492
  }
1406
1493
  }), _react["default"].createElement(_reactBootstrap.Button, {
1407
1494
  size: "xs",
1408
1495
  onMouseDown: stopEvent,
1409
1496
  onClick: function onClick(e) {
1410
- _this19.filterHandler(_this19.state.filter.contain, _this19.mainMenu.data.field, 'contain');
1497
+ _this21.filterHandler(_this21.state.filter.contain, _this21.mainMenu.data.field, 'contain');
1411
1498
  },
1412
1499
  icon: "search"
1413
- })) : null, this.is_sort ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1500
+ })) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1414
1501
  step: true
1415
- }) : null, this.is_sort ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1416
- field: "asc"
1417
- }, _react["default"].createElement(_reactBootstrap.Icon, {
1418
- className: "mr-1",
1419
- icon: "sort-alpha-down"
1420
- }), lang['Sort Ascending']) : null, this.is_sort ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1421
- field: "desc"
1422
- }, _react["default"].createElement(_reactBootstrap.Icon, {
1423
- className: "mr-1",
1424
- icon: "sort-alpha-up"
1425
- }), lang['Sort Descending']) : null, this.props.edit ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1502
+ }) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1503
+ field: "filter",
1504
+ className: "flex-column"
1505
+ }, _react["default"].createElement("div", {
1506
+ className: "w-100"
1507
+ }, lang['Condition Filter']), _react["default"].createElement(_reactBootstrap.Input, {
1508
+ size: "xs",
1509
+ width: "100%",
1510
+ data: this.state.filter.condition,
1511
+ onChange: this.filterChangeHandler('condition'),
1512
+ onMouseDown: stopEvent,
1513
+ onEnter: function onEnter() {
1514
+ _this21.filterHandler(_this21.state.filter.condition, _this21.mainMenu.data.field, 'condition');
1515
+ }
1516
+ })) : null, this.props.edit ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1426
1517
  step: true
1427
1518
  }) : null, this.props.edit ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1428
1519
  field: "delete_row"
@@ -1431,13 +1522,90 @@ function (_React$Component) {
1431
1522
  }, lang['Clone Row']) : null, this.props.customMenu ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1432
1523
  step: true
1433
1524
  }) : null, this.props.customMenu ? this.props.customMenu.map(function (menu) {
1434
- return _this19.explainCustomMenu(menu);
1435
- }) : null);
1525
+ return _this21.explainCustomMenu(menu);
1526
+ }) : null));
1527
+ }
1528
+ }, {
1529
+ key: "renderNumberMenu",
1530
+ value: function renderNumberMenu() {
1531
+ var _this22 = this;
1532
+
1533
+ var lang = this.props.lang;
1534
+
1535
+ if (!lang) {
1536
+ var i18 = _reactBootstrap.i18n.getLang();
1537
+
1538
+ var langStr = typeof lang === 'string' ? lang : i18["short"];
1539
+ lang = _CTable2["default"][langStr];
1540
+ }
1541
+
1542
+ return _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement(_reactBootstrap.Menu, {
1543
+ ref: function ref(c) {
1544
+ return _this22.numMenu = c;
1545
+ },
1546
+ onClick: this.menuClickHandler
1547
+ }, _react["default"].createElement(_reactBootstrap.Menu.Item, {
1548
+ field: "copy",
1549
+ onClick: function onClick() {
1550
+ document.execCommand("copy");
1551
+ }
1552
+ }, _react["default"].createElement(_reactBootstrap.Icon, {
1553
+ className: "mr-1",
1554
+ icon: "copy"
1555
+ }), lang['Copy']), this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1556
+ step: true
1557
+ }) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1558
+ field: "select_filter",
1559
+ onClick: function onClick(e, field, data) {
1560
+ var select = document.getSelection();
1561
+
1562
+ _this22.filterHandler(select.toString(), data.field, 'contain');
1563
+ }
1564
+ }, _react["default"].createElement(_reactBootstrap.Icon, {
1565
+ className: "mr-1",
1566
+ icon: "filter"
1567
+ }), lang['Filter By Selection']) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1568
+ field: "select_exclude",
1569
+ onClick: function onClick(e, field, data) {
1570
+ var select = document.getSelection();
1571
+
1572
+ _this22.filterHandler(select.toString(), data.field, 'exclude');
1573
+ }
1574
+ }, _react["default"].createElement(_reactBootstrap.Icon, {
1575
+ className: "mr-1",
1576
+ icon: "filter"
1577
+ }), lang['Filter Excluding Selection']) : null, this.is_filter || this.is_sort ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1578
+ field: "clear_filter",
1579
+ onClick: function onClick() {
1580
+ _this22.clearFilter();
1581
+ }
1582
+ }, _react["default"].createElement("span", {
1583
+ className: "text-danger"
1584
+ }, _react["default"].createElement(_reactBootstrap.Icon, {
1585
+ className: "mr-1",
1586
+ icon: "brush"
1587
+ }), lang['Clear Filter / Sort'])) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1588
+ step: true
1589
+ }) : null, this.is_filter ? _react["default"].createElement(_reactBootstrap.Menu.Item, {
1590
+ field: "filter",
1591
+ className: "flex-column"
1592
+ }, _react["default"].createElement("div", {
1593
+ className: "w-100"
1594
+ }, lang['Condition Filter']), _react["default"].createElement(_reactBootstrap.Input, {
1595
+ size: "xs",
1596
+ width: "100%",
1597
+ data: this.state.filter.condition,
1598
+ onChange: this.filterChangeHandler('condition'),
1599
+ onMouseDown: stopEvent,
1600
+ onEnter: function onEnter() {
1601
+ _this22.filterHandler(_this22.state.filter.condition, _this22.numMenu.data.field, 'condition');
1602
+ }
1603
+ }), _react["default"].createElement("div", null, "and,or,between,>,>=,<,<=,=")) : null));
1436
1604
  }
1437
1605
  }, {
1438
1606
  key: "explainCustomMenu",
1439
1607
  value: function explainCustomMenu(menu) {
1440
- var _this20 = this;
1608
+ var _this23 = this;
1441
1609
 
1442
1610
  if (menu.children && menu.children instanceof Array) {
1443
1611
  return _react["default"].createElement(_reactBootstrap.Menu.Item, {
@@ -1445,7 +1613,7 @@ function (_React$Component) {
1445
1613
  text: menu.text,
1446
1614
  child: true
1447
1615
  }, menu.children.map(function (item) {
1448
- return _this20.explainCustomMenu(item);
1616
+ return _this23.explainCustomMenu(item);
1449
1617
  }));
1450
1618
  } else {
1451
1619
  return _react["default"].createElement(_reactBootstrap.Menu.Item, {