mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Cleanup get extension fake to simplify impl
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
5856210aa9
commit
c74f88fda6
@ -53,7 +53,7 @@ import { applicationWindowInjectionToken } from "../../../main/start-main-applic
|
||||
import closeAllWindowsInjectable from "../../../main/start-main-application/lens-window/hide-all-windows/close-all-windows.injectable";
|
||||
import type { LensWindow } from "../../../main/start-main-application/lens-window/application-window/create-lens-window.injectable";
|
||||
import type { FakeExtensionOptions } from "./get-extension-fake";
|
||||
import { getExtensionFakeForMain, getExtensionFakeForRenderer } from "./get-extension-fake";
|
||||
import { getMainExtensionFakeWith, getRendererExtensionFakeWith } from "./get-extension-fake";
|
||||
import namespaceApiInjectable from "../../../common/k8s-api/endpoints/namespace.api.injectable";
|
||||
import { Namespace } from "../../../common/k8s-api/endpoints";
|
||||
import { getOverrideFsWithFakes } from "../../../test-utils/override-fs-with-fakes";
|
||||
@ -594,49 +594,28 @@ export const getApplicationBuilder = () => {
|
||||
},
|
||||
|
||||
enable: (...extensions) => {
|
||||
builder.afterWindowStart(({ windowDi }) => {
|
||||
const rendererExtensionInstances = extensions.map((options) =>
|
||||
getExtensionFakeForRenderer(
|
||||
windowDi,
|
||||
options.id,
|
||||
options.name,
|
||||
options.rendererOptions || {},
|
||||
),
|
||||
);
|
||||
builder.afterWindowStart(action(({ windowDi }) => {
|
||||
extensions
|
||||
.map(getRendererExtensionFakeWith(windowDi))
|
||||
.forEach(enableExtensionFor(windowDi, rendererExtensionsStateInjectable));
|
||||
}));
|
||||
|
||||
rendererExtensionInstances.forEach(
|
||||
enableExtensionFor(windowDi, rendererExtensionsStateInjectable),
|
||||
);
|
||||
});
|
||||
|
||||
builder.afterApplicationStart(({ mainDi }) => {
|
||||
const mainExtensionInstances = extensions.map((extension) =>
|
||||
getExtensionFakeForMain(mainDi, extension.id, extension.name, extension.mainOptions || {}),
|
||||
);
|
||||
|
||||
runInAction(() => {
|
||||
mainExtensionInstances.forEach(
|
||||
enableExtensionFor(mainDi, mainExtensionsStateInjectable),
|
||||
);
|
||||
});
|
||||
});
|
||||
builder.afterApplicationStart(action(({ mainDi }) => {
|
||||
extensions
|
||||
.map(getMainExtensionFakeWith(mainDi))
|
||||
.forEach(enableExtensionFor(mainDi, mainExtensionsStateInjectable));
|
||||
}));
|
||||
},
|
||||
|
||||
disable: (...extensions) => {
|
||||
builder.afterWindowStart(({ windowDi }) => {
|
||||
extensions
|
||||
.map((ext) => ext.id)
|
||||
.forEach(
|
||||
disableExtensionFor(windowDi, rendererExtensionsStateInjectable),
|
||||
);
|
||||
.forEach(disableExtensionFor(windowDi, rendererExtensionsStateInjectable));
|
||||
});
|
||||
|
||||
builder.afterApplicationStart(({ mainDi }) => {
|
||||
extensions
|
||||
.map((ext) => ext.id)
|
||||
.forEach(
|
||||
disableExtensionFor(mainDi, mainExtensionsStateInjectable),
|
||||
);
|
||||
.forEach(disableExtensionFor(mainDi, mainExtensionsStateInjectable));
|
||||
});
|
||||
},
|
||||
},
|
||||
@ -835,49 +814,29 @@ const selectOptionFor = (builder: ApplicationBuilder, menuId: string) => (labelT
|
||||
userEvent.click(option);
|
||||
};
|
||||
|
||||
const enableExtensionFor = (
|
||||
di: DiContainer,
|
||||
stateInjectable: Injectable<ObservableMap<string, any>, any, any>,
|
||||
) => {
|
||||
function enableExtensionFor(di: DiContainer, stateInjectable: Injectable<ObservableMap<string, any>, any, any>) {
|
||||
const extensionState = di.inject(stateInjectable);
|
||||
|
||||
const getExtension = (extension: LensExtension) =>
|
||||
di.inject(extensionInjectable, extension);
|
||||
return (instance: LensExtension) => {
|
||||
const extension = di.inject(extensionInjectable, instance);
|
||||
|
||||
return (extensionInstance: LensExtension) => {
|
||||
const extension = getExtension(extensionInstance);
|
||||
|
||||
runInAction(() => {
|
||||
extension.register();
|
||||
extensionState.set(extensionInstance.id, extensionInstance);
|
||||
});
|
||||
extension.register();
|
||||
extensionState.set(instance.id, instance);
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
const disableExtensionFor =
|
||||
(
|
||||
di: DiContainer,
|
||||
stateInjectable: Injectable<ObservableMap<string, any>, unknown, void>,
|
||||
) =>
|
||||
(id: string) => {
|
||||
const getExtension = (extension: LensExtension) =>
|
||||
di.inject(extensionInjectable, extension);
|
||||
function disableExtensionFor(di: DiContainer, stateInjectable: Injectable<ObservableMap<string, any>, unknown, void>) {
|
||||
return (extension: FakeExtensionOptions) => {
|
||||
const extensionsState = di.inject(stateInjectable);
|
||||
const instance = extensionsState.get(extension.id);
|
||||
|
||||
const extensionsState = di.inject(stateInjectable);
|
||||
if (!instance) {
|
||||
throw new Error(`Tried to disable extension with ID "${extension.id}", but it wasn't enabled`);
|
||||
}
|
||||
|
||||
const instance = extensionsState.get(id);
|
||||
const injectable = di.inject(extensionInjectable, instance);
|
||||
|
||||
if (!instance) {
|
||||
throw new Error(
|
||||
`Tried to disable extension with ID "${id}", but it wasn't enabled`,
|
||||
);
|
||||
}
|
||||
|
||||
const injectable = getExtension(instance);
|
||||
|
||||
runInAction(() => {
|
||||
injectable.deregister();
|
||||
|
||||
extensionsState.delete(id);
|
||||
});
|
||||
};
|
||||
injectable.deregister();
|
||||
extensionsState.delete(extension.id);
|
||||
};
|
||||
}
|
||||
|
||||
@ -27,7 +27,7 @@ export interface FakeExtensionOptions {
|
||||
mainOptions?: Partial<LensMainExtension>;
|
||||
}
|
||||
|
||||
export const getExtensionFakeForMain = (di: DiContainer, id: string, name: string, options: Partial<LensMainExtension>) => {
|
||||
export const getMainExtensionFakeWith = (di: DiContainer) => ({ id, name, mainOptions = {}}: FakeExtensionOptions) => {
|
||||
const instance = new TestExtensionMain({
|
||||
id,
|
||||
absolutePath: "irrelevant",
|
||||
@ -44,7 +44,7 @@ export const getExtensionFakeForMain = (di: DiContainer, id: string, name: strin
|
||||
manifestPath: "irrelevant",
|
||||
});
|
||||
|
||||
Object.assign(instance, options);
|
||||
Object.assign(instance, mainOptions);
|
||||
|
||||
(instance as Writable<LensMainExtension>)[lensExtensionDependencies] = {
|
||||
fileSystemProvisionerStore: di.inject(fileSystemProvisionerStoreInjectable),
|
||||
@ -56,7 +56,7 @@ export const getExtensionFakeForMain = (di: DiContainer, id: string, name: strin
|
||||
return instance;
|
||||
};
|
||||
|
||||
export const getExtensionFakeForRenderer = (di: DiContainer, id: string, name: string, options: Partial<LensRendererExtension>) => {
|
||||
export const getRendererExtensionFakeWith = (di: DiContainer) => ({ id, name, rendererOptions = {}}: FakeExtensionOptions) => {
|
||||
const instance = new TestExtensionRenderer({
|
||||
id,
|
||||
absolutePath: "irrelevant",
|
||||
@ -73,7 +73,7 @@ export const getExtensionFakeForRenderer = (di: DiContainer, id: string, name: s
|
||||
manifestPath: "irrelevant",
|
||||
});
|
||||
|
||||
Object.assign(instance, options);
|
||||
Object.assign(instance, rendererOptions);
|
||||
|
||||
(instance as Writable<LensRendererExtension>)[lensExtensionDependencies] = {
|
||||
categoryRegistry: di.inject(catalogCategoryRegistryInjectable),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user