@next-libs/cmdb-instances 6.27.0 → 6.27.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.
- package/CHANGELOG.md +11 -0
- package/dist/cjs/instance-list-table/AdvancedSearchCondition.js +71 -200
- package/dist/cjs/instance-list-table/AdvancedSearchCondition.js.map +1 -1
- package/dist/cjs/instance-list-table/DynamicSearch.js +291 -0
- package/dist/cjs/instance-list-table/DynamicSearch.js.map +1 -0
- package/dist/esm/instance-list-table/AdvancedSearchCondition.js +71 -202
- package/dist/esm/instance-list-table/AdvancedSearchCondition.js.map +1 -1
- package/dist/esm/instance-list-table/DynamicSearch.js +276 -0
- package/dist/esm/instance-list-table/DynamicSearch.js.map +1 -0
- package/dist/esm/instance-list-table/DynamicSearch.module.css +40 -0
- package/dist/types/instance-list-table/AdvancedSearchCondition.d.ts +2 -5
- package/dist/types/instance-list-table/DynamicSearch.d.ts +32 -0
- package/dist/types/instance-list-table/DynamicSearch.spec.d.ts +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.DynamicSearchForm = exports.DynamicSearch = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireDefault(require("react"));
|
|
13
|
+
|
|
14
|
+
var _immutabilityHelper = _interopRequireDefault(require("immutability-helper"));
|
|
15
|
+
|
|
16
|
+
var _lodash = require("lodash");
|
|
17
|
+
|
|
18
|
+
var _compatible = require("@ant-design/compatible");
|
|
19
|
+
|
|
20
|
+
var _antd = require("antd");
|
|
21
|
+
|
|
22
|
+
var _cmdbUtils = require("@next-libs/cmdb-utils");
|
|
23
|
+
|
|
24
|
+
var _DynamicSearchModule = _interopRequireDefault(require("./DynamicSearch.module.css"));
|
|
25
|
+
|
|
26
|
+
var _i18next = _interopRequireDefault(require("i18next"));
|
|
27
|
+
|
|
28
|
+
var _constants = require("../i18n/constants");
|
|
29
|
+
|
|
30
|
+
var _processors = require("../processors");
|
|
31
|
+
|
|
32
|
+
class DynamicSearchForm extends _react.default.Component {
|
|
33
|
+
constructor(props) {
|
|
34
|
+
super(props);
|
|
35
|
+
(0, _defineProperty2.default)(this, "onValueChange", (value, fieldIndex, valueIndex) => {
|
|
36
|
+
this.setState({
|
|
37
|
+
fields: (0, _immutabilityHelper.default)(this.state.fields, {
|
|
38
|
+
[fieldIndex]: {
|
|
39
|
+
values: {
|
|
40
|
+
[valueIndex]: {
|
|
41
|
+
$set: value
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
(0, _defineProperty2.default)(this, "handleValueChange", (e, fieldIndex) => {
|
|
49
|
+
this.onValueChange(e.target.value, fieldIndex, 0);
|
|
50
|
+
});
|
|
51
|
+
(0, _defineProperty2.default)(this, "handleSearch", e => {
|
|
52
|
+
e.preventDefault();
|
|
53
|
+
|
|
54
|
+
if (this.props.onSearch) {
|
|
55
|
+
let queries = [];
|
|
56
|
+
let queriesToShow = [];
|
|
57
|
+
const fieldToShow = [];
|
|
58
|
+
this.state.fields.forEach(field => {
|
|
59
|
+
const expressions = {};
|
|
60
|
+
const fieldId = field.id;
|
|
61
|
+
let fieldQuery = {
|
|
62
|
+
[fieldId]: expressions
|
|
63
|
+
};
|
|
64
|
+
let fieldQueryToShow = {
|
|
65
|
+
[fieldId]: expressions
|
|
66
|
+
};
|
|
67
|
+
let hasValue = false;
|
|
68
|
+
const operator = {
|
|
69
|
+
comparisonOperator: _cmdbUtils.ComparisonOperators.Like,
|
|
70
|
+
logicalOperator: _cmdbUtils.LogicalOperators.Or
|
|
71
|
+
};
|
|
72
|
+
field.values.forEach(value => {
|
|
73
|
+
fieldQuery = {
|
|
74
|
+
[field.id]: expressions
|
|
75
|
+
};
|
|
76
|
+
const fieldIdToShow = field.id;
|
|
77
|
+
fieldQueryToShow = {
|
|
78
|
+
[fieldIdToShow]: expressions
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
if (value !== null && value !== "" && !(Array.isArray(value) && value.length === 0)) {
|
|
82
|
+
let values;
|
|
83
|
+
|
|
84
|
+
if (typeof value === "string") {
|
|
85
|
+
values = (0, _processors.processAttrValueWithQuote)(value, []);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (values.length) {
|
|
89
|
+
fieldQuery = {
|
|
90
|
+
[operator.logicalOperator]: values.map(value => {
|
|
91
|
+
return {
|
|
92
|
+
[fieldId]: {
|
|
93
|
+
[operator.comparisonOperator]: `%${value}%`
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
})
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
fieldQueryToShow = {
|
|
101
|
+
[operator.logicalOperator]: values.map(value => {
|
|
102
|
+
return {
|
|
103
|
+
[fieldIdToShow]: {
|
|
104
|
+
[operator.comparisonOperator]: `%${value}%`
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
})
|
|
108
|
+
};
|
|
109
|
+
hasValue = true;
|
|
110
|
+
fieldToShow.push({
|
|
111
|
+
[field.id]: field.values
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
if (hasValue) {
|
|
117
|
+
queries.push(fieldQuery);
|
|
118
|
+
queriesToShow.push(fieldQueryToShow);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
if (queries.length === 0) {
|
|
123
|
+
queries = undefined;
|
|
124
|
+
queriesToShow = undefined;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (!(0, _lodash.isEqual)(this.props.q, queries)) {
|
|
128
|
+
this.props.onSearch(queries, queriesToShow, fieldToShow);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
(0, _defineProperty2.default)(this, "handleReset", () => {
|
|
133
|
+
this.props.onSearch([], [], []);
|
|
134
|
+
this.props.form.resetFields();
|
|
135
|
+
});
|
|
136
|
+
this.state = this.computeState();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
componentDidUpdate(prevProps) {
|
|
140
|
+
if (!(0, _lodash.isEqual)(this.props.q, prevProps.q)) {
|
|
141
|
+
const newState = this.computeState();
|
|
142
|
+
this.setState(newState);
|
|
143
|
+
this.setFormFieldValues(newState.fields);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
computeState() {
|
|
148
|
+
const fieldQueryOperatorExpressionsMap = {};
|
|
149
|
+
let fields = [];
|
|
150
|
+
|
|
151
|
+
if (this.props.q) {
|
|
152
|
+
this.props.q.forEach(query => {
|
|
153
|
+
Object.entries(query).forEach(([key, expressions]) => {
|
|
154
|
+
if (key === _cmdbUtils.LogicalOperators.Or || key === _cmdbUtils.LogicalOperators.And) {
|
|
155
|
+
const firstSubQuery = expressions[0];
|
|
156
|
+
const fieldId = Object.keys(firstSubQuery)[0];
|
|
157
|
+
const compareOperator = Object.keys(firstSubQuery[fieldId])[0];
|
|
158
|
+
let subQueryValue = "";
|
|
159
|
+
let targetField;
|
|
160
|
+
|
|
161
|
+
if (_processors.ENABLED_CMDB_ADVANCE_SEARCH_WITH_QUOTE) {
|
|
162
|
+
var _this$props$fieldToSh;
|
|
163
|
+
|
|
164
|
+
targetField = (_this$props$fieldToSh = this.props.fieldToShow) === null || _this$props$fieldToSh === void 0 ? void 0 : _this$props$fieldToSh.find(fieldItem => Object.keys(fieldItem)[0] === fieldId);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (!(0, _lodash.isNil)(targetField)) {
|
|
168
|
+
// 二维数组会有问题,
|
|
169
|
+
subQueryValue = (0, _lodash.isArray)(targetField[fieldId]) ? targetField[fieldId].map(item => (0, _lodash.isArray)(item) ? item.join(" ") : item).join("") : targetField[fieldId];
|
|
170
|
+
} else {
|
|
171
|
+
subQueryValue = expressions.map(query => {
|
|
172
|
+
const targetValue = query[fieldId][compareOperator];
|
|
173
|
+
|
|
174
|
+
if (compareOperator === _cmdbUtils.ComparisonOperators.Like || compareOperator === _cmdbUtils.ComparisonOperators.NotLike) {
|
|
175
|
+
return (0, _lodash.isString)(targetValue) && targetValue.includes(" ") ? `${targetValue[0]}"${targetValue.slice(1, targetValue.length - 1)}"${targetValue[targetValue.length - 1]}` : targetValue;
|
|
176
|
+
} else {
|
|
177
|
+
return (0, _lodash.isString)(targetValue) && targetValue.includes(" ") ? `"${targetValue}"` : targetValue;
|
|
178
|
+
}
|
|
179
|
+
}).join(" ");
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
key = fieldId;
|
|
183
|
+
expressions = {
|
|
184
|
+
[compareOperator]: subQueryValue
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
fieldQueryOperatorExpressionsMap[key] = expressions;
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (this.props.fields) {
|
|
194
|
+
fields = this.props.fields.map(v => ({ ...v,
|
|
195
|
+
values: [null]
|
|
196
|
+
}));
|
|
197
|
+
|
|
198
|
+
if (!(0, _lodash.isEmpty)(fieldQueryOperatorExpressionsMap)) {
|
|
199
|
+
fields = this.props.fields.map(v => {
|
|
200
|
+
let str = null;
|
|
201
|
+
|
|
202
|
+
if (fieldQueryOperatorExpressionsMap[v.id]) {
|
|
203
|
+
const expressions = fieldQueryOperatorExpressionsMap[v.id]["$like"];
|
|
204
|
+
str = expressions.replace(/%/g, "");
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return { ...v,
|
|
208
|
+
values: [str]
|
|
209
|
+
};
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return {
|
|
215
|
+
fields
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
setFormFieldValues(fields) {
|
|
220
|
+
const values = fields.reduce((acc, field) => {
|
|
221
|
+
acc[`${field.id}`] = field.values.join("");
|
|
222
|
+
return acc;
|
|
223
|
+
}, {});
|
|
224
|
+
this.props.form.setFieldsValue(values);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
getFields() {
|
|
228
|
+
const {
|
|
229
|
+
getFieldDecorator
|
|
230
|
+
} = this.props.form;
|
|
231
|
+
return this.state.fields.map((field, fieldIndex) => {
|
|
232
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Col, {
|
|
233
|
+
span: 12,
|
|
234
|
+
key: field.id
|
|
235
|
+
}, /*#__PURE__*/_react.default.createElement(_compatible.Form.Item, {
|
|
236
|
+
label: field.name
|
|
237
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Input.Group, {
|
|
238
|
+
className: _DynamicSearchModule.default.conditionInputGroup,
|
|
239
|
+
compact: true
|
|
240
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Select, {
|
|
241
|
+
dropdownMatchSelectWidth: false,
|
|
242
|
+
defaultValue: "contain"
|
|
243
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Select.Option, {
|
|
244
|
+
value: "contain",
|
|
245
|
+
key: "contain"
|
|
246
|
+
}, _i18next.default.t(`${_constants.NS_LIBS_CMDB_INSTANCES}:${_constants.K.OPERATOR_CONTAIN_DEFINE}`))), getFieldDecorator(`${field.id}`, {
|
|
247
|
+
initialValue: field.values || ""
|
|
248
|
+
})( /*#__PURE__*/_react.default.createElement(_antd.Input, {
|
|
249
|
+
placeholder: _i18next.default.t(`${_constants.NS_LIBS_CMDB_INSTANCES}:${_constants.K.ADVANCE_SEARCH_SINGLE_INPUT_PLACEHOLDER}`),
|
|
250
|
+
onChange: e => this.handleValueChange(e, fieldIndex)
|
|
251
|
+
})))));
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
render() {
|
|
256
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
257
|
+
className: _DynamicSearchModule.default.dynamicSearch
|
|
258
|
+
}, /*#__PURE__*/_react.default.createElement(_compatible.Form, {
|
|
259
|
+
layout: "vertical",
|
|
260
|
+
className: _DynamicSearchModule.default.dynamicSearchForm,
|
|
261
|
+
onSubmit: this.handleSearch
|
|
262
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Row, {
|
|
263
|
+
gutter: 50
|
|
264
|
+
}, this.getFields()), /*#__PURE__*/_react.default.createElement(_antd.Row, null, /*#__PURE__*/_react.default.createElement(_antd.Col, {
|
|
265
|
+
span: 24,
|
|
266
|
+
style: {
|
|
267
|
+
textAlign: "right"
|
|
268
|
+
}
|
|
269
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
270
|
+
type: "primary",
|
|
271
|
+
htmlType: "submit",
|
|
272
|
+
"data-testid": "submit-button"
|
|
273
|
+
}, _i18next.default.t(`${_constants.NS_LIBS_CMDB_INSTANCES}:${_constants.K.SEARCH}`)), /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
274
|
+
style: {
|
|
275
|
+
marginLeft: 8
|
|
276
|
+
},
|
|
277
|
+
onClick: this.handleReset,
|
|
278
|
+
"data-testid": "reset-button"
|
|
279
|
+
}, _i18next.default.t(`${_constants.NS_LIBS_CMDB_INSTANCES}:${_constants.K.RESET}`))))));
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
exports.DynamicSearchForm = DynamicSearchForm;
|
|
285
|
+
|
|
286
|
+
const DynamicSearch = _compatible.Form.create({
|
|
287
|
+
name: "dynamic_search"
|
|
288
|
+
})(DynamicSearchForm);
|
|
289
|
+
|
|
290
|
+
exports.DynamicSearch = DynamicSearch;
|
|
291
|
+
//# sourceMappingURL=DynamicSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/instance-list-table/DynamicSearch.tsx"],"names":["DynamicSearchForm","React","Component","constructor","props","value","fieldIndex","valueIndex","setState","fields","state","values","$set","e","onValueChange","target","preventDefault","onSearch","queries","queriesToShow","fieldToShow","forEach","field","expressions","fieldId","id","fieldQuery","fieldQueryToShow","hasValue","operator","comparisonOperator","ComparisonOperators","Like","logicalOperator","LogicalOperators","Or","fieldIdToShow","Array","isArray","length","map","push","undefined","q","form","resetFields","computeState","componentDidUpdate","prevProps","newState","setFormFieldValues","fieldQueryOperatorExpressionsMap","query","Object","entries","key","And","firstSubQuery","keys","compareOperator","subQueryValue","targetField","ENABLED_CMDB_ADVANCE_SEARCH_WITH_QUOTE","find","fieldItem","item","join","targetValue","NotLike","includes","slice","v","str","replace","reduce","acc","setFieldsValue","getFields","getFieldDecorator","name","styles","conditionInputGroup","i18n","t","NS_LIBS_CMDB_INSTANCES","K","OPERATOR_CONTAIN_DEFINE","initialValue","ADVANCE_SEARCH_SINGLE_INPUT_PLACEHOLDER","handleValueChange","render","dynamicSearch","dynamicSearchForm","handleSearch","textAlign","SEARCH","marginLeft","handleReset","RESET","DynamicSearch","Form","create"],"mappings":"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","sourcesContent":["import React, { FormEvent } from \"react\";\nimport update from \"immutability-helper\";\nimport { isEqual, isNil, isString, isArray, isEmpty } from \"lodash\";\nimport { Form } from \"@ant-design/compatible\";\nimport { Button, Col, Input, Row, Select } from \"antd\";\nimport { FormComponentProps } from \"@ant-design/compatible/lib/form\";\nimport {\n ComparisonOperators,\n LogicalOperators,\n Query,\n QueryOperatorExpressions,\n} from \"@next-libs/cmdb-utils\";\nimport styles from \"./DynamicSearch.module.css\";\nimport i18n from \"i18next\";\nimport { NS_LIBS_CMDB_INSTANCES, K } from \"../i18n/constants\";\nimport {\n processAttrValueWithQuote,\n ENABLED_CMDB_ADVANCE_SEARCH_WITH_QUOTE,\n} from \"../processors\";\n\nexport interface Field {\n id: string;\n name: string;\n values?: any[];\n}\n\nexport interface DynamicSearchFormProps extends FormComponentProps {\n fields: Record<string, any>[];\n q?: Query[];\n onSearch?(\n queries: Query[],\n queriesToShow?: Query[],\n fieldToShow?: Record<string, any[]>[]\n ): void;\n fieldToShow?: Record<string, any[]>[]; // 回填高级搜索的field值(根据query回填丢失了引号信息)\n}\n\nexport interface DynamicSearchFormState {\n fields: Field[];\n}\n\nexport class DynamicSearchForm extends React.Component<\n DynamicSearchFormProps,\n DynamicSearchFormState\n> {\n constructor(props: DynamicSearchFormProps) {\n super(props);\n\n this.state = this.computeState();\n }\n\n componentDidUpdate(prevProps: Readonly<DynamicSearchFormProps>): void {\n if (!isEqual(this.props.q, prevProps.q)) {\n const newState = this.computeState();\n this.setState(newState);\n this.setFormFieldValues(newState.fields);\n }\n }\n\n computeState(): { fields: Field[] } {\n const fieldQueryOperatorExpressionsMap: Record<\n string,\n QueryOperatorExpressions\n > = {};\n let fields: Field[] = [];\n if (this.props.q) {\n this.props.q.forEach((query) => {\n Object.entries(query).forEach(([key, expressions]) => {\n if (key === LogicalOperators.Or || key === LogicalOperators.And) {\n const firstSubQuery = (expressions as Query[])[0];\n const fieldId = Object.keys(firstSubQuery)[0];\n const compareOperator = Object.keys(firstSubQuery[fieldId])[0];\n let subQueryValue = \"\";\n let targetField;\n if (ENABLED_CMDB_ADVANCE_SEARCH_WITH_QUOTE) {\n targetField = this.props.fieldToShow?.find(\n (fieldItem) => Object.keys(fieldItem)[0] === fieldId\n );\n }\n if (!isNil(targetField)) {\n // 二维数组会有问题,\n subQueryValue = isArray(targetField[fieldId])\n ? targetField[fieldId]\n .map((item) => (isArray(item) ? item.join(\" \") : item))\n .join(\"\")\n : (targetField[fieldId] as any);\n } else {\n subQueryValue = (expressions as Query[])\n .map((query) => {\n const targetValue = (\n query[fieldId] as Record<ComparisonOperators, any>\n )[compareOperator as ComparisonOperators];\n if (\n compareOperator === ComparisonOperators.Like ||\n compareOperator === ComparisonOperators.NotLike\n ) {\n return isString(targetValue) && targetValue.includes(\" \")\n ? `${targetValue[0]}\"${targetValue.slice(\n 1,\n targetValue.length - 1\n )}\"${targetValue[targetValue.length - 1]}`\n : targetValue;\n } else {\n return isString(targetValue) && targetValue.includes(\" \")\n ? `\"${targetValue}\"`\n : targetValue;\n }\n })\n .join(\" \");\n }\n key = fieldId;\n expressions = {\n [compareOperator]: subQueryValue,\n };\n }\n\n fieldQueryOperatorExpressionsMap[key] =\n expressions as QueryOperatorExpressions;\n });\n });\n }\n if (this.props.fields) {\n fields = this.props.fields.map(\n (v) => ({ ...v, values: [null] } as Field)\n );\n if (!isEmpty(fieldQueryOperatorExpressionsMap)) {\n fields = this.props.fields.map((v) => {\n let str: any = null;\n if (fieldQueryOperatorExpressionsMap[v.id]) {\n const expressions = fieldQueryOperatorExpressionsMap[v.id][\"$like\"];\n str = expressions.replace(/%/g, \"\");\n }\n return {\n ...v,\n values: [str],\n } as Field;\n });\n }\n }\n return { fields };\n }\n\n setFormFieldValues(fields: Field[]): void {\n const values = fields.reduce<{ [key: string]: any }>((acc, field) => {\n acc[`${field.id}`] = field.values.join(\"\");\n return acc;\n }, {});\n this.props.form.setFieldsValue(values);\n }\n\n onValueChange = (value: any, fieldIndex: number, valueIndex: number) => {\n this.setState({\n fields: update(this.state.fields, {\n [fieldIndex]: { values: { [valueIndex]: { $set: value } } },\n }),\n });\n };\n\n getFields() {\n const { getFieldDecorator } = this.props.form;\n return this.state.fields.map((field, fieldIndex) => {\n return (\n <Col span={12} key={field.id}>\n <Form.Item label={field.name}>\n <Input.Group className={styles.conditionInputGroup} compact>\n <Select dropdownMatchSelectWidth={false} defaultValue={\"contain\"}>\n <Select.Option value={\"contain\"} key={\"contain\"}>\n {i18n.t(\n `${NS_LIBS_CMDB_INSTANCES}:${K.OPERATOR_CONTAIN_DEFINE}`\n )}\n </Select.Option>\n </Select>\n {getFieldDecorator(`${field.id}`, {\n initialValue: field.values || \"\",\n })(\n <Input\n placeholder={i18n.t(\n `${NS_LIBS_CMDB_INSTANCES}:${K.ADVANCE_SEARCH_SINGLE_INPUT_PLACEHOLDER}`\n )}\n onChange={(e) => this.handleValueChange(e, fieldIndex)}\n />\n )}\n </Input.Group>\n </Form.Item>\n </Col>\n );\n });\n }\n\n handleValueChange = (e: any, fieldIndex: number) => {\n this.onValueChange(e.target.value, fieldIndex, 0);\n };\n\n handleSearch = (e: FormEvent<any>): void => {\n e.preventDefault();\n if (this.props.onSearch) {\n let queries: Query[] = [];\n let queriesToShow: Query[] = [];\n const fieldToShow: Record<string, any[]>[] = [];\n this.state.fields.forEach((field) => {\n const expressions: QueryOperatorExpressions = {};\n const fieldId = field.id;\n let fieldQuery: Query = { [fieldId]: expressions };\n let fieldQueryToShow: Query = { [fieldId]: expressions };\n let hasValue = false;\n const operator = {\n comparisonOperator: ComparisonOperators.Like,\n logicalOperator: LogicalOperators.Or,\n };\n field.values.forEach((value) => {\n fieldQuery = { [field.id]: expressions };\n const fieldIdToShow = field.id;\n fieldQueryToShow = { [fieldIdToShow]: expressions };\n if (\n value !== null &&\n value !== \"\" &&\n !(Array.isArray(value) && value.length === 0)\n ) {\n let values: any[];\n if (typeof value === \"string\") {\n values = processAttrValueWithQuote(value, []);\n }\n if (values.length) {\n fieldQuery = {\n [operator.logicalOperator]: values.map((value) => {\n return {\n [fieldId]: {\n [operator.comparisonOperator]: `%${value}%`,\n },\n };\n }),\n };\n }\n fieldQueryToShow = {\n [operator.logicalOperator]: values.map((value) => {\n return {\n [fieldIdToShow]: {\n [operator.comparisonOperator]: `%${value}%`,\n },\n };\n }),\n };\n hasValue = true;\n fieldToShow.push({ [field.id]: field.values });\n }\n });\n if (hasValue) {\n queries.push(fieldQuery);\n queriesToShow.push(fieldQueryToShow);\n }\n });\n if (queries.length === 0) {\n queries = undefined;\n queriesToShow = undefined;\n }\n if (!isEqual(this.props.q, queries)) {\n this.props.onSearch(queries, queriesToShow, fieldToShow);\n }\n }\n };\n\n handleReset = () => {\n this.props.onSearch([], [], []);\n this.props.form.resetFields();\n };\n\n render(): React.ReactNode {\n return (\n <div className={styles.dynamicSearch}>\n <Form\n layout=\"vertical\"\n className={styles.dynamicSearchForm}\n onSubmit={this.handleSearch}\n >\n <Row gutter={50}>{this.getFields()}</Row>\n <Row>\n <Col span={24} style={{ textAlign: \"right\" }}>\n <Button\n type=\"primary\"\n htmlType=\"submit\"\n data-testid=\"submit-button\"\n >\n {i18n.t(`${NS_LIBS_CMDB_INSTANCES}:${K.SEARCH}`)}\n </Button>\n <Button\n style={{ marginLeft: 8 }}\n onClick={this.handleReset}\n data-testid=\"reset-button\"\n >\n {i18n.t(`${NS_LIBS_CMDB_INSTANCES}:${K.RESET}`)}\n </Button>\n </Col>\n </Row>\n </Form>\n </div>\n );\n }\n}\n\nexport const DynamicSearch = Form.create<DynamicSearchFormProps>({\n name: \"dynamic_search\",\n})(DynamicSearchForm);\n"],"file":"DynamicSearch.js"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
-
import React, {
|
|
2
|
+
import React, { useReducer } from "react";
|
|
3
3
|
import i18n from "i18next";
|
|
4
4
|
import { K, NS_LIBS_CMDB_INSTANCES } from "../i18n/constants";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { initAqToShow } from "../instance-list/InstanceList";
|
|
9
|
-
import { difference, isEmpty, isEqual, isString, map, uniq, filter, reject, sortBy, uniqueId, findIndex, find, startsWith, omit } from "lodash";
|
|
5
|
+
import { LogicalOperators } from "@next-libs/cmdb-utils";
|
|
6
|
+
import { DynamicSearch } from "./DynamicSearch";
|
|
7
|
+
import { isEmpty, uniqueId, startsWith } from "lodash";
|
|
10
8
|
import { Tag } from "antd";
|
|
11
|
-
import { AdvancedSearch, ConditionType, getFieldConditionsAndValues } from "./AdvancedSearch";
|
|
12
9
|
import styles from "./AdvancedSearchCondition.module.css";
|
|
13
10
|
|
|
14
11
|
/* istanbul ignore next */
|
|
@@ -32,97 +29,55 @@ var reducer = (prevState, updatedProperty) => {
|
|
|
32
29
|
return _objectSpread(_objectSpread({}, prevState), updatedProperty);
|
|
33
30
|
};
|
|
34
31
|
|
|
35
|
-
|
|
36
|
-
var
|
|
37
|
-
var relations = [];
|
|
38
|
-
modelData.relation_list.forEach(relation => {
|
|
39
|
-
var sidesArr = [];
|
|
40
|
-
|
|
41
|
-
if (isSelfRelation(relation)) {
|
|
42
|
-
sidesArr = [{
|
|
43
|
-
this: "left",
|
|
44
|
-
that: "right"
|
|
45
|
-
}, {
|
|
46
|
-
this: "right",
|
|
47
|
-
that: "left"
|
|
48
|
-
}];
|
|
49
|
-
} else {
|
|
50
|
-
sidesArr = [getRelationObjectSides(relation, modelData)];
|
|
51
|
-
}
|
|
32
|
+
export var formatAqToShow = aq => {
|
|
33
|
+
var newAqToShow = [];
|
|
52
34
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
var
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
var _find$name, _find;
|
|
35
|
+
if (aq) {
|
|
36
|
+
aq.forEach(query => {
|
|
37
|
+
var aqToShow = Object.entries(query).map(_ref => {
|
|
38
|
+
var [key, expressions] = _ref;
|
|
39
|
+
var newExpressions = [];
|
|
59
40
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
},
|
|
69
|
-
relationSideId: relation["".concat(sides.this, "_id")]
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
relations.push({
|
|
73
|
-
id: "".concat(objectId, "."),
|
|
74
|
-
name: "".concat(relation["".concat(sides.this, "_name")]),
|
|
75
|
-
value: {
|
|
76
|
-
type: "str"
|
|
77
|
-
},
|
|
78
|
-
relationSideId: relation["".concat(sides.this, "_id")]
|
|
41
|
+
if (key === LogicalOperators.Or || key === LogicalOperators.And) {
|
|
42
|
+
newExpressions = [...newExpressions, ...expressions];
|
|
43
|
+
return {
|
|
44
|
+
[key]: newExpressions
|
|
45
|
+
};
|
|
46
|
+
} else {
|
|
47
|
+
return query;
|
|
48
|
+
}
|
|
79
49
|
});
|
|
50
|
+
newAqToShow = [...newAqToShow, ...aqToShow];
|
|
80
51
|
});
|
|
81
|
-
|
|
82
|
-
|
|
52
|
+
return newAqToShow;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return newAqToShow;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
function translateAqConditions(aq, fields) {
|
|
59
|
+
var conditions = [];
|
|
83
60
|
|
|
84
61
|
if (!isEmpty(aq)) {
|
|
85
62
|
for (var query of aq) {
|
|
86
63
|
var _queries = [query];
|
|
87
64
|
|
|
88
|
-
if (Object.keys(query)[0] ===
|
|
65
|
+
if (Object.keys(query)[0] === LogicalOperators.Or || Object.keys(query)[0] === LogicalOperators.And) {
|
|
89
66
|
_queries = query[Object.keys(query)[0]];
|
|
90
67
|
}
|
|
91
68
|
|
|
92
69
|
_queries.forEach(query => {
|
|
93
70
|
var key = Object.keys(query)[0];
|
|
94
71
|
var value = Object.values(query)[0];
|
|
95
|
-
var attr =
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
var info = getFieldConditionsAndValues(query, key, attr.value.type, undefined, undefined, modelData.objectId, attr.id);
|
|
105
|
-
|
|
106
|
-
if (![ConditionType.Between, ConditionType.Empty, ConditionType.NotEmpty, ConditionType.False, ConditionType.True].includes(info.currentCondition.type)) {
|
|
107
|
-
info.values = info.values.map(v => isString(v) && v.includes(" ") ? v.replace(/^"+|"+$/g, "") : v);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
var condition = "".concat(attr.name, ": ").concat(info.currentCondition.label);
|
|
111
|
-
|
|
112
|
-
if (![ConditionType.Empty, ConditionType.NotEmpty].includes(info.currentCondition.type)) {
|
|
113
|
-
condition += "\"".concat(info.values.join(" ~ "), "\"");
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
var curCondition = {
|
|
117
|
-
attrId: key,
|
|
118
|
-
condition,
|
|
119
|
-
valuesStr: info.queryValuesStr
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
if (conditions.every(v => !isEqual(omit(v, "attrId"), omit(curCondition, "attrId")))) {
|
|
123
|
-
conditions.push(curCondition);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
72
|
+
var attr = fields.find(v => v.id === key);
|
|
73
|
+
var contain = i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.OPERATOR_CONTAIN_DEFINE));
|
|
74
|
+
var condition = "".concat(attr === null || attr === void 0 ? void 0 : attr.name, ":").concat(contain, "\"").concat(Object.values(value)[0].replace(/%/g, ""), "\"");
|
|
75
|
+
var curCondition = {
|
|
76
|
+
attrId: key,
|
|
77
|
+
condition,
|
|
78
|
+
valuesStr: Object.values(value)[0]
|
|
79
|
+
};
|
|
80
|
+
conditions.push(curCondition);
|
|
126
81
|
});
|
|
127
82
|
}
|
|
128
83
|
}
|
|
@@ -131,87 +86,11 @@ function translateConditions(aq, idObjectMap, modelData, t) {
|
|
|
131
86
|
}
|
|
132
87
|
|
|
133
88
|
export function AdvancedSearchCondition(props) {
|
|
134
|
-
var {
|
|
135
|
-
modelData,
|
|
136
|
-
idObjectMap
|
|
137
|
-
} = useMemo(() => {
|
|
138
|
-
var modelData;
|
|
139
|
-
var idObjectMap = {};
|
|
140
|
-
props.objectList.forEach(object => {
|
|
141
|
-
idObjectMap[object.objectId] = object;
|
|
142
|
-
|
|
143
|
-
if (object.objectId === props.objectId) {
|
|
144
|
-
modelData = object;
|
|
145
|
-
modelData.attrList = object.attrList;
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
return {
|
|
149
|
-
modelData,
|
|
150
|
-
idObjectMap
|
|
151
|
-
};
|
|
152
|
-
}, [props.objectList, props.objectId]);
|
|
153
|
-
|
|
154
|
-
var computeDefaultFields = function () {
|
|
155
|
-
var {
|
|
156
|
-
inModal
|
|
157
|
-
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
158
|
-
inModal: false
|
|
159
|
-
};
|
|
160
|
-
// 原来有隐藏逻辑,针对 APP、HOST、USER、USER_GROUP模型,默认字段特殊处理了,现产品要求干掉,统一取8个默认字段,也不区分是否是内置模型
|
|
161
|
-
var settings = inModal ? CMDB_MODAL_FIELDS_SETTINGS : CMDB_RESOURCE_FIELDS_SETTINGS;
|
|
162
|
-
var ignoredFields = settings.ignoredFields[modelData.objectId] || [];
|
|
163
|
-
var fieldIds = difference(uniq(map(modelData.attrList, "id")), ignoredFields).slice(0, 8);
|
|
164
|
-
var hideModelData = modelData.view.hide_columns || [];
|
|
165
|
-
fieldIds = fieldIds.filter(field => !hideModelData.includes(field));
|
|
166
|
-
return {
|
|
167
|
-
fieldIds
|
|
168
|
-
};
|
|
169
|
-
}; // 根据用户预定义的 presetConfigs.fieldIds 进行排序,如果不在预定义的字段,则根据 modelData.view.attr_order 进行排序
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
var _sortFieldIds = fieldIds => {
|
|
173
|
-
var _props$fieldIds;
|
|
174
|
-
|
|
175
|
-
var frontFields = [];
|
|
176
|
-
var restFields = [];
|
|
177
|
-
|
|
178
|
-
if ((_props$fieldIds = props.fieldIds) !== null && _props$fieldIds !== void 0 && _props$fieldIds.length) {
|
|
179
|
-
frontFields = filter(props.fieldIds, id => fieldIds.includes(id));
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
restFields = sortBy(reject(fieldIds, id => frontFields.includes(id)), fieldId => {
|
|
183
|
-
var foundIndex = findIndex(modelData.view.attr_order, orderId => orderId === fieldId);
|
|
184
|
-
|
|
185
|
-
if (foundIndex === -1) {
|
|
186
|
-
return null;
|
|
187
|
-
} else {
|
|
188
|
-
return foundIndex;
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
return [...frontFields, ...restFields];
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
var getFields = () => {
|
|
195
|
-
var _fieldIds;
|
|
196
|
-
|
|
197
|
-
var fieldIds = props.fieldIds;
|
|
198
|
-
|
|
199
|
-
if (!((_fieldIds = fieldIds) !== null && _fieldIds !== void 0 && _fieldIds.length)) {
|
|
200
|
-
fieldIds = computeDefaultFields().fieldIds;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
fieldIds = _sortFieldIds(fieldIds);
|
|
204
|
-
var hideModelData = modelData.view.hide_columns || [];
|
|
205
|
-
fieldIds = fieldIds.filter(field => !hideModelData.includes(field));
|
|
206
|
-
modelData.isAbstract && fieldIds.push("_object_id");
|
|
207
|
-
return fieldIds;
|
|
208
|
-
};
|
|
209
|
-
|
|
210
89
|
var [state, setState] = useReducer(reducer, undefined, () => ({
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
90
|
+
aq: formatAqToShow(props.aq),
|
|
91
|
+
aqToShow: props.aqToShow || formatAqToShow(props.aq),
|
|
92
|
+
fieldIds: (props.fields || []).map(v => v.id),
|
|
93
|
+
fields: props.fields || []
|
|
215
94
|
}));
|
|
216
95
|
|
|
217
96
|
var onAdvancedSearch = (queries, queriesToShow, fieldToShow) => {
|
|
@@ -224,6 +103,8 @@ export function AdvancedSearchCondition(props) {
|
|
|
224
103
|
});
|
|
225
104
|
(_props$onAdvancedSear = props.onAdvancedSearch) === null || _props$onAdvancedSear === void 0 ? void 0 : _props$onAdvancedSear.call(props, queries);
|
|
226
105
|
};
|
|
106
|
+
/* istanbul ignore next */
|
|
107
|
+
|
|
227
108
|
|
|
228
109
|
var onAdvancedSearchCloseGen = (attrId, valuesStr) => {
|
|
229
110
|
return () => {
|
|
@@ -247,40 +128,30 @@ export function AdvancedSearchCondition(props) {
|
|
|
247
128
|
queries.push(query);
|
|
248
129
|
};
|
|
249
130
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
var
|
|
255
|
-
|
|
256
|
-
if (
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
131
|
+
var formatAqQuery = (querys, queries, isAq) => {
|
|
132
|
+
querys.forEach(query => {
|
|
133
|
+
var key = Object.keys(query)[0];
|
|
134
|
+
var isKey = key !== attrId;
|
|
135
|
+
var isStart = isAq ? isKey && !startsWith(attrId, "".concat(key, ".")) : isKey;
|
|
136
|
+
|
|
137
|
+
if ((key === "$or" || key === "$and") && Object.keys(query[key][0])[0] === attrId) {
|
|
138
|
+
var filteredSubQueries = filterAq(query[key]);
|
|
139
|
+
|
|
140
|
+
if (filteredSubQueries.length > 0) {
|
|
141
|
+
queries.push({
|
|
142
|
+
[key]: filteredSubQueries
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
} else if (isStart) {
|
|
146
|
+
queries.push(query);
|
|
147
|
+
} else if (props.isInstanceFilterForm && key === attrId && isValueEqual(query)) {
|
|
148
|
+
specialQueryHandler(query, key, queries);
|
|
260
149
|
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
} else if (props.isInstanceFilterForm && key === attrId && isValueEqual(query)) {
|
|
264
|
-
specialQueryHandler(query, key, queries);
|
|
265
|
-
}
|
|
266
|
-
});
|
|
267
|
-
state.aqToShow.forEach(query => {
|
|
268
|
-
var key = Object.keys(query)[0];
|
|
269
|
-
|
|
270
|
-
if ((key === "$or" || key === "$and") && Object.keys(query[key][0])[0] === attrId) {
|
|
271
|
-
var filteredSubQueries = filterAq(query[key]);
|
|
150
|
+
});
|
|
151
|
+
};
|
|
272
152
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
[key]: filteredSubQueries
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
} else if (key !== attrId) {
|
|
279
|
-
queriesToShow.push(query);
|
|
280
|
-
} else if (props.isInstanceFilterForm && key === attrId && isValueEqual(query)) {
|
|
281
|
-
specialQueryHandler(query, key, queriesToShow);
|
|
282
|
-
}
|
|
283
|
-
});
|
|
153
|
+
formatAqQuery(state.aq, queries, true);
|
|
154
|
+
formatAqQuery(state.aqToShow, queriesToShow, false);
|
|
284
155
|
setState({
|
|
285
156
|
aq: queries,
|
|
286
157
|
aqToShow: queriesToShow
|
|
@@ -289,21 +160,19 @@ export function AdvancedSearchCondition(props) {
|
|
|
289
160
|
};
|
|
290
161
|
};
|
|
291
162
|
|
|
292
|
-
var conditions =
|
|
163
|
+
var conditions = translateAqConditions(state.aqToShow, state.fields);
|
|
293
164
|
return /*#__PURE__*/React.createElement("div", {
|
|
294
165
|
className: styles.advancedSearchWrapper
|
|
295
166
|
}, /*#__PURE__*/React.createElement("div", {
|
|
296
167
|
style: {
|
|
297
168
|
marginBottom: "18px"
|
|
298
169
|
}
|
|
299
|
-
}, /*#__PURE__*/React.createElement(
|
|
300
|
-
|
|
301
|
-
|
|
170
|
+
}, /*#__PURE__*/React.createElement(DynamicSearch, {
|
|
171
|
+
fields: state.fields,
|
|
172
|
+
onSearch: onAdvancedSearch,
|
|
302
173
|
key: newKey(state.fieldIds, state.aq),
|
|
303
|
-
fieldIds: state.fieldIds,
|
|
304
174
|
q: state.aqToShow,
|
|
305
|
-
fieldToShow: state.fieldToShow
|
|
306
|
-
onSearch: onAdvancedSearch
|
|
175
|
+
fieldToShow: state.fieldToShow
|
|
307
176
|
})), !props.hideSearchConditions && !isEmpty(conditions) && /*#__PURE__*/React.createElement("div", {
|
|
308
177
|
className: styles.searchConditions
|
|
309
178
|
}, /*#__PURE__*/React.createElement("span", null, i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.CURRENT_FILTER_REQUIREMENTS))), conditions.map(condition => /*#__PURE__*/React.createElement(Tag, {
|