@next-libs/cmdb-instances 6.26.6 → 6.27.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.
Files changed (41) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/cjs/i18n/constants.js +1 -0
  3. package/dist/cjs/i18n/constants.js.map +1 -1
  4. package/dist/cjs/i18n/locales/en.js +2 -1
  5. package/dist/cjs/i18n/locales/en.js.map +1 -1
  6. package/dist/cjs/i18n/locales/zh.js +2 -1
  7. package/dist/cjs/i18n/locales/zh.js.map +1 -1
  8. package/dist/cjs/index.js +14 -0
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/instance-list-table/AdvancedSearchCondition.js +336 -0
  11. package/dist/cjs/instance-list-table/AdvancedSearchCondition.js.map +1 -0
  12. package/dist/cjs/instance-list-table/InstanceListTable.js +25 -7
  13. package/dist/cjs/instance-list-table/InstanceListTable.js.map +1 -1
  14. package/dist/cjs/instance-list-table/index.js +13 -0
  15. package/dist/cjs/instance-list-table/index.js.map +1 -1
  16. package/dist/cjs/model-attribute-form-control/ModelAttributeFormControl.js +4 -0
  17. package/dist/cjs/model-attribute-form-control/ModelAttributeFormControl.js.map +1 -1
  18. package/dist/esm/i18n/constants.js +1 -0
  19. package/dist/esm/i18n/constants.js.map +1 -1
  20. package/dist/esm/i18n/locales/en.js +2 -1
  21. package/dist/esm/i18n/locales/en.js.map +1 -1
  22. package/dist/esm/i18n/locales/zh.js +2 -1
  23. package/dist/esm/i18n/locales/zh.js.map +1 -1
  24. package/dist/esm/index.js +1 -0
  25. package/dist/esm/index.js.map +1 -1
  26. package/dist/esm/instance-list-table/AdvancedSearchCondition.js +315 -0
  27. package/dist/esm/instance-list-table/AdvancedSearchCondition.js.map +1 -0
  28. package/dist/esm/instance-list-table/AdvancedSearchCondition.module.css +22 -0
  29. package/dist/esm/instance-list-table/InstanceListTable.js +60 -32
  30. package/dist/esm/instance-list-table/InstanceListTable.js.map +1 -1
  31. package/dist/esm/instance-list-table/index.js +1 -0
  32. package/dist/esm/instance-list-table/index.js.map +1 -1
  33. package/dist/esm/model-attribute-form-control/ModelAttributeFormControl.js +4 -0
  34. package/dist/esm/model-attribute-form-control/ModelAttributeFormControl.js.map +1 -1
  35. package/dist/types/i18n/constants.d.ts +2 -1
  36. package/dist/types/index.d.ts +1 -0
  37. package/dist/types/instance-list-table/AdvancedSearchCondition.d.ts +15 -0
  38. package/dist/types/instance-list-table/AdvancedSearchCondition.spec.d.ts +1 -0
  39. package/dist/types/instance-list-table/InstanceListTable.d.ts +2 -1
  40. package/dist/types/instance-list-table/index.d.ts +1 -0
  41. package/package.json +2 -2
