From e10c443aaa58d95d3e50a5a7bb62d89632e52582 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 17 Jan 2023 13:38:15 +0100 Subject: [PATCH] add + fix tests --- .../consume/context-consumer.test.ts | 20 ++++++++++++++++++- .../context-api/consume/context-consumer.ts | 8 ++++---- .../consume/context-request.event.ts | 14 ++++++------- .../provide/context-provider.test.ts | 14 +++++++++++++ 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.test.ts b/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.test.ts index 07d32cf870..bb44fdcf89 100644 --- a/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.test.ts +++ b/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.test.ts @@ -1,4 +1,5 @@ import { expect, oneEvent } from '@open-wc/testing'; +import { ContextAlias } from '../context-token'; import { UmbContextProvider } from '../provide/context-provider'; import { UmbContextConsumer } from './context-consumer'; import { UmbContextRequestEventImplementation, umbContextRequestEventType } from './context-request.event'; @@ -45,7 +46,24 @@ describe('UmbContextConsumer', () => { const element = document.createElement('div'); document.body.appendChild(element); - const localConsumer = new UmbContextConsumer(element, testContextAlias, (_instance) => { + const localConsumer = new UmbContextConsumer(element, testContextAlias, (_instance: MyClass) => { + expect(_instance.prop).to.eq('value from provider'); + done(); + }); + localConsumer.hostConnected(); + + provider.hostDisconnected(); + }); + + it('works with ContextAlias', (done) => { + const CONTEXT_ALIAS = new ContextAlias(testContextAlias); + const provider = new UmbContextProvider(document.body, CONTEXT_ALIAS, new MyClass()); + provider.hostConnected(); + + const element = document.createElement('div'); + document.body.appendChild(element); + + const localConsumer = new UmbContextConsumer(element, CONTEXT_ALIAS, (_instance) => { expect(_instance.prop).to.eq('value from provider'); done(); }); diff --git a/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.ts b/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.ts index b37c798657..a8281d557b 100644 --- a/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.ts +++ b/src/Umbraco.Web.UI.Client/src/core/context-api/consume/context-consumer.ts @@ -7,8 +7,8 @@ import { UmbContextRequestEventImplementation, UmbContextCallback } from './cont * @class UmbContextConsumer */ export class UmbContextConsumer { - private _instance?: unknown; - get instance(): unknown | undefined { + private _instance?: T; + get instance() { return this._instance; } @@ -25,11 +25,11 @@ export class UmbContextConsumer, private _callback: UmbContextCallback ) {} - private _onResponse = (instance: any) => { + private _onResponse = (instance: T) => { this._instance = instance; this._callback(instance); }; 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 4d25b0f317..9074259368 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 @@ -2,15 +2,15 @@ import { ContextAlias } from '../context-token'; export const umbContextRequestEventType = 'umb:context-request'; -export type UmbContextCallback = (instance: T) => void; +export type UmbContextCallback = (instance: T) => void; /** * @export * @interface UmbContextRequestEvent */ -export interface UmbContextRequestEvent extends Event { - readonly contextAlias: string | ContextAlias; - readonly callback: UmbContextCallback; +export interface UmbContextRequestEvent extends Event { + readonly contextAlias: string | ContextAlias; + readonly callback: UmbContextCallback; } /** @@ -19,10 +19,10 @@ export interface UmbContextRequestEvent extends Event { * @extends {Event} * @implements {UmbContextRequestEvent} */ -export class UmbContextRequestEventImplementation extends Event implements UmbContextRequestEvent { +export class UmbContextRequestEventImplementation extends Event implements UmbContextRequestEvent { public constructor( - public readonly contextAlias: string | ContextAlias, - public readonly callback: UmbContextCallback + public readonly contextAlias: string | ContextAlias, + public readonly callback: UmbContextCallback ) { super(umbContextRequestEventType, { bubbles: true, composed: true, cancelable: true }); } diff --git a/src/Umbraco.Web.UI.Client/src/core/context-api/provide/context-provider.test.ts b/src/Umbraco.Web.UI.Client/src/core/context-api/provide/context-provider.test.ts index 0d864cd608..d053ed97fe 100644 --- a/src/Umbraco.Web.UI.Client/src/core/context-api/provide/context-provider.test.ts +++ b/src/Umbraco.Web.UI.Client/src/core/context-api/provide/context-provider.test.ts @@ -1,6 +1,7 @@ import { expect } from '@open-wc/testing'; import { UmbContextConsumer } from '../consume/context-consumer'; import { UmbContextRequestEventImplementation } from '../consume/context-request.event'; +import { ContextAlias } from '../context-token'; import { UmbContextProvider } from './context-provider'; class MyClass { @@ -57,4 +58,17 @@ describe('UmbContextProvider', () => { }); localConsumer.hostConnected(); }); + + it('works with ContextAlias', (done) => { + const CONTEXT_ALIAS = new ContextAlias(MyClass.name); + const provider = new UmbContextProvider(document.body, CONTEXT_ALIAS, new MyClass()); + provider.hostConnected(); + + const localConsumer = new UmbContextConsumer(document.body, CONTEXT_ALIAS, (_instance: MyClass) => { + expect(_instance.prop).to.eq('value from provider'); + localConsumer.hostDisconnected(); + done(); + }); + localConsumer.hostConnected(); + }); });