@lemon-fe/kits 1.0.0-142 → 1.0.0-144

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,4 @@
1
+ import React from 'react';
2
+ import type { DataGridSearch, DataGridSearchRef } from '../typings';
3
+ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<DataGridSearch & React.RefAttributes<DataGridSearchRef>>>;
4
+ export default _default;
@@ -0,0 +1,183 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+
5
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+
9
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+
11
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
+
13
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
14
+
15
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
16
+
17
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
18
+
19
+ import { useDebounce } from '@lemon-fe/hooks';
20
+ import { Button, Input, Space } from 'antd';
21
+ import React, { forwardRef, memo, useState, useImperativeHandle, useMemo } from 'react';
22
+ import { useGridStore } from "../hooks";
23
+ export default /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function Search(props, ref) {
24
+ var placeholder = props.placeholder,
25
+ searchFields = props.searchFields,
26
+ focusColumn = props.focusColumn;
27
+ var defaultState = useMemo(function () {
28
+ return {
29
+ keywords: '',
30
+ nodes: [],
31
+ index: -1
32
+ };
33
+ }, []);
34
+ var grid = useGridStore(function (state) {
35
+ return state.grid;
36
+ });
37
+
38
+ var _useState = useState(defaultState),
39
+ _useState2 = _slicedToArray(_useState, 2),
40
+ state = _useState2[0],
41
+ setState = _useState2[1];
42
+
43
+ var handleSearch = useDebounce(function (keywords) {
44
+ if (keywords.length <= 0) {
45
+ setState(defaultState);
46
+ return;
47
+ }
48
+
49
+ var cols = [];
50
+
51
+ if (searchFields) {
52
+ searchFields.forEach(function (col) {
53
+ var result = grid.columnApi.getColumn(col);
54
+
55
+ if (result) {
56
+ cols.push(result);
57
+ } else {
58
+ cols.push(col);
59
+ }
60
+ });
61
+ } else {
62
+ cols = grid.columnApi.getColumns() || [];
63
+ }
64
+
65
+ if (cols.length <= 0) {
66
+ return;
67
+ }
68
+
69
+ var nodes = [];
70
+ grid.api.forEachNodeAfterFilterAndSort(function (node) {
71
+ var idx = node.rowIndex;
72
+
73
+ if (idx === null) {
74
+ return;
75
+ }
76
+
77
+ for (var i = 0; i < cols.length; i++) {
78
+ var col = cols[i];
79
+ var value = grid.api.getValue(col, node);
80
+
81
+ if (value !== undefined && value !== null && typeof value === 'string' && value.includes(keywords)) {
82
+ nodes.push({
83
+ index: idx,
84
+ id: node.id
85
+ });
86
+ break;
87
+ }
88
+ }
89
+ });
90
+ setState(function (prev) {
91
+ return _objectSpread(_objectSpread({}, prev), {}, {
92
+ nodes: nodes,
93
+ index: -1
94
+ });
95
+ });
96
+ }, 300);
97
+
98
+ var focusCell = function focusCell(index) {
99
+ var node = grid.api.getModel().getRow(index);
100
+
101
+ if (node === undefined) {
102
+ return;
103
+ }
104
+
105
+ grid.api.ensureIndexVisible(index);
106
+ var col = grid.columnApi.getAllDisplayedColumns()[0];
107
+
108
+ if (focusColumn) {
109
+ col = grid.columnApi.getColumn(focusColumn);
110
+
111
+ if (col !== null) {
112
+ grid.api.setFocusedCell(index, col);
113
+
114
+ if (col.isCellEditable(node)) {
115
+ grid.api.startEditingCell({
116
+ rowIndex: index,
117
+ colKey: col
118
+ });
119
+ }
120
+ }
121
+ } else {
122
+ node.setSelected(true);
123
+ }
124
+ };
125
+
126
+ var handlePrev = function handlePrev() {
127
+ if (state.nodes.length <= 0) {
128
+ return;
129
+ }
130
+
131
+ var idx = (state.index - 1 + state.nodes.length) % state.nodes.length;
132
+ focusCell(state.nodes[idx].index);
133
+ setState(function (prev) {
134
+ return _objectSpread(_objectSpread({}, prev), {}, {
135
+ index: idx
136
+ });
137
+ });
138
+ };
139
+
140
+ var handleNext = function handleNext() {
141
+ if (state.nodes.length <= 0) {
142
+ return;
143
+ }
144
+
145
+ var idx = (state.index + 1) % state.nodes.length;
146
+ focusCell(state.nodes[idx].index);
147
+ setState(function (prev) {
148
+ return _objectSpread(_objectSpread({}, prev), {}, {
149
+ index: idx
150
+ });
151
+ });
152
+ };
153
+
154
+ useImperativeHandle(ref, function () {
155
+ return {
156
+ reset: function reset() {
157
+ setState(defaultState);
158
+ }
159
+ };
160
+ });
161
+ return /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement("span", null, "\u5173\u952E\u5B57"), /*#__PURE__*/React.createElement(Input, {
162
+ placeholder: placeholder,
163
+ value: state.keywords,
164
+ onChange: function onChange(e) {
165
+ setState(function (prev) {
166
+ return _objectSpread(_objectSpread({}, prev), {}, {
167
+ keywords: e.target.value
168
+ });
169
+ });
170
+ handleSearch(e.target.value);
171
+ },
172
+ suffix: /*#__PURE__*/React.createElement("span", null, "".concat(state.index + 1, "/").concat(state.nodes.length)),
173
+ onKeyUp: function onKeyUp(e) {
174
+ if (e.key === 'Enter') {
175
+ handleNext();
176
+ }
177
+ }
178
+ }), /*#__PURE__*/React.createElement(Button, {
179
+ onClick: handlePrev
180
+ }, "\u4E0A\u4E00\u4E2A"), /*#__PURE__*/React.createElement(Button, {
181
+ onClick: handleNext
182
+ }, "\u4E0B\u4E00\u4E2A"));
183
+ }));
@@ -15,6 +15,7 @@ export default class DataGrid<TData extends Record<string, any>> extends Compone
15
15
  private readyQueue;
