@next-libs/cmdb-instances 6.26.7 → 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.
Files changed (31) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/cjs/index.js +14 -0
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/instance-list-table/AdvancedSearchCondition.js +207 -0
  5. package/dist/cjs/instance-list-table/AdvancedSearchCondition.js.map +1 -0
  6. package/dist/cjs/instance-list-table/DynamicSearch.js +291 -0
  7. package/dist/cjs/instance-list-table/DynamicSearch.js.map +1 -0
  8. package/dist/cjs/instance-list-table/InstanceListTable.js +25 -7
  9. package/dist/cjs/instance-list-table/InstanceListTable.js.map +1 -1
  10. package/dist/cjs/instance-list-table/index.js +13 -0
  11. package/dist/cjs/instance-list-table/index.js.map +1 -1
  12. package/dist/esm/index.js +1 -0
  13. package/dist/esm/index.js.map +1 -1
  14. package/dist/esm/instance-list-table/AdvancedSearchCondition.js +184 -0
  15. package/dist/esm/instance-list-table/AdvancedSearchCondition.js.map +1 -0
  16. package/dist/esm/instance-list-table/AdvancedSearchCondition.module.css +22 -0
  17. package/dist/esm/instance-list-table/DynamicSearch.js +276 -0
  18. package/dist/esm/instance-list-table/DynamicSearch.js.map +1 -0
  19. package/dist/esm/instance-list-table/DynamicSearch.module.css +40 -0
  20. package/dist/esm/instance-list-table/InstanceListTable.js +60 -32
  21. package/dist/esm/instance-list-table/InstanceListTable.js.map +1 -1
  22. package/dist/esm/instance-list-table/index.js +1 -0
  23. package/dist/esm/instance-list-table/index.js.map +1 -1
  24. package/dist/types/index.d.ts +1 -0
  25. package/dist/types/instance-list-table/AdvancedSearchCondition.d.ts +12 -0
  26. package/dist/types/instance-list-table/AdvancedSearchCondition.spec.d.ts +1 -0
  27. package/dist/types/instance-list-table/DynamicSearch.d.ts +32 -0
  28. package/dist/types/instance-list-table/DynamicSearch.spec.d.ts +1 -0
  29. package/dist/types/instance-list-table/InstanceListTable.d.ts +2 -1
  30. package/dist/types/instance-list-table/index.d.ts +1 -0
  31. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,39 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [6.27.1](https://github.com/easyops-cn/next-libs/compare/@next-libs/cmdb-instances@6.27.0...@next-libs/cmdb-instances@6.27.1) (2022-05-31)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * 新增动态筛选的构件 ([19e81d9](https://github.com/easyops-cn/next-libs/commit/19e81d90823904ef2d1189c6c230d588363f17b3))
12
+
13
+
14
+
15
+
16
+
17
+ # [6.27.0](https://github.com/easyops-cn/next-libs/compare/@next-libs/cmdb-instances@6.26.8...@next-libs/cmdb-instances@6.27.0) (2022-05-30)
18
+
19
+
20
+ ### Features
21
+
22
+ * finish AdvancedSearchCondition component ([9f11d8a](https://github.com/easyops-cn/next-libs/commit/9f11d8acc5142f149952dc3662dbc8f615140faf)), closes [Refs#MONITOR-3554](https://github.com/Refs/issues/MONITOR-3554)
23
+
24
+
25
+
26
+
27
+
28
+ ## [6.26.8](https://github.com/easyops-cn/next-libs/compare/@next-libs/cmdb-instances@6.26.7...@next-libs/cmdb-instances@6.26.8) (2022-05-27)
29
+
30
+
31
+ ### Bug Fixes
32
+
33
+ * 修复回显时候ipCopy功能获取不到数据的问题 Refs BRICK_STORE-276 ([2a17d17](https://github.com/easyops-cn/next-libs/commit/2a17d17b2ec61a8b6a230a232e3bfa2f5bb6f4e0))
34
+
35
+
36
+
37
+
38
+
6
39
  ## [6.26.7](https://github.com/easyops-cn/next-libs/compare/@next-libs/cmdb-instances@6.26.6...@next-libs/cmdb-instances@6.26.7) (2022-05-27)
7
40
 
8
41
 
package/dist/cjs/index.js CHANGED
@@ -139,6 +139,20 @@ Object.keys(_instanceListTable).forEach(function (key) {
139
139
  });
140
140
  });
141
141
 
142
+ var _AdvancedSearchCondition = require("./instance-list-table/AdvancedSearchCondition");
143
+
144
+ Object.keys(_AdvancedSearchCondition).forEach(function (key) {
145
+ if (key === "default" || key === "__esModule") return;
146
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
147
+ if (key in exports && exports[key] === _AdvancedSearchCondition[key]) return;
148
+ Object.defineProperty(exports, key, {
149
+ enumerable: true,
150
+ get: function () {
151
+ return _AdvancedSearchCondition[key];
152
+ }
153
+ });
154
+ });
155
+
142
156
  var _InstanceListModal = require("./instance-list-modal/InstanceListModal");
143
157
 
144
158
  Object.keys(_InstanceListModal).forEach(function (key) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA","sourcesContent":["export * from \"./instance-attribute-form/InstanceAttributeForm\";\nexport * from \"./model-attribute-form/ModelAttributeForm\";\nexport * from \"./model-relation-form/ModelRelationForm\";\nexport * from \"./attribute-form-control-url/AttributeFormControlUrl\";\nexport * from \"./model-attribute-form-control/ModelAttributeFormControl\";\nexport * from \"./struct-components\";\nexport * from \"./instance-list-table\";\nexport * from \"./instance-list-modal/InstanceListModal\";\nexport * from \"./instance-list/InstanceList\";\nexport * from \"./cmdb-instances-input-form/CmdbInstancesInputFormItem\";\nexport * from \"./cmdb-instances-select-panel/CmdbInstancesSelectPanel\";\nexport * from \"./instance-detail/InstanceDetail\";\nexport * from \"./float-display-brick/FloatDisplayBrick\";\n// For compatibility\nexport {\n ComparisonOperators,\n ElementOperators,\n LogicalOperators,\n Query,\n QueryOperatorExpressions,\n} from \"@next-libs/cmdb-utils\";\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA","sourcesContent":["export * from \"./instance-attribute-form/InstanceAttributeForm\";\nexport * from \"./model-attribute-form/ModelAttributeForm\";\nexport * from \"./model-relation-form/ModelRelationForm\";\nexport * from \"./attribute-form-control-url/AttributeFormControlUrl\";\nexport * from \"./model-attribute-form-control/ModelAttributeFormControl\";\nexport * from \"./struct-components\";\nexport * from \"./instance-list-table\";\nexport * from \"./instance-list-table/AdvancedSearchCondition\";\nexport * from \"./instance-list-modal/InstanceListModal\";\nexport * from \"./instance-list/InstanceList\";\nexport * from \"./cmdb-instances-input-form/CmdbInstancesInputFormItem\";\nexport * from \"./cmdb-instances-select-panel/CmdbInstancesSelectPanel\";\nexport * from \"./instance-detail/InstanceDetail\";\nexport * from \"./float-display-brick/FloatDisplayBrick\";\n// For compatibility\nexport {\n ComparisonOperators,\n ElementOperators,\n LogicalOperators,\n Query,\n QueryOperatorExpressions,\n} from \"@next-libs/cmdb-utils\";\n"],"file":"index.js"}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.AdvancedSearchCondition = AdvancedSearchCondition;
11
+ exports.formatAqToShow = void 0;
12
+
13
+ var _react = _interopRequireWildcard(require("react"));
14
+
15
+ var _i18next = _interopRequireDefault(require("i18next"));
16
+
17
+ var _constants = require("../i18n/constants");
18
+
19
+ var _cmdbUtils = require("@next-libs/cmdb-utils");
20
+
21
+ var _DynamicSearch = require("./DynamicSearch");
22
+
23
+ var _lodash = require("lodash");
24
+
25
+ var _antd = require("antd");
26
+
27
+ var _AdvancedSearchConditionModule = _interopRequireDefault(require("./AdvancedSearchCondition.module.css"));
28
+
29
+ /* istanbul ignore next */
30
+ function newKey(fieldIds, aq) {
31
+ let key = "";
32
+
33
+ if (!(0, _lodash.isEmpty)(fieldIds)) {
34
+ key += fieldIds.join("-");
35
+ }
36
+
37
+ if (!(0, _lodash.isEmpty)(aq)) {
38
+ key += `-${aq.length}`;
39
+ }
40
+
41
+ return key;
42
+ }
43
+ /* istanbul ignore next */
44
+
45
+
46
+ const reducer = (prevState, updatedProperty) => {
47
+ return { ...prevState,
48
+ ...updatedProperty
49
+ };
50
+ };
51
+
52
+ const formatAqToShow = aq => {
53
+ let newAqToShow = [];
54
+
55
+ if (aq) {
56
+ aq.forEach(query => {
57
+ const aqToShow = Object.entries(query).map(([key, expressions]) => {
58
+ let newExpressions = [];
59
+
60
+ if (key === _cmdbUtils.LogicalOperators.Or || key === _cmdbUtils.LogicalOperators.And) {
61
+ newExpressions = [...newExpressions, ...expressions];
62
+ return {
63
+ [key]: newExpressions
64
+ };
65
+ } else {
66
+ return query;
67
+ }
68
+ });
69
+ newAqToShow = [...newAqToShow, ...aqToShow];
70
+ });
71
+ return newAqToShow;
72
+ }
73
+
74
+ return newAqToShow;
75
+ };
76
+
77
+ exports.formatAqToShow = formatAqToShow;
78
+
79
+ function translateAqConditions(aq, fields) {
80
+ const conditions = [];
81
+
82
+ if (!(0, _lodash.isEmpty)(aq)) {
83
+ for (const query of aq) {
84
+ let queries = [query];
85
+
86
+ if (Object.keys(query)[0] === _cmdbUtils.LogicalOperators.Or || Object.keys(query)[0] === _cmdbUtils.LogicalOperators.And) {
87
+ queries = query[Object.keys(query)[0]];
88
+ }
89
+
90
+ queries.forEach(query => {
91
+ const key = Object.keys(query)[0];
92
+ const value = Object.values(query)[0];
93
+ const attr = fields.find(v => v.id === key);
94
+
95
+ const contain = _i18next.default.t(`${_constants.NS_LIBS_CMDB_INSTANCES}:${_constants.K.OPERATOR_CONTAIN_DEFINE}`);
96
+
97
+ const condition = `${attr === null || attr === void 0 ? void 0 : attr.name}:${contain}"${Object.values(value)[0].replace(/%/g, "")}"`;
98
+ const curCondition = {
99
+ attrId: key,
100
+ condition,
101
+ valuesStr: Object.values(value)[0]
102
+ };
103
+ conditions.push(curCondition);
104
+ });
105
+ }
106
+ }
107
+
108
+ return conditions;
109
+ }
110
+
111
+ function AdvancedSearchCondition(props) {
112
+ const [state, setState] = (0, _react.useReducer)(reducer, undefined, () => ({
113
+ aq: formatAqToShow(props.aq),
114
+ aqToShow: props.aqToShow || formatAqToShow(props.aq),
115
+ fieldIds: (props.fields || []).map(v => v.id),
116
+ fields: props.fields || []
117
+ }));
118
+
119
+ const onAdvancedSearch = (queries, queriesToShow, fieldToShow) => {
120
+ var _props$onAdvancedSear;
121
+
122
+ setState({
123
+ aq: queries,
124
+ fieldToShow,
125
+ aqToShow: queriesToShow
126
+ });
127
+ (_props$onAdvancedSear = props.onAdvancedSearch) === null || _props$onAdvancedSear === void 0 ? void 0 : _props$onAdvancedSear.call(props, queries);
128
+ };
129
+ /* istanbul ignore next */
130
+
131
+
132
+ const onAdvancedSearchCloseGen = (attrId, valuesStr) => {
133
+ return () => {
134
+ var _props$onAdvancedSear2;
135
+
136
+ const queries = [];
137
+ const queriesToShow = [];
138
+
139
+ const isValueEqual = query => query[attrId] ? Object.values(query[attrId]).join(" ") !== valuesStr : false;
140
+
141
+ const filterAq = queries => queries.filter(v => isValueEqual(v));
142
+
143
+ const specialQueryHandler = (query, key, queries) => {
144
+ // $exists $gte $lte 针对为空,不为空,时间范围特殊处理
145
+ const isSpecial = Object.keys(query[key]).some(v => v === "$exists" || v === "$gte" || v === "$lte");
146
+
147
+ if (isSpecial) {
148
+ return;
149
+ }
150
+
151
+ queries.push(query);
152
+ };
153
+
154
+ const formatAqQuery = (querys, queries, isAq) => {
155
+ querys.forEach(query => {
156
+ const key = Object.keys(query)[0];
157
+ const isKey = key !== attrId;
158
+ const isStart = isAq ? isKey && !(0, _lodash.startsWith)(attrId, `${key}.`) : isKey;
159
+
160
+ if ((key === "$or" || key === "$and") && Object.keys(query[key][0])[0] === attrId) {
161
+ const filteredSubQueries = filterAq(query[key]);
162
+
163
+ if (filteredSubQueries.length > 0) {
164
+ queries.push({
165
+ [key]: filteredSubQueries
166
+ });
167
+ }
168
+ } else if (isStart) {
169
+ queries.push(query);
170
+ } else if (props.isInstanceFilterForm && key === attrId && isValueEqual(query)) {
171
+ specialQueryHandler(query, key, queries);
172
+ }
173
+ });
174
+ };
175
+
176
+ formatAqQuery(state.aq, queries, true);
177
+ formatAqQuery(state.aqToShow, queriesToShow, false);
178
+ setState({
179
+ aq: queries,
180
+ aqToShow: queriesToShow
181
+ });
182
+ (_props$onAdvancedSear2 = props.onAdvancedSearch) === null || _props$onAdvancedSear2 === void 0 ? void 0 : _props$onAdvancedSear2.call(props, queries);
183
+ };
184
+ };
185
+
186
+ const conditions = translateAqConditions(state.aqToShow, state.fields);
187
+ return /*#__PURE__*/_react.default.createElement("div", {
188
+ className: _AdvancedSearchConditionModule.default.advancedSearchWrapper
189
+ }, /*#__PURE__*/_react.default.createElement("div", {
190
+ style: {
191
+ marginBottom: "18px"
192
+ }
193
+ }, /*#__PURE__*/_react.default.createElement(_DynamicSearch.DynamicSearch, {
194
+ fields: state.fields,
195
+ onSearch: onAdvancedSearch,
196
+ key: newKey(state.fieldIds, state.aq),
197
+ q: state.aqToShow,
198
+ fieldToShow: state.fieldToShow
199
+ })), !props.hideSearchConditions && !(0, _lodash.isEmpty)(conditions) && /*#__PURE__*/_react.default.createElement("div", {
200
+ className: _AdvancedSearchConditionModule.default.searchConditions
201
+ }, /*#__PURE__*/_react.default.createElement("span", null, _i18next.default.t(`${_constants.NS_LIBS_CMDB_INSTANCES}:${_constants.K.CURRENT_FILTER_REQUIREMENTS}`)), conditions.map(condition => /*#__PURE__*/_react.default.createElement(_antd.Tag, {
202
+ key: `${condition.attrId}${condition.valuesStr}-${(0, _lodash.uniqueId)()}`,
203
+ closable: true,
204
+ onClose: onAdvancedSearchCloseGen(condition.attrId, condition.valuesStr)
205
+ }, condition.condition))));
206
+ }
207
+ //# sourceMappingURL=AdvancedSearchCondition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/instance-list-table/AdvancedSearchCondition.tsx"],"names":["newKey","fieldIds","aq","key","join","length","reducer","prevState","updatedProperty","formatAqToShow","newAqToShow","forEach","query","aqToShow","Object","entries","map","expressions","newExpressions","LogicalOperators","Or","And","translateAqConditions","fields","conditions","queries","keys","value","values","attr","find","v","id","contain","i18n","t","NS_LIBS_CMDB_INSTANCES","K","OPERATOR_CONTAIN_DEFINE","condition","name","replace","curCondition","attrId","valuesStr","push","AdvancedSearchCondition","props","state","setState","undefined","onAdvancedSearch","queriesToShow","fieldToShow","onAdvancedSearchCloseGen","isValueEqual","filterAq","filter","specialQueryHandler","isSpecial","some","formatAqQuery","querys","isAq","isKey","isStart","filteredSubQueries","isInstanceFilterForm","styles","advancedSearchWrapper","marginBottom","hideSearchConditions","searchConditions","CURRENT_FILTER_REQUIREMENTS"],"mappings":"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","sourcesContent":["import React, { useReducer } from \"react\";\nimport i18n from \"i18next\";\nimport { K, NS_LIBS_CMDB_INSTANCES } from \"../i18n/constants\";\nimport { Query, LogicalOperators } from \"@next-libs/cmdb-utils\";\nimport { DynamicSearch } from \"./DynamicSearch\";\nimport { isEmpty, uniqueId, startsWith } from \"lodash\";\nimport { Tag } from \"antd\";\nimport styles from \"./AdvancedSearchCondition.module.css\";\nexport interface AdvancedSearchConditionProps {\n fields: Record<string, any>[];\n onAdvancedSearch?(queries: Query[]): void;\n isInstanceFilterForm?: boolean;\n aq?: Query[];\n aqToShow?: Query[];\n hideSearchConditions?: boolean;\n}\n\ninterface AdvancedSearchConditionState {\n aq: Query[];\n aqToShow?: Query[];\n fieldIds: string[];\n fieldToShow?: Record<string, any[]>[];\n fields?: Record<string, any>[];\n}\n\n/* istanbul ignore next */\nfunction newKey(fieldIds: string[], aq: Query[]): string {\n let key = \"\";\n if (!isEmpty(fieldIds)) {\n key += fieldIds.join(\"-\");\n }\n if (!isEmpty(aq)) {\n key += `-${aq.length}`;\n }\n return key;\n}\n/* istanbul ignore next */\nconst reducer = (\n prevState: AdvancedSearchConditionState,\n updatedProperty: Partial<AdvancedSearchConditionState>\n): AdvancedSearchConditionState => {\n return {\n ...prevState,\n ...updatedProperty,\n };\n};\n\nexport const formatAqToShow = (aq: Query[]) => {\n let newAqToShow: any[] = [];\n if (aq) {\n aq.forEach((query) => {\n const aqToShow = Object.entries(query).map(([key, expressions]) => {\n let newExpressions: any[] = [];\n if (key === LogicalOperators.Or || key === LogicalOperators.And) {\n newExpressions = [...newExpressions, ...(expressions as Query[])];\n\n return { [key]: newExpressions };\n } else {\n return query;\n }\n });\n newAqToShow = [...newAqToShow, ...aqToShow];\n });\n return newAqToShow;\n }\n return newAqToShow;\n};\n\nfunction translateAqConditions(\n aq: Query[],\n fields: any[]\n): { attrId: string; condition: string; valuesStr: string }[] {\n const conditions: {\n attrId: string;\n condition: string;\n valuesStr: string;\n }[] = [];\n if (!isEmpty(aq)) {\n for (const query of aq) {\n let queries: Query[] = [query];\n if (\n Object.keys(query)[0] === LogicalOperators.Or ||\n Object.keys(query)[0] === LogicalOperators.And\n ) {\n queries = query[Object.keys(query)[0]] as Query[];\n }\n queries.forEach((query) => {\n const key = Object.keys(query)[0];\n const value = Object.values(query)[0];\n const attr = fields.find((v) => v.id === key);\n const contain = i18n.t(\n `${NS_LIBS_CMDB_INSTANCES}:${K.OPERATOR_CONTAIN_DEFINE}`\n );\n const condition = `${attr?.name}:${contain}\"${Object.values(\n value\n )[0].replace(/%/g, \"\")}\"`;\n const curCondition = {\n attrId: key,\n condition,\n valuesStr: Object.values(value)[0],\n };\n conditions.push(curCondition);\n });\n }\n }\n return conditions;\n}\n\nexport function AdvancedSearchCondition(\n props: AdvancedSearchConditionProps\n): React.ReactElement {\n const [state, setState] = useReducer(reducer, undefined, () => ({\n aq: formatAqToShow(props.aq),\n aqToShow: props.aqToShow || formatAqToShow(props.aq),\n fieldIds: (props.fields || []).map((v) => v.id),\n fields: props.fields || [],\n }));\n\n const onAdvancedSearch = (\n queries: Query[],\n queriesToShow: Query[],\n fieldToShow: Record<string, any[]>[]\n ) => {\n setState({\n aq: queries,\n fieldToShow,\n aqToShow: queriesToShow,\n });\n props.onAdvancedSearch?.(queries);\n };\n\n /* istanbul ignore next */\n const onAdvancedSearchCloseGen = (attrId: string, valuesStr: string) => {\n return () => {\n const queries: Query[] = [];\n const queriesToShow: Query[] = [];\n const isValueEqual = (query: any) =>\n query[attrId]\n ? Object.values(query[attrId]).join(\" \") !== valuesStr\n : false;\n const filterAq = (queries: any[]) =>\n queries.filter((v: any) => isValueEqual(v));\n const specialQueryHandler = (query: any, key: any, queries: Query[]) => {\n // $exists $gte $lte 针对为空,不为空,时间范围特殊处理\n const isSpecial = Object.keys(query[key] as Query[]).some(\n (v) => v === \"$exists\" || v === \"$gte\" || v === \"$lte\"\n );\n if (isSpecial) {\n return;\n }\n queries.push(query);\n };\n const formatAqQuery = (\n querys: any[],\n queries: Query[],\n isAq: boolean\n ) => {\n querys.forEach((query) => {\n const key = Object.keys(query)[0];\n const isKey = key !== attrId;\n const isStart = isAq\n ? isKey && !startsWith(attrId, `${key}.`)\n : isKey;\n if (\n (key === \"$or\" || key === \"$and\") &&\n Object.keys((query[key] as Query[])[0])[0] === attrId\n ) {\n const filteredSubQueries = filterAq(query[key] as Query[]);\n if (filteredSubQueries.length > 0) {\n queries.push({\n [key]: filteredSubQueries,\n });\n }\n } else if (isStart) {\n queries.push(query);\n } else if (\n props.isInstanceFilterForm &&\n key === attrId &&\n isValueEqual(query)\n ) {\n specialQueryHandler(query, key, queries);\n }\n });\n };\n formatAqQuery(state.aq, queries, true);\n formatAqQuery(state.aqToShow, queriesToShow, false);\n setState({\n aq: queries,\n aqToShow: queriesToShow,\n });\n props.onAdvancedSearch?.(queries);\n };\n };\n\n const conditions = translateAqConditions(state.aqToShow, state.fields);\n\n return (\n <div className={styles.advancedSearchWrapper}>\n <div style={{ marginBottom: \"18px\" }}>\n <DynamicSearch\n fields={state.fields}\n onSearch={onAdvancedSearch}\n key={newKey(state.fieldIds, state.aq)}\n q={state.aqToShow}\n fieldToShow={state.fieldToShow}\n />\n </div>\n {!props.hideSearchConditions && !isEmpty(conditions) && (\n <div className={styles.searchConditions}>\n <span>\n {i18n.t(\n `${NS_LIBS_CMDB_INSTANCES}:${K.CURRENT_FILTER_REQUIREMENTS}`\n )}\n </span>\n {conditions.map((condition) => (\n <Tag\n key={`${condition.attrId}${condition.valuesStr}-${uniqueId()}`}\n closable\n onClose={onAdvancedSearchCloseGen(\n condition.attrId,\n condition.valuesStr\n )}\n >\n {condition.condition}\n </Tag>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"file":"AdvancedSearchCondition.js"}
@@ -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"}