@next-libs/cmdb-instances 7.24.6 → 7.24.7

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.
@@ -5,7 +5,7 @@ import { modifyModelData } from "@next-libs/cmdb-utils";
5
5
  import { InstanceListTable } from "../../../instance-list-table";
6
6
  import { NS_LIBS_CMDB_INSTANCES, K } from "../../../i18n/constants";
7
7
  import i18n from "i18next";
8
- import { get, sortBy, keyBy } from "lodash";
8
+ import { get, sortBy, keyBy, head, isArray, filter } from "lodash";
9
9
  import styles from "../../../instance-list-table/InstanceListTable.module.css";
10
10
  import { fetchCmdbObjectRef } from "../../../data-providers";
11
11
  import { handleHttpError } from "@next-core/brick-kit";
@@ -24,6 +24,19 @@ export function getRelationShowFields(defaultRelationFields, oppositeAttrList) {
24
24
  }
25
25
  return showFields;
26
26
  }
27
+ function getHiddenColumns(data, oppositeModelData, relationData, relationGangedConfig) {
28
+ var oppositeAttrList = oppositeModelData.attrList.map(attr => attr.id);
29
+ if (relationGangedConfig && (relationData === null || relationData === void 0 ? void 0 : relationData.left_max) === 1 && (relationGangedConfig === null || relationGangedConfig === void 0 ? void 0 : relationGangedConfig.rightObjectId) === (relationData === null || relationData === void 0 ? void 0 : relationData.right_object_id) && (relationGangedConfig === null || relationGangedConfig === void 0 ? void 0 : relationGangedConfig.objectId) === (relationData === null || relationData === void 0 ? void 0 : relationData.left_object_id)) {
30
+ var _head;
31
+ var attrData = (_head = head(data)) === null || _head === void 0 ? void 0 : _head[relationGangedConfig === null || relationGangedConfig === void 0 ? void 0 : relationGangedConfig.rightControlAttrId];
32
+ var attrType = get(filter(oppositeModelData.attrList, o => o.id === (relationGangedConfig === null || relationGangedConfig === void 0 ? void 0 : relationGangedConfig.rightControlAttrId)), "[0].value.type");
33
+ if (attrData && attrType === "arr" && isArray(attrData)) {
34
+ var nonIncludedControlFields = filter((relationGangedConfig === null || relationGangedConfig === void 0 ? void 0 : relationGangedConfig.control) || [], attr => !attrData.includes(attr));
35
+ return oppositeAttrList.filter(item => nonIncludedControlFields.includes(item));
36
+ }
37
+ }
38
+ return [];
39
+ }
27
40
  //istanbul ignore next
28
41
  export function InstanceRelationTableShow(props) {
29
42
  var _oppositeModelData$vi, _oppositeModelData$vi2;
@@ -35,7 +48,8 @@ export function InstanceRelationTableShow(props) {
35
48
  paginationChange,
36
49
  total,
37
50
  relationTablePagination,
38
- externalSourceId
51
+ externalSourceId,
52
+ relationGangedConfig
39
53
  } = props;
40
54
  var [oppositeModelDataMap, setOppositeModelDataMap] = useState({});
41
55
  /**
@@ -69,6 +83,7 @@ export function InstanceRelationTableShow(props) {
69
83
  attrList: oppositeModelData.attrList.filter(item => !hideModelData.includes(item.id)),
70
84
  relation_list: oppositeModelData.relation_list.filter(item => !(hideModelData.includes(item.left_id) && item.left_object_id === props.relationData.right_object_id || hideModelData.includes(item.right_id) && item.right_object_id === props.relationData.right_object_id))
71
85
  });
86
+ var hiddenColumns = getHiddenColumns(value, oppositeModelData, relationData, relationGangedConfig);
72
87
  return /*#__PURE__*/React.createElement("div", {
73
88
  style: {
74
89
  display: "grid"
@@ -108,7 +123,8 @@ export function InstanceRelationTableShow(props) {
108
123
  },
109
124
  target: "_blank",
110
125
  externalSourceId: externalSourceId,
111
- useExternalCmdbApi: externalSourceId ? true : false
126
+ useExternalCmdbApi: externalSourceId ? true : false,
127
+ hiddenColumns: hiddenColumns
112
128
  }));
113
129
  }
114
130
  //# sourceMappingURL=instance-relation-table-show.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"instance-relation-table-show.js","names":["React","useEffect","useState","modifyModelData","InstanceListTable","NS_LIBS_CMDB_INSTANCES","K","i18n","get","sortBy","keyBy","styles","fetchCmdbObjectRef","handleHttpError","reOrderAttrs","fields","fieldOrder","arguments","length","undefined","field","index","indexOf","getRelationShowFields","defaultRelationFields","oppositeAttrList","attr_order","showFields","map","item","startsWith","slice","InstanceRelationTableShow","props","_oppositeModelData$vi","_oppositeModelData$vi2","modelDataMap","relationData","value","relationFieldUrlTemplate","paginationChange","total","relationTablePagination","externalSourceId","oppositeModelDataMap","setOppositeModelDataMap","fetchOppositeModelData","_ref","_asyncToGenerator","modelListData","right_object_id","data","apply","catch","error","instanceSourceQuery","setInstanceSourceQuery","modelData","left_object_id","oppositeModelData","__id","fieldIds","attrList","attr","id","hideModelData","view","hide_columns","_objectSpread","filter","includes","relation_list","left_id","right_id","createElement","style","display","detailUrlTemplates","hideRelationLink","idObjectMap","instanceListData","list","onInstanceSourceChange","instanceQuery","filterInstanceSourceDisabled","autoBreakLine","selectDisabled","sortDisabled","configProps","pagination","isPagination","showSizeChanger","pageSizeOptions","onChange","page","pageSize","showTotal","totals","className","totalText","t","concat","PAGINATION_TOTAL_TEXT","PAGINATION_TOTAL_UNIT","target","useExternalCmdbApi"],"sources":["../../../../../src/instance-detail/components/instance-relation-table-show/instance-relation-table-show.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { Table } from \"antd\";\nimport {\n ModifiedModelObjectRelation,\n modifyModelData,\n} from \"@next-libs/cmdb-utils\";\nimport { CmdbModels } from \"@next-sdk/cmdb-sdk\";\nimport { InstanceListTable } from \"../../../instance-list-table\";\nimport { NS_LIBS_CMDB_INSTANCES, K } from \"../../../i18n/constants\";\nimport i18n from \"i18next\";\nimport { get, sortBy, keyBy } from \"lodash\";\nimport styles from \"../../../instance-list-table/InstanceListTable.module.css\";\nimport { fetchCmdbObjectRef } from \"../../../data-providers\";\nimport { handleHttpError } from \"@next-core/brick-kit\";\nexport interface InstanceRelationTableShowProps {\n modelDataMap: { [objectId: string]: CmdbModels.ModelCmdbObject };\n relationData: ModifiedModelObjectRelation;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any[];\n relationFieldUrlTemplate?: string;\n isPagination?: boolean;\n total?: number;\n relationTablePagination?: {\n current?: number;\n pageSize?: number;\n };\n paginationChange?: (\n page: number,\n pageSize: number,\n relationData: ModifiedModelObjectRelation\n ) => Promise<void> | void;\n hideRelationLink?: boolean;\n onInstanceSourceChange?: (instanceSource: string) => void;\n filterInstanceSourceDisabled?: boolean;\n externalSourceId?: string;\n}\nexport function reOrderAttrs(fields: string[], fieldOrder: string[] = []) {\n return sortBy(fields, (field) => {\n const index = fieldOrder.indexOf(field);\n return index === -1 ? fields.length : index;\n });\n}\nexport function getRelationShowFields(\n defaultRelationFields: string[],\n oppositeAttrList: string[],\n attr_order: string[] = []\n) {\n let showFields = oppositeAttrList;\n if (defaultRelationFields?.length) {\n showFields = reOrderAttrs(\n defaultRelationFields.map((item: string) =>\n item.startsWith(\"#\") ? item.slice(1) : item\n ),\n attr_order\n );\n }\n return showFields;\n}\n//istanbul ignore next\nexport function InstanceRelationTableShow(\n props: InstanceRelationTableShowProps\n): React.ReactElement {\n const {\n modelDataMap,\n relationData,\n value,\n relationFieldUrlTemplate,\n paginationChange,\n total,\n relationTablePagination,\n externalSourceId,\n } = props;\n const [oppositeModelDataMap, setOppositeModelDataMap] = useState({});\n /**\n * 实例详情中展示对端实例的关系时,需要重新拉取对端关系所关联的模型。\n * 如在主机详情中展示负责人所在的角色,需要拿到与USER相关的模型ROLE@ONEMODEL\n * 而原来的modelDataMap是与HOST相关的,可能不包括ROLE@ONEMODEL,就造成取不到角色的showKey\n */\n useEffect(() => {\n const fetchOppositeModelData = async () => {\n const modelListData = await fetchCmdbObjectRef(\n relationData.right_object_id,\n externalSourceId\n );\n setOppositeModelDataMap(keyBy(modelListData.data, \"objectId\"));\n };\n fetchOppositeModelData().catch((error) => {\n handleHttpError(error);\n });\n }, [relationData, externalSourceId]);\n const [instanceSourceQuery, setInstanceSourceQuery] = useState(null);\n const modelData = modelDataMap[relationData.left_object_id];\n let oppositeModelData = modifyModelData(\n modelDataMap[relationData.right_object_id]\n );\n // 如果指定了relation_default_attr,则取里面的字段\n const defaultRelationFields = get(modelData, [\n \"view\",\n \"relation_default_attr\",\n relationData.__id,\n ]);\n\n const fieldIds = getRelationShowFields(\n defaultRelationFields,\n oppositeModelData.attrList.map((attr) => attr.id),\n get(oppositeModelData, [\"view\", \"attr_order\"])\n );\n //过滤掉视图不可见字段\n const hideModelData = oppositeModelData.view?.hide_columns ?? [];\n oppositeModelData = {\n ...oppositeModelData,\n attrList: oppositeModelData.attrList.filter(\n (item: any) => !hideModelData.includes(item.id)\n ),\n relation_list: oppositeModelData.relation_list.filter(\n (item: any) =>\n !(\n (hideModelData.includes(item.left_id) &&\n item.left_object_id === props.relationData.right_object_id) ||\n (hideModelData.includes(item.right_id) &&\n item.right_object_id === props.relationData.right_object_id)\n )\n ),\n };\n\n return (\n <div style={{ display: \"grid\" }}>\n <InstanceListTable\n detailUrlTemplates={\n props.hideRelationLink\n ? null\n : {\n [relationData.right_object_id]:\n \"/next-cmdb-instance-management/next/#{objectId}/instance/#{instanceId}\",\n }\n }\n idObjectMap={oppositeModelDataMap}\n modelData={oppositeModelData}\n instanceListData={{\n list: value,\n }}\n onInstanceSourceChange={(instanceQuery: any) => {\n props.onInstanceSourceChange(instanceQuery);\n }}\n filterInstanceSourceDisabled={props.filterInstanceSourceDisabled}\n autoBreakLine={true}\n fieldIds={fieldIds}\n selectDisabled={true}\n sortDisabled={true}\n configProps={{\n pagination: props.isPagination\n ? {\n showSizeChanger: true,\n total: total,\n pageSizeOptions: [\"10\", \"20\", \"50\"],\n ...relationTablePagination,\n onChange: (page: number, pageSize: number) => {\n paginationChange(page, pageSize, relationData);\n },\n showTotal: (totals: number) => (\n <span className={styles.totalText}>\n {i18n.t(\n `${NS_LIBS_CMDB_INSTANCES}:${K.PAGINATION_TOTAL_TEXT}`\n )}{\" \"}\n <strong className={styles.total}>{totals}</strong>{\" \"}\n {i18n.t(\n `${NS_LIBS_CMDB_INSTANCES}:${K.PAGINATION_TOTAL_UNIT}`\n )}\n </span>\n ),\n }\n : false,\n }}\n target={\"_blank\"}\n externalSourceId={externalSourceId}\n useExternalCmdbApi={externalSourceId ? true : false}\n ></InstanceListTable>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"instance-relation-table-show.js","names":["React","useEffect","useState","modifyModelData","InstanceListTable","NS_LIBS_CMDB_INSTANCES","K","i18n","get","sortBy","keyBy","head","isArray","filter","styles","fetchCmdbObjectRef","handleHttpError","reOrderAttrs","fields","fieldOrder","arguments","length","undefined","field","index","indexOf","getRelationShowFields","defaultRelationFields","oppositeAttrList","attr_order","showFields","map","item","startsWith","slice","getHiddenColumns","data","oppositeModelData","relationData","relationGangedConfig","attrList","attr","id","left_max","rightObjectId","right_object_id","objectId","left_object_id","_head","attrData","rightControlAttrId","attrType","o","nonIncludedControlFields","control","includes","InstanceRelationTableShow","props","_oppositeModelData$vi","_oppositeModelData$vi2","modelDataMap","value","relationFieldUrlTemplate","paginationChange","total","relationTablePagination","externalSourceId","oppositeModelDataMap","setOppositeModelDataMap","fetchOppositeModelData","_ref","_asyncToGenerator","modelListData","apply","catch","error","instanceSourceQuery","setInstanceSourceQuery","modelData","__id","fieldIds","hideModelData","view","hide_columns","_objectSpread","relation_list","left_id","right_id","hiddenColumns","createElement","style","display","detailUrlTemplates","hideRelationLink","idObjectMap","instanceListData","list","onInstanceSourceChange","instanceQuery","filterInstanceSourceDisabled","autoBreakLine","selectDisabled","sortDisabled","configProps","pagination","isPagination","showSizeChanger","pageSizeOptions","onChange","page","pageSize","showTotal","totals","className","totalText","t","concat","PAGINATION_TOTAL_TEXT","PAGINATION_TOTAL_UNIT","target","useExternalCmdbApi"],"sources":["../../../../../src/instance-detail/components/instance-relation-table-show/instance-relation-table-show.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { Table } from \"antd\";\nimport {\n ModifiedModelObjectRelation,\n modifyModelData,\n} from \"@next-libs/cmdb-utils\";\nimport { CmdbModels } from \"@next-sdk/cmdb-sdk\";\nimport { InstanceListTable } from \"../../../instance-list-table\";\nimport { NS_LIBS_CMDB_INSTANCES, K } from \"../../../i18n/constants\";\nimport i18n from \"i18next\";\nimport { get, sortBy, keyBy, head, isArray, filter } from \"lodash\";\nimport styles from \"../../../instance-list-table/InstanceListTable.module.css\";\nimport { fetchCmdbObjectRef } from \"../../../data-providers\";\nimport { handleHttpError } from \"@next-core/brick-kit\";\nexport interface InstanceRelationTableShowProps {\n modelDataMap: { [objectId: string]: CmdbModels.ModelCmdbObject };\n relationData: ModifiedModelObjectRelation;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any[];\n relationFieldUrlTemplate?: string;\n isPagination?: boolean;\n total?: number;\n relationTablePagination?: {\n current?: number;\n pageSize?: number;\n };\n paginationChange?: (\n page: number,\n pageSize: number,\n relationData: ModifiedModelObjectRelation\n ) => Promise<void> | void;\n hideRelationLink?: boolean;\n onInstanceSourceChange?: (instanceSource: string) => void;\n filterInstanceSourceDisabled?: boolean;\n externalSourceId?: string;\n relationGangedConfig?: Record<string, any>;\n}\nexport function reOrderAttrs(fields: string[], fieldOrder: string[] = []) {\n return sortBy(fields, (field) => {\n const index = fieldOrder.indexOf(field);\n return index === -1 ? fields.length : index;\n });\n}\nexport function getRelationShowFields(\n defaultRelationFields: string[],\n oppositeAttrList: string[],\n attr_order: string[] = []\n) {\n let showFields = oppositeAttrList;\n if (defaultRelationFields?.length) {\n showFields = reOrderAttrs(\n defaultRelationFields.map((item: string) =>\n item.startsWith(\"#\") ? item.slice(1) : item\n ),\n attr_order\n );\n }\n return showFields;\n}\n\nfunction getHiddenColumns(\n data: any[],\n oppositeModelData: any,\n relationData: ModifiedModelObjectRelation,\n relationGangedConfig?: Record<string, any>\n): string[] {\n const oppositeAttrList = oppositeModelData.attrList.map(\n (attr: any) => attr.id\n );\n if (\n relationGangedConfig &&\n relationData?.left_max === 1 &&\n relationGangedConfig?.rightObjectId === relationData?.right_object_id &&\n relationGangedConfig?.objectId === relationData?.left_object_id\n ) {\n const attrData = head(data)?.[relationGangedConfig?.rightControlAttrId];\n const attrType = get(\n filter(\n oppositeModelData.attrList,\n (o: any) => o.id === relationGangedConfig?.rightControlAttrId\n ),\n \"[0].value.type\"\n );\n if (attrData && attrType === \"arr\" && isArray(attrData)) {\n const nonIncludedControlFields = filter(\n relationGangedConfig?.control || [],\n (attr: any) => !attrData.includes(attr)\n );\n return oppositeAttrList.filter((item: any) =>\n nonIncludedControlFields.includes(item)\n );\n }\n }\n\n return [];\n}\n//istanbul ignore next\nexport function InstanceRelationTableShow(\n props: InstanceRelationTableShowProps\n): React.ReactElement {\n const {\n modelDataMap,\n relationData,\n value,\n relationFieldUrlTemplate,\n paginationChange,\n total,\n relationTablePagination,\n externalSourceId,\n relationGangedConfig,\n } = props;\n const [oppositeModelDataMap, setOppositeModelDataMap] = useState({});\n /**\n * 实例详情中展示对端实例的关系时,需要重新拉取对端关系所关联的模型。\n * 如在主机详情中展示负责人所在的角色,需要拿到与USER相关的模型ROLE@ONEMODEL\n * 而原来的modelDataMap是与HOST相关的,可能不包括ROLE@ONEMODEL,就造成取不到角色的showKey\n */\n useEffect(() => {\n const fetchOppositeModelData = async () => {\n const modelListData = await fetchCmdbObjectRef(\n relationData.right_object_id,\n externalSourceId\n );\n setOppositeModelDataMap(keyBy(modelListData.data, \"objectId\"));\n };\n fetchOppositeModelData().catch((error) => {\n handleHttpError(error);\n });\n }, [relationData, externalSourceId]);\n const [instanceSourceQuery, setInstanceSourceQuery] = useState(null);\n const modelData = modelDataMap[relationData.left_object_id];\n let oppositeModelData = modifyModelData(\n modelDataMap[relationData.right_object_id]\n );\n // 如果指定了relation_default_attr,则取里面的字段\n const defaultRelationFields = get(modelData, [\n \"view\",\n \"relation_default_attr\",\n relationData.__id,\n ]);\n\n const fieldIds = getRelationShowFields(\n defaultRelationFields,\n oppositeModelData.attrList.map((attr) => attr.id),\n get(oppositeModelData, [\"view\", \"attr_order\"])\n );\n //过滤掉视图不可见字段\n const hideModelData = oppositeModelData.view?.hide_columns ?? [];\n oppositeModelData = {\n ...oppositeModelData,\n attrList: oppositeModelData.attrList.filter(\n (item: any) => !hideModelData.includes(item.id)\n ),\n relation_list: oppositeModelData.relation_list.filter(\n (item: any) =>\n !(\n (hideModelData.includes(item.left_id) &&\n item.left_object_id === props.relationData.right_object_id) ||\n (hideModelData.includes(item.right_id) &&\n item.right_object_id === props.relationData.right_object_id)\n )\n ),\n };\n const hiddenColumns = getHiddenColumns(\n value,\n oppositeModelData,\n relationData,\n relationGangedConfig\n );\n\n return (\n <div style={{ display: \"grid\" }}>\n <InstanceListTable\n detailUrlTemplates={\n props.hideRelationLink\n ? null\n : {\n [relationData.right_object_id]:\n \"/next-cmdb-instance-management/next/#{objectId}/instance/#{instanceId}\",\n }\n }\n idObjectMap={oppositeModelDataMap}\n modelData={oppositeModelData}\n instanceListData={{\n list: value,\n }}\n onInstanceSourceChange={(instanceQuery: any) => {\n props.onInstanceSourceChange(instanceQuery);\n }}\n filterInstanceSourceDisabled={props.filterInstanceSourceDisabled}\n autoBreakLine={true}\n fieldIds={fieldIds}\n selectDisabled={true}\n sortDisabled={true}\n configProps={{\n pagination: props.isPagination\n ? {\n showSizeChanger: true,\n total: total,\n pageSizeOptions: [\"10\", \"20\", \"50\"],\n ...relationTablePagination,\n onChange: (page: number, pageSize: number) => {\n paginationChange(page, pageSize, relationData);\n },\n showTotal: (totals: number) => (\n <span className={styles.totalText}>\n {i18n.t(\n `${NS_LIBS_CMDB_INSTANCES}:${K.PAGINATION_TOTAL_TEXT}`\n )}{\" \"}\n <strong className={styles.total}>{totals}</strong>{\" \"}\n {i18n.t(\n `${NS_LIBS_CMDB_INSTANCES}:${K.PAGINATION_TOTAL_UNIT}`\n )}\n </span>\n ),\n }\n : false,\n }}\n target={\"_blank\"}\n externalSourceId={externalSourceId}\n useExternalCmdbApi={externalSourceId ? true : false}\n hiddenColumns={hiddenColumns}\n ></InstanceListTable>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -38,6 +38,7 @@ interface LegacyInstanceDetailProps extends WithTranslation {
38
38
  ignorePermission?: boolean;
39
39
  useHttpErrorString?: boolean;
40
40
  externalSourceId?: string;
41
+ attrGangedConfig?: Record<string, any>[];
41
42
  }
42
43
  interface LegacyInstanceDetailState {
43
44
  modelDataMap: {
@@ -19,6 +19,7 @@ export interface InstanceRelationTableShowProps {
19
19
  onInstanceSourceChange?: (instanceSource: string) => void;
20
20
  filterInstanceSourceDisabled?: boolean;
21
21
  externalSourceId?: string;
22
+ relationGangedConfig?: Record<string, any>;
22
23
  }
23
24
  export declare function reOrderAttrs(fields: string[], fieldOrder?: string[]): string[];
24
25
  export declare function getRelationShowFields(defaultRelationFields: string[], oppositeAttrList: string[], attr_order?: string[]): string[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-libs/cmdb-instances",
3
- "version": "7.24.6",
3
+ "version": "7.24.7",
4
4
  "description": "> TODO: description",
5
5
  "homepage": "https://github.com/easyops-cn/next-libs/tree/master/libs/cmdb-instances",
6
6
  "license": "GPL-3.0",
@@ -52,5 +52,5 @@
52
52
  "js-base64": "^3.7.7",
53
53
  "marked": "^2.1.3"
54
54
  },
55
- "gitHead": "c48174fc3d42120e4f104b1057ee342eadadefa4"
55
+ "gitHead": "a0d89359a078b81e7b1ccb2b14c1c5f7b7060f38"
56
56
  }