From c6d1e77237592d89b0f911806b389abd5578e7c6 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Tue, 13 Sep 2022 09:33:43 -0400 Subject: [PATCH] Complete local transition to InitializableState Signed-off-by: Sebastian Malton --- .../default-update-channel.injectable.ts | 6 +-- .../selected-update-channel.injectable.ts | 6 +-- src/common/initializable-state/create.ts | 15 +++++-- .../vars/build-semantic-version.injectable.ts | 14 ++++-- src/extensions/common-api/index.ts | 2 +- src/extensions/common-api/utils.ts | 45 +++++++++++-------- .../analytics-for-installing-update.test.ts | 6 ++- .../downgrading-version-update.test.ts | 6 ++- .../selection-of-update-stability.test.ts | 18 +++++--- ...current-version-to-analytics.injectable.ts | 4 +- .../build-version/setup-channel.injectable.ts | 6 ++- ...ron-app.global-override-for-injectable.ts} | 6 ++- src/main/menu/show-about.injectable.ts | 6 +-- .../versions/get-version-route.injectable.ts | 22 +++++---- .../runnables/setup-lens-proxy.injectable.ts | 4 +- src/main/vars/build-version.injectable.ts | 15 ------- .../build-version/build-version.injectable.ts | 15 +++++++ .../vars/build-version/init.injectable.ts | 21 +++++++++ .../default-update-channel/init.injectable.ts | 23 ++++++++++ .../semantic-build-version/init.injectable.ts | 23 ++++++++++ src/renderer/utils/prevDefault.ts | 2 +- .../build-version/build-version.injectable.ts | 14 +++--- .../vars/build-version/init.injectable.ts | 12 ++--- .../vars/build-version/state.injectable.ts | 19 -------- .../default-update-channel/init.injectable.ts | 23 ++++++++++ .../semantic-build-version/init.injectable.ts | 23 ++++++++++ 26 files changed, 246 insertions(+), 110 deletions(-) rename src/main/{vars/build-version.global-override-for-injectable.ts => electron-app/electron-app.global-override-for-injectable.ts} (56%) delete mode 100644 src/main/vars/build-version.injectable.ts create mode 100644 src/main/vars/build-version/build-version.injectable.ts create mode 100644 src/main/vars/build-version/init.injectable.ts create mode 100644 src/main/vars/default-update-channel/init.injectable.ts create mode 100644 src/main/vars/semantic-build-version/init.injectable.ts delete mode 100644 src/renderer/vars/build-version/state.injectable.ts create mode 100644 src/renderer/vars/default-update-channel/init.injectable.ts create mode 100644 src/renderer/vars/semantic-build-version/init.injectable.ts diff --git a/src/common/application-update/selected-update-channel/default-update-channel.injectable.ts b/src/common/application-update/selected-update-channel/default-update-channel.injectable.ts index 44d7ff364e..ff4fe32e4e 100644 --- a/src/common/application-update/selected-update-channel/default-update-channel.injectable.ts +++ b/src/common/application-update/selected-update-channel/default-update-channel.injectable.ts @@ -2,13 +2,13 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getInjectable } from "@ogre-tools/injectable"; +import { createInitializableState } from "../../initializable-state/create"; import releaseChannelInjectable from "../../vars/release-channel.injectable"; import { updateChannels } from "../update-channels"; -const defaultUpdateChannelInjectable = getInjectable({ +const defaultUpdateChannelInjectable = createInitializableState({ id: "default-update-channel", - instantiate: (di) => updateChannels[di.inject(releaseChannelInjectable)], + init: (di) => updateChannels[di.inject(releaseChannelInjectable)], }); export default defaultUpdateChannelInjectable; diff --git a/src/common/application-update/selected-update-channel/selected-update-channel.injectable.ts b/src/common/application-update/selected-update-channel/selected-update-channel.injectable.ts index ceb47aee5e..ce07152b27 100644 --- a/src/common/application-update/selected-update-channel/selected-update-channel.injectable.ts +++ b/src/common/application-update/selected-update-channel/selected-update-channel.injectable.ts @@ -19,16 +19,16 @@ const selectedUpdateChannelInjectable = getInjectable({ instantiate: (di): SelectedUpdateChannel => { const defaultUpdateChannel = di.inject(defaultUpdateChannelInjectable); - const state = observable.box(defaultUpdateChannel); + const state = observable.box(); return { - value: computed(() => state.get()), + value: computed(() => state.get() ?? defaultUpdateChannel.get()), setValue: action((channelId) => { const targetUpdateChannel = channelId && updateChannels[channelId] ? updateChannels[channelId] - : defaultUpdateChannel; + : defaultUpdateChannel.get(); state.set(targetUpdateChannel); }), diff --git a/src/common/initializable-state/create.ts b/src/common/initializable-state/create.ts index a119384805..aee78f7b46 100644 --- a/src/common/initializable-state/create.ts +++ b/src/common/initializable-state/create.ts @@ -3,18 +3,24 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { DiContainerForInjection } from "@ogre-tools/injectable"; +import type { DiContainerForInjection, Injectable, InjectionToken } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable"; export interface CreateInitializableStateArgs { id: string; - init: (di: DiContainerForInjection) => Promise; + init: (di: DiContainerForInjection) => Promise | T; + injectionToken?: InjectionToken, void>; +} + +export interface InitializableState { + get: () => T; + init: () => Promise; } type InitializableStateValue = { set: false } | { set: true; value: T }; -export function createInitializableState(args: CreateInitializableStateArgs) { - const { id, init } = args; +export function createInitializableState(args: CreateInitializableStateArgs): Injectable, unknown, void> { + const { id, init, injectionToken } = args; return getInjectable({ id, @@ -49,5 +55,6 @@ export function createInitializableState(args: CreateInitializableStateArgs({ +export const buildVersionInjectionToken = getInjectionToken>({ id: "build-version-token", }); @@ -15,9 +17,13 @@ export const buildVersionChannel: RequestChannel = { id: "build-version", }; -const buildSemanticVersionInjectable = getInjectable({ +const buildSemanticVersionInjectable = createInitializableState({ id: "build-semantic-version", - instantiate: (di) => new SemVer(di.inject(buildVersionInjectionToken)), + init: (di) => { + const buildVersion = di.inject(buildVersionInjectionToken); + + return new SemVer(buildVersion.get()); + }, }); export default buildSemanticVersionInjectable; diff --git a/src/extensions/common-api/index.ts b/src/extensions/common-api/index.ts index e505b9bfbb..6e4b39b1b7 100644 --- a/src/extensions/common-api/index.ts +++ b/src/extensions/common-api/index.ts @@ -7,7 +7,7 @@ import { App } from "./app"; import * as EventBus from "./event-bus"; import * as Store from "./stores"; -import * as Util from "./utils"; +import { Util } from "./utils"; import * as Catalog from "./catalog"; import * as Types from "./types"; import * as Proxy from "./proxy"; diff --git a/src/extensions/common-api/utils.ts b/src/extensions/common-api/utils.ts index adc61a6eaa..12c9daf988 100644 --- a/src/extensions/common-api/utils.ts +++ b/src/extensions/common-api/utils.ts @@ -4,25 +4,34 @@ */ import openLinkInBrowserInjectable from "../../common/utils/open-link-in-browser.injectable"; -import buildVersionInjectable from "../../main/vars/build-version.injectable"; +import buildVersionInjectable from "../../main/vars/build-version/build-version.injectable"; import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api"; import { getLegacyGlobalDiForExtensionApi } from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; +import { Singleton } from "../../common/utils"; +import { prevDefault, stopPropagation } from "../../renderer/utils/prevDefault"; +import type { IClassName } from "../../renderer/utils/cssNames"; +import { cssNames } from "../../renderer/utils/cssNames"; -export { Singleton } from "../../common/utils"; -export { prevDefault, stopPropagation } from "../../renderer/utils/prevDefault"; -export { cssNames } from "../../renderer/utils/cssNames"; - -/** - * @deprecated Use {@link openBrowser} instead - */ -export const openExternal = asLegacyGlobalFunctionForExtensionApi(openLinkInBrowserInjectable); -export const openBrowser = asLegacyGlobalFunctionForExtensionApi(openLinkInBrowserInjectable); - -/** - * @deprecated use `Common.App.version` instead - */ -export function getAppVersion() { - const di = getLegacyGlobalDiForExtensionApi(); - - return di.inject(buildVersionInjectable); +export interface UtilsExtensionItems { + Singleton: Singleton; + prevDefault: (callback: (evt: E) => R) => (evt: E) => R; + stopPropagation: (evt: Event | React.SyntheticEvent) => void; + cssNames: (...classNames: IClassName[]) => string; + openExternal: (url: string) => Promise; + openBrowser: (url: string) => Promise; + getAppVersion: () => string; } + +export const Util: UtilsExtensionItems = { + Singleton, + prevDefault, + stopPropagation, + cssNames, + openExternal: asLegacyGlobalFunctionForExtensionApi(openLinkInBrowserInjectable), + openBrowser: asLegacyGlobalFunctionForExtensionApi(openLinkInBrowserInjectable), + getAppVersion: () => { + const di = getLegacyGlobalDiForExtensionApi(); + + return di.inject(buildVersionInjectable).get(); + }, +}; diff --git a/src/features/application-update/analytics-for-installing-update.test.ts b/src/features/application-update/analytics-for-installing-update.test.ts index 764db58415..9a4f993796 100644 --- a/src/features/application-update/analytics-for-installing-update.test.ts +++ b/src/features/application-update/analytics-for-installing-update.test.ts @@ -19,7 +19,7 @@ import quitAndInstallUpdateInjectable from "../../main/application-update/quit-a import periodicalCheckForUpdatesInjectable from "../../main/application-update/periodical-check-for-updates/periodical-check-for-updates.injectable"; import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time"; import emitEventInjectable from "../../common/app-event-bus/emit-event.injectable"; -import buildVersionInjectable from "../../main/vars/build-version.injectable"; +import buildVersionInjectable from "../../main/vars/build-version/build-version.injectable"; describe("analytics for installing update", () => { let builder: ApplicationBuilder; @@ -36,7 +36,9 @@ describe("analytics for installing update", () => { analyticsListenerMock = jest.fn(); builder.beforeApplicationStart(mainDi => { - mainDi.override(buildVersionInjectable, () => "42.0.0"); + mainDi.override(buildVersionInjectable, () => ({ + get: () => "42.0.0", + })); checkForPlatformUpdatesMock = asyncFn(); diff --git a/src/features/application-update/downgrading-version-update.test.ts b/src/features/application-update/downgrading-version-update.test.ts index e4dec522ea..dc3cb6be1f 100644 --- a/src/features/application-update/downgrading-version-update.test.ts +++ b/src/features/application-update/downgrading-version-update.test.ts @@ -14,7 +14,7 @@ import processCheckingForUpdatesInjectable from "../../main/application-update/c import selectedUpdateChannelInjectable from "../../common/application-update/selected-update-channel/selected-update-channel.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; import { updateChannels } from "../../common/application-update/update-channels"; -import buildVersionInjectable from "../../main/vars/build-version.injectable"; +import buildVersionInjectable from "../../main/vars/build-version/build-version.injectable"; describe("downgrading version update", () => { let applicationBuilder: ApplicationBuilder; @@ -102,7 +102,9 @@ describe("downgrading version update", () => { }, ].forEach(({ appVersion, updateChannel, downgradeIsAllowed }) => { it(`given application version "${appVersion}" and update channel "${updateChannel.id}", when checking for updates, can${downgradeIsAllowed ? "": "not"} downgrade`, async () => { - mainDi.override(buildVersionInjectable, () => appVersion); + mainDi.override(buildVersionInjectable, () => ({ + get: () => appVersion, + })); await applicationBuilder.render(); diff --git a/src/features/application-update/selection-of-update-stability.test.ts b/src/features/application-update/selection-of-update-stability.test.ts index 513a3a8139..e7c4a8bf1a 100644 --- a/src/features/application-update/selection-of-update-stability.test.ts +++ b/src/features/application-update/selection-of-update-stability.test.ts @@ -22,7 +22,7 @@ import setUpdateOnQuitInjectable from "../../main/electron-app/features/set-upda import showInfoNotificationInjectable from "../../renderer/components/notifications/show-info-notification.injectable"; import processCheckingForUpdatesInjectable from "../../main/application-update/check-for-updates/process-checking-for-updates.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; -import buildVersionInjectable from "../../main/vars/build-version.injectable"; +import buildVersionInjectable from "../../main/vars/build-version/build-version.injectable"; describe("selection of update stability", () => { let builder: ApplicationBuilder; @@ -268,7 +268,9 @@ describe("selection of update stability", () => { it('given no update channel selection is stored and currently using stable release, when user checks for updates, checks for updates from "latest" update channel by default', async () => { builder.beforeApplicationStart((mainDi) => { - mainDi.override(buildVersionInjectable, () => "1.0.0"); + mainDi.override(buildVersionInjectable, () => ({ + get: () => "1.0.0", + })); }); await builder.render(); @@ -285,7 +287,9 @@ describe("selection of update stability", () => { it('given no update channel selection is stored and currently using alpha release, when checking for updates, checks for updates from "alpha" channel', async () => { builder.beforeApplicationStart((mainDi) => { - mainDi.override(buildVersionInjectable, () => "1.0.0-alpha"); + mainDi.override(buildVersionInjectable, () => ({ + get: () => "1.0.0-alpha", + })); }); await builder.render(); @@ -299,7 +303,9 @@ describe("selection of update stability", () => { it('given no update channel selection is stored and currently using beta release, when checking for updates, checks for updates from "beta" channel', async () => { builder.beforeApplicationStart((mainDi) => { - mainDi.override(buildVersionInjectable, () => "1.0.0-beta"); + mainDi.override(buildVersionInjectable, () => ({ + get: () => "1.0.0-beta", + })); }); await builder.render(); @@ -313,7 +319,9 @@ describe("selection of update stability", () => { it("given update channel selection is stored and currently using prerelease, when checking for updates, checks for updates from stored channel", async () => { builder.beforeApplicationStart((mainDi) => { - mainDi.override(buildVersionInjectable, () => "1.0.0-alpha"); + mainDi.override(buildVersionInjectable, () => ({ + get: () => "1.0.0-alpha", + })); // TODO: Switch to more natural way of setting initial value // TODO: UserStore is currently responsible for getting and setting initial value diff --git a/src/main/application-update/emit-current-version-to-analytics.injectable.ts b/src/main/application-update/emit-current-version-to-analytics.injectable.ts index b4be58c2dc..61dd38ea87 100644 --- a/src/main/application-update/emit-current-version-to-analytics.injectable.ts +++ b/src/main/application-update/emit-current-version-to-analytics.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { afterApplicationIsLoadedInjectionToken } from "../start-main-application/runnable-tokens/after-application-is-loaded-injection-token"; import emitEventInjectable from "../../common/app-event-bus/emit-event.injectable"; import { getCurrentDateTime } from "../../common/utils/date/get-current-date-time"; -import buildVersionInjectable from "../vars/build-version.injectable"; +import buildVersionInjectable from "../vars/build-version/build-version.injectable"; const emitCurrentVersionToAnalyticsInjectable = getInjectable({ id: "emit-current-version-to-analytics", @@ -22,7 +22,7 @@ const emitCurrentVersionToAnalyticsInjectable = getInjectable({ action: "current-version", params: { - version: buildVersion, + version: buildVersion.get(), currentDateTime: getCurrentDateTime(), }, }); diff --git a/src/main/build-version/setup-channel.injectable.ts b/src/main/build-version/setup-channel.injectable.ts index 9047ca0029..a34edc0eac 100644 --- a/src/main/build-version/setup-channel.injectable.ts +++ b/src/main/build-version/setup-channel.injectable.ts @@ -5,14 +5,16 @@ import { getInjectable } from "@ogre-tools/injectable"; import { requestChannelListenerInjectionToken } from "../../common/utils/channel/request-channel-listener-injection-token"; import { buildVersionChannel } from "../../common/vars/build-semantic-version.injectable"; -import buildVersionInjectable from "../vars/build-version.injectable"; +import buildVersionInjectable from "../vars/build-version/build-version.injectable"; const setupBuildVersionRequestChannelInjectable = getInjectable({ id: "setup-build-version-request-channel", instantiate: (di) => { + const buildVersion = di.inject(buildVersionInjectable); + return { channel: buildVersionChannel, - handler: () => di.inject(buildVersionInjectable), + handler: () => buildVersion.get(), }; }, injectionToken: requestChannelListenerInjectionToken, diff --git a/src/main/vars/build-version.global-override-for-injectable.ts b/src/main/electron-app/electron-app.global-override-for-injectable.ts similarity index 56% rename from src/main/vars/build-version.global-override-for-injectable.ts rename to src/main/electron-app/electron-app.global-override-for-injectable.ts index 9c2331f72d..eeaa1765b7 100644 --- a/src/main/vars/build-version.global-override-for-injectable.ts +++ b/src/main/electron-app/electron-app.global-override-for-injectable.ts @@ -4,6 +4,8 @@ */ import { getGlobalOverride } from "../../common/test-utils/get-global-override"; -import buildVersionInjectable from "./build-version.injectable"; +import electronAppInjectable from "./electron-app.injectable"; -export default getGlobalOverride(buildVersionInjectable, () => "6.0.0"); +export default getGlobalOverride(electronAppInjectable, () => ({ + getVersion: () => "6.0.0", +} as Electron.App)); diff --git a/src/main/menu/show-about.injectable.ts b/src/main/menu/show-about.injectable.ts index 70e061cd5c..e19c2b0bfa 100644 --- a/src/main/menu/show-about.injectable.ts +++ b/src/main/menu/show-about.injectable.ts @@ -7,7 +7,7 @@ import showMessagePopupInjectable from "../electron-app/features/show-message-po import isWindowsInjectable from "../../common/vars/is-windows.injectable"; import appNameInjectable from "../../common/vars/app-name.injectable"; import productNameInjectable from "../../common/vars/product-name.injectable"; -import buildVersionInjectable from "../vars/build-version.injectable"; +import buildVersionInjectable from "../vars/build-version/build-version.injectable"; import extensionApiVersionInjectable from "../../common/vars/extension-api-version.injectable"; import applicationCopyrightInjectable from "../../common/vars/application-copyright.injectable"; @@ -15,7 +15,7 @@ const showAboutInjectable = getInjectable({ id: "show-about", instantiate: (di) => { - const appVersion = di.inject(buildVersionInjectable); + const buildVersion = di.inject(buildVersionInjectable); const extensionApiVersion = di.inject(extensionApiVersionInjectable); const showMessagePopup = di.inject(showMessagePopupInjectable); const isWindows = di.inject(isWindowsInjectable); @@ -25,7 +25,7 @@ const showAboutInjectable = getInjectable({ return () => { const appInfo = [ - `${appName}: ${appVersion}`, + `${appName}: ${buildVersion.get()}`, `Extension API: ${extensionApiVersion}`, `Electron: ${process.versions.electron}`, `Chrome: ${process.versions.chrome}`, diff --git a/src/main/routes/versions/get-version-route.injectable.ts b/src/main/routes/versions/get-version-route.injectable.ts index f6ee678dee..d132e242d6 100644 --- a/src/main/routes/versions/get-version-route.injectable.ts +++ b/src/main/routes/versions/get-version-route.injectable.ts @@ -4,19 +4,23 @@ */ import { getRouteInjectable } from "../../router/router.injectable"; import { route } from "../../router/route"; -import buildVersionInjectable from "../../vars/build-version.injectable"; +import buildVersionInjectable from "../../vars/build-version/build-version.injectable"; const getVersionRouteInjectable = getRouteInjectable({ id: "get-version-route", - instantiate: (di) => route({ - method: "get", - path: `/version`, - })(() => ({ - response: { - version: di.inject(buildVersionInjectable), - }, - })), + instantiate: (di) => { + const buildVersion = di.inject(buildVersionInjectable); + + return route({ + method: "get", + path: `/version`, + })(() => ({ + response: { + version: buildVersion.get(), + }, + })); + }, }); export default getVersionRouteInjectable; diff --git a/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts b/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts index b2c0aa2701..a75f55ec72 100644 --- a/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts +++ b/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts @@ -11,7 +11,7 @@ import lensProxyPortInjectable from "../../lens-proxy/lens-proxy-port.injectable import isWindowsInjectable from "../../../common/vars/is-windows.injectable"; import showErrorPopupInjectable from "../../electron-app/features/show-error-popup.injectable"; import { beforeApplicationIsLoadingInjectionToken } from "../runnable-tokens/before-application-is-loading-injection-token"; -import buildVersionInjectable from "../../vars/build-version.injectable"; +import buildVersionInjectable from "../../vars/build-version/build-version.injectable"; const setupLensProxyInjectable = getInjectable({ id: "setup-lens-proxy", @@ -43,7 +43,7 @@ const setupLensProxyInjectable = getInjectable({ lensProxyPort.get(), ); - if (buildVersion !== versionFromProxy) { + if (buildVersion.get() !== versionFromProxy) { logger.error("Proxy server responded with invalid response"); return exitApp(); diff --git a/src/main/vars/build-version.injectable.ts b/src/main/vars/build-version.injectable.ts deleted file mode 100644 index 6dc2668c08..0000000000 --- a/src/main/vars/build-version.injectable.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectable } from "@ogre-tools/injectable"; -import { buildVersionInjectionToken } from "../../common/vars/build-semantic-version.injectable"; -import electronAppInjectable from "../electron-app/electron-app.injectable"; - -const buildVersionInjectable = getInjectable({ - id: "build-version", - instantiate: (di) => di.inject(electronAppInjectable).getVersion(), - injectionToken: buildVersionInjectionToken, -}); - -export default buildVersionInjectable; diff --git a/src/main/vars/build-version/build-version.injectable.ts b/src/main/vars/build-version/build-version.injectable.ts new file mode 100644 index 0000000000..edee04cd10 --- /dev/null +++ b/src/main/vars/build-version/build-version.injectable.ts @@ -0,0 +1,15 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { createInitializableState } from "../../../common/initializable-state/create"; +import { buildVersionInjectionToken } from "../../../common/vars/build-semantic-version.injectable"; +import electronAppInjectable from "../../electron-app/electron-app.injectable"; + +const buildVersionInjectable = createInitializableState({ + id: "build-version", + init: (di) => di.inject(electronAppInjectable).getVersion(), + injectionToken: buildVersionInjectionToken, +}); + +export default buildVersionInjectable; diff --git a/src/main/vars/build-version/init.injectable.ts b/src/main/vars/build-version/init.injectable.ts new file mode 100644 index 0000000000..0d879715a4 --- /dev/null +++ b/src/main/vars/build-version/init.injectable.ts @@ -0,0 +1,21 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { beforeApplicationIsLoadingInjectionToken } from "../../start-main-application/runnable-tokens/before-application-is-loading-injection-token"; +import buildVersionInjectable from "./build-version.injectable"; + +const initializeBuildVersionAsyncSyncBoxInjectable = getInjectable({ + id: "initialize-build-version-async-sync-box", + instantiate: (di) => { + const buildVersion = di.inject(buildVersionInjectable); + + return { + run: () => buildVersion.init(), + }; + }, + injectionToken: beforeApplicationIsLoadingInjectionToken, +}); + +export default initializeBuildVersionAsyncSyncBoxInjectable; diff --git a/src/main/vars/default-update-channel/init.injectable.ts b/src/main/vars/default-update-channel/init.injectable.ts new file mode 100644 index 0000000000..e63b12bac1 --- /dev/null +++ b/src/main/vars/default-update-channel/init.injectable.ts @@ -0,0 +1,23 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import defaultUpdateChannelInjectable from "../../../common/application-update/selected-update-channel/default-update-channel.injectable"; +import initSemanticBuildVersionInjectable from "../../../renderer/vars/semantic-build-version/init.injectable"; +import { beforeApplicationIsLoadingInjectionToken } from "../../start-main-application/runnable-tokens/before-application-is-loading-injection-token"; + +const initDefaultUpdateChannelInjectableInjectable = getInjectable({ + id: "init-default-update-channel-injectable", + instantiate: (di) => { + const defaultUpdateChannel = di.inject(defaultUpdateChannelInjectable); + + return { + run: () => defaultUpdateChannel.init(), + runAfter: di.inject(initSemanticBuildVersionInjectable), + }; + }, + injectionToken: beforeApplicationIsLoadingInjectionToken, +}); + +export default initDefaultUpdateChannelInjectableInjectable; diff --git a/src/main/vars/semantic-build-version/init.injectable.ts b/src/main/vars/semantic-build-version/init.injectable.ts new file mode 100644 index 0000000000..8b33e27576 --- /dev/null +++ b/src/main/vars/semantic-build-version/init.injectable.ts @@ -0,0 +1,23 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import buildSemanticVersionInjectable from "../../../common/vars/build-semantic-version.injectable"; +import { beforeApplicationIsLoadingInjectionToken } from "../../start-main-application/runnable-tokens/before-application-is-loading-injection-token"; +import initializeBuildVersionInjectable from "../build-version/init.injectable"; + +const initSemanticBuildVersionInjectable = getInjectable({ + id: "init-semantic-build-version", + instantiate: (di) => { + const buildSemanticVersion = di.inject(buildSemanticVersionInjectable); + + return { + run: () => buildSemanticVersion.init(), + runAfter: di.inject(initializeBuildVersionInjectable), + }; + }, + injectionToken: beforeApplicationIsLoadingInjectionToken, +}); + +export default initSemanticBuildVersionInjectable; diff --git a/src/renderer/utils/prevDefault.ts b/src/renderer/utils/prevDefault.ts index 3706c04721..73bb834021 100644 --- a/src/renderer/utils/prevDefault.ts +++ b/src/renderer/utils/prevDefault.ts @@ -17,7 +17,7 @@ import type React from "react"; // console.log('stay on the page and open dialog'))}/> // -export function prevDefault(callback: (evt: E) => any) { +export function prevDefault(callback: (evt: E) => R): (event: E) => R { return function (evt: E) { evt.preventDefault(); evt.stopPropagation(); diff --git a/src/renderer/vars/build-version/build-version.injectable.ts b/src/renderer/vars/build-version/build-version.injectable.ts index be1b4f36f4..a63a4102b0 100644 --- a/src/renderer/vars/build-version/build-version.injectable.ts +++ b/src/renderer/vars/build-version/build-version.injectable.ts @@ -2,16 +2,16 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getInjectable } from "@ogre-tools/injectable"; -import { buildVersionInjectionToken } from "../../../common/vars/build-semantic-version.injectable"; -import buildVersionAsyncSyncBoxInjectable from "./state.injectable"; +import { createInitializableState } from "../../../common/initializable-state/create"; +import { requestFromChannelInjectionToken } from "../../../common/utils/channel/request-from-channel-injection-token"; +import { buildVersionChannel, buildVersionInjectionToken } from "../../../common/vars/build-semantic-version.injectable"; -const buildVersionInjectable = getInjectable({ +const buildVersionInjectable = createInitializableState({ id: "build-version", - instantiate: (di) => { - const buildVersionAsyncSyncBox = di.inject(buildVersionAsyncSyncBoxInjectable); + init: (di) => { + const requestFromChannel = di.inject(requestFromChannelInjectionToken); - return buildVersionAsyncSyncBox.get(); + return requestFromChannel(buildVersionChannel); }, injectionToken: buildVersionInjectionToken, }); diff --git a/src/renderer/vars/build-version/init.injectable.ts b/src/renderer/vars/build-version/init.injectable.ts index 29eff4a2ed..0dc867f0ca 100644 --- a/src/renderer/vars/build-version/init.injectable.ts +++ b/src/renderer/vars/build-version/init.injectable.ts @@ -4,18 +4,18 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { beforeFrameStartsInjectionToken } from "../../before-frame-starts/before-frame-starts-injection-token"; -import buildVersionAsyncSyncBoxInjectable from "./state.injectable"; +import buildVersionInjectable from "./build-version.injectable"; -const initializeBuildVersionAsyncSyncBoxInjectable = getInjectable({ - id: "initialize-build-version-async-sync-box", +const initializeBuildVersionInjectable = getInjectable({ + id: "initialize-build-version", instantiate: (di) => { - const buildVersionAsyncSyncBox = di.inject(buildVersionAsyncSyncBoxInjectable); + const buildVersion = di.inject(buildVersionInjectable); return { - run: () => buildVersionAsyncSyncBox.init(), + run: () => buildVersion.init(), }; }, injectionToken: beforeFrameStartsInjectionToken, }); -export default initializeBuildVersionAsyncSyncBoxInjectable; +export default initializeBuildVersionInjectable; diff --git a/src/renderer/vars/build-version/state.injectable.ts b/src/renderer/vars/build-version/state.injectable.ts deleted file mode 100644 index bc55a11d7e..0000000000 --- a/src/renderer/vars/build-version/state.injectable.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { createInitializableState } from "../../../common/initializable-state/create"; -import { requestFromChannelInjectionToken } from "../../../common/utils/channel/request-from-channel-injection-token"; -import { buildVersionChannel } from "../../../common/vars/build-semantic-version.injectable"; - -const buildVersionAsyncSyncBoxInjectable = createInitializableState({ - id: "build-version", - init: (di) => { - const requestFromChannel = di.inject(requestFromChannelInjectionToken); - - return requestFromChannel(buildVersionChannel); - }, -}); - -export default buildVersionAsyncSyncBoxInjectable; diff --git a/src/renderer/vars/default-update-channel/init.injectable.ts b/src/renderer/vars/default-update-channel/init.injectable.ts new file mode 100644 index 0000000000..fb737c766b --- /dev/null +++ b/src/renderer/vars/default-update-channel/init.injectable.ts @@ -0,0 +1,23 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import defaultUpdateChannelInjectable from "../../../common/application-update/selected-update-channel/default-update-channel.injectable"; +import initSemanticBuildVersionInjectable from "../../../renderer/vars/semantic-build-version/init.injectable"; +import { beforeFrameStartsInjectionToken } from "../../before-frame-starts/before-frame-starts-injection-token"; + +const initDefaultUpdateChannelInjectableInjectable = getInjectable({ + id: "init-default-update-channel-injectable", + instantiate: (di) => { + const defaultUpdateChannel = di.inject(defaultUpdateChannelInjectable); + + return { + run: () => defaultUpdateChannel.init(), + runAfter: di.inject(initSemanticBuildVersionInjectable), + }; + }, + injectionToken: beforeFrameStartsInjectionToken, +}); + +export default initDefaultUpdateChannelInjectableInjectable; diff --git a/src/renderer/vars/semantic-build-version/init.injectable.ts b/src/renderer/vars/semantic-build-version/init.injectable.ts new file mode 100644 index 0000000000..572ccc63ac --- /dev/null +++ b/src/renderer/vars/semantic-build-version/init.injectable.ts @@ -0,0 +1,23 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import buildSemanticVersionInjectable from "../../../common/vars/build-semantic-version.injectable"; +import { beforeFrameStartsInjectionToken } from "../../before-frame-starts/before-frame-starts-injection-token"; +import initializeBuildVersionInjectable from "../build-version/init.injectable"; + +const initSemanticBuildVersionInjectable = getInjectable({ + id: "init-semantic-build-version", + instantiate: (di) => { + const buildSemanticVersion = di.inject(buildSemanticVersionInjectable); + + return { + run: () => buildSemanticVersion.init(), + runAfter: di.inject(initializeBuildVersionInjectable), + }; + }, + injectionToken: beforeFrameStartsInjectionToken, +}); + +export default initSemanticBuildVersionInjectable;