Comparing version 1.2.1-alpha.0 to 1.2.1-alpha.1
@@ -26,2 +26,36 @@ import React,{useState,useRef,useEffect,useContext,useMemo}from'react';import produce$1 from'immer';const isEqual = require("fast-deep-equal"); | ||
return subState; | ||
}let updateListenerOrd = 0; | ||
function fastGet(obj, path) { | ||
return path.reduce((cur = obj, key) => { | ||
return cur[key]; | ||
}, undefined); | ||
} | ||
function getSubStateFromPaths(store, paths) { | ||
const state = store.getRawState(); | ||
const resp = []; | ||
for (const path of paths) { | ||
resp.push(fastGet(state, path)); | ||
} | ||
return resp; | ||
} | ||
function useStoreStateOpt(store, paths) { | ||
const [subState, setSubState] = useState(() => getSubStateFromPaths(store, paths)); | ||
const updateRef = useRef({ | ||
shouldUpdate: true, | ||
onStoreUpdate: null, | ||
currentSubState: null, | ||
ordKey: `_${updateListenerOrd++}`, | ||
}); | ||
updateRef.current.currentSubState = subState; | ||
if (updateRef.current.onStoreUpdate === null) { | ||
updateRef.current.onStoreUpdate = function onStoreUpdateOpt() { | ||
setSubState(getSubStateFromPaths(store, paths)); | ||
}; | ||
store._addUpdateListenerOpt(updateRef.current.onStoreUpdate, updateRef.current.ordKey, paths); | ||
} | ||
useEffect(() => () => { | ||
updateRef.current.shouldUpdate = false; | ||
store._removeUpdateListenerOpt(updateRef.current.ordKey); | ||
}, []); | ||
return subState; | ||
}const isEqual$1 = require("fast-deep-equal"); | ||
@@ -215,43 +249,3 @@ const Immer = require("immer"); | ||
} | ||
}let updateListenerOrd = 0; | ||
function fastGet(obj, path) { | ||
return path.reduce((cur = obj, key) => { | ||
return cur[key]; | ||
}, undefined); | ||
} | ||
function getSubStateFromPaths(store, paths) { | ||
const state = store.getRawState(); | ||
const resp = []; | ||
for (const path of paths) { | ||
resp.push(fastGet(state, path)); | ||
} | ||
return resp; | ||
} | ||
function useStoreStateOpt(store, paths) { | ||
const [subState, setSubState] = useState(() => getSubStateFromPaths(store, paths)); | ||
const updateRef = useRef({ | ||
shouldUpdate: true, | ||
onStoreUpdate: null, | ||
currentSubState: null, | ||
ordKey: `_${updateListenerOrd++}`, | ||
}); | ||
updateRef.current.currentSubState = subState; | ||
if (updateRef.current.onStoreUpdate === null) { | ||
updateRef.current.onStoreUpdate = function onStoreUpdateOpt() { | ||
setSubState(getSubStateFromPaths(store, paths)); | ||
}; | ||
store._addUpdateListenerOpt(updateRef.current.onStoreUpdate, updateRef.current.ordKey, paths); | ||
} | ||
useEffect(() => () => { | ||
updateRef.current.shouldUpdate = false; | ||
store._removeUpdateListenerOpt(updateRef.current.ordKey); | ||
}, []); | ||
return subState; | ||
} | ||
const PostSearchStore = new Store({ | ||
posts: [], | ||
currentSearchText: "", | ||
loadingPosts: false, | ||
}); | ||
const [posts, text] = useStoreStateOpt(PostSearchStore, [["posts"], ["currentSearchText"]]);function InjectStoreState({ store, on = s => s, children, }) { | ||
}function InjectStoreState({ store, on = s => s, children, }) { | ||
const state = useStoreState(store, on); | ||
@@ -258,0 +252,0 @@ return children(state); |
@@ -26,2 +26,36 @@ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});function _interopDefault(e){return(e&&(typeof e==='object')&&'default'in e)?e['default']:e}var React=require('react'),React__default=_interopDefault(React),produce$1=_interopDefault(require('immer'));const isEqual = require("fast-deep-equal"); | ||
return subState; | ||
}let updateListenerOrd = 0; | ||
function fastGet(obj, path) { | ||
return path.reduce((cur = obj, key) => { | ||
return cur[key]; | ||
}, undefined); | ||
} | ||
function getSubStateFromPaths(store, paths) { | ||
const state = store.getRawState(); | ||
const resp = []; | ||
for (const path of paths) { | ||
resp.push(fastGet(state, path)); | ||
} | ||
return resp; | ||
} | ||
function useStoreStateOpt(store, paths) { | ||
const [subState, setSubState] = React.useState(() => getSubStateFromPaths(store, paths)); | ||
const updateRef = React.useRef({ | ||
shouldUpdate: true, | ||
onStoreUpdate: null, | ||
currentSubState: null, | ||
ordKey: `_${updateListenerOrd++}`, | ||
}); | ||
updateRef.current.currentSubState = subState; | ||
if (updateRef.current.onStoreUpdate === null) { | ||
updateRef.current.onStoreUpdate = function onStoreUpdateOpt() { | ||
setSubState(getSubStateFromPaths(store, paths)); | ||
}; | ||
store._addUpdateListenerOpt(updateRef.current.onStoreUpdate, updateRef.current.ordKey, paths); | ||
} | ||
React.useEffect(() => () => { | ||
updateRef.current.shouldUpdate = false; | ||
store._removeUpdateListenerOpt(updateRef.current.ordKey); | ||
}, []); | ||
return subState; | ||
}const isEqual$1 = require("fast-deep-equal"); | ||
@@ -215,43 +249,3 @@ const Immer = require("immer"); | ||
} | ||
}let updateListenerOrd = 0; | ||
function fastGet(obj, path) { | ||
return path.reduce((cur = obj, key) => { | ||
return cur[key]; | ||
}, undefined); | ||
} | ||
function getSubStateFromPaths(store, paths) { | ||
const state = store.getRawState(); | ||
const resp = []; | ||
for (const path of paths) { | ||
resp.push(fastGet(state, path)); | ||
} | ||
return resp; | ||
} | ||
function useStoreStateOpt(store, paths) { | ||
const [subState, setSubState] = React.useState(() => getSubStateFromPaths(store, paths)); | ||
const updateRef = React.useRef({ | ||
shouldUpdate: true, | ||
onStoreUpdate: null, | ||
currentSubState: null, | ||
ordKey: `_${updateListenerOrd++}`, | ||
}); | ||
updateRef.current.currentSubState = subState; | ||
if (updateRef.current.onStoreUpdate === null) { | ||
updateRef.current.onStoreUpdate = function onStoreUpdateOpt() { | ||
setSubState(getSubStateFromPaths(store, paths)); | ||
}; | ||
store._addUpdateListenerOpt(updateRef.current.onStoreUpdate, updateRef.current.ordKey, paths); | ||
} | ||
React.useEffect(() => () => { | ||
updateRef.current.shouldUpdate = false; | ||
store._removeUpdateListenerOpt(updateRef.current.ordKey); | ||
}, []); | ||
return subState; | ||
} | ||
const PostSearchStore = new Store({ | ||
posts: [], | ||
currentSearchText: "", | ||
loadingPosts: false, | ||
}); | ||
const [posts, text] = useStoreStateOpt(PostSearchStore, [["posts"], ["currentSearchText"]]);function InjectStoreState({ store, on = s => s, children, }) { | ||
}function InjectStoreState({ store, on = s => s, children, }) { | ||
const state = useStoreState(store, on); | ||
@@ -258,0 +252,0 @@ return children(state); |
import { Store } from "./Store"; | ||
import { DeepTypeOfArray, TAllPathsParameter } from "./useStoreStateOpt-types"; | ||
declare function useStoreStateOpt<S, P extends TAllPathsParameter<S>>(store: Store<S>, paths: P): [DeepTypeOfArray<S, P[0]>] | [DeepTypeOfArray<S, P[0]>, DeepTypeOfArray<S, P[1]>] | [DeepTypeOfArray<S, P[0]>, DeepTypeOfArray<S, P[1]>, DeepTypeOfArray<S, P[2]>] | [DeepTypeOfArray<S, P[0]>, DeepTypeOfArray<S, P[1]>, DeepTypeOfArray<S, P[2]>, DeepTypeOfArray<S, P[3]>] | [DeepTypeOfArray<S, P[0]>, DeepTypeOfArray<S, P[1]>, DeepTypeOfArray<S, P[2]>, DeepTypeOfArray<S, P[3]>, DeepTypeOfArray<S, P[4]>] | [DeepTypeOfArray<S, P[0]>, DeepTypeOfArray<S, P[1]>, DeepTypeOfArray<S, P[2]>, DeepTypeOfArray<S, P[3]>, DeepTypeOfArray<S, P[4]>, DeepTypeOfArray<S, P[5]>] | [DeepTypeOfArray<S, P[0]>, DeepTypeOfArray<S, P[1]>, DeepTypeOfArray<S, P[2]>, DeepTypeOfArray<S, P[3]>, DeepTypeOfArray<S, P[4]>, DeepTypeOfArray<S, P[5]>, DeepTypeOfArray<S, P[6]>] | [DeepTypeOfArray<S, P[0]>, DeepTypeOfArray<S, P[1]>, DeepTypeOfArray<S, P[2]>, DeepTypeOfArray<S, P[3]>, DeepTypeOfArray<S, P[4]>, DeepTypeOfArray<S, P[5]>, DeepTypeOfArray<S, P[6]>, DeepTypeOfArray<S, P[7]>] | [DeepTypeOfArray<S, P[0]>, DeepTypeOfArray<S, P[1]>, DeepTypeOfArray<S, P[2]>, DeepTypeOfArray<S, P[3]>, DeepTypeOfArray<S, P[4]>, DeepTypeOfArray<S, P[5]>, DeepTypeOfArray<S, P[6]>, DeepTypeOfArray<S, P[7]>, DeepTypeOfArray<S, P[8]>] | [DeepTypeOfArray<S, P[0]>, DeepTypeOfArray<S, P[1]>, DeepTypeOfArray<S, P[2]>, DeepTypeOfArray<S, P[3]>, DeepTypeOfArray<S, P[4]>, DeepTypeOfArray<S, P[5]>, DeepTypeOfArray<S, P[6]>, DeepTypeOfArray<S, P[7]>, DeepTypeOfArray<S, P[8]>, DeepTypeOfArray<S, P[9]>] | [DeepTypeOfArray<S, P[0]>, DeepTypeOfArray<S, P[1]>, DeepTypeOfArray<S, P[2]>, DeepTypeOfArray<S, P[3]>, DeepTypeOfArray<S, P[4]>, DeepTypeOfArray<S, P[5]>, DeepTypeOfArray<S, P[6]>, DeepTypeOfArray<S, P[7]>, DeepTypeOfArray<S, P[8]>, DeepTypeOfArray<S, P[9]>, DeepTypeOfArray<S, P[10]>]; | ||
declare function useStoreStateOpt<S, P extends TAllPathsParameter<S>>(store: Store<S>, paths: P): [DeepTypeOfArray<S, P[0]>, DeepTypeOfArray<S, P[1]>, DeepTypeOfArray<S, P[2]>, DeepTypeOfArray<S, P[3]>, DeepTypeOfArray<S, P[4]>, DeepTypeOfArray<S, P[5]>, DeepTypeOfArray<S, P[6]>, DeepTypeOfArray<S, P[7]>, DeepTypeOfArray<S, P[8]>, DeepTypeOfArray<S, P[9]>, DeepTypeOfArray<S, P[10]>]; | ||
export { useStoreStateOpt }; | ||
export interface IPostSearchStore { | ||
posts: any[]; | ||
currentSearchText: string; | ||
loadingPosts: boolean; | ||
} | ||
export declare const PostSearchStore: Store<IPostSearchStore>; |
{ | ||
"name": "pullstate", | ||
"version": "1.2.1-alpha.0", | ||
"version": "1.2.1-alpha.1", | ||
"description": "Simple state stores using immer and React hooks", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
98880
1952