@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
JavaScript
;
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