@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.
- package/CHANGELOG.md +33 -0
- package/dist/cjs/index.js +14 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/instance-list-table/AdvancedSearchCondition.js +207 -0
- package/dist/cjs/instance-list-table/AdvancedSearchCondition.js.map +1 -0
- package/dist/cjs/instance-list-table/DynamicSearch.js +291 -0
- package/dist/cjs/instance-list-table/DynamicSearch.js.map +1 -0
- package/dist/cjs/instance-list-table/InstanceListTable.js +25 -7
- package/dist/cjs/instance-list-table/InstanceListTable.js.map +1 -1
- package/dist/cjs/instance-list-table/index.js +13 -0
- package/dist/cjs/instance-list-table/index.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instance-list-table/AdvancedSearchCondition.js +184 -0
- package/dist/esm/instance-list-table/AdvancedSearchCondition.js.map +1 -0
- package/dist/esm/instance-list-table/AdvancedSearchCondition.module.css +22 -0
- 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/esm/instance-list-table/InstanceListTable.js +60 -32
- package/dist/esm/instance-list-table/InstanceListTable.js.map +1 -1
- package/dist/esm/instance-list-table/index.js +1 -0
- package/dist/esm/instance-list-table/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/instance-list-table/AdvancedSearchCondition.d.ts +12 -0
- package/dist/types/instance-list-table/AdvancedSearchCondition.spec.d.ts +1 -0
- package/dist/types/instance-list-table/DynamicSearch.d.ts +32 -0
- package/dist/types/instance-list-table/DynamicSearch.spec.d.ts +1 -0
- package/dist/types/instance-list-table/InstanceListTable.d.ts +2 -1
- package/dist/types/instance-list-table/index.d.ts +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/instance-list-table/AdvancedSearchCondition.tsx"],"names":["React","useReducer","i18n","K","NS_LIBS_CMDB_INSTANCES","LogicalOperators","DynamicSearch","isEmpty","uniqueId","startsWith","Tag","styles","newKey","fieldIds","aq","key","join","length","reducer","prevState","updatedProperty","formatAqToShow","newAqToShow","forEach","query","aqToShow","Object","entries","map","expressions","newExpressions","Or","And","translateAqConditions","fields","conditions","queries","keys","value","values","attr","find","v","id","contain","t","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","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,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
|
+
}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import update from "immutability-helper";
|
|
5
|
+
import { isEqual, isNil, isString, isArray, isEmpty } from "lodash";
|
|
6
|
+
import { Form } from "@ant-design/compatible";
|
|
7
|
+
import { Button, Col, Input, Row, Select } from "antd";
|
|
8
|
+
import { ComparisonOperators, LogicalOperators } from "@next-libs/cmdb-utils";
|
|
9
|
+
import styles from "./DynamicSearch.module.css";
|
|
10
|
+
import i18n from "i18next";
|
|
11
|
+
import { NS_LIBS_CMDB_INSTANCES, K } from "../i18n/constants";
|
|
12
|
+
import { processAttrValueWithQuote, ENABLED_CMDB_ADVANCE_SEARCH_WITH_QUOTE } from "../processors";
|
|
13
|
+
export class DynamicSearchForm extends React.Component {
|
|
14
|
+
constructor(props) {
|
|
15
|
+
super(props);
|
|
16
|
+
|
|
17
|
+
_defineProperty(this, "onValueChange", (value, fieldIndex, valueIndex) => {
|
|
18
|
+
this.setState({
|
|
19
|
+
fields: update(this.state.fields, {
|
|
20
|
+
[fieldIndex]: {
|
|
21
|
+
values: {
|
|
22
|
+
[valueIndex]: {
|
|
23
|
+
$set: value
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
_defineProperty(this, "handleValueChange", (e, fieldIndex) => {
|
|
32
|
+
this.onValueChange(e.target.value, fieldIndex, 0);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
_defineProperty(this, "handleSearch", e => {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
|
|
38
|
+
if (this.props.onSearch) {
|
|
39
|
+
var _queries = [];
|
|
40
|
+
var _queriesToShow = [];
|
|
41
|
+
var _fieldToShow = [];
|
|
42
|
+
this.state.fields.forEach(field => {
|
|
43
|
+
var expressions = {};
|
|
44
|
+
var fieldId = field.id;
|
|
45
|
+
var fieldQuery = {
|
|
46
|
+
[fieldId]: expressions
|
|
47
|
+
};
|
|
48
|
+
var fieldQueryToShow = {
|
|
49
|
+
[fieldId]: expressions
|
|
50
|
+
};
|
|
51
|
+
var hasValue = false;
|
|
52
|
+
var operator = {
|
|
53
|
+
comparisonOperator: ComparisonOperators.Like,
|
|
54
|
+
logicalOperator: LogicalOperators.Or
|
|
55
|
+
};
|
|
56
|
+
field.values.forEach(value => {
|
|
57
|
+
fieldQuery = {
|
|
58
|
+
[field.id]: expressions
|
|
59
|
+
};
|
|
60
|
+
var fieldIdToShow = field.id;
|
|
61
|
+
fieldQueryToShow = {
|
|
62
|
+
[fieldIdToShow]: expressions
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
if (value !== null && value !== "" && !(Array.isArray(value) && value.length === 0)) {
|
|
66
|
+
var values;
|
|
67
|
+
|
|
68
|
+
if (typeof value === "string") {
|
|
69
|
+
values = processAttrValueWithQuote(value, []);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (values.length) {
|
|
73
|
+
fieldQuery = {
|
|
74
|
+
[operator.logicalOperator]: values.map(value => {
|
|
75
|
+
return {
|
|
76
|
+
[fieldId]: {
|
|
77
|
+
[operator.comparisonOperator]: "%".concat(value, "%")
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
})
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
fieldQueryToShow = {
|
|
85
|
+
[operator.logicalOperator]: values.map(value => {
|
|
86
|
+
return {
|
|
87
|
+
[fieldIdToShow]: {
|
|
88
|
+
[operator.comparisonOperator]: "%".concat(value, "%")
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
})
|
|
92
|
+
};
|
|
93
|
+
hasValue = true;
|
|
94
|
+
|
|
95
|
+
_fieldToShow.push({
|
|
96
|
+
[field.id]: field.values
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
if (hasValue) {
|
|
102
|
+
_queries.push(fieldQuery);
|
|
103
|
+
|
|
104
|
+
_queriesToShow.push(fieldQueryToShow);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
if (_queries.length === 0) {
|
|
109
|
+
_queries = undefined;
|
|
110
|
+
_queriesToShow = undefined;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (!isEqual(this.props.q, _queries)) {
|
|
114
|
+
this.props.onSearch(_queries, _queriesToShow, _fieldToShow);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
_defineProperty(this, "handleReset", () => {
|
|
120
|
+
this.props.onSearch([], [], []);
|
|
121
|
+
this.props.form.resetFields();
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
this.state = this.computeState();
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
componentDidUpdate(prevProps) {
|
|
128
|
+
if (!isEqual(this.props.q, prevProps.q)) {
|
|
129
|
+
var newState = this.computeState();
|
|
130
|
+
this.setState(newState);
|
|
131
|
+
this.setFormFieldValues(newState.fields);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
computeState() {
|
|
136
|
+
var fieldQueryOperatorExpressionsMap = {};
|
|
137
|
+
var fields = [];
|
|
138
|
+
|
|
139
|
+
if (this.props.q) {
|
|
140
|
+
this.props.q.forEach(query => {
|
|
141
|
+
Object.entries(query).forEach(_ref => {
|
|
142
|
+
var [key, expressions] = _ref;
|
|
143
|
+
|
|
144
|
+
if (key === LogicalOperators.Or || key === LogicalOperators.And) {
|
|
145
|
+
var firstSubQuery = expressions[0];
|
|
146
|
+
var fieldId = Object.keys(firstSubQuery)[0];
|
|
147
|
+
var compareOperator = Object.keys(firstSubQuery[fieldId])[0];
|
|
148
|
+
var subQueryValue = "";
|
|
149
|
+
var targetField;
|
|
150
|
+
|
|
151
|
+
if (ENABLED_CMDB_ADVANCE_SEARCH_WITH_QUOTE) {
|
|
152
|
+
var _this$props$fieldToSh;
|
|
153
|
+
|
|
154
|
+
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);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (!isNil(targetField)) {
|
|
158
|
+
// 二维数组会有问题,
|
|
159
|
+
subQueryValue = isArray(targetField[fieldId]) ? targetField[fieldId].map(item => isArray(item) ? item.join(" ") : item).join("") : targetField[fieldId];
|
|
160
|
+
} else {
|
|
161
|
+
subQueryValue = expressions.map(query => {
|
|
162
|
+
var targetValue = query[fieldId][compareOperator];
|
|
163
|
+
|
|
164
|
+
if (compareOperator === ComparisonOperators.Like || compareOperator === ComparisonOperators.NotLike) {
|
|
165
|
+
return isString(targetValue) && targetValue.includes(" ") ? "".concat(targetValue[0], "\"").concat(targetValue.slice(1, targetValue.length - 1), "\"").concat(targetValue[targetValue.length - 1]) : targetValue;
|
|
166
|
+
} else {
|
|
167
|
+
return isString(targetValue) && targetValue.includes(" ") ? "\"".concat(targetValue, "\"") : targetValue;
|
|
168
|
+
}
|
|
169
|
+
}).join(" ");
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
key = fieldId;
|
|
173
|
+
expressions = {
|
|
174
|
+
[compareOperator]: subQueryValue
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
fieldQueryOperatorExpressionsMap[key] = expressions;
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if (this.props.fields) {
|
|
184
|
+
fields = this.props.fields.map(v => _objectSpread(_objectSpread({}, v), {}, {
|
|
185
|
+
values: [null]
|
|
186
|
+
}));
|
|
187
|
+
|
|
188
|
+
if (!isEmpty(fieldQueryOperatorExpressionsMap)) {
|
|
189
|
+
fields = this.props.fields.map(v => {
|
|
190
|
+
var str = null;
|
|
191
|
+
|
|
192
|
+
if (fieldQueryOperatorExpressionsMap[v.id]) {
|
|
193
|
+
var expressions = fieldQueryOperatorExpressionsMap[v.id]["$like"];
|
|
194
|
+
str = expressions.replace(/%/g, "");
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return _objectSpread(_objectSpread({}, v), {}, {
|
|
198
|
+
values: [str]
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return {
|
|
205
|
+
fields
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
setFormFieldValues(fields) {
|
|
210
|
+
var values = fields.reduce((acc, field) => {
|
|
211
|
+
acc["".concat(field.id)] = field.values.join("");
|
|
212
|
+
return acc;
|
|
213
|
+
}, {});
|
|
214
|
+
this.props.form.setFieldsValue(values);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
getFields() {
|
|
218
|
+
var {
|
|
219
|
+
getFieldDecorator
|
|
220
|
+
} = this.props.form;
|
|
221
|
+
return this.state.fields.map((field, fieldIndex) => {
|
|
222
|
+
return /*#__PURE__*/React.createElement(Col, {
|
|
223
|
+
span: 12,
|
|
224
|
+
key: field.id
|
|
225
|
+
}, /*#__PURE__*/React.createElement(Form.Item, {
|
|
226
|
+
label: field.name
|
|
227
|
+
}, /*#__PURE__*/React.createElement(Input.Group, {
|
|
228
|
+
className: styles.conditionInputGroup,
|
|
229
|
+
compact: true
|
|
230
|
+
}, /*#__PURE__*/React.createElement(Select, {
|
|
231
|
+
dropdownMatchSelectWidth: false,
|
|
232
|
+
defaultValue: "contain"
|
|
233
|
+
}, /*#__PURE__*/React.createElement(Select.Option, {
|
|
234
|
+
value: "contain",
|
|
235
|
+
key: "contain"
|
|
236
|
+
}, i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.OPERATOR_CONTAIN_DEFINE)))), getFieldDecorator("".concat(field.id), {
|
|
237
|
+
initialValue: field.values || ""
|
|
238
|
+
})( /*#__PURE__*/React.createElement(Input, {
|
|
239
|
+
placeholder: i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.ADVANCE_SEARCH_SINGLE_INPUT_PLACEHOLDER)),
|
|
240
|
+
onChange: e => this.handleValueChange(e, fieldIndex)
|
|
241
|
+
})))));
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
render() {
|
|
246
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
247
|
+
className: styles.dynamicSearch
|
|
248
|
+
}, /*#__PURE__*/React.createElement(Form, {
|
|
249
|
+
layout: "vertical",
|
|
250
|
+
className: styles.dynamicSearchForm,
|
|
251
|
+
onSubmit: this.handleSearch
|
|
252
|
+
}, /*#__PURE__*/React.createElement(Row, {
|
|
253
|
+
gutter: 50
|
|
254
|
+
}, this.getFields()), /*#__PURE__*/React.createElement(Row, null, /*#__PURE__*/React.createElement(Col, {
|
|
255
|
+
span: 24,
|
|
256
|
+
style: {
|
|
257
|
+
textAlign: "right"
|
|
258
|
+
}
|
|
259
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
260
|
+
type: "primary",
|
|
261
|
+
htmlType: "submit",
|
|
262
|
+
"data-testid": "submit-button"
|
|
263
|
+
}, i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.SEARCH))), /*#__PURE__*/React.createElement(Button, {
|
|
264
|
+
style: {
|
|
265
|
+
marginLeft: 8
|
|
266
|
+
},
|
|
267
|
+
onClick: this.handleReset,
|
|
268
|
+
"data-testid": "reset-button"
|
|
269
|
+
}, i18n.t("".concat(NS_LIBS_CMDB_INSTANCES, ":").concat(K.RESET)))))));
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
}
|
|
273
|
+
export var DynamicSearch = Form.create({
|
|
274
|
+
name: "dynamic_search"
|
|
275
|
+
})(DynamicSearchForm);
|
|
276
|
+
//# sourceMappingURL=DynamicSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/instance-list-table/DynamicSearch.tsx"],"names":["React","update","isEqual","isNil","isString","isArray","isEmpty","Form","Button","Col","Input","Row","Select","ComparisonOperators","LogicalOperators","styles","i18n","NS_LIBS_CMDB_INSTANCES","K","processAttrValueWithQuote","ENABLED_CMDB_ADVANCE_SEARCH_WITH_QUOTE","DynamicSearchForm","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","Like","logicalOperator","Or","fieldIdToShow","Array","length","map","push","undefined","q","form","resetFields","computeState","componentDidUpdate","prevProps","newState","setFormFieldValues","fieldQueryOperatorExpressionsMap","query","Object","entries","key","And","firstSubQuery","keys","compareOperator","subQueryValue","targetField","find","fieldItem","item","join","targetValue","NotLike","includes","slice","v","str","replace","reduce","acc","setFieldsValue","getFields","getFieldDecorator","name","conditionInputGroup","t","OPERATOR_CONTAIN_DEFINE","initialValue","ADVANCE_SEARCH_SINGLE_INPUT_PLACEHOLDER","handleValueChange","render","dynamicSearch","dynamicSearchForm","handleSearch","textAlign","SEARCH","marginLeft","handleReset","RESET","DynamicSearch","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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
.dynamicSearch {
|
|
2
|
+
padding: 20px 25px;
|
|
3
|
+
background-color: var(--custom-form-item-wrapper-bg, #f5f5f5);
|
|
4
|
+
border-radius: 6px;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.dynamicSearchForm
|
|
8
|
+
:global(.ant-legacy-form-item-children)
|
|
9
|
+
> .conditionInputGroup {
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.dynamicSearchForm :global(.ant-legacy-form-item) {
|
|
14
|
+
margin-bottom: 14px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.dynamicSearchForm :global(.ant-legacy-form-item-label) {
|
|
18
|
+
line-height: unset;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.dynamicSearchForm :global(.ant-legacy-form-item) label {
|
|
22
|
+
display: inline-block;
|
|
23
|
+
margin-bottom: 4px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.conditionInput {
|
|
27
|
+
flex-grow: 1;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.conditionInputGroup .separatorInput {
|
|
31
|
+
width: 30px;
|
|
32
|
+
pointer-events: none;
|
|
33
|
+
border-left: 0;
|
|
34
|
+
border-right: 0;
|
|
35
|
+
background: var(--input-fill-bg, var(--antd-input-disabled-bg));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.conditionInputGroup :global(.ant-select-selection-selected-value) {
|
|
39
|
+
margin-right: 4px;
|
|
40
|
+
}
|
|
@@ -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", (
|
|
123
|
-
var
|
|
125
|
+
_defineProperty(this, "handelIpCopyText", /*#__PURE__*/function () {
|
|
126
|
+
var _ref = _asyncToGenerator(function* (ev, dataIndex) {
|
|
127
|
+
var _selectedRowKeys;
|
|
124
128
|
|
|
125
|
-
|
|
129
|
+
ev.stopPropagation();
|
|
130
|
+
var selectedRowKeys = _this.props.selectedRowKeys;
|
|
126
131
|
|
|
127
|
-
|
|
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
|
-
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
|
143
|
-
(_SELF_RENDER_COLUMNS$ = SELF_RENDER_COLUMNS[
|
|
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
|
|
335
|
+
var _this2 = this;
|
|
308
336
|
|
|
309
337
|
return _asyncToGenerator(function* () {
|
|
310
|
-
if (
|
|
311
|
-
|
|
312
|
-
parentObjectId:
|
|
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 =
|
|
344
|
+
var columns = _this2.getChangeColumns(_this2.props.fieldIds);
|
|
317
345
|
|
|
318
|
-
|
|
319
|
-
columns:
|
|
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
|
|
626
|
-
var nameKeys = getInstanceNameKeys(this.props.idObjectMap[
|
|
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,
|
|
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:
|
|
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:
|
|
808
|
+
rowKey: this.ROM_KEY,
|
|
781
809
|
scroll: {
|
|
782
810
|
x: "max-content"
|
|
783
811
|
},
|