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 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 { LensWindow } from "../../../main/start-main-application/lens-window/application-window/create-lens-window.injectable";
|
||||||
import type { FakeExtensionOptions } from "./get-extension-fake";
|
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 namespaceApiInjectable from "../../../common/k8s-api/endpoints/namespace.api.injectable";
|
||||||
import { Namespace } from "../../../common/k8s-api/endpoints";
|
import { Namespace } from "../../../common/k8s-api/endpoints";
|
||||||
import { getOverrideFsWithFakes } from "../../../test-utils/override-fs-with-fakes";
|
import { getOverrideFsWithFakes } from "../../../test-utils/override-fs-with-fakes";
|
||||||
@ -594,49 +594,28 @@ export const getApplicationBuilder = () => {
|
|||||||
},
|
},
|
||||||
|
|
||||||
enable: (...extensions) => {
|
enable: (...extensions) => {
|
||||||
builder.afterWindowStart(({ windowDi }) => {
|
builder.afterWindowStart(action(({ windowDi }) => {
|
||||||
const rendererExtensionInstances = extensions.map((options) =>
|
extensions
|
||||||
getExtensionFakeForRenderer(
|
.map(getRendererExtensionFakeWith(windowDi))
|
||||||
windowDi,
|
.forEach(enableExtensionFor(windowDi, rendererExtensionsStateInjectable));
|
||||||
options.id,
|
}));
|
||||||
options.name,
|
|
||||||
options.rendererOptions || {},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
rendererExtensionInstances.forEach(
|
builder.afterApplicationStart(action(({ mainDi }) => {
|
||||||
enableExtensionFor(windowDi, rendererExtensionsStateInjectable),
|
extensions
|
||||||
);
|
.map(getMainExtensionFakeWith(mainDi))
|
||||||
});
|
.forEach(enableExtensionFor(mainDi, mainExtensionsStateInjectable));
|
||||||
|
}));
|
||||||
builder.afterApplicationStart(({ mainDi }) => {
|
|
||||||
const mainExtensionInstances = extensions.map((extension) =>
|
|
||||||
getExtensionFakeForMain(mainDi, extension.id, extension.name, extension.mainOptions || {}),
|
|
||||||
);
|
|
||||||
|
|
||||||
runInAction(() => {
|
|
||||||
mainExtensionInstances.forEach(
|
|
||||||
enableExtensionFor(mainDi, mainExtensionsStateInjectable),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
disable: (...extensions) => {
|
disable: (...extensions) => {
|
||||||
builder.afterWindowStart(({ windowDi }) => {
|
builder.afterWindowStart(({ windowDi }) => {
|
||||||
extensions
|
extensions
|
||||||
.map((ext) => ext.id)
|
.forEach(disableExtensionFor(windowDi, rendererExtensionsStateInjectable));
|
||||||
.forEach(
|
|
||||||
disableExtensionFor(windowDi, rendererExtensionsStateInjectable),
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.afterApplicationStart(({ mainDi }) => {
|
builder.afterApplicationStart(({ mainDi }) => {
|
||||||
extensions
|
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);
|
userEvent.click(option);
|
||||||
};
|
};
|
||||||
|
|
||||||
const enableExtensionFor = (
|
function enableExtensionFor(di: DiContainer, stateInjectable: Injectable<ObservableMap<string, any>, any, any>) {
|
||||||
di: DiContainer,
|
|
||||||
stateInjectable: Injectable<ObservableMap<string, any>, any, any>,
|
|
||||||
) => {
|
|
||||||
const extensionState = di.inject(stateInjectable);
|
const extensionState = di.inject(stateInjectable);
|
||||||
|
|
||||||
const getExtension = (extension: LensExtension) =>
|
return (instance: LensExtension) => {
|
||||||
di.inject(extensionInjectable, extension);
|
const extension = di.inject(extensionInjectable, instance);
|
||||||
|
|
||||||
return (extensionInstance: LensExtension) => {
|
extension.register();
|
||||||
const extension = getExtension(extensionInstance);
|
extensionState.set(instance.id, instance);
|
||||||
|
|
||||||
runInAction(() => {
|
|
||||||
extension.register();
|
|
||||||
extensionState.set(extensionInstance.id, extensionInstance);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
|
|
||||||
const disableExtensionFor =
|
function disableExtensionFor(di: DiContainer, stateInjectable: Injectable<ObservableMap<string, any>, unknown, void>) {
|
||||||
(
|
return (extension: FakeExtensionOptions) => {
|
||||||
di: DiContainer,
|
const extensionsState = di.inject(stateInjectable);
|
||||||
stateInjectable: Injectable<ObservableMap<string, any>, unknown, void>,
|
const instance = extensionsState.get(extension.id);
|
||||||
) =>
|
|
||||||
(id: string) => {
|
|
||||||
const getExtension = (extension: LensExtension) =>
|
|
||||||
di.inject(extensionInjectable, extension);
|
|
||||||
|
|
||||||
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) {
|
injectable.deregister();
|
||||||
throw new Error(
|
extensionsState.delete(extension.id);
|
||||||
`Tried to disable extension with ID "${id}", but it wasn't enabled`,
|
};
|
||||||
);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const injectable = getExtension(instance);
|
|
||||||
|
|
||||||
runInAction(() => {
|
|
||||||
injectable.deregister();
|
|
||||||
|
|
||||||
extensionsState.delete(id);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|||||||
@ -27,7 +27,7 @@ export interface FakeExtensionOptions {
|
|||||||
mainOptions?: Partial<LensMainExtension>;
|
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({
|
const instance = new TestExtensionMain({
|
||||||
id,
|
id,
|
||||||
absolutePath: "irrelevant",
|
absolutePath: "irrelevant",
|
||||||
@ -44,7 +44,7 @@ export const getExtensionFakeForMain = (di: DiContainer, id: string, name: strin
|
|||||||
manifestPath: "irrelevant",
|
manifestPath: "irrelevant",
|
||||||
});
|
});
|
||||||
|
|
||||||
Object.assign(instance, options);
|
Object.assign(instance, mainOptions);
|
||||||
|
|
||||||
(instance as Writable<LensMainExtension>)[lensExtensionDependencies] = {
|
(instance as Writable<LensMainExtension>)[lensExtensionDependencies] = {
|
||||||
fileSystemProvisionerStore: di.inject(fileSystemProvisionerStoreInjectable),
|
fileSystemProvisionerStore: di.inject(fileSystemProvisionerStoreInjectable),
|
||||||
@ -56,7 +56,7 @@ export const getExtensionFakeForMain = (di: DiContainer, id: string, name: strin
|
|||||||
return instance;
|
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({
|
const instance = new TestExtensionRenderer({
|
||||||
id,
|
id,
|
||||||
absolutePath: "irrelevant",
|
absolutePath: "irrelevant",
|
||||||
@ -73,7 +73,7 @@ export const getExtensionFakeForRenderer = (di: DiContainer, id: string, name: s
|
|||||||
manifestPath: "irrelevant",
|
manifestPath: "irrelevant",
|
||||||
});
|
});
|
||||||
|
|
||||||
Object.assign(instance, options);
|
Object.assign(instance, rendererOptions);
|
||||||
|
|
||||||
(instance as Writable<LensRendererExtension>)[lensExtensionDependencies] = {
|
(instance as Writable<LensRendererExtension>)[lensExtensionDependencies] = {
|
||||||
categoryRegistry: di.inject(catalogCategoryRegistryInjectable),
|
categoryRegistry: di.inject(catalogCategoryRegistryInjectable),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user