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.

79 lines 3.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useFleetClustersInternal = useFleetClustersInternal; exports.organizeClustersBySet = organizeClustersBySet; /* Copyright Contributors to the Open Cluster Management project */ const react_1 = require("react"); const dynamic_plugin_sdk_1 = require("@openshift-console/dynamic-plugin-sdk"); const models_1 = require("./models"); const clusterUtils_1 = require("./clusterUtils"); /** * Internal hook that provides common implementation for fleet cluster operations. * This is shared between useFleetClusterNames and useFleetClusterSets. */ function useFleetClustersInternal({ returnAllClusters = false, includeGlobal, clusterSets, }) { // Build selector for optimization when possible const selector = (0, react_1.useMemo)(() => { if (!clusterSets?.length) { return undefined; } // Only optimize if we're not including global if (includeGlobal) { return undefined; } // For single cluster set, use exact match if (clusterSets.length === 1) { return { matchLabels: { 'cluster.open-cluster-management.io/clusterset': clusterSets[0], }, }; } // For multiple cluster sets, use 'in' operator return { matchExpressions: [ { key: 'cluster.open-cluster-management.io/clusterset', operator: 'In', values: clusterSets, }, ], }; }, [clusterSets, includeGlobal]); const [clusters, loaded, error] = (0, dynamic_plugin_sdk_1.useK8sWatchResource)({ groupVersionKind: models_1.ManagedClusterListGroupVersionKind, isList: true, ...(selector && { selector }), }); const filteredClusters = (0, react_1.useMemo)(() => { return (0, clusterUtils_1.filterClusters)(clusters, returnAllClusters); }, [clusters, returnAllClusters]); return [filteredClusters, loaded, error, selector]; } /** * Organizes clusters into cluster set data structure */ function organizeClustersBySet(clusters, options) { const clusterSetData = {}; // Organize clusters by their cluster set labels for (const cluster of clusters) { const clusterName = cluster.metadata.name; const clusterSetLabel = (0, clusterUtils_1.getClusterSetName)(cluster); // Add to global set if requested if (options?.includeGlobal) { if (!clusterSetData.global) { clusterSetData.global = []; } clusterSetData.global.push(clusterName); } // Check if this cluster set should be included if (!options?.clusterSets || options.clusterSets.includes(clusterSetLabel)) { if (!clusterSetData[clusterSetLabel]) { clusterSetData[clusterSetLabel] = []; } clusterSetData[clusterSetLabel].push(clusterName); } } return clusterSetData; } //# sourceMappingURL=useFleetClustersInternal.js.map