@nokecy/qc-ui 1.1.43 → 1.1.44
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/dist/cjs/dashboard/widget/selector/filterWidgets.d.ts +27 -0
- package/dist/cjs/dashboard/widget/selector/filterWidgets.js +53 -0
- package/dist/cjs/dashboard/widget/selector/index.js +2 -21
- package/dist/cjs/toolBar/index.js +0 -3
- package/dist/esm/dashboard/widget/selector/filterWidgets.d.ts +27 -0
- package/dist/esm/dashboard/widget/selector/filterWidgets.js +47 -0
- package/dist/esm/dashboard/widget/selector/index.js +3 -22
- package/dist/esm/toolBar/index.js +0 -3
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 部件选择器的筛选与计数。
|
|
3
|
+
*
|
|
4
|
+
* 单独抽出来是因为这里踩过一次:布局里存着当前部署已经没有的部件时
|
|
5
|
+
* (按客户启用的模块清单不同,某个部件这次就是不发),原来的写法会抛 TypeError,
|
|
6
|
+
* 整个选择器打不开——而用户唯一能看到的现象是「点了没反应」。
|
|
7
|
+
*
|
|
8
|
+
* @author nokecy
|
|
9
|
+
*/
|
|
10
|
+
export type WidgetMeta = {
|
|
11
|
+
name?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
tags?: string[];
|
|
14
|
+
visible?: boolean;
|
|
15
|
+
length?: number;
|
|
16
|
+
[key: string]: any;
|
|
17
|
+
};
|
|
18
|
+
export type LayoutItem = {
|
|
19
|
+
i: string;
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
};
|
|
22
|
+
/** 出参一定带上 visible 与 length,调用方不必再判空。 */
|
|
23
|
+
export type FilteredWidget = WidgetMeta & {
|
|
24
|
+
visible: boolean;
|
|
25
|
+
length: number;
|
|
26
|
+
};
|
|
27
|
+
export declare const filterWidgets: (widgets: Record<string, WidgetMeta> | undefined | null, currentLayout: LayoutItem[] | undefined | null, keywords?: string, activeMenuKey?: string) => Record<string, FilteredWidget>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.filterWidgets = void 0;
|
|
7
|
+
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
/**
|
|
10
|
+
* 部件选择器的筛选与计数。
|
|
11
|
+
*
|
|
12
|
+
* 单独抽出来是因为这里踩过一次:布局里存着当前部署已经没有的部件时
|
|
13
|
+
* (按客户启用的模块清单不同,某个部件这次就是不发),原来的写法会抛 TypeError,
|
|
14
|
+
* 整个选择器打不开——而用户唯一能看到的现象是「点了没反应」。
|
|
15
|
+
*
|
|
16
|
+
* @author nokecy
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/** 出参一定带上 visible 与 length,调用方不必再判空。 */
|
|
20
|
+
|
|
21
|
+
var filterWidgets = exports.filterWidgets = function filterWidgets(widgets, currentLayout) {
|
|
22
|
+
var keywords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
|
|
23
|
+
var activeMenuKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
|
|
24
|
+
var finData = (0, _cloneDeep.default)(widgets || {});
|
|
25
|
+
var keyword = (keywords || '').toLowerCase();
|
|
26
|
+
Object.keys(finData).forEach(function (key) {
|
|
27
|
+
var widget = finData[key];
|
|
28
|
+
widget.length = 0;
|
|
29
|
+
widget.visible = true;
|
|
30
|
+
|
|
31
|
+
// 菜单切换:部件没声明 tags 时按「不属于任何分类」处理,不该因此抛错
|
|
32
|
+
if (activeMenuKey && (widget.tags || []).indexOf(activeMenuKey) < 0) {
|
|
33
|
+
widget.visible = false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// 查询:名称与描述任一命中即保留;两者都可能没写
|
|
37
|
+
var name = (widget.name || '').toLowerCase();
|
|
38
|
+
var description = (widget.description || '').toLowerCase();
|
|
39
|
+
if (name.indexOf(keyword) < 0 && description.indexOf(keyword) < 0) {
|
|
40
|
+
widget.visible = false;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// 已添加次数。布局里可能存着当前部署没有的部件,跳过即可。
|
|
45
|
+
(currentLayout || []).forEach(function (item) {
|
|
46
|
+
var _item$i;
|
|
47
|
+
var key = String((_item$i = item === null || item === void 0 ? void 0 : item.i) !== null && _item$i !== void 0 ? _item$i : '').split('-')[0];
|
|
48
|
+
var widget = finData[key];
|
|
49
|
+
if (!widget) return;
|
|
50
|
+
widget.length = widget.length ? widget.length + 1 : 1;
|
|
51
|
+
});
|
|
52
|
+
return finData;
|
|
53
|
+
};
|
|
@@ -9,6 +9,7 @@ var _icons = require("@ant-design/icons");
|
|
|
9
9
|
var _antd = require("antd");
|
|
10
10
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
11
11
|
var _lodash = require("lodash");
|
|
12
|
+
var _filterWidgets = require("./filterWidgets");
|
|
12
13
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
14
|
require("./index.less");
|
|
14
15
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
@@ -97,27 +98,7 @@ var WidgetSelector = function WidgetSelector(props) {
|
|
|
97
98
|
handleCalcMenuData();
|
|
98
99
|
}, []);
|
|
99
100
|
var finWidgets = (0, _react.useMemo)(function () {
|
|
100
|
-
|
|
101
|
-
Object.keys(finData).map(function (key) {
|
|
102
|
-
//初始化数据
|
|
103
|
-
finData[key].length = 0;
|
|
104
|
-
finData[key].visible = true;
|
|
105
|
-
//菜单切换
|
|
106
|
-
if (finData[key]['tags'].indexOf(activeMenuKey) < 0 && activeMenuKey) {
|
|
107
|
-
finData[key].visible = false;
|
|
108
|
-
}
|
|
109
|
-
//查询
|
|
110
|
-
if (finData[key]['name'].toLowerCase().indexOf(keywords.toLowerCase()) < 0 && finData[key]['description'].toLowerCase().indexOf(keywords.toLowerCase()) < 0) {
|
|
111
|
-
finData[key].visible = false;
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
//已添加次数
|
|
115
|
-
currentLayout.forEach(function (item) {
|
|
116
|
-
var _finData$key;
|
|
117
|
-
var key = item.i.split('-')[0];
|
|
118
|
-
finData[key].length = finData[key].length ? ((_finData$key = finData[key]) === null || _finData$key === void 0 ? void 0 : _finData$key.length) + 1 : 1;
|
|
119
|
-
});
|
|
120
|
-
return finData;
|
|
101
|
+
return (0, _filterWidgets.filterWidgets)(widgets, currentLayout, keywords, activeMenuKey);
|
|
121
102
|
}, [currentLayout, widgets, keywords, activeMenuKey, visible]);
|
|
122
103
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
123
104
|
style: {
|
|
@@ -23,9 +23,6 @@ var ToolBar = function ToolBar(props) {
|
|
|
23
23
|
offsetTop: 2,
|
|
24
24
|
style: style,
|
|
25
25
|
offsetBottom: 2,
|
|
26
|
-
onChange: function onChange(affixed) {
|
|
27
|
-
return void 0;
|
|
28
|
-
},
|
|
29
26
|
target: getTargetContainer
|
|
30
27
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
31
28
|
className: "antd-tool-bar"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 部件选择器的筛选与计数。
|
|
3
|
+
*
|
|
4
|
+
* 单独抽出来是因为这里踩过一次:布局里存着当前部署已经没有的部件时
|
|
5
|
+
* (按客户启用的模块清单不同,某个部件这次就是不发),原来的写法会抛 TypeError,
|
|
6
|
+
* 整个选择器打不开——而用户唯一能看到的现象是「点了没反应」。
|
|
7
|
+
*
|
|
8
|
+
* @author nokecy
|
|
9
|
+
*/
|
|
10
|
+
export type WidgetMeta = {
|
|
11
|
+
name?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
tags?: string[];
|
|
14
|
+
visible?: boolean;
|
|
15
|
+
length?: number;
|
|
16
|
+
[key: string]: any;
|
|
17
|
+
};
|
|
18
|
+
export type LayoutItem = {
|
|
19
|
+
i: string;
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
};
|
|
22
|
+
/** 出参一定带上 visible 与 length,调用方不必再判空。 */
|
|
23
|
+
export type FilteredWidget = WidgetMeta & {
|
|
24
|
+
visible: boolean;
|
|
25
|
+
length: number;
|
|
26
|
+
};
|
|
27
|
+
export declare const filterWidgets: (widgets: Record<string, WidgetMeta> | undefined | null, currentLayout: LayoutItem[] | undefined | null, keywords?: string, activeMenuKey?: string) => Record<string, FilteredWidget>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import cloneDeep from 'lodash/cloneDeep';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 部件选择器的筛选与计数。
|
|
5
|
+
*
|
|
6
|
+
* 单独抽出来是因为这里踩过一次:布局里存着当前部署已经没有的部件时
|
|
7
|
+
* (按客户启用的模块清单不同,某个部件这次就是不发),原来的写法会抛 TypeError,
|
|
8
|
+
* 整个选择器打不开——而用户唯一能看到的现象是「点了没反应」。
|
|
9
|
+
*
|
|
10
|
+
* @author nokecy
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** 出参一定带上 visible 与 length,调用方不必再判空。 */
|
|
14
|
+
|
|
15
|
+
export var filterWidgets = function filterWidgets(widgets, currentLayout) {
|
|
16
|
+
var keywords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
|
|
17
|
+
var activeMenuKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
|
|
18
|
+
var finData = cloneDeep(widgets || {});
|
|
19
|
+
var keyword = (keywords || '').toLowerCase();
|
|
20
|
+
Object.keys(finData).forEach(function (key) {
|
|
21
|
+
var widget = finData[key];
|
|
22
|
+
widget.length = 0;
|
|
23
|
+
widget.visible = true;
|
|
24
|
+
|
|
25
|
+
// 菜单切换:部件没声明 tags 时按「不属于任何分类」处理,不该因此抛错
|
|
26
|
+
if (activeMenuKey && (widget.tags || []).indexOf(activeMenuKey) < 0) {
|
|
27
|
+
widget.visible = false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// 查询:名称与描述任一命中即保留;两者都可能没写
|
|
31
|
+
var name = (widget.name || '').toLowerCase();
|
|
32
|
+
var description = (widget.description || '').toLowerCase();
|
|
33
|
+
if (name.indexOf(keyword) < 0 && description.indexOf(keyword) < 0) {
|
|
34
|
+
widget.visible = false;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// 已添加次数。布局里可能存着当前部署没有的部件,跳过即可。
|
|
39
|
+
(currentLayout || []).forEach(function (item) {
|
|
40
|
+
var _item$i;
|
|
41
|
+
var key = String((_item$i = item === null || item === void 0 ? void 0 : item.i) !== null && _item$i !== void 0 ? _item$i : '').split('-')[0];
|
|
42
|
+
var widget = finData[key];
|
|
43
|
+
if (!widget) return;
|
|
44
|
+
widget.length = widget.length ? widget.length + 1 : 1;
|
|
45
|
+
});
|
|
46
|
+
return finData;
|
|
47
|
+
};
|
|
@@ -11,7 +11,8 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
11
11
|
import { AppstoreAddOutlined, PlusOutlined, SearchOutlined } from '@ant-design/icons';
|
|
12
12
|
import { Button, Drawer, Empty, Input } from 'antd';
|
|
13
13
|
import classnames from 'classnames';
|
|
14
|
-
import {
|
|
14
|
+
import { isEmpty, get } from 'lodash';
|
|
15
|
+
import { filterWidgets } from "./filterWidgets";
|
|
15
16
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
16
17
|
import "./index.less";
|
|
17
18
|
var Search = Input.Search;
|
|
@@ -87,27 +88,7 @@ var WidgetSelector = function WidgetSelector(props) {
|
|
|
87
88
|
handleCalcMenuData();
|
|
88
89
|
}, []);
|
|
89
90
|
var finWidgets = useMemo(function () {
|
|
90
|
-
|
|
91
|
-
Object.keys(finData).map(function (key) {
|
|
92
|
-
//初始化数据
|
|
93
|
-
finData[key].length = 0;
|
|
94
|
-
finData[key].visible = true;
|
|
95
|
-
//菜单切换
|
|
96
|
-
if (finData[key]['tags'].indexOf(activeMenuKey) < 0 && activeMenuKey) {
|
|
97
|
-
finData[key].visible = false;
|
|
98
|
-
}
|
|
99
|
-
//查询
|
|
100
|
-
if (finData[key]['name'].toLowerCase().indexOf(keywords.toLowerCase()) < 0 && finData[key]['description'].toLowerCase().indexOf(keywords.toLowerCase()) < 0) {
|
|
101
|
-
finData[key].visible = false;
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
//已添加次数
|
|
105
|
-
currentLayout.forEach(function (item) {
|
|
106
|
-
var _finData$key;
|
|
107
|
-
var key = item.i.split('-')[0];
|
|
108
|
-
finData[key].length = finData[key].length ? ((_finData$key = finData[key]) === null || _finData$key === void 0 ? void 0 : _finData$key.length) + 1 : 1;
|
|
109
|
-
});
|
|
110
|
-
return finData;
|
|
91
|
+
return filterWidgets(widgets, currentLayout, keywords, activeMenuKey);
|
|
111
92
|
}, [currentLayout, widgets, keywords, activeMenuKey, visible]);
|
|
112
93
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
113
94
|
style: {
|
|
@@ -16,9 +16,6 @@ var ToolBar = function ToolBar(props) {
|
|
|
16
16
|
offsetTop: 2,
|
|
17
17
|
style: style,
|
|
18
18
|
offsetBottom: 2,
|
|
19
|
-
onChange: function onChange(affixed) {
|
|
20
|
-
return void 0;
|
|
21
|
-
},
|
|
22
19
|
target: getTargetContainer
|
|
23
20
|
}, /*#__PURE__*/React.createElement("div", {
|
|
24
21
|
className: "antd-tool-bar"
|