@stolostron/multicluster-sdk
Version:
Provides extensions and APIs that dynamic plugins can use to leverage multicluster capabilities provided by Red Hat Advanced Cluster Management.
67 lines • 3.51 kB
JavaScript
;
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) => {
const { groupVersionKind, limit, namespace, namespaced } = watchOptions;
const searchClient = (0, search_client_1.useSearchClient)();
const { group, version, kind } = groupVersionKind !== null && groupVersionKind !== void 0 ? groupVersionKind : {};
const { data: result, loading, error, } = (0, search_sdk_1.useSearchResultItemsQuery)({
skip: !searchClient,
client: searchClient,
variables: {
input: [
(0, searchUtils_1.convertStringToQuery)(`${group ? `apigroup:${group}` : ''} apiversion:${version} kind:${kind}${namespaced && namespace ? ` namespace:${namespace}` : ''}`, 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]);
return [data, !loading, error];
};
exports.useMulticlusterSearchWatch = useMulticlusterSearchWatch;
//# sourceMappingURL=useMulticlusterSearchWatch.js.map