@lemon-fe/components 1.3.0-alpha.0 → 1.3.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.
@@ -1,4 +1,5 @@
1
1
  .@{prefixCls}-filter {
2
+ /** 兼容代码 */
2
3
  &-tab-bar {
3
4
  margin-bottom: @space-v;
4
5
 
@@ -6,10 +7,51 @@
6
7
  padding: 8px 12px;
7
8
  }
8
9
  }
10
+ /** 兼容代码 end */
11
+
12
+ &-tabbar {
13
+ display: flex;
14
+ margin-bottom: @padding-sm;
15
+
16
+ &-item {
17
+ height: 28px;
18
+ margin-right: @padding-xs;
19
+ padding: 0 @padding-md;
20
+ color: #666;
21
+ line-height: 28px;
22
+ background-color: #f2f3f5;
23
+ border-radius: 4px;
24
+ cursor: pointer;
25
+ transition: background-color 0.2s;
26
+
27
+ &:hover:not(&-active) {
28
+ background-color: #e8eaec;
29
+ }
30
+
31
+ &-active {
32
+ color: .primary() [];
33
+ background-color: .primary(0.1) [];
34
+ }
35
+
36
+ &-dropdown:hover svg,
37
+ &-dropdown:active svg {
38
+ background-color: .primary(0.2) [];
39
+ border-radius: 2px;
40
+ }
41
+ }
42
+
43
+ &-add {
44
+ width: 28px;
45
+ padding: 0;
46
+ font-size: 12px;
47
+ text-align: center;
48
+ }
49
+ }
9
50
 
10
51
  &-pending {
11
52
  height: 64px;
12
53
  overflow: hidden;
54
+ visibility: hidden;
13
55
  }
14
56
 
15
57
  &-form-item {
@@ -58,26 +100,63 @@
58
100
  }
59
101
 
60
102
  &-popover {
61
- .popover(220px);
103
+ .popover(250px);
62
104
 
63
105
  .@{ant-prefix}-popover-inner {
64
- padding: @space-v 0;
106
+ padding: 0;
107
+ padding-top: @padding-md;
108
+ }
109
+
110
+ &-footer {
111
+ display: flex;
112
+ justify-content: flex-end;
113
+ padding: @padding-sm @padding-md;
114
+ border-top: 1px solid #eaeaea;
115
+
116
+ button + button {
117
+ margin-left: @padding-sm;
118
+ }
65
119
  }
66
120
  }
67
121
 
68
122
  &-items-search {
69
- width: auto;
70
- margin: 0 @space-h 8px;
123
+ display: block;
124
+ width: 100%;
125
+ padding: 0 @padding-md;
71
126
  }
72
127
 
73
128
  &-items {
74
129
  max-height: 400px;
130
+ padding: @padding-sm 0;
75
131
  overflow: auto;
76
132
  }
77
133
 
78
134
  &-item {
79
135
  .popoverItem();
80
-
136
+ display: flex;
81
137
  overflow: hidden;
138
+
139
+ & > * + * {
140
+ margin-left: @padding-sm;
141
+ }
142
+
143
+ &-active-top {
144
+ box-shadow: 0 -1px 0 ~'var(--@{ant-prefix}-primary-color)';
145
+ }
146
+
147
+ &-active-bottom {
148
+ box-shadow: 0 1px 0 ~'var(--@{ant-prefix}-primary-color)';
149
+ }
150
+ }
151
+
152
+ &-drag-item {
153
+ display: inline-flex;
154
+ height: 36px;
155
+ padding: 0 @padding-md;
156
+ line-height: 36px;
157
+ white-space: nowrap;
158
+ background-color: #eee;
159
+ border-radius: 4px;
160
+ cursor: move;
82
161
  }
83
162
  }
