Skip to content

Commit

Permalink
feat(instance-list): 通过useInstanceArchiveProvider参数使得构件列表数据支持使用归档接口
Browse files Browse the repository at this point in the history
ref: INSTANCE-3104
  • Loading branch information
banlijun committed Nov 3, 2022
1 parent d88823b commit 260d3ea
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 2 deletions.
17 changes: 17 additions & 0 deletions libs/cmdb-instances/src/instance-list/InstanceList.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1140,6 +1140,7 @@ describe("InstanceList", () => {
// state not update when testing
expect(wrapper.find(Select).length).toBe(0);
});

it("should work without objectList property", async () => {
(CmdbObjectApi_getObjectRef as jest.Mock).mockResolvedValue({
data: [HOST],
Expand Down Expand Up @@ -1221,6 +1222,22 @@ describe("InstanceList", () => {
},
]);
});
it("should work with useInstanceArchiveProvider", async () => {
const mockSelectionChange = jest.fn();
const wrapper = mount(
<InstanceList
objectId="HOST"
useInstanceArchiveProvider={true}
placeholder={"test"}
q={"test"}
onSelectionChange={mockSelectionChange}
/>
);
await (global as any).flushPromises();
wrapper.update();
expect(InstanceApi_postSearchV3).toBeCalledTimes(23);
expect(providerQuery).toBeCalledTimes(2);
});
});

it("isSpecialFn as pass", () => {
Expand Down
34 changes: 32 additions & 2 deletions libs/cmdb-instances/src/instance-list/InstanceList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,17 @@ import { ModelAttributeValueType } from "../model-attribute-form-control/ModelAt
import { IconButton } from "./IconButton";
import { changeQueryWithCustomRules } from "../processors";
import { DisplaySettingsModalData } from "../instance-list-table/DisplaySettingsModal";

export interface instanceArchiveRequestBody {
// 搜索内容
key_word?: string;
/** 页码 */
page?: number;
/** 页大小 */
page_size?: number;
fields?: string;
}

export interface InstanceListPresetConfigs {
query?: Record<string, any>;
fieldIds?: string[];
Expand Down Expand Up @@ -509,6 +520,8 @@ interface InstanceListProps {
extraFixedFields?: string[];
// 如果在presetConfigs的query参数中指定了资源的范围,“按应用筛选”的功能是否也要限定资源的范围
limitInstanceRange?: boolean;
useInstanceArchiveProvider?: boolean;
placeholder?: string;
}

interface InstanceListState {
Expand Down Expand Up @@ -567,6 +580,9 @@ export function LegacyInstanceList(
// 为了不影响其他地方的实例列表,在该处加一个useAutoDiscoveryProvider参数,该参数为undefined或false的,仍调用原接口

const listProvider = useProvider("easyops.api.cmdb.job@SearchResource:1.0.1");
const instanceArchiveListProvider = useProvider(
"easyops.api.cmdb.instance_archive@ListArchiveInstance:1.0.0"
);
const { modelData, idObjectMap } = useMemo(() => {
let modelData: Partial<CmdbModels.ModelCmdbObject>;
const idObjectMap: Record<string, Partial<CmdbModels.ModelCmdbObject>> = {};
Expand Down Expand Up @@ -726,10 +742,14 @@ export function LegacyInstanceList(
v3Data.permission = data.permission = props.permission;
}

const archiveData: instanceArchiveRequestBody = {};
let query: Record<string, any> = {};

v3Data.page = data.page = page;
v3Data["page_size"] = data["page_size"] = state.pageSize;
v3Data.page = data.page = archiveData.page = page;
v3Data["page_size"] =
data["page_size"] =
archiveData["page_size"] =
state.pageSize;
const sortType = modelData?.attrList?.find((attr) => attr.id === sort)
?.value?.default_type;
const order = ["series-number", "auto-increment-id"].includes(sortType)
Expand All @@ -754,6 +774,9 @@ export function LegacyInstanceList(
);
}

if (state.q && props.useInstanceArchiveProvider) {
archiveData.key_word = state.q;
}
if (!isEmpty(state.aq)) {
query[LogicalOperators.And] = state.aq;
}
Expand Down Expand Up @@ -789,6 +812,9 @@ export function LegacyInstanceList(
props.objectList
);
}
if (props.useInstanceArchiveProvider) {
archiveData.fields = v3Data.fields.join(",");
}
if (state.aliveHosts && props.objectId === "HOST") {
query = { ...query, _agentStatus: "正常" };
}
Expand Down Expand Up @@ -829,6 +855,9 @@ export function LegacyInstanceList(
: {}),
};
}
if (props.useInstanceArchiveProvider) {
return instanceArchiveListProvider.query([props.objectId, archiveData]);
}
const promise = props.onSearchExecute?.(data, v3Data);
// useAutoDiscoveryProvider=true, 使用useProvider的接口
return promise
Expand Down Expand Up @@ -1274,6 +1303,7 @@ export function LegacyInstanceList(
<>
{!props.searchDisabled && (
<Input.Search
placeholder={props.placeholder}
enterButton
value={q}
onChange={onChange}
Expand Down

0 comments on commit 260d3ea

Please sign in to comment.