16
16
  private emptyRowData;
17
17
  private sideBarDef;
18
+ private searchRef;
18
19
  private prevFocusedCell;
19
20
  static defaultProps: {
20
21
  stopEditingWhenCellsLoseFocus: boolean;
@@ -68,7 +69,7 @@ export default class DataGrid<TData extends Record<string, any>> extends Compone
68
69
  private getColumnDefs;
69
70
  private isClientMode;
70
71
  private clearReadyQueue;
71
- private afterReady;
72
+ afterReady(cb: () => void): void;
72
73
  private isPreserveSelected;
73
74
  private updateRowData;
74
75
  private getDataFromServer;
@@ -1,7 +1,7 @@
1
1
  var _excluded = ["validator"],
2
2
  _excluded2 = ["title", "dataIndex", "type", "render", "ellipsis", "cellRenderer", "cellRendererParams", "className", "sorter", "sortable", "editable", "suppressKeyboardEvent"],
3
3
  _excluded3 = ["title", "children"],
4
- _excluded4 = ["rowKey", "fetch", "dataSource", "rowActions", "columns", "autoLoad", "loading", "summary", "detailCell", "pagination", "rowSelection", "columnTypes", "defaultColDef", "components", "sideBar", "detailCellRendererParams", "context"];
4
+ _excluded4 = ["rowKey", "fetch", "dataSource", "rowActions", "columns", "autoLoad", "loading", "summary", "detailCell", "pagination", "rowSelection", "columnTypes", "defaultColDef", "components", "sideBar", "detailCellRendererParams", "context", "showSearch"];
5
5
 
6
6
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
7
7
 
@@ -72,7 +72,7 @@ import Scheme from 'async-validator';
72
72
  import classNames from 'classnames';
73
73
  import { get, set } from 'lodash';
74
74
  import memoizeOne from 'memoize-one';
75
- import React, { Component } from 'react';
75
+ import React, { Component, createRef } from 'react';
76
76
  import shallowEqual from 'shallowequal';
77
77
  import DateEditor from "./cell-editors/Date";
78
78
  import NumberEditor from "./cell-editors/Number";
@@ -80,6 +80,7 @@ import RowEditor, { RowEditorData } from "./cell-editors/Row";
80
80
  import SelectEditor from "./cell-editors/Select";
81
81
  import TextEditor from "./cell-editors/Text";
82
82
  import EditorWrapper from "./cell-editors/Wrapper";
83
+ import Search from "./components/Search";
83
84
  import Selected from "./components/Selected";
84
85
  import GridStoreContext from "./context/GridStore";
85
86
  import { useGridStore } from "./hooks";
@@ -172,6 +173,8 @@ var DataGrid = /*#__PURE__*/function (_Component) {
172
173
  }]