@@ -1,6 +1,7 @@
1
1
  var locale = {
2
- savePlanText: 'Save plan',
3
- planNameText: 'Plan name',
2
+ savePlanModalTitle: 'Filter plan',
3
+ planModalPatternWarning: 'Please do not enter special characters: $',
4
+ planNameText: 'Name',
4
5
  removePlanText: 'Remove plan',
5
6
  planLimitText: 'The total number of query schemes cannot exceed 6',
6
7
  lableDateText: 'Date',
@@ -14,6 +15,12 @@ var locale = {
14
15
  advanceSearchText: 'Advance search',
15
16
  collapseSearchText: 'Collapse search',
16
17
  resetText: 'Reset',
18
+ hideOptionKeepOne: 'Please keep at least one filter option',
19
+ save: 'Save',
20
+ delete: 'Delete',
21
+ rename: 'Rename',
22
+ cancel: 'Cancel',
23
+ sameTitleWarning: 'The name already exists. Please re-enter it',
17
24
  deleteModal: {
18
25
  titleText: 'Info',
19
26
  confirmDeleteText: 'Are you sure delete ${title} ?'
@@ -1,5 +1,6 @@
1
1
  export interface FilterLocale extends Record<string, any> {
2
- savePlanText: string;
2
+ savePlanModalTitle: string;
3
+ planModalPatternWarning: string;
3
4
  removePlanText: string;
4
5
  planNameText: string;
5
6
  planLimitText: string;
@@ -14,6 +15,12 @@ export interface FilterLocale extends Record<string, any> {
14
15
  advanceSearchText: string;
15
16
  collapseSearchText: string;
16
17
  resetText: string;
18
+ hideOptionKeepOne: string;
19
+ save: string;
20
+ delete: string;
21
+ rename: string;
22
+ cancel: string;
23
+ sameTitleWarning: string;
17
24
  deleteModal: {
18
25
  titleText: string;
19
26
  confirmDeleteText: string;
@@ -1,6 +1,7 @@
1
1
  var locale = {
2
- savePlanText: '保存方案',
3
- planNameText: '方案名称',
2
+ savePlanModalTitle: '筛选方案',
3
+ planModalPatternWarning: '请不要输入特殊字符: $',
4
+ planNameText: '名称',
4
5
  removePlanText: '删除方案',
5
6
  planLimitText: '查询方案总数不可超过6个',
6
7
  lableDateText: '日期',
@@ -14,6 +15,12 @@ var locale = {
14
15
  advanceSearchText: '高级搜索',
15
16
  collapseSearchText: '收起搜索',
16
17
  resetText: '重置',
18
+ hideOptionKeepOne: '请至少保留一个筛选项',
19
+ save: '保存',
20
+ delete: '删除',
21
+ rename: '重命名',
22
+ cancel: '取消',
23
+ sameTitleWarning: '名称已存在,请重新填写',
17
24
  deleteModal: {
18
25
  titleText: '提示',
19
26
  confirmDeleteText: '确定删除${title}?'
@@ -17,6 +17,10 @@ export interface FilterItemType<T = any> {
17
17
  * 控制是否隐藏筛选项
18
18
  */
19
19
  hidden?: boolean;
20
+ /**
21
+ * @description 禁止用户设置隐藏
22
+ */
23
+ lockVisible?: boolean;
20
24
  extraProps?: Record<string, any>;
21
25
  renderFormItem?: (form: FormInstance<T>) => ReactElement;
22
26
  initialValue?: any;
@@ -24,6 +28,16 @@ export interface FilterItemType<T = any> {
24
28
 
25
29
  export type ActionType = 'submit' | 'reset';
26
30
 
31
+ export interface FilterView<T = any> {
32
+ title: string;
33
+ key?: string;
34
+ value?: T;
35
+ fields: {
36
+ key: string;
37
+ hidden: boolean;
38
+ }[];
39
+ }
40
+
27
41
  export interface FilterProps<T> {
28
42
  data?: FilterItemType<T>[];
29
43
  defaultValue?: T;
@@ -51,7 +65,7 @@ export interface FilterProps<T> {
51
65
  */
52
66
  autoPlaceholder?: boolean;
53
67
  /**
54
- * @description 当字段隐藏时,保留字段值并在查询返回
68
+ * @description 当字段隐藏时,保留字段值并在查询返回,如果不希望选项被隐藏后返回数据还有这个选项值,请设置false
55
69
  * @default true
56
70
  */
57
71
  preserveFields?: boolean;
@@ -69,6 +83,23 @@ export interface FilterProps<T> {
69
83
  * @description Form表单的实例,默认会由内部生成,一般情况不需要处理
70
84
  */
71
85
  form?: FormInstance<T>;
86
+ /**
87
+ * @description 启用列配置,当simple为false的时候,默认启用,优先级比simple高
88
+ */
89
+ enableFieldsConfig?: boolean;
90
+ /**
91
+ * @description 存储
92
+ */
93
+ storage?: {
94
+ data?: FilterView<T>[];
95
+ /** 不要和data同时传入 */
96
+ get?: () => null | Promise<FilterView<T>[]> | FilterView<T>[];
97
+ set?: (payload: {
98
+ data: FilterView<T>[];
99
+ target: FilterView<T>;
100
+ action: 'delete' | 'set';
101
+ }) => Promise<void> | void | FilterView<T>[] | Promise<FilterView<T>[]>;
102
+ };
72
103
  }
73
104
 
74
105
  export interface ComponentOption {
package/es/index.d.ts CHANGED
@@ -13,7 +13,7 @@ export type { EditableTableProps, EditableTableColumnType, EditableCellFocusedTy
13
13
  export { default as PageLoading } from './page-loading';
14
14
  export { default as Actions } from './actions';
15
15
  export { default as Filter } from './filter';
16
- export type { FilterItemType, FilterProps, ComponentOption } from './filter/typings';
16
+ export type { FilterItemType, FilterProps, ComponentOption, FilterView } from './filter/typings';
17
17
  export { default as Section } from './section';
18
18
  export { default as Layout } from './layout';
19
19
  export { default as DurationPicker } from './duration-picker';
@@ -1,4 +1,6 @@
1
+ import React from 'react';
1
2
  import type { CSSProperties, ReactElement } from 'react';
3
+ import { type DataGridRef } from '../data-grid';
2
4
  import type { ColType, CustomColumnData, DataGridProps, PaginationType, SortType } from '../data-grid/typings';
3
5
  import type { FilterProps } from '../filter/typings';
4
6
  import type { SideBarDef } from 'ag-grid-community';
@@ -77,5 +79,14 @@ export interface SelectViewProps<RecordType, ParamsType> extends Pick<DataGridPr
77
79
  * @default null
78
80
  */
79
81
  header?: ReactElement | null;
82
+ /**
83
+ * @description 自定义已选择datagrid
84
+ */
85
+ customSelectedGridProps?: DataGridProps<RecordType>;
86
+ /**
87
+ * @description 自定义主datagrid
88
+ */
89
+ customDataGridProps?: DataGridProps<RecordType>;
80
90
  }
81
- export default function SelectView<RecordType extends Record<string | number, any>, ParamsType extends Record<string, any>>(originalProps: SelectViewProps<RecordType, ParamsType>): JSX.Element;
91
+ declare const _default: React.ForwardRefExoticComponent<SelectViewProps<Record<string | number, any>, Record<string, any>> & React.RefAttributes<DataGridRef<Record<string | number, any>>>>;
92
+ export default _default;
@@ -16,17 +16,18 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
16
16
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
17
17
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
18
18
  import { Form, Spin, Tabs } from 'antd';
19
- import React, { useEffect, useMemo, useRef, useState } from 'react';
19
+ import React, { forwardRef, useEffect, useMemo, useState } from 'react';
20
20
  import { Resizable } from 'react-resizable';
21
21
  import { useComponentDefaultProps } from "../component-configure";
22
22
  import DataGrid from "../data-grid";
23
+ import { useDataGrid } from "../data-grid/hooks";
23
24
  import Filter from "../filter";
24
25
  import { useLocaleReceiver } from "../locale-receiver";
25
26
  import { parseLocalTemplate } from "../locale/locale";
26
27
  import { mergeProp, prefixClassName } from "../utils";
27
28
  import classNames from 'classnames';
28
29
  import { get } from 'lodash';
29
- export default function SelectView(originalProps) {
30
+ export default /*#__PURE__*/forwardRef(function SelectView(originalProps, _ref4) {
30
31
  var emptyValue = useMemo(function () {
31
32
  return [];
32
33
  }, []);
@@ -59,7 +60,9 @@ export default function SelectView(originalProps) {
59
60
  _props$suppressRowCli = props.suppressRowClickSelection,
60
61
  suppressRowClickSelection = _props$suppressRowCli === void 0 ? false : _props$suppressRowCli,
61
62
  _props$rowMultiSelect = props.rowMultiSelectWithClick,
62
- rowMultiSelectWithClick = _props$rowMultiSelect === void 0 ? true : _props$rowMultiSelect;
63
+ rowMultiSelectWithClick = _props$rowMultiSelect === void 0 ? true : _props$rowMultiSelect,
64
+ customSelectedGridProps = props.customSelectedGridProps,
65
+ customDataGridProps = props.customDataGridProps;
63
66
  var prefix = prefixClassName("select-view");
64
67
  var _useState = useState(value || emptyValue),
65
68
  _useState2 = _slicedToArray(_useState, 2),
@@ -69,7 +72,7 @@ export default function SelectView(originalProps) {
69
72
  _useState4 = _slicedToArray(_useState3, 2),
70
73
  params = _useState4[0],
71
74
  setParams = _useState4[1];
72
- var list = useRef(null);
75
+ var list = useDataGrid();
73
76
  var _useState5 = useState('list'),
74
77
  _useState6 = _slicedToArray(_useState5, 2),
75
78
  tabFlag = _useState6[0],
@@ -114,14 +117,14 @@ export default function SelectView(originalProps) {
114
117
  });
115
118
  }
116
119
  setRows(mDataSource);
117
- if (list.current !== null) {
120
+ if (list.ref.current !== null) {
118
121
  if (mDataSource !== undefined) {
119
- var grid = list.current;
122
+ var grid = list.ref.current;
120
123
  grid.afterReady(function () {
121
124
  grid.api.paginationGoToFirstPage();
122
125
  });
123
126
  } else {
124
- list.current.fetch();
127
+ list.ref.current.fetch();
125
128
  }
126
129
  }
127
130
  }, [cParams, dataSource]);
@@ -229,8 +232,15 @@ export default function SelectView(originalProps) {
229
232
  className: prefix('head')
230
233
  }, headerNode), /*#__PURE__*/React.createElement("div", {
231
234
  className: prefix('body')
232
- }, /*#__PURE__*/React.createElement(DataGrid, {
233
- ref: list,
235
+ }, /*#__PURE__*/React.createElement(DataGrid, _extends({
236
+ ref: function ref(val) {
237
+ list.ref.current = val;
238
+ if (typeof _ref4 === 'function') {
239
+ _ref4(val);
240
+ } else if (_ref4) {
241
+ _ref4.current = val;
242
+ }
243
+ },
234
244
  rowKey: rowKey,
235
245
  rowSelection: {
236
246
  type: multiple ? 'checkbox' : 'radio',
@@ -257,7 +267,7 @@ export default function SelectView(originalProps) {
257
267
  fetch: request,
258
268
  pagination: pagination,
259
269
  customColumnPanelStorage: customColumnPanelStorage
260
- }))));
270
+ }, customDataGridProps)))));
261
271
  };
262
272
  var renderSelected = function renderSelected() {
263
273
  return /*#__PURE__*/React.createElement("div", {
@@ -266,7 +276,7 @@ export default function SelectView(originalProps) {
266
276
  className: prefix('main')
267
277
  }, /*#__PURE__*/React.createElement("div", {
268
278
  className: prefix('body')
269
- }, /*#__PURE__*/React.createElement(DataGrid, {
279
+ }, /*#__PURE__*/React.createElement(DataGrid, _extends({
270
280
  dataSource: data,
271
281
  defaultColDef: defaultColDef,
272
282
  rowHeight: rowHeight,
@@ -282,13 +292,14 @@ export default function SelectView(originalProps) {
282
292
  data: data,
283
293
  dataKeys: dataKeys
284
294
  }
285
- }))));
295
+ }, customSelectedGridProps)))));
286
296
  };
287
297
  if (readOnly) {
288
298
  content = renderSelected();
289
299
  } else if (!multiple) {
290
300
  content = renderList();
291
301
  } else {
302
+ var _customSelectedGridPr, _customSelectedGridPr2;
292
303
  content = /*#__PURE__*/React.createElement(Tabs, {
293
304
  items: [{
294
305
  key: 'list',
@@ -297,7 +308,7 @@ export default function SelectView(originalProps) {
297
308
  }, {
298
309
  key: 'selected',
299
310
  label: parseLocalTemplate(SelectViewLocale.selectedDataText, {
300
- length: data.length
311
+ length: (_customSelectedGridPr = customSelectedGridProps === null || customSelectedGridProps === void 0 || (_customSelectedGridPr2 = customSelectedGridProps.dataSource) === null || _customSelectedGridPr2 === void 0 ? void 0 : _customSelectedGridPr2.length) !== null && _customSelectedGridPr !== void 0 ? _customSelectedGridPr : data.length
301
312
  }),
302
313
  children: renderSelected()
303
314
  }],
@@ -316,4 +327,4 @@ export default function SelectView(originalProps) {
316
327
  spinning: true,
317
328
  className: prefix('spin')
318
329
  }) : null);
319
- }
330
+ });
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@lemon-fe/components",
3
- "version": "1.3.0-alpha.0",
3
+ "version": "1.3.0",
4
4
  "description": "> TODO: description",
5
5
  "homepage": "",
6
- "license": "ISC",
7
- "author": "鲁盛杰 <lusj@cnlemon.net>",
6
+ "license": "MIT",
7
+ "author": "lusj",
8
8
  "sideEffects": [
9
9
  "es/index.less",
10
10
  "es/others.js",
@@ -21,8 +21,8 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "@dnd-kit/core": ">=6.0.0",
24
- "@lemon-fe/hooks": "^1.2.11",
25
- "@lemon-fe/utils": "^1.1.0",
24
+ "@lemon-fe/hooks": "^1.3.0",
25
+ "@lemon-fe/utils": "^1.3.0",
26
26
  "ag-grid-community": "29.2.0",
27
27
  "ag-grid-enterprise": "29.2.0",
28
28
  "ag-grid-react": "29.2.0",
@@ -58,5 +58,5 @@
58
58
  "publishConfig": {
59
59
  "registry": "https://registry.npmjs.org"
60
60
  },
61
- "gitHead": "0b1b326f401852b1329b54b531524e60072ddb8b"
61
+ "gitHead": "793ddaa1c937e067e29b649e5c04b377d3693b4e"
62
62
  }