From 6e8e5b51913dd7fc38fc3284bc3a3287ceb63cf2 Mon Sep 17 00:00:00 2001 From: sliptype Date: Sun, 14 Oct 2018 16:00:43 -0500 Subject: [PATCH] Add rxjs. Add update function. --- package.json | 2 ++ psc-package.json | 4 +++- src/Main.purs | 19 +++++++++++++++---- yarn.lock | 14 ++++++++++++++ 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5ddafff..bb7d042 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,8 @@ "author": "sliptype@gmail.com", "license": "MIT", "dependencies": { + "rxjs": "^6.3.3", + "rxjs-compat": "^6.3.3", "snabbdom": "^0.7.2" } } diff --git a/psc-package.json b/psc-package.json index 0947497..0debd45 100644 --- a/psc-package.json +++ b/psc-package.json @@ -1,8 +1,10 @@ { "name": "purescript-meiosis", - "set": "0.12.0-20181005", + "set": "0.12.0-20181014-4", "source": "https://github.com/sliptype/package-sets.git", "depends": [ + "control", + "rxps", "ordered-collections", "snabbdom", "maybe", diff --git a/src/Main.purs b/src/Main.purs index 0057857..f53e30c 100644 --- a/src/Main.purs +++ b/src/Main.purs @@ -2,9 +2,11 @@ module Main where import Prelude import Effect (Effect) +import Control.Comonad (extract) import Data.Maybe (Maybe(..)) -import Data.Map (empty, singleton) -import Snabbdom (VNodeProxy, VNodeData, h, patchInitialSelector, text, toVNodeEventObject, toVNodeHookObjectProxy) +import Data.Map (empty) +import Snabbdom (VNodeProxy, VNodeData, h, patchInitialSelector, patch, text, toVNodeEventObject, toVNodeHookObjectProxy) +import RxJS.Observable type State = Int @@ -12,12 +14,15 @@ emptyVNodeData :: VNodeData emptyVNodeData = { attrs : empty , on : toVNodeEventObject empty - , hook : toVNodeHookObjectProxy { insert : Nothing, update : Nothing, destroy : Nothing} + , hook : toVNodeHookObjectProxy { insert : Nothing, update : Nothing, destroy : Nothing } } initialState :: State initialState = 10 +update :: Observable State +update = interval 1000 # map (\s -> s + 1) # startWith initialState + view :: State -> VNodeProxy view s = h "div" emptyVNodeData [ h "strong#msg" emptyVNodeData [text $ "Counter: " <> (show s)] @@ -26,4 +31,10 @@ view s = h "div" emptyVNodeData main :: Effect Unit main = do - patchInitialSelector "#app" $ view initialState + vnode <- patchInitialSelector "#app" $ view initialState + update # subscribe vnode + +subscribe :: VNodeProxy -> Observable State -> Effect Unit +subscribe vnode obs = do + sub <- extract (obs # map view # subscribeNext (patch vnode)) + pure unit diff --git a/yarn.lock b/yarn.lock index f2fe1f9..f13c7d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,20 @@ # yarn lockfile v1 +rxjs-compat@^6.3.3: + version "6.3.3" + resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.3.3.tgz#2ab3b9ac0dac0c073749d55fef9c03ea1df2045c" + +rxjs@^6.3.3: + version "6.3.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" + dependencies: + tslib "^1.9.0" + snabbdom@^0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/snabbdom/-/snabbdom-0.7.2.tgz#e9d3930e6374ef8766706ccee4c6ed7b331afa64" + +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"