@@ -0,0 +1,315 @@
1
+ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
+ import React, { useMemo, useReducer } from "react";
3
+ import i18n from "i18next";
4
+ import { K, NS_LIBS_CMDB_INSTANCES } from "../i18n/constants";
5
+ import { getRelationObjectSides, getInstanceNameKeys, isSelfRelation, ElementOperators } from "@next-libs/cmdb-utils";
6
+ import { CMDB_MODAL_FIELDS_SETTINGS, CMDB_RESOURCE_FIELDS_SETTINGS } from "./constants";
7
+ import { changeQueryWithCustomRules } from "../processors";
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";
10
+ import { Tag } from "antd";
11
+ import { AdvancedSearch, ConditionType, getFieldConditionsAndValues } from "./AdvancedSearch";
12
+ import styles from "./AdvancedSearchCondition.module.css";
13
+
14
+ /* istanbul ignore next */
15
+ function newKey(fieldIds, aq) {
16
+ var key = "";
17
+
18
+ if (!isEmpty(fieldIds)) {
19
+ key += fieldIds.join("-");
20
+ }
21
+
22
+ if (!isEmpty(aq)) {
23
+ key += "-".concat(aq.length);
24
+ }
25
+
26
+ return key;
27
+ }
28
+ /* istanbul ignore next */
29
+
30
+
31
+ var reducer = (prevState, updatedProperty) => {
32
+ return _objectSpread(_objectSpread({}, prevState), updatedProperty);
33
+ };
34
+
35
+ function translateConditions(aq, idObjectMap, modelData, t) {
36
+ var conditions = [];
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
+ }
52
+
53
+ sidesArr.forEach(sides => {
54
+ var objectId = relation["".concat(sides.this, "_id")];
55
+ var relationObject = idObjectMap[relation["".concat(sides.that, "_object_id")]];
56
+ var nameKeys = getInstanceNameKeys(relationObject);
57
+ nameKeys.forEach(nameKey => {
58
+ var _find$name, _find;
59
+
60
+ var nameOfNameKey = (_find$name = (_find = find(relationObject === null || relationObject === void 0 ? void 0 : relationObject.attrList, ["id", nameKey])) === null || _find === void 0 ? void 0 : _find.name) !== null && _find$name !== void 0 ? _find$name : nameKey;
61
+ var id = "".concat(objectId, ".").concat(nameKey);
62
+ var name = "".concat(relation["".concat(sides.this, "_name")], "(").concat(nameOfNameKey, ")");
63
+ relations.push({
64
+ id,
65
+ name,
66
+ value: {
67
+ type: "str"
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")]
79
+ });
80
+ });
81
+ });
82
+ var attrAndRelationList = [...modelData.attrList, ...relations];
83
+
84
+ if (!isEmpty(aq)) {
85
+ for (var query of aq) {
86
+ var _queries = [query];
87
+
88
+ if (Object.keys(query)[0] === "$or" || Object.keys(query)[0] === "$and") {
89
+ _queries = query[Object.keys(query)[0]];
90
+ }
91
+
92
+ _queries.forEach(query => {
93
+ var key = Object.keys(query)[0];
94
+ var value = Object.values(query)[0];
95
+ var attr = attrAndRelationList.find(attr => attr.id === key || attr.relationSideId === key);
96
+
97
+ if (Object.keys(value)[0] === ElementOperators.Exists && attr.relationSideId) {
98
+ var relationSideId = attr.relationSideId;
99
+ attr = attrAndRelationList.find(attr => attr.id === "".concat(relationSideId, ".")) || attr;
100
+ }
101
+
102
+ if (attr) {
103
+ query = changeQueryWithCustomRules(modelData.objectId, attr.id, query);
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
+ }
126
+ });
127
+ }
128
+ }
129
+
130
+ return conditions;
131
+ }
132
+
133
+ 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
+ var [state, setState] = useReducer(reducer, undefined, () => ({
211
+ objectId: props.objectId,
212
+ aq: initAqToShow(props.aq, modelData, false),
213
+ aqToShow: props.aqToShow || initAqToShow(props.aq, modelData),
214
+ fieldIds: getFields()
215
+ }));
216
+
217
+ var onAdvancedSearch = (queries, queriesToShow, fieldToShow) => {
218
+ var _props$onAdvancedSear;
219
+
220
+ setState({
221
+ aq: queries,
222
+ fieldToShow,
223
+ aqToShow: queriesToShow
224
+ });
225
+ (_props$onAdvancedSear = props.onAdvancedSearch) === null || _props$onAdvancedSear === void 0 ? void 0 : _props$onAdvancedSear.call(props, queries);
226
+ };
227
+
228
+ var onAdvancedSearchCloseGen = (attrId, valuesStr) => {
229
+ return () => {
230
+ var _props$onAdvancedSear2;
231
+
232
+ var queries = [];
233
+ var queriesToShow = [];
234
+
235
+ var isValueEqual = query => query[attrId] ? Object.values(query[attrId]).join(" ") !== valuesStr : false;
236
+
237
+ var filterAq = queries => queries.filter(v => isValueEqual(v));
238
+
239
+ var specialQueryHandler = (query, key, queries) => {
240
+ // $exists $gte $lte 针对为空,不为空,时间范围特殊处理
241
+ var isSpecial = Object.keys(query[key]).some(v => v === "$exists" || v === "$gte" || v === "$lte");
242
+
243
+ if (isSpecial) {
244
+ return;
245
+ }
246
+
247
+ queries.push(query);
248
+ };
249
+
250
+ state.aq.forEach(query => {
251
+ var key = Object.keys(query)[0];
252
+
253
+ if ((key === "$or" || key === "$and") && Object.keys(query[key][0])[0] === attrId) {
254
+ var filteredSubQueries = filterAq(query[key]);
255
+
256
+ if (filteredSubQueries.length > 0) {
257
+ queries.push({
258
+ [key]: filteredSubQueries
259
+ });
260
+ }
261
+ } else if (key !== attrId && !startsWith(attrId, "".concat(key, "."))) {
262
+ queries.push(query);
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]);
272
+
273
+ if (filteredSubQueries.length > 0) {
274
+ queriesToShow.push({
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
+ });
284
+ setState({
285
+ aq: queries,
286
+ aqToShow: queriesToShow
287
+ });
288
+ (_props$onAdvancedSear2 = props.onAdvancedSearch) === null || _props$onAdvancedSear2 === void 0 ? void 0 : _props$onAdvancedSear2.call(props, queries);
289
+ };
290
+ };
291
+
292
+ var conditions = translateConditions(state.aqToShow, idObjectMap, modelData);
293
+ return /*#__PURE__*/React.createElement("div", {
294
+ className: styles.advancedSearchWrapper
295
+ }, /*#__PURE__*/React.createElement("div", {
296
+ style: {
297
+ marginBottom: "18px"
298
+ }
299
+ }, /*#__PURE__*/React.createElement(AdvancedSearch, {
300
+ modelData: modelData,
301
+ idObjectMap: idObjectMap,
302
+ key: newKey(state.fieldIds, state.aq),
303
+ fieldIds: state.fieldIds,
304
+ q: state.aqToShow,
305
+ fieldToShow: state.fieldToShow,
306
+ onSearch: onAdvancedSearch
307
+ })), !props.hideSearchConditions && !isEmpty(conditions) && /*#__PURE__*/React.createElement("div", {
308
+ className: styles.searchConditions
309
+ }, /*#__PURE__*/React.createElement("span", null, i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.CURRENT_FILTER_REQUIREMENTS))), conditions.map(condition => /*#__PURE__*/React.createElement(Tag, {
310
+ key: "".concat(condition.attrId).concat(condition.valuesStr, "-").concat(uniqueId()),
311
+ closable: true,
312
+ onClose: onAdvancedSearchCloseGen(condition.attrId, condition.valuesStr)
313
+ }, condition.condition))));
314
+ }
315
+ //# sourceMappingURL=AdvancedSearchCondition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/instance-list-table/AdvancedSearchCondition.tsx"],"names":["React","useMemo","useReducer","i18n","K","NS_LIBS_CMDB_INSTANCES","getRelationObjectSides","getInstanceNameKeys","isSelfRelation","ElementOperators","CMDB_MODAL_FIELDS_SETTINGS","CMDB_RESOURCE_FIELDS_SETTINGS","changeQueryWithCustomRules","initAqToShow","difference","isEmpty","isEqual","isString","map","uniq","filter","reject","sortBy","uniqueId","findIndex","find","startsWith","omit","Tag","AdvancedSearch","ConditionType","getFieldConditionsAndValues","styles","newKey","fieldIds","aq","key","join","length","reducer","prevState","updatedProperty","translateConditions","idObjectMap","modelData","t","conditions","relations","relation_list","forEach","relation","sidesArr","this","that","sides","objectId","relationObject","nameKeys","nameKey","nameOfNameKey","attrList","name","id","push","value","type","relationSideId","attrAndRelationList","query","queries","Object","keys","values","attr","Exists","info","undefined","Between","Empty","NotEmpty","False","True","includes","currentCondition","v","replace","condition","label","curCondition","attrId","valuesStr","queryValuesStr","every","AdvancedSearchCondition","props","objectList","object","computeDefaultFields","inModal","settings","ignoredFields","slice","hideModelData","view","hide_columns","field","_sortFieldIds","frontFields","restFields","fieldId","foundIndex","attr_order","orderId","getFields","isAbstract","state","setState","aqToShow","onAdvancedSearch","queriesToShow","fieldToShow","onAdvancedSearchCloseGen","isValueEqual","filterAq","specialQueryHandler","isSpecial","some","filteredSubQueries","isInstanceFilterForm","advancedSearchWrapper","marginBottom","hideSearchConditions","searchConditions","CURRENT_FILTER_REQUIREMENTS"],"mappings":"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","sourcesContent":["import React, { useMemo, useReducer } from \"react\";\nimport { CmdbModels } from \"@next-sdk/cmdb-sdk\";\nimport i18n from \"i18next\";\nimport { K, NS_LIBS_CMDB_INSTANCES } from \"../i18n/constants\";\nimport {\n getRelationObjectSides,\n getInstanceNameKeys,\n RelationIdKeys,\n RelationNameKeys,\n RelationObjectIdKeys,\n RelationObjectSides,\n isSelfRelation,\n Query,\n ElementOperators,\n} from \"@next-libs/cmdb-utils\";\nimport {\n extraFieldAttrs,\n CMDB_MODAL_FIELDS_SETTINGS,\n CMDB_RESOURCE_FIELDS_SETTINGS,\n} from \"./constants\";\nimport { ModelAttributeValueType } from \"../model-attribute-form-control/ModelAttributeFormControl\";\nimport { changeQueryWithCustomRules } from \"../processors\";\nimport { initAqToShow } from \"../instance-list/InstanceList\";\nimport {\n difference,\n isEmpty,\n isEqual,\n isString,\n map,\n uniq,\n filter,\n reject,\n sortBy,\n uniqueId,\n findIndex,\n find,\n startsWith,\n omit,\n} from \"lodash\";\nimport { Tag } from \"antd\";\nimport {\n AdvancedSearch,\n ConditionType,\n getFieldConditionsAndValues,\n} from \"./AdvancedSearch\";\nimport styles from \"./AdvancedSearchCondition.module.css\";\n\nexport interface AdvancedSearchConditionProps {\n objectId: string;\n objectList: Partial<CmdbModels.ModelCmdbObject>[];\n onAdvancedSearch?(queries: Query[]): void;\n autoSearch?: boolean;\n isInstanceFilterForm?: boolean;\n aq?: Query[];\n aqToShow?: Query[];\n fieldIds?: string[];\n hideSearchConditions?: boolean;\n}\n\ninterface AdvancedSearchConditionState {\n objectId: string;\n aq: Query[];\n aqToShow?: Query[];\n idObjectMap?: Record<string, Partial<CmdbModels.ModelCmdbObject>>;\n fieldIds: string[];\n fieldToShow?: 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\nfunction translateConditions(\n aq: Query[],\n idObjectMap: Record<string, Partial<CmdbModels.ModelCmdbObject>>,\n modelData: Partial<CmdbModels.ModelCmdbObject>,\n t?: () => string\n): { attrId: string; condition: string; valuesStr: string }[] {\n const conditions: {\n attrId: string;\n condition: string;\n valuesStr: string;\n }[] = [];\n const relations: any[] = [];\n modelData.relation_list.forEach((relation) => {\n let sidesArr: RelationObjectSides[] = [];\n if (isSelfRelation(relation)) {\n sidesArr = [\n { this: \"left\", that: \"right\" },\n { this: \"right\", that: \"left\" },\n ];\n } else {\n sidesArr = [getRelationObjectSides(relation, modelData)];\n }\n sidesArr.forEach((sides) => {\n const objectId = relation[`${sides.this}_id` as RelationIdKeys];\n const relationObject =\n idObjectMap[\n relation[`${sides.that}_object_id` as RelationObjectIdKeys]\n ];\n const nameKeys = getInstanceNameKeys(relationObject);\n nameKeys.forEach((nameKey) => {\n const nameOfNameKey =\n find(relationObject?.attrList, [\"id\", nameKey])?.name ?? nameKey;\n const id = `${objectId}.${nameKey}`;\n const name = `${\n relation[`${sides.this}_name` as RelationNameKeys]\n }(${nameOfNameKey})`;\n relations.push({\n id,\n name,\n value: { type: \"str\" },\n relationSideId: relation[`${sides.this}_id` as RelationIdKeys],\n });\n });\n relations.push({\n id: `${objectId}.`,\n name: `${relation[`${sides.this}_name` as RelationNameKeys]}`,\n value: { type: \"str\" },\n relationSideId: relation[`${sides.this}_id` as RelationIdKeys],\n });\n });\n });\n const attrAndRelationList = [...modelData.attrList, ...relations];\n if (!isEmpty(aq)) {\n for (const query of aq) {\n let queries: Query[] = [query];\n if (Object.keys(query)[0] === \"$or\" || Object.keys(query)[0] === \"$and\") {\n queries = query[Object.keys(query)[0]] as Query[];\n }\n\n queries.forEach((query) => {\n const key = Object.keys(query)[0];\n const value = Object.values(query)[0];\n let attr = attrAndRelationList.find(\n (attr) => attr.id === key || attr.relationSideId === key\n );\n if (\n Object.keys(value)[0] === ElementOperators.Exists &&\n attr.relationSideId\n ) {\n const relationSideId = attr.relationSideId;\n attr =\n attrAndRelationList.find(\n (attr) => attr.id === `${relationSideId}.`\n ) || attr;\n }\n if (attr) {\n query = changeQueryWithCustomRules(\n modelData.objectId,\n attr.id,\n query\n );\n const info = getFieldConditionsAndValues(\n query as any,\n key,\n attr.value.type as ModelAttributeValueType,\n undefined,\n undefined,\n modelData.objectId,\n attr.id\n );\n if (\n ![\n ConditionType.Between,\n ConditionType.Empty,\n ConditionType.NotEmpty,\n ConditionType.False,\n ConditionType.True,\n ].includes(info.currentCondition.type)\n ) {\n info.values = info.values.map((v) =>\n isString(v) && v.includes(\" \") ? v.replace(/^\"+|\"+$/g, \"\") : v\n );\n }\n\n let condition = `${attr.name}: ${info.currentCondition.label}`;\n if (\n ![ConditionType.Empty, ConditionType.NotEmpty].includes(\n info.currentCondition.type\n )\n ) {\n condition += `\"${info.values.join(\" ~ \")}\"`;\n }\n const curCondition = {\n attrId: key,\n condition,\n valuesStr: info.queryValuesStr,\n };\n if (\n conditions.every(\n (v) => !isEqual(omit(v, \"attrId\"), omit(curCondition, \"attrId\"))\n )\n ) {\n conditions.push(curCondition);\n }\n }\n });\n }\n }\n\n return conditions;\n}\n\nexport function AdvancedSearchCondition(\n props: AdvancedSearchConditionProps\n): React.ReactElement {\n const { modelData, idObjectMap } = useMemo(() => {\n let modelData: Partial<CmdbModels.ModelCmdbObject>;\n const idObjectMap: Record<string, Partial<CmdbModels.ModelCmdbObject>> = {};\n props.objectList.forEach((object) => {\n idObjectMap[object.objectId] = object;\n if (object.objectId === props.objectId) {\n modelData = object;\n modelData.attrList = object.attrList;\n }\n });\n\n return { modelData, idObjectMap };\n }, [props.objectList, props.objectId]);\n\n const computeDefaultFields = (\n { inModal } = { inModal: false }\n ): { fieldIds: string[] } => {\n // 原来有隐藏逻辑,针对 APP、HOST、USER、USER_GROUP模型,默认字段特殊处理了,现产品要求干掉,统一取8个默认字段,也不区分是否是内置模型\n const settings: any = inModal\n ? CMDB_MODAL_FIELDS_SETTINGS\n : CMDB_RESOURCE_FIELDS_SETTINGS;\n const ignoredFields: string[] =\n settings.ignoredFields[modelData.objectId] || [];\n let fieldIds: string[] = difference(\n uniq(map(modelData.attrList, \"id\")),\n ignoredFields\n ).slice(0, 8);\n const hideModelData: string[] = modelData.view.hide_columns || [];\n fieldIds = fieldIds.filter((field) => !hideModelData.includes(field));\n return { fieldIds };\n };\n\n // 根据用户预定义的 presetConfigs.fieldIds 进行排序,如果不在预定义的字段,则根据 modelData.view.attr_order 进行排序\n const _sortFieldIds = (fieldIds: any[]) => {\n let frontFields: any[] = [];\n let restFields: any[] = [];\n if (props.fieldIds?.length) {\n frontFields = filter(props.fieldIds, (id) => fieldIds.includes(id));\n }\n restFields = sortBy(\n reject(fieldIds, (id) => frontFields.includes(id)),\n (fieldId) => {\n const foundIndex = findIndex(\n modelData.view.attr_order,\n (orderId) => orderId === fieldId\n );\n if (foundIndex === -1) {\n return null;\n } else {\n return foundIndex;\n }\n }\n );\n return [...frontFields, ...restFields];\n };\n\n const getFields = () => {\n let fieldIds = props.fieldIds;\n if (!fieldIds?.length) {\n fieldIds = computeDefaultFields().fieldIds;\n }\n\n fieldIds = _sortFieldIds(fieldIds);\n const hideModelData: string[] = modelData.view.hide_columns || [];\n fieldIds = fieldIds.filter((field) => !hideModelData.includes(field));\n modelData.isAbstract && fieldIds.push(\"_object_id\");\n return fieldIds;\n };\n\n const [state, setState] = useReducer(reducer, undefined, () => ({\n objectId: props.objectId,\n aq: initAqToShow(props.aq, modelData, false),\n aqToShow: props.aqToShow || initAqToShow(props.aq, modelData),\n fieldIds: getFields(),\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 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 state.aq.forEach((query) => {\n const key = Object.keys(query)[0];\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 (key !== attrId && !startsWith(attrId, `${key}.`)) {\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 state.aqToShow.forEach((query) => {\n const key = Object.keys(query)[0];\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 queriesToShow.push({\n [key]: filteredSubQueries,\n });\n }\n } else if (key !== attrId) {\n queriesToShow.push(query);\n } else if (\n props.isInstanceFilterForm &&\n key === attrId &&\n isValueEqual(query)\n ) {\n specialQueryHandler(query, key, queriesToShow);\n }\n });\n setState({\n aq: queries,\n aqToShow: queriesToShow,\n });\n props.onAdvancedSearch?.(queries);\n };\n };\n\n const conditions = translateConditions(\n state.aqToShow,\n idObjectMap,\n modelData\n );\n\n return (\n <div className={styles.advancedSearchWrapper}>\n <div style={{ marginBottom: \"18px\" }}>\n <AdvancedSearch\n modelData={modelData}\n idObjectMap={idObjectMap}\n key={newKey(state.fieldIds, state.aq)}\n fieldIds={state.fieldIds}\n q={state.aqToShow}\n fieldToShow={state.fieldToShow}\n onSearch={onAdvancedSearch}\n ></AdvancedSearch>\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,22 @@
1
+ .searchConditions {
2
+ background-color: var(
3
+ --cmdb-instance-detail-search-container-bg,
4
+ rgb(250, 250, 250)
5
+ );
6
+ padding: 8px 16px;
7
+ margin-bottom: 18px;
8
+ border-radius: 6px;
9
+ }
10
+
11
+ .searchConditions :global(.ant-tag) {
12
+ margin-top: 3px;
13
+ background: var(--cmdb-instance-detail-search-container-tag-bg, #f5f5f5);
14
+ color: var(--cmdb-instance-detail-search-container-tag-color, #595959);
15
+
16
+ :global(.anticon-close):hover {
17
+ color: var(
18
+ --cmdb-instance-detail-search-container-tag-close-hover-color,
19
+ #595959
20
+ );
21
+ }
22
+ }
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
3
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
4
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
5
5
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
6
6
  var _excluded = ["useBrick"];
7
7
  import React from "react";
@@ -11,7 +11,7 @@ import { Button, Popover, Table, Tag, Tooltip, Modal, message } from "antd";
11
11
  import { isNil, isBoolean, compact, map } from "lodash";
12
12
  import { CopyOutlined, DeleteOutlined } from "@ant-design/icons";
13
13
  import { PropertyDisplayType } from "@next-core/brick-types";
14
- import { CmdbObjectApi_getIdMapName } from "@next-sdk/cmdb-sdk";
14
+ import { CmdbObjectApi_getIdMapName, InstanceApi_postSearch } from "@next-sdk/cmdb-sdk";
15
15
  import { Link, GeneralIcon } from "@next-libs/basic-components";
16
16
  import { forEachAvailableFields, getInstanceNameKeys, getTemplateFromMap, parseTemplate, modifyModelData } from "@next-libs/cmdb-utils";
17
17
  import { ModelAttributeValueType } from "../model-attribute-form-control/ModelAttributeFormControl";
@@ -49,9 +49,10 @@ var SELF_RENDER_COLUMNS = {
49
49
  };
50
50
  export class LegacyInstanceListTable extends React.Component {
51
51
  constructor(props) {
52
- var _SELF_RENDER_COLUMNS$, _this$props$propertyD;
52
+ var _this, _SELF_RENDER_COLUMNS$, _this$props$propertyD;
53
53
 
54
54
  super(props);
55
+ _this = this;
55
56
 
56
57
  _defineProperty(this, "keyDisplayConfigMap", {});
57
58
 
@@ -61,6 +62,8 @@ export class LegacyInstanceListTable extends React.Component {
61
62
 
62
63
  _defineProperty(this, "selectedRows", []);
63
64
 
65
+ _defineProperty(this, "ROM_KEY", "instanceId");
66
+
64
67
  _defineProperty(this, "instanceSourceTitle", /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", null, i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.INSTANCE_SOURCE))), /*#__PURE__*/React.createElement(Tooltip, {
65
68
  title: i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.INSTANCE_SOURCE_TOOLTIP))
66
69
  }, /*#__PURE__*/React.createElement("span", {
@@ -119,28 +122,53 @@ export class LegacyInstanceListTable extends React.Component {
119
122
  });
120
123
  });
121
124
 
122
- _defineProperty(this, "handelIpCopyText", (ev, dataIndex) => {
123
- var _this$props$selectedR;
125
+ _defineProperty(this, "handelIpCopyText", /*#__PURE__*/function () {
126
+ var _ref = _asyncToGenerator(function* (ev, dataIndex) {
127
+ var _selectedRowKeys;
124
128
 
125
- ev.stopPropagation();
129
+ ev.stopPropagation();
130
+ var selectedRowKeys = _this.props.selectedRowKeys;
126
131
 
127
- if (((_this$props$selectedR = this.props.selectedRowKeys) === null || _this$props$selectedR === void 0 ? void 0 : _this$props$selectedR.length) < 1 || this.selectedRows.length < 1) {
128
- message.warning(i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.SELECT_COPY_DATA)));
129
- return false;
130
- }
132
+ var selectedRows = _this.selectedRows.filter(v => v);
131
133
 
132
- var inputDom = document.createElement("textarea");
133
- inputDom.value = [...new Set(map(this.selectedRows.filter(v => v[dataIndex]), dataIndex))].join("\n");
134
- document.body.appendChild(inputDom);
135
- inputDom.select(); //选择对象
134
+ var objectId = _this.props.modelData.objectId;
136
135
 
137
- document.execCommand("copy");
138
- inputDom.remove();
139
- message.success(i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.COPY_SUCCESS)));
140
- });
136
+ if (((_selectedRowKeys = selectedRowKeys) === null || _selectedRowKeys === void 0 ? void 0 : _selectedRowKeys.length) < 1) {
137
+ message.warning(i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.SELECT_COPY_DATA)));
138
+ return false;
139
+ }
140
+
141
+ selectedRowKeys = selectedRowKeys.filter(k => selectedRows.every(row => row[_this.ROM_KEY] !== k));
142
+
143
+ if (selectedRowKeys.length > 0) {
144
+ var resp = yield InstanceApi_postSearch(objectId, {
145
+ query: {
146
+ instanceId: {
147
+ $in: selectedRowKeys
148
+ }
149
+ },
150
+ page_size: selectedRowKeys.length
151
+ });
152
+ selectedRows = [...selectedRows, ...((resp === null || resp === void 0 ? void 0 : resp.list) || [])];
153
+ }
154
+
155
+ var inputDom = document.createElement("textarea");
156
+ inputDom.value = [...new Set(map(selectedRows.filter(v => v[dataIndex]), dataIndex))].join("\n");
157
+ document.body.appendChild(inputDom);
158
+ inputDom.select(); //选择对象
159
+
160
+ document.execCommand("copy");
161
+ inputDom.remove();
162
+ message.success(i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.COPY_SUCCESS)));
163
+ });
164
+
165
+ return function (_x, _x2) {
166
+ return _ref.apply(this, arguments);
167
+ };
168
+ }());
141
169
 
