From 06cc640cb4c5fbb493a199f4bc64b6627bae8032 Mon Sep 17 00:00:00 2001 From: Dmitry Korolev Date: Fri, 12 Oct 2018 15:59:18 +0300 Subject: [PATCH] feat(core): waitFor condition receives app state re #153 --- .../stapp/src/core/createApp/createApp.h.ts | 6 ++-- .../src/core/createApp/createApp.spec.ts | 28 +++++++++++++++++++ .../stapp/src/core/createApp/createApp.ts | 2 +- .../src/core/createApp/getReadyPromise.ts | 5 ++-- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/packages/stapp/src/core/createApp/createApp.h.ts b/packages/stapp/src/core/createApp/createApp.h.ts index e1e4b0e6..aaea8ffb 100644 --- a/packages/stapp/src/core/createApp/createApp.h.ts +++ b/packages/stapp/src/core/createApp/createApp.h.ts @@ -34,13 +34,13 @@ export type EventEpic = ( */ export type Epic = EventEpic -export type WaitFor = Array< +export type WaitFor = Array< | AnyEventCreator | string | { event: AnyEventCreator | string timeout?: number - condition?: () => boolean + condition?: (state: Partial) => boolean } > @@ -60,7 +60,7 @@ export type Module = State> = { // Api events?: Api api?: Api - waitFor?: WaitFor + waitFor?: WaitFor // State reducers?: ReducersMap diff --git a/packages/stapp/src/core/createApp/createApp.spec.ts b/packages/stapp/src/core/createApp/createApp.spec.ts index 01ba8dfa..20d05ca6 100644 --- a/packages/stapp/src/core/createApp/createApp.spec.ts +++ b/packages/stapp/src/core/createApp/createApp.spec.ts @@ -906,6 +906,34 @@ describe('createApp', () => { await null expect(resolved).toBe(true) }) + + it('condition function should receive state', async () => { + let state: any + const module: Module = { + name: 'test', + state: { + t: createReducer('test') + }, + waitFor: [ + { + event: fire1, + condition(s) { + state = s + return true + } + } + ] + } + + createApp({ + modules: [module] + }) + + await null + expect(state).toEqual({ + t: 'test' + }) + }) }) describe('app compatibility', () => { diff --git a/packages/stapp/src/core/createApp/createApp.ts b/packages/stapp/src/core/createApp/createApp.ts index 9912b5eb..49aecbb7 100644 --- a/packages/stapp/src/core/createApp/createApp.ts +++ b/packages/stapp/src/core/createApp/createApp.ts @@ -66,7 +66,7 @@ export const createApp: CreateApp = (config: { const moduleDependencies = new Set() const reducers: any = {} const api: any = {} - let waitFor: WaitFor = [] + let waitFor: WaitFor = [] const subscriptions: Subscription[] = [] diff --git a/packages/stapp/src/core/createApp/getReadyPromise.ts b/packages/stapp/src/core/createApp/getReadyPromise.ts index 75a6a80a..12e54fe4 100644 --- a/packages/stapp/src/core/createApp/getReadyPromise.ts +++ b/packages/stapp/src/core/createApp/getReadyPromise.ts @@ -13,8 +13,9 @@ const isEvent = (ev: any): ev is AnyEventCreator | string => { export const getReadyPromise = ( event$: Observable>, getState: () => Partial, - waitFor: WaitFor + waitFor: WaitFor ): Promise> => { + const initialState = getState() const [promise, resolve] = controlledPromise>() const toWait = new Set( waitFor.reduce( @@ -24,7 +25,7 @@ export const getReadyPromise = ( return result } - if (event.condition && !event.condition()) { + if (event.condition && !event.condition(initialState)) { return result }