1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Introduce injection token for channels to allow injecting all of them at once

Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com>

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
Janne Savolainen 2022-05-19 08:01:17 +03:00
parent 09a499ea74
commit 975109b75c
No known key found for this signature in database
GPG Key ID: 8C6CFB2FFFE8F68A
7 changed files with 19 additions and 11 deletions

View File

@ -3,7 +3,13 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectionToken } from "@ogre-tools/injectable";
export interface Channel<TInstance> {
id: string;
_template?: TInstance;
}
export const channelInjectionToken = getInjectionToken<Channel<any>>({
id: "channel",
});

View File

@ -3,14 +3,14 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectionToken } from "@ogre-tools/injectable";
import type { Channel } from "./channel";
import type { Channel } from "./channel-injection-token";
export interface ChannelListener<TChannel extends Channel<unknown>> {
export interface ChannelListener<TChannel extends Channel<any>> {
channel: TChannel;
handler: (value: TChannel["_template"]) => void;
}
export const channelListenerInjectionToken = getInjectionToken<ChannelListener<Channel<unknown>>>(
export const channelListenerInjectionToken = getInjectionToken<ChannelListener<Channel<any>>>(
{
id: "channel-listener",
},

View File

@ -11,7 +11,7 @@ import { sendToAgnosticChannelInjectionToken } from "./send-to-agnostic-channel-
import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
import { channelListenerInjectionToken } from "./channel-listener-injection-token";
import createLensWindowInjectable from "../../main/start-main-application/lens-window/application-window/create-lens-window.injectable";
import type { Channel } from "./channel";
import type { Channel } from "./channel-injection-token";
type TestChannel = Channel<string>;

View File

@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectionToken } from "@ogre-tools/injectable";
import type { Channel } from "./channel";
import type { Channel } from "./channel-injection-token";
export type EnlistChannelListener = <TChannel extends Channel<unknown>>(
channel: TChannel,

View File

@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectionToken } from "@ogre-tools/injectable";
import type { Channel } from "./channel";
import type { Channel } from "./channel-injection-token";
export type SendToAgnosticChannel = <TChannel extends Channel<unknown>>(
channel: TChannel,

View File

@ -3,20 +3,19 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { SyncBoxChannel } from "./sync-box-channel.injectable";
import syncBoxChannelInjectable from "./sync-box-channel.injectable";
import type { ChannelListener } from "../channel/channel-listener-injection-token";
import { channelListenerInjectionToken } from "../channel/channel-listener-injection-token";
import syncBoxStateInjectable from "./sync-box-state.injectable";
const syncBoxChannelListenerInjectable = getInjectable({
id: "sync-box-channel-listener",
instantiate: (di): ChannelListener<SyncBoxChannel> => {
instantiate: (di) => {
const getSyncBoxState = (id: string) => di.inject(syncBoxStateInjectable, id);
const channel = di.inject(syncBoxChannelInjectable);
return {
channel: di.inject(syncBoxChannelInjectable),
channel,
handler: ({ id, value }) => {
const target = getSyncBoxState(id);

View File

@ -3,7 +3,8 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { Channel } from "../channel/channel";
import type { Channel } from "../channel/channel-injection-token";
import { channelInjectionToken } from "../channel/channel-injection-token";
export type SyncBoxChannel = Channel<{ id: string; value: unknown }>;
@ -13,6 +14,8 @@ const syncBoxChannelInjectable = getInjectable({
instantiate: (): SyncBoxChannel => ({
id: "sync-box-channel",
}),
injectionToken: channelInjectionToken,
});
export default syncBoxChannelInjectable;