1
0
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:
Sebastian Malton 2023-03-21 08:35:52 -04:00
parent 5856210aa9
commit c74f88fda6
2 changed files with 35 additions and 76 deletions

View File

@ -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);
};
}

View File

@ -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),