173
174
  });
174
175
 
176
+ _defineProperty(_assertThisInitialized(_this), "searchRef", /*#__PURE__*/createRef());
177
+
175
178
  _defineProperty(_assertThisInitialized(_this), "prevFocusedCell", null);
176
179
 
177
180
  _defineProperty(_assertThisInitialized(_this), "init", function (args) {
@@ -258,10 +261,13 @@ var DataGrid = /*#__PURE__*/function (_Component) {
258
261
  }
259
262
 
260
263
  if (onDataSourceChange !== undefined) {
264
+ var _this$searchRef$curre;
265
+
261
266
  /**
262
267
  * 这么做是为了解决可编辑表格直接修改了原始数据的问题
263
268
  */
264
269
  _this.dataSource = _toConsumableArray(_this.dataSource);
270
+ (_this$searchRef$curre = _this.searchRef.current) === null || _this$searchRef$curre === void 0 ? void 0 : _this$searchRef$curre.reset();
265
271
  onDataSourceChange(_this.dataSource, evt);
266
272
  }
267
273
  });
@@ -294,6 +300,9 @@ var DataGrid = /*#__PURE__*/function (_Component) {
294
300
  _this.dataSource = data;
295
301
 
296
302
  if (onDataSourceChange !== undefined) {
303
+ var _this$searchRef$curre2;
304
+
305
+ (_this$searchRef$curre2 = _this.searchRef.current) === null || _this$searchRef$curre2 === void 0 ? void 0 : _this$searchRef$curre2.reset();
297
306
  onDataSourceChange(data, evt);
298
307
  }
299
308
  }
@@ -1294,6 +1303,7 @@ var DataGrid = /*#__PURE__*/function (_Component) {
1294
1303
  sideBarProp = _this$props7.sideBar,
1295
1304
  detailCellRendererParams = _this$props7.detailCellRendererParams,
1296
1305
  context = _this$props7.context,
1306
+ showSearch = _this$props7.showSearch,
1297
1307
  restProps = _objectWithoutProperties(_this$props7, _excluded4);
1298
1308
 
1299
1309
  var _this$state2 = this.state,
@@ -1315,6 +1325,12 @@ var DataGrid = /*#__PURE__*/function (_Component) {
1315
1325
  }));
1316
1326
  }
1317
1327
 
1328
+ if (showSearch) {
1329
+ footer.push( /*#__PURE__*/React.createElement(Search, _extends({
1330
+ ref: this.searchRef
1331
+ }, _typeof(showSearch) === 'object' ? showSearch : {})));
1332
+ }
1333
+
1318
1334
  if (enablePagination) {
1319
1335
  footer.push( /*#__PURE__*/React.createElement(Pagination, _extends({
1320
1336
  key: "pagination",
@@ -112,6 +112,22 @@ export declare type DetailCell<TData, Params = Record<string, never>> = {
112
112
  /** 这是一个render函数不是组件 */
113
113
  render: (params: ICellRendererParams<TData> & Params) => ReactNode;
114
114
  };
115
+ export interface DataGridSearch {
116
+ /**
117
+ * @description
118
+ * 不传入就根据所有字符类型的列数据搜索
119
+ */
120
+ searchFields?: string[];
121
+ placeholder?: string;
122
+ /**
123
+ * @description
124
+ * 搜索后聚焦到哪个单元格,一般情况不要使用
125
+ */
126
+ focusColumn?: string;
127
+ }
128
+ export interface DataGridSearchRef {
129
+ reset: () => void;
130
+ }
115
131
  export interface DataGridProps<TData> extends Omit<AgGridReactProps<TData>, 'rowSelection' | 'pagination'> {
116
132
  dataSource?: TData[];
117
133
  /**
@@ -169,4 +185,8 @@ export interface DataGridProps<TData> extends Omit<AgGridReactProps<TData>, 'row
169
185
  * @description 没有行数据时显示的文本
170
186
  */
171
187
  emptyText?: string;
188
+ /**
189
+ * @description 显示底部搜索栏,只支持非远程模式
190
+ */
191
+ showSearch?: boolean | DataGridSearch;
172
192
  }
@@ -185,7 +185,7 @@ function EditableTable(props, ref) {
185
185
  onFocus: opts.onFocus
186
186
  }, /*#__PURE__*/cloneElement(renderFormItem, {
187
187
  bordered: false,
188
- value: value,
188
+ value: val,
189
189
  onChange: function onChange(e) {
190
190
  var result = e;
191
191
 
@@ -24,12 +24,12 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
24
24
 
25
25
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
26
26
 
27
- import React, { useState, useMemo, useEffect, useRef } from 'react';
28
27
  import { Modal } from 'antd';
29
- import { useHistory, useLocation, matchPath, useRouteMatch } from 'react-router';
30
28
  import moment from 'moment';
31
- import MainFramework from "./MainFramework";
29
+ import React, { useState, useMemo, useEffect, useRef } from 'react';
30
+ import { useHistory, useLocation, matchPath, useRouteMatch } from 'react-router';
32
31
  import RouteTab from "../../components/RouteTab";
32
+ import MainFramework from "./MainFramework";
33
33
 
34
34
  function mapTree(tree, childrenKey, mapper) {
35
35
  var traverse = function traverse(nodes) {
@@ -264,6 +264,38 @@ export default function Main(props) {
264
264
 
265
265
  prevUrl.current = window.location.pathname;
266
266
  }, [state]);
267
+ useEffect(function () {
268
+ var handler = function handler(e) {
269
+ if (window._czc) {
270
+ var _node = e.target;
271
+ var tab = undefined;
272
+ var eventType = undefined;
273
+
274
+ while (_node) {
275
+ if (!eventType) {
276
+ eventType = _node.dataset.trackEvent;
277
+ }
278
+
279
+ tab = _node.dataset.trackTab;
280
+
281
+ if (tab) {
282
+ break;
283
+ }
284
+
285
+ _node = _node.parentElement;
286
+ }
287
+
288
+ if (eventType) {
289
+ window._czc.push('_trackEvent', title, '功能', tab || '--', eventType);
290
+ }
291
+ }
292
+ };
293
+
294
+ window.addEventListener('click', handler, false);
295
+ return function () {
296
+ window.removeEventListener('click', handler, false);
297
+ };
298
+ }, []);
267
299
 
268
300
  var handleClick = function handleClick(index) {
269
301
  if (state.active !== index) {
@@ -375,7 +407,8 @@ export default function Main(props) {
375
407
  key: key,
376
408
  style: state.active === index ? undefined : {
377
409
  display: 'none'
378
- }
410
+ },
411
+ "data-track-tab": tab.title
379
412
  }, /*#__PURE__*/React.createElement(RouteTab, {
380
413
  authorities: mAuths,
381
414
  route: route,
@@ -74,6 +74,21 @@
74
74
  display: flex;
75
75
  flex: 1;
76
76
  min-height: 0;
77
+
78
+ .@{prefixCls}-layout {
79
+ background-color: transparent;
80
+
81
+ &-header {
82
+ padding: 8px 0;
83
+ }
84
+
85
+ &-body {
86
+ overflow: hidden;
87
+ background-color: #fff;
88
+ border-top-left-radius: 8px;
89
+ border-top-right-radius: 8px;
90
+ }
91
+ }
77
92
  }
78
93
 
79
94
  .@{prefixCls}-content {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lemon-fe/kits",
3
- "version": "1.0.0-142",
3
+ "version": "1.0.0-144",
4
4
  "scripts": {
5
5
  "start": "dumi dev",
6
6
  "docs:build": "dumi build",