diff --git a/src/decorators/fetchToState.test.ts b/src/decorators/fetchToState.test.ts index b5894f7..d2e8be4 100644 --- a/src/decorators/fetchToState.test.ts +++ b/src/decorators/fetchToState.test.ts @@ -10,7 +10,7 @@ describe('fetchToState', () => { it('should fetch data and set new state', () => { const listResponse: string[] = ['test', 'test2']; - @useEventrix + @useEventrix() class FetchToStateTestClass { eventrix: EventrixI; @@ -36,7 +36,7 @@ describe('fetchToState', () => { const initialState: string[] = ['test', 'test2']; const expectedState: string[] = ['test', 'test2', 'test3']; - @useEventrix + @useEventrix() class FetchToStateTestClass2 { eventrix: EventrixI; diff --git a/src/decorators/listener.test.ts b/src/decorators/listener.test.ts index 7f8e3ec..2fdccfc 100644 --- a/src/decorators/listener.test.ts +++ b/src/decorators/listener.test.ts @@ -11,7 +11,7 @@ describe('listener', () => { const callback = jest.fn(); const data: string[] = ['test']; - @useEventrix + @useEventrix() class FetchToStateTestClass { eventrix: EventrixI; @@ -37,7 +37,7 @@ describe('listener', () => { const extendCallback = jest.fn(); const extendEventData: string[] = ['test', 'test2']; - @useEventrix + @useEventrix() class FetchToStateTestClass { eventrix: EventrixI; diff --git a/src/decorators/receiver.test.ts b/src/decorators/receiver.test.ts index cec7f89..8bac0e6 100644 --- a/src/decorators/receiver.test.ts +++ b/src/decorators/receiver.test.ts @@ -10,7 +10,7 @@ describe('receiver', () => { it('should set new state', () => { const listResponse = ['test', 'test2']; - @useEventrix + @useEventrix() class FetchToStateTestClass { eventrix: EventrixI; @@ -36,7 +36,7 @@ describe('receiver', () => { const initialState = ['test', 'test2']; const expectedState = ['test', 'test2', 'test3']; - @useEventrix + @useEventrix() class FetchToStateTestClass2 { eventrix: EventrixI; diff --git a/src/decorators/useEventrix.test.ts b/src/decorators/useEventrix.test.ts index 4dee3ad..ef742b5 100644 --- a/src/decorators/useEventrix.test.ts +++ b/src/decorators/useEventrix.test.ts @@ -4,7 +4,7 @@ import { EventrixI } from '../interfaces'; describe('useEventrix', () => { it('should add eventrix to class instance', () => { - @useEventrix + @useEventrix() class FetchToStateTestClass { ajax: any; eventrix: EventrixI; @@ -17,4 +17,22 @@ describe('useEventrix', () => { const testClassInstance = new FetchToStateTestClass({ eventrix, ajax: jest.fn() }); expect(testClassInstance.eventrix).toEqual(eventrix); }); + + it('should be able to specify key of eventrix service and add eventrix to class instance', () => { + @useEventrix('eventrixService') + class FetchToStateTestClass { + ajax: any; + eventrix: EventrixI; + + constructor(servcices: { ajax: any; eventrixService: EventrixI }) { + this.ajax = servcices.ajax; + } + } + const eventrix = new Eventrix({}); + const testClassInstance = new FetchToStateTestClass({ + eventrixService: eventrix, + ajax: jest.fn(), + }); + expect(testClassInstance.eventrix).toEqual(eventrix); + }); }); diff --git a/src/decorators/useEventrix.ts b/src/decorators/useEventrix.ts index bc5d858..4ea6137 100644 --- a/src/decorators/useEventrix.ts +++ b/src/decorators/useEventrix.ts @@ -31,33 +31,35 @@ export interface EventrixClassI { [key: string]: any; } -function useEventrix(targetClass: any) { - const original: EventrixClassI = targetClass; - const eventrixClass: any = function (services: ServicesI, ...args: any[]) { - const classInstance = new original(services, ...args); - classInstance.eventrix = services.eventrix; - if (Array.isArray(classInstance.eventrixReceivers)) { - classInstance.eventrixReceivers.forEach(({ eventsNames, name }) => { - classInstance[name] = classInstance[name].bind(classInstance); - classInstance.eventrix!.useReceiver(new EventsReceiver(eventsNames, classInstance[name])); - }); - } - if (Array.isArray(classInstance.eventrixFetchToStateReceivers)) { - classInstance.eventrixFetchToStateReceivers.forEach(({ eventName, statePath, name }) => { - classInstance[name] = classInstance[name].bind(classInstance); - classInstance.eventrix!.useReceiver(fetchToStateReceiver(eventName, statePath, classInstance[name])); - }); - } - if (Array.isArray(classInstance.eventrixListeners)) { - classInstance.eventrixListeners.forEach(({ eventName, name }) => { - classInstance[name] = classInstance[name].bind(classInstance); - classInstance.eventrix!.listen(eventName, classInstance[name]); - }); - } - return classInstance; +function useEventrix(eventrixServiceKey = 'eventrix') { + return function (targetClass: any) { + const original: EventrixClassI = targetClass; + const eventrixClass: any = function (services: ServicesI, ...args: any[]) { + const classInstance = new original(services, ...args); + classInstance.eventrix = services[eventrixServiceKey]; + if (Array.isArray(classInstance.eventrixReceivers)) { + classInstance.eventrixReceivers.forEach(({ eventsNames, name }) => { + classInstance[name] = classInstance[name].bind(classInstance); + classInstance.eventrix!.useReceiver(new EventsReceiver(eventsNames, classInstance[name])); + }); + } + if (Array.isArray(classInstance.eventrixFetchToStateReceivers)) { + classInstance.eventrixFetchToStateReceivers.forEach(({ eventName, statePath, name }) => { + classInstance[name] = classInstance[name].bind(classInstance); + classInstance.eventrix!.useReceiver(fetchToStateReceiver(eventName, statePath, classInstance[name])); + }); + } + if (Array.isArray(classInstance.eventrixListeners)) { + classInstance.eventrixListeners.forEach(({ eventName, name }) => { + classInstance[name] = classInstance[name].bind(classInstance); + classInstance.eventrix!.listen(eventName, classInstance[name]); + }); + } + return classInstance; + }; + eventrixClass.prototype = original.prototype; + return eventrixClass; }; - eventrixClass.prototype = original.prototype; - return eventrixClass; } export default useEventrix;