142
- var objectId = this.props.modelData.objectId;
143
- (_SELF_RENDER_COLUMNS$ = SELF_RENDER_COLUMNS[objectId]) === null || _SELF_RENDER_COLUMNS$ === void 0 ? void 0 : _SELF_RENDER_COLUMNS$.forEach(config => this.keyDisplayConfigMap[config.key] = config);
170
+ var _objectId = this.props.modelData.objectId;
171
+ (_SELF_RENDER_COLUMNS$ = SELF_RENDER_COLUMNS[_objectId]) === null || _SELF_RENDER_COLUMNS$ === void 0 ? void 0 : _SELF_RENDER_COLUMNS$.forEach(config => this.keyDisplayConfigMap[config.key] = config);
144
172
  (_this$props$propertyD = this.props.propertyDisplayConfigs) === null || _this$props$propertyD === void 0 ? void 0 : _this$props$propertyD.forEach(config => this.keyDisplayConfigMap[config.key] = config);
145
173
  var fieldIds = this.props.fieldIds;
146
174
  var sortedColumns = this.getChangeColumns(fieldIds);
@@ -304,19 +332,19 @@ export class LegacyInstanceListTable extends React.Component {
304
332
  }
305
333
 
306
334
  componentDidMount() {
307
- var _this = this;
335
+ var _this2 = this;
308
336
 
309
337
  return _asyncToGenerator(function* () {
310
- if (_this.props.modelData.isAbstract && isNil(_this.inheritanceModelIdNameMap)) {
311
- _this.inheritanceModelIdNameMap = yield CmdbObjectApi_getIdMapName({
312
- parentObjectId: _this.props.modelData.objectId
338
+ if (_this2.props.modelData.isAbstract && isNil(_this2.inheritanceModelIdNameMap)) {
339
+ _this2.inheritanceModelIdNameMap = yield CmdbObjectApi_getIdMapName({
340
+ parentObjectId: _this2.props.modelData.objectId
313
341
  });
314
342
  }
315
343
 
316
- var columns = _this.getChangeColumns(_this.props.fieldIds);
344
+ var columns = _this2.getChangeColumns(_this2.props.fieldIds);
317
345
 
318
- _this.setState({
319
- columns: _this.getMergedColumns(columns, _this.props.extraColumns)
346
+ _this2.setState({
347
+ columns: _this2.getMergedColumns(columns, _this2.props.extraColumns)
320
348
  });
321
349
  })();
322
350
  }
@@ -622,12 +650,12 @@ export class LegacyInstanceListTable extends React.Component {
622
650
  } else {
623
651
  tempColumns = (instances, record, index) => {
624
652
  if (instances && instances.length > 0) {
625
- var _objectId = relation["".concat(sides.that, "_object_id")];
626
- var nameKeys = getInstanceNameKeys(this.props.idObjectMap[_objectId]);
653
+ var _objectId2 = relation["".concat(sides.that, "_object_id")];
654
+ var nameKeys = getInstanceNameKeys(this.props.idObjectMap[_objectId2]);
627
655
  var detailUrlTemplate;
628
656
 
629
657
  if (this.props.detailUrlTemplates) {
630
- detailUrlTemplate = getTemplateFromMap(this.props.detailUrlTemplates, _objectId);
658
+ detailUrlTemplate = getTemplateFromMap(this.props.detailUrlTemplates, _objectId2);
631
659
  }
632
660
 
633
661
  var instanceNodes = instances.map((instance, index) => {
@@ -643,7 +671,7 @@ export class LegacyInstanceListTable extends React.Component {
643
671
  var _this$props$separator;
644
672
 
645
673
  var url = parseTemplate(detailUrlTemplate, _objectSpread(_objectSpread({}, instance), {}, {
646
- objectId: _objectId
674
+ objectId: _objectId2
647
675
  }));
648
676
  return /*#__PURE__*/React.createElement(React.Fragment, {
649
677
  key: instance.instanceId
@@ -777,7 +805,7 @@ export class LegacyInstanceListTable extends React.Component {
777
805
  }, /*#__PURE__*/React.createElement(Table, _extends({
778
806
  columns: this.state.columns,
779
807
  dataSource: this.props.instanceListData.list,
780
- rowKey: "instanceId",
808
+ rowKey: this.ROM_KEY,
781
809
  scroll: {
782
810
  x: "max-content"
783
811
  },