From 6d6699ef30b489841c980f62a89d589137ba33e6 Mon Sep 17 00:00:00 2001 From: Hamza Ouaghad Date: Sun, 24 Mar 2019 20:03:06 +0100 Subject: [PATCH] feat: expose disposer function to nap function --- CHANGELOG.md | 3 +++ examples/todo/state.jsx | 3 ++- package.json | 4 +++- src/index.js | 2 +- src/state.js | 12 +++++++----- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cef9be7..fde5308 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +*v2.0.5* +_Feat: expose nap disposer function as a third arg to the nap function_ + *v2.0.4* _Feat: implement nap for state_ diff --git a/examples/todo/state.jsx b/examples/todo/state.jsx index 41351e6..4e8c9ec 100644 --- a/examples/todo/state.jsx +++ b/examples/todo/state.jsx @@ -19,9 +19,10 @@ const aggregateAuthenticatedUser = ({ user }) => ({ userFullname: user.username, }) -const userStateNextActionPredicate = (state, onlyTrackedModels) => { +const userStateNextActionPredicate = (state, onlyTrackedModels, dispose) => { if (state.isAuthenticated) { console.log("User logged in, send notification to service x") + dispose() } } diff --git a/package.json b/package.json index 5a2f9f2..b789669 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,12 @@ { "description": "Functional Reactive State Management Library for React, using MobX, implementing the SAM pattern", "name": "samx", - "version": "2.0.1", + "version": "2.0.5", "main": "src/index.js", "repository": "git@github.com:expertlead/samx.git", "author": [ + "Hamza Ouaghad", + "Leonardo Kewitz", "Invisible Technologies", "Expertlead" ], diff --git a/src/index.js b/src/index.js index b3db48c..25b9cef 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,6 @@ import { configure } from 'mobx' -configure({ enforceActions: 'always', isolatedGlobalState: true }) +configure({ enforceActions: 'strict', isolatedGlobalState: true }) export * from 'mobx' diff --git a/src/state.js b/src/state.js index 2fb0b7c..57e02c9 100644 --- a/src/state.js +++ b/src/state.js @@ -38,7 +38,7 @@ const State = (transformState, nap = undefined) => ({ let retrieveModels = getModels if (onlyTrack) { - + retrieveModels = () => { onlyTrack.forEach( (trackedModel) => { @@ -69,13 +69,15 @@ const State = (transformState, nap = undefined) => ({ ) if (nap) { - const nextActionPredicateEffectFn = (stateRepresentation) => (models) => () => { - nap(stateRepresentation, models) + const nextActionPredicateEffectFn = (stateRepresentation) => (models) => (disposer) => () => { + nap(stateRepresentation, models, disposer) } - reaction( + const dispose = reaction( retrieveDataFn, - nextActionPredicateEffectFn(stateRepresentation)(retrieveModels()) + nextActionPredicateEffectFn(stateRepresentation)(retrieveModels())( + () => dispose() + ) ) }