From 000f7cd54d90a2196d01e36f23b08173161e2f44 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 17 Jan 2023 10:01:15 +0100 Subject: [PATCH] allow ContextToken as provide and consume alias --- .../consume/context-consumer.controller.ts | 17 +++++++++++------ .../context-api/consume/context-consumer.ts | 15 +++++++++------ .../consume/context-request.event.ts | 19 ++++++++++++------- .../core/controller/controller.interface.ts | 6 ++++-- 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.controller.ts b/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.controller.ts index ecf921af17..5c44c3aff6 100644 --- a/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.controller.ts @@ -1,16 +1,22 @@ +import { ContextToken } from '../context-token'; import { UmbContextConsumer } from './context-consumer'; import { UmbContextCallback } from './context-request.event'; -import type { UmbControllerInterface } from 'src/core/controller/controller.interface'; -import { UmbControllerHostInterface } from 'src/core/controller/controller-host.mixin'; +import { UmbControllerHostInterface, UmbControllerInterface } from '@umbraco-cms/controllers'; -export class UmbContextConsumerController extends UmbContextConsumer implements UmbControllerInterface { - +export class UmbContextConsumerController + extends UmbContextConsumer + implements UmbControllerInterface +{ public get unique() { return this._contextAlias; } - constructor(host:UmbControllerHostInterface, contextAlias: string, callback: UmbContextCallback) { + constructor( + host: UmbControllerHostInterface, + contextAlias: string | ContextToken, + callback: UmbContextCallback + ) { super(host, contextAlias, callback); host.addController(this); } @@ -20,5 +26,4 @@ export class UmbContextConsumerController extends UmbContextConsumer { - +export class UmbContextConsumer { private _instance?: unknown; get instance(): unknown | undefined { return this._instance; @@ -23,13 +23,16 @@ export class UmbContextConsumer { * @param {UmbContextCallback} _callback * @memberof UmbContextConsumer */ - constructor(protected host: HostType, protected _contextAlias: string, private _callback: UmbContextCallback) {} + constructor( + protected host: HostType, + protected _contextAlias: string | ContextToken, + private _callback: UmbContextCallback + ) {} - - private _onResponse = (instance: unknown) => { + private _onResponse = (instance: ContextType) => { this._instance = instance; this._callback(instance); - } + }; /** * @memberof UmbContextConsumer diff --git a/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-request.event.ts b/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-request.event.ts index ad1baad5c2..bc9e86dc62 100644 --- a/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-request.event.ts +++ b/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-request.event.ts @@ -1,14 +1,16 @@ +import { ContextToken } from '../injectionToken'; + export const umbContextRequestEventType = 'umb:context-request'; -export type UmbContextCallback = (instance: any) => void; +export type UmbContextCallback = (instance: T) => void; /** * @export * @interface UmbContextRequestEvent */ -export interface UmbContextRequestEvent extends Event { - readonly contextAlias: string; - readonly callback: UmbContextCallback; +export interface UmbContextRequestEvent extends Event { + readonly contextAlias: string | ContextToken; + readonly callback: UmbContextCallback; } /** @@ -17,12 +19,15 @@ export interface UmbContextRequestEvent extends Event { * @extends {Event} * @implements {UmbContextRequestEvent} */ -export class UmbContextRequestEventImplementation extends Event implements UmbContextRequestEvent { - public constructor(public readonly contextAlias: string, public readonly callback: UmbContextCallback) { +export class UmbContextRequestEventImplementation extends Event implements UmbContextRequestEvent { + public constructor( + public readonly contextAlias: string | ContextToken, + public readonly callback: UmbContextCallback + ) { super(umbContextRequestEventType, { bubbles: true, composed: true, cancelable: true }); } } -export const isUmbContextRequestEvent = (event: Event): event is UmbContextRequestEventImplementation => { +export const isUmbContextRequestEvent = (event: Event): event is UmbContextRequestEventImplementation => { return event.type === umbContextRequestEventType; }; diff --git a/src/Umbraco.Web.UI.Client/src/core/controller/controller.interface.ts b/src/Umbraco.Web.UI.Client/src/core/controller/controller.interface.ts index f8feb3ff9c..7c0f44db11 100644 --- a/src/Umbraco.Web.UI.Client/src/core/controller/controller.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/core/controller/controller.interface.ts @@ -1,5 +1,7 @@ -export interface UmbControllerInterface { - get unique(): string | undefined; +import { ContextToken } from '@umbraco-cms/context-api'; + +export interface UmbControllerInterface { + get unique(): string | ContextToken; hostConnected(): void; hostDisconnected(): void; destroy(): void;