mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix kubeconfig-sync sometimes producing multiple identical entities (#5855)
This commit is contained in:
1 parent
e6396b7314
commit
b9cc0d5687
109 files changed
+1219
-505
No files matched your search
@@ -11,6 +11,7 @@ const setupOnApiErrorListenersInjectable = getInjectable({
|
||||
id: "setup-on-api-error-listeners",
|
||||
|
||||
instantiate: () => ({
|
||||
id: "setup-on-api-error-listeners",
|
||||
run: () => {
|
||||
apiBase?.onError.addListener(onApiError);
|
||||
},
|
||||
|
||||
@@ -17,6 +17,7 @@ const setupAppPathsInjectable = getInjectable({
|
||||
const appPathsState = di.inject(appPathsStateInjectable);
|
||||
|
||||
return {
|
||||
id: "setup-app-paths",
|
||||
run: async () => {
|
||||
const appPaths = await requestFromChannel(
|
||||
appPathsChannel,
|
||||
|
||||
@@ -17,11 +17,12 @@ import { Icon } from "../icon";
|
||||
import { HotbarIcon } from "./hotbar-icon";
|
||||
import { LensKubernetesClusterStatus } from "../../../common/catalog-entities/kubernetes-cluster";
|
||||
import type { VisitEntityContextMenu } from "../../../common/catalog/visit-entity-context-menu.injectable";
|
||||
import { navigate } from "../../navigation";
|
||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||
import catalogCategoryRegistryInjectable from "../../../common/catalog/category-registry.injectable";
|
||||
import visitEntityContextMenuInjectable from "../../../common/catalog/visit-entity-context-menu.injectable";
|
||||
import activeEntityInjectable from "../../api/catalog/entity/active.injectable";
|
||||
import type { Navigate } from "../../navigation/navigate.injectable";
|
||||
import navigateInjectable from "../../navigation/navigate.injectable";
|
||||
|
||||
export interface HotbarEntityIconProps {
|
||||
entity: CatalogEntity;
|
||||
@@ -38,13 +39,14 @@ interface Dependencies {
|
||||
visitEntityContextMenu: VisitEntityContextMenu;
|
||||
catalogCategoryRegistry: CatalogCategoryRegistry;
|
||||
activeEntity: IComputedValue<CatalogEntity | undefined>;
|
||||
navigate: Navigate;
|
||||
}
|
||||
|
||||
@observer
|
||||
class NonInjectedHotbarEntityIcon extends React.Component<HotbarEntityIconProps & Dependencies> {
|
||||
private readonly menuItems = observable.array<CatalogEntityContextMenu>();
|
||||
|
||||
get kindIcon() {
|
||||
private renderKindIcon() {
|
||||
const className = styles.badge;
|
||||
const category = this.props.catalogCategoryRegistry.getCategoryForEntity(this.props.entity);
|
||||
|
||||
@@ -59,7 +61,7 @@ class NonInjectedHotbarEntityIcon extends React.Component<HotbarEntityIconProps
|
||||
return <Icon material={category.metadata.icon} className={className} />;
|
||||
}
|
||||
|
||||
get ledIcon() {
|
||||
private renderLedIcon() {
|
||||
if (this.props.entity.kind !== "KubernetesCluster") {
|
||||
return null;
|
||||
}
|
||||
@@ -86,7 +88,7 @@ class NonInjectedHotbarEntityIcon extends React.Component<HotbarEntityIconProps
|
||||
|
||||
this.props.visitEntityContextMenu(this.props.entity, {
|
||||
menuItems: this.menuItems,
|
||||
navigate,
|
||||
navigate: this.props.navigate,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -113,8 +115,8 @@ class NonInjectedHotbarEntityIcon extends React.Component<HotbarEntityIconProps
|
||||
)}
|
||||
onClick={onClick}
|
||||
>
|
||||
{ this.ledIcon }
|
||||
{ this.kindIcon }
|
||||
{this.renderLedIcon()}
|
||||
{this.renderKindIcon()}
|
||||
</HotbarIcon>
|
||||
);
|
||||
}
|
||||
@@ -126,5 +128,6 @@ export const HotbarEntityIcon = withInjectables<Dependencies, HotbarEntityIconPr
|
||||
catalogCategoryRegistry: di.inject(catalogCategoryRegistryInjectable),
|
||||
visitEntityContextMenu: di.inject(visitEntityContextMenuInjectable),
|
||||
activeEntity: di.inject(activeEntityInjectable),
|
||||
navigate: di.inject(navigateInjectable),
|
||||
}),
|
||||
});
|
||||
@@ -16,6 +16,7 @@ const startTopbarStateSyncInjectable = getInjectable({
|
||||
const ipcRenderer = di.inject(ipcRendererInjectable);
|
||||
|
||||
return {
|
||||
id: "start-topbar-state-sync",
|
||||
run: () => {
|
||||
ipcRenderer.on("history:can-go-back", action((event, canGoBack: boolean) => {
|
||||
state.prevEnabled = canGoBack;
|
||||
|
||||
@@ -54,7 +54,7 @@ import { RootFrame } from "../../frames/root-frame/root-frame";
|
||||
import { ClusterFrame } from "../../frames/cluster-frame/cluster-frame";
|
||||
import hostedClusterIdInjectable from "../../cluster-frame-context/hosted-cluster-id.injectable";
|
||||
import activeKubernetesClusterInjectable from "../../cluster-frame-context/active-kubernetes-cluster.injectable";
|
||||
import { catalogEntityFromCluster } from "../../../main/cluster-manager";
|
||||
import { catalogEntityFromCluster } from "../../../main/cluster/manager";
|
||||
import namespaceStoreInjectable from "../+namespaces/store.injectable";
|
||||
import { isAllowedResource } from "../../../common/cluster/is-allowed-resource";
|
||||
import createApplicationWindowInjectable from "../../../main/start-main-application/lens-window/application-window/create-application-window.injectable";
|
||||
|
||||
@@ -10,6 +10,7 @@ const setupSystemCaInjectable = getInjectable({
|
||||
id: "setup-system-ca",
|
||||
|
||||
instantiate: () => ({
|
||||
id: "setup-system-ca",
|
||||
run: async () => {
|
||||
await injectSystemCAs();
|
||||
},
|
||||
|
||||
@@ -104,9 +104,17 @@ export const getDiForUnitTesting = (
|
||||
|
||||
di.override(getRandomIdInjectable, () => () => "some-irrelevant-random-id");
|
||||
di.override(platformInjectable, () => "darwin");
|
||||
di.override(startTopbarStateSyncInjectable, () => ({
|
||||
run: () => {},
|
||||
}));
|
||||
|
||||
[
|
||||
startTopbarStateSyncInjectable,
|
||||
setupSystemCaInjectable,
|
||||
setupOnApiErrorListenersInjectable,
|
||||
].forEach((injectable) => {
|
||||
di.override(injectable, () => ({
|
||||
id: injectable.id,
|
||||
run: () => {},
|
||||
}));
|
||||
});
|
||||
|
||||
di.override(terminalSpawningPoolInjectable, () => document.createElement("div"));
|
||||
di.override(hostedClusterIdInjectable, () => undefined);
|
||||
@@ -180,9 +188,6 @@ export const getDiForUnitTesting = (
|
||||
|
||||
di.override(fileSystemProvisionerStoreInjectable, () => ({}) as FileSystemProvisionerStore);
|
||||
|
||||
di.override(setupSystemCaInjectable, () => ({ run: () => {} }));
|
||||
di.override(setupOnApiErrorListenersInjectable, () => ({ run: () => {} }));
|
||||
|
||||
di.override(defaultShellInjectable, () => "some-default-shell");
|
||||
|
||||
di.override(userStoreInjectable, () => ({
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import userStoreInjectable from "../../common/user-store/user-store.injectable";
|
||||
import { beforeFrameStartsInjectionToken } from "../before-frame-starts/before-frame-starts-injection-token";
|
||||
import initDefaultUpdateChannelInjectableInjectable from "../vars/default-update-channel/init.injectable";
|
||||
import initDefaultUpdateChannelInjectable from "../vars/default-update-channel/init.injectable";
|
||||
|
||||
const initUserStoreInjectable = getInjectable({
|
||||
id: "init-user-store",
|
||||
@@ -13,8 +13,9 @@ const initUserStoreInjectable = getInjectable({
|
||||
const userStore = di.inject(userStoreInjectable);
|
||||
|
||||
return {
|
||||
id: "init-user-store",
|
||||
run: () => userStore.load(),
|
||||
runAfter: di.inject(initDefaultUpdateChannelInjectableInjectable),
|
||||
runAfter: di.inject(initDefaultUpdateChannelInjectable),
|
||||
};
|
||||
},
|
||||
injectionToken: beforeFrameStartsInjectionToken,
|
||||
|
||||
@@ -13,6 +13,7 @@ const startListeningOfChannelsInjectable = getInjectable({
|
||||
const listeningOfChannels = di.inject(listeningOfChannelsInjectable);
|
||||
|
||||
return {
|
||||
id: "start-listening-of-channels-renderer",
|
||||
run: async () => {
|
||||
await listeningOfChannels.start();
|
||||
},
|
||||
|
||||
@@ -25,6 +25,7 @@ const provideInitialValuesForSyncBoxesInjectable = getInjectable({
|
||||
di.inject(createSyncBoxStateInjectable, syncBox.id).set(state);
|
||||
|
||||
return {
|
||||
id: "provide-initial-values-for-sync-boxes",
|
||||
run: async () => {
|
||||
const initialValues = await requestFromChannel(syncBoxInitialValueChannel);
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ const initializeBuildVersionInjectable = getInjectable({
|
||||
const buildVersion = di.inject(buildVersionInjectable);
|
||||
|
||||
return {
|
||||
id: "initialize-build-version",
|
||||
run: () => buildVersion.init(),
|
||||
};
|
||||
},
|
||||
|
||||
@@ -7,12 +7,13 @@ import defaultUpdateChannelInjectable from "../../../common/application-update/s
|
||||
import { beforeFrameStartsInjectionToken } from "../../before-frame-starts/before-frame-starts-injection-token";
|
||||
import initReleaseChannelInjectable from "../release-channel/init.injectable";
|
||||
|
||||
const initDefaultUpdateChannelInjectableInjectable = getInjectable({
|
||||
id: "init-default-update-channel-injectable",
|
||||
const initDefaultUpdateChannelInjectable = getInjectable({
|
||||
id: "init-default-update-channel",
|
||||
instantiate: (di) => {
|
||||
const defaultUpdateChannel = di.inject(defaultUpdateChannelInjectable);
|
||||
|
||||
return {
|
||||
id: "init-default-update-channel",
|
||||
run: () => defaultUpdateChannel.init(),
|
||||
runAfter: di.inject(initReleaseChannelInjectable),
|
||||
};
|
||||
@@ -20,4 +21,4 @@ const initDefaultUpdateChannelInjectableInjectable = getInjectable({
|
||||
injectionToken: beforeFrameStartsInjectionToken,
|
||||
});
|
||||
|
||||
export default initDefaultUpdateChannelInjectableInjectable;
|
||||
export default initDefaultUpdateChannelInjectable;
|
||||
@@ -13,6 +13,7 @@ const initReleaseChannelInjectable = getInjectable({
|
||||
const releaseChannel = di.inject(releaseChannelInjectable);
|
||||
|
||||
return {
|
||||
id: "init-release-channel",
|
||||
run: () => releaseChannel.init(),
|
||||
runAfter: di.inject(initSemanticBuildVersionInjectable),
|
||||
};
|
||||
|
||||
@@ -13,6 +13,7 @@ const initSemanticBuildVersionInjectable = getInjectable({
|
||||
const buildSemanticVersion = di.inject(buildSemanticVersionInjectable);
|
||||
|
||||
return {
|
||||
id: "init-semantic-build-version",
|
||||
run: () => buildSemanticVersion.init(),
|
||||
runAfter: di.inject(initializeBuildVersionInjectable),
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user