From db5b68592c9418f63ef393b00cce561d69276cf7 Mon Sep 17 00:00:00 2001 From: Matei Adriel Date: Fri, 24 Apr 2020 17:03:32 +0300 Subject: [PATCH] typescript(monadic): refactor: moved the component stuff in a new file Signed-off-by: prescientmoon --- typescript/monadic/src/component.ts | 25 +++++++++++++++++++++++++ typescript/monadic/src/environment.ts | 26 +------------------------- 2 files changed, 26 insertions(+), 25 deletions(-) create mode 100644 typescript/monadic/src/component.ts diff --git a/typescript/monadic/src/component.ts b/typescript/monadic/src/component.ts new file mode 100644 index 0000000..d0fa2f3 --- /dev/null +++ b/typescript/monadic/src/component.ts @@ -0,0 +1,25 @@ +import { IterableEmitter } from './iterableEmitter'; + +export type Component = { + render: (state: S, dispatch: (a: A) => () => void) => T; + handleActions: (action: A, state: S) => S; +}; + +export async function* runComponent( + component: Component, + initialState: S +): AsyncGenerator { + const emitter = new IterableEmitter(initialState); + + const dispatch = (state: S) => (action: A) => { + const newState = component.handleActions(action, state); + + return () => { + emitter.next(newState); + }; + }; + + for await (const state of emitter) { + yield component.render(state, dispatch(state)); + } +} diff --git a/typescript/monadic/src/environment.ts b/typescript/monadic/src/environment.ts index 2a1bf14..0701917 100644 --- a/typescript/monadic/src/environment.ts +++ b/typescript/monadic/src/environment.ts @@ -1,4 +1,4 @@ -import { IterableEmitter } from './iterableEmitter'; +import { Component, runComponent } from './component'; export type EnvConfig = { render: (template: T, parent: HTMLElement) => void; @@ -7,30 +7,6 @@ export type EnvConfig = { initialState: S; }; -export type Component = { - render: (state: S, dispatch: (a: A) => () => void) => T; - handleActions: (action: A, state: S) => S; -}; - -async function* runComponent( - component: Component, - initialState: S -): AsyncGenerator { - const emitter = new IterableEmitter(initialState); - - const dispatch = (state: S) => (action: A) => { - const newState = component.handleActions(action, state); - - return () => { - emitter.next(newState); - }; - }; - - for await (const state of emitter) { - yield component.render(state, dispatch(state)); - } -} - export const runUi = async ( config: EnvConfig ): Promise => {