@stolostron/multicluster-sdk
Version:
Provides extensions and APIs that dynamic plugins can use to leverage multicluster capabilities provided by Red Hat Advanced Cluster Management.
48 lines • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useHubConfigurationItem = void 0;
/* Copyright Contributors to the Open Cluster Management project */
const react_1 = require("react");
const constants_1 = require("./constants");
const cachedHubConfiguration_1 = require("./cachedHubConfiguration");
const useIsFleetAvailable_1 = require("../api/useIsFleetAvailable");
const useHubConfigurationItem = (key) => {
const fleetAvailable = (0, useIsFleetAvailable_1.useIsFleetAvailable)();
const cachedResult = (0, cachedHubConfiguration_1.getCachedHubConfiguration)()?.[key];
const [item, setItem] = (0, react_1.useState)(fleetAvailable ? cachedResult : undefined);
const [loaded, setLoaded] = (0, react_1.useState)(fleetAvailable ? cachedResult !== undefined : false);
const [error, setError] = (0, react_1.useState)(fleetAvailable ? undefined : constants_1.NO_FLEET_AVAILABLE_ERROR);
const setResult = (0, react_1.useCallback)((item) => {
setItem(item);
setLoaded(true);
setError(undefined);
}, []);
(0, react_1.useEffect)(() => {
if (!fleetAvailable) {
setItem(undefined);
setLoaded(false);
setError(constants_1.NO_FLEET_AVAILABLE_ERROR);
}
else {
const cachedHubConfiguration = (0, cachedHubConfiguration_1.getCachedHubConfiguration)();
if (cachedHubConfiguration) {
setResult(cachedHubConfiguration[key]);
}
else {
(0, cachedHubConfiguration_1.fetchHubConfiguration)()
.then((hc) => {
if (hc) {
setResult(hc[key]);
}
})
.catch((err) => {
setLoaded(false);
setError(err);
});
}
}
}, [fleetAvailable, key, setResult]);
return (0, react_1.useMemo)(() => [item, loaded, error], [item, loaded, error]);
};
exports.useHubConfigurationItem = useHubConfigurationItem;
//# sourceMappingURL=useHubConfigurationItem.js.map