UNPKG

@stolostron/multicluster-sdk

Version:

Provides extensions and APIs that dynamic plugins can use to leverage multicluster capabilities provided by Red Hat Advanced Cluster Management.

69 lines 3.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useMulticlusterSearchWatch = void 0; const search_sdk_1 = require("./search-sdk"); const react_1 = require("react"); const searchUtils_1 = require("./searchUtils"); const search_client_1 = require("./search-client"); const useMulticlusterSearchWatch = (watchOptions, advancedSearch) => { var _a, _b, _c; const { groupVersionKind, limit, namespace, namespaced, name, isList } = watchOptions; const advancedSearchQueryString = (_b = (_a = Object.entries(advancedSearch || {})) === null || _a === void 0 ? void 0 : _a.map(([key, value]) => `${key}:${value}`)) === null || _b === void 0 ? void 0 : _b.join(' '); const { group, version, kind } = groupVersionKind !== null && groupVersionKind !== void 0 ? groupVersionKind : {}; const { data: result, loading, error, } = (0, search_sdk_1.useSearchResultItemsQuery)({ client: search_client_1.searchClient, skip: kind === undefined, variables: { input: [ (0, searchUtils_1.convertStringToQuery)(`${group ? `apigroup:${group}` : ''} apiversion:${version} kind:${kind}${namespaced && namespace ? ` namespace:${namespace}` : ''}${name ? ` name:*${name}*` : ''} ${advancedSearchQueryString}`, limit !== null && limit !== void 0 ? limit : -1), ], }, }); const data = (0, react_1.useMemo)(() => { var _a, _b, _c; return (_c = (_b = (_a = result === null || result === void 0 ? void 0 : result.searchResult) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.items) === null || _c === void 0 ? void 0 : _c.map((item) => { let label = {}; if (item === null || item === void 0 ? void 0 : item.label) { label = Object.fromEntries(item.label.split(';').map((pair) => pair.trimStart().split('='))); } const resource = { cluster: item.cluster, apiVersion: `${item.apigroup ? `${item.apigroup}/` : ''}${item.apiversion}`, kind: item.kind, metadata: { creationTimestamp: item.created, name: item.name, namespace: item.namespace, labels: label, }, }; // Reverse the flattening of specific resources by the search-collector // See https://github.com/stolostron/search-collector/blob/main/pkg/transforms/genericResourceConfig.go switch (kind) { case 'VirtualMachine': resource.spec = { running: item._specRunning, runStrategy: item._specRunStrategy, template: { spec: { domain: { cpu: { cores: item.cpu }, memory: { guest: item.memory } } } }, }; resource.status = { conditions: [{ type: 'Ready', status: item.ready }], printableStatus: item.status }; break; case 'VirtualMachineInstance': resource.status = { conditions: [ { type: 'LiveMigratable', status: item.liveMigratable }, { type: 'Ready', status: item.ready }, ], interfaces: [{ ipAddress: item.ipaddress, name: 'default' }], nodeName: item.node, phase: item.phase, }; } return resource; }); }, [kind, result]); const nullResponse = (0, react_1.useMemo)(() => (isList ? [] : undefined), [isList]); return [(_c = data) !== null && _c !== void 0 ? _c : nullResponse, !loading, error]; }; exports.useMulticlusterSearchWatch = useMulticlusterSearchWatch; //# sourceMappingURL=useMulticlusterSearchWatch.js.map