@bramblex/state-model
Advanced tools
Comparing version
@@ -5,3 +5,3 @@ | ||
* author: bramblex<qjnight@gmail.com> | ||
* state-model.js v0.0.3 | ||
* state-model.js v1.0.0 | ||
* Released under the MIT license. | ||
@@ -14,7 +14,6 @@ */ | ||
var react = require('react'); | ||
class StateModel { | ||
state; | ||
listeners = []; | ||
constructor(state) { | ||
this.listeners = []; | ||
this.state = state; | ||
@@ -35,33 +34,3 @@ } | ||
} | ||
function useForceUpdate() { | ||
const [, setState] = react.useState(0); | ||
return () => setState((n) => n + 1); | ||
} | ||
function useModel(model) { | ||
const forceUpdate = useForceUpdate(); | ||
react.useEffect(() => model.onStateChange(forceUpdate), [model]); | ||
return model; | ||
} | ||
function useLocalModel(creator, deps = []) { | ||
return useModel(react.useMemo(creator, deps)); | ||
} | ||
function getContextByModelClass(ModelClass) { | ||
if (!Object.prototype.hasOwnProperty.apply(ModelClass, ['__Context__'])) { | ||
ModelClass.__Context__ = react.createContext(null); | ||
} | ||
return ModelClass.__Context__; | ||
} | ||
function useModelContext(ModelClass) { | ||
const ModelContext = getContextByModelClass(ModelClass); | ||
return react.useContext(ModelContext); | ||
} | ||
function useModelProvider(ModelClass) { | ||
const ModelContext = getContextByModelClass(ModelClass); | ||
return ModelContext.Provider; | ||
} | ||
exports.StateModel = StateModel; | ||
exports.useLocalModel = useLocalModel; | ||
exports.useModel = useModel; | ||
exports.useModelContext = useModelContext; | ||
exports.useModelProvider = useModelProvider; |
@@ -1,3 +0,1 @@ | ||
import { Provider } from 'react'; | ||
declare type Listener<State> = (state: State, prev: State, model: StateModelType<State>) => void; | ||
@@ -15,7 +13,3 @@ declare type GetStateByModel<T> = T extends StateModelType<infer P> ? P : never; | ||
} | ||
declare function useModel<Model extends StateModelType<GetStateByModel<Model>>>(model: Model): Model; | ||
declare function useLocalModel<Model extends StateModelType<GetStateByModel<Model>>>(creator: () => Model, deps?: unknown[]): Model; | ||
declare function useModelContext<Model extends StateModelType<GetStateByModel<Model>>>(ModelClass: new (...args: unknown[]) => Model): Model; | ||
declare function useModelProvider<Model extends StateModelType<GetStateByModel<Model>>>(ModelClass: new (...args: unknown[]) => Model): Provider<Model>; | ||
export { StateModel, StateModelType, useLocalModel, useModel, useModelContext, useModelProvider }; | ||
export { GetStateByModel, Listener, StateModel, StateModelType }; |
@@ -5,11 +5,10 @@ | ||
* author: bramblex<qjnight@gmail.com> | ||
* state-model.js v0.0.3 | ||
* state-model.js v1.0.0 | ||
* Released under the MIT license. | ||
*/ | ||
import { useEffect, useMemo, useContext, useState, createContext } from 'react'; | ||
class StateModel { | ||
state; | ||
listeners = []; | ||
constructor(state) { | ||
this.listeners = []; | ||
this.state = state; | ||
@@ -30,29 +29,3 @@ } | ||
} | ||
function useForceUpdate() { | ||
const [, setState] = useState(0); | ||
return () => setState((n) => n + 1); | ||
} | ||
function useModel(model) { | ||
const forceUpdate = useForceUpdate(); | ||
useEffect(() => model.onStateChange(forceUpdate), [model]); | ||
return model; | ||
} | ||
function useLocalModel(creator, deps = []) { | ||
return useModel(useMemo(creator, deps)); | ||
} | ||
function getContextByModelClass(ModelClass) { | ||
if (!Object.prototype.hasOwnProperty.apply(ModelClass, ['__Context__'])) { | ||
ModelClass.__Context__ = createContext(null); | ||
} | ||
return ModelClass.__Context__; | ||
} | ||
function useModelContext(ModelClass) { | ||
const ModelContext = getContextByModelClass(ModelClass); | ||
return useContext(ModelContext); | ||
} | ||
function useModelProvider(ModelClass) { | ||
const ModelContext = getContextByModelClass(ModelClass); | ||
return ModelContext.Provider; | ||
} | ||
export { StateModel, useLocalModel, useModel, useModelContext, useModelProvider }; | ||
export { StateModel }; |
@@ -5,12 +5,13 @@ | ||
* author: bramblex<qjnight@gmail.com> | ||
* state-model.js v0.0.3 | ||
* state-model.js v1.0.0 | ||
* Released under the MIT license. | ||
*/ | ||
var StateModel = (function (exports, react) { | ||
var StateModel = (function (exports) { | ||
'use strict'; | ||
class StateModel { | ||
state; | ||
listeners = []; | ||
constructor(state) { | ||
this.listeners = []; | ||
this.state = state; | ||
@@ -31,34 +32,4 @@ } | ||
} | ||
function useForceUpdate() { | ||
const [, setState] = react.useState(0); | ||
return () => setState((n) => n + 1); | ||
} | ||
function useModel(model) { | ||
const forceUpdate = useForceUpdate(); | ||
react.useEffect(() => model.onStateChange(forceUpdate), [model]); | ||
return model; | ||
} | ||
function useLocalModel(creator, deps = []) { | ||
return useModel(react.useMemo(creator, deps)); | ||
} | ||
function getContextByModelClass(ModelClass) { | ||
if (!Object.prototype.hasOwnProperty.apply(ModelClass, ['__Context__'])) { | ||
ModelClass.__Context__ = react.createContext(null); | ||
} | ||
return ModelClass.__Context__; | ||
} | ||
function useModelContext(ModelClass) { | ||
const ModelContext = getContextByModelClass(ModelClass); | ||
return react.useContext(ModelContext); | ||
} | ||
function useModelProvider(ModelClass) { | ||
const ModelContext = getContextByModelClass(ModelClass); | ||
return ModelContext.Provider; | ||
} | ||
exports.StateModel = StateModel; | ||
exports.useLocalModel = useLocalModel; | ||
exports.useModel = useModel; | ||
exports.useModelContext = useModelContext; | ||
exports.useModelProvider = useModelProvider; | ||
@@ -69,2 +40,2 @@ Object.defineProperty(exports, '__esModule', { value: true }); | ||
}({}, React)); | ||
}({})); |
/** | ||
* @license | ||
* author: bramblex<qjnight@gmail.com> | ||
* state-model.js v0.0.3 | ||
* state-model.js v1.0.0 | ||
* Released under the MIT license. | ||
*/ | ||
var StateModel=function(t,e){"use strict";function n(t){const n=function(){const[,t]=e.useState(0);return()=>t((t=>t+1))}();return e.useEffect((()=>t.onStateChange(n)),[t]),t}function s(t){return Object.prototype.hasOwnProperty.apply(t,["__Context__"])||(t.__Context__=e.createContext(null)),t.__Context__}return t.StateModel=class{constructor(t){this.listeners=[],this.state=t}onStateChange(t){const e=(...e)=>t(...e);return this.listeners.push(e),()=>{this.listeners=this.listeners.filter((t=>t!==e))}}setState(t){const e=this.state;this.state=t,this.listeners.forEach((n=>n(t,e,this)))}},t.useLocalModel=function(t,s=[]){return n(e.useMemo(t,s))},t.useModel=n,t.useModelContext=function(t){const n=s(t);return e.useContext(n)},t.useModelProvider=function(t){return s(t).Provider},Object.defineProperty(t,"__esModule",{value:!0}),t}({},React); | ||
var StateModel=function(t){"use strict";return t.StateModel=class{state;listeners=[];constructor(t){this.state=t}onStateChange(t){const e=(...e)=>t(...e);return this.listeners.push(e),()=>{this.listeners=this.listeners.filter((t=>t!==e))}}setState(t){const e=this.state;this.state=t,this.listeners.forEach((s=>s(t,e,this)))}},Object.defineProperty(t,"__esModule",{value:!0}),t}({}); |
{ | ||
"name": "@bramblex/state-model", | ||
"version": "0.0.3", | ||
"description": "Simple model for react", | ||
"version": "1.0.1", | ||
"description": "Simple model", | ||
"homepage": "https://github.com/bramblex/state-model", | ||
@@ -17,3 +17,2 @@ "main": "dist/state-model.cjs.js", | ||
"@babel/preset-env": "^7.13.15", | ||
"@babel/preset-react": "^7.13.13", | ||
"@rollup/plugin-babel": "^5.2.2", | ||
@@ -24,3 +23,2 @@ "@rollup/plugin-commonjs": "^17.0.0", | ||
"@types/jest": "^26.0.22", | ||
"@types/react-test-renderer": "^17.0.1", | ||
"@typescript-eslint/eslint-plugin": "^4.14.0", | ||
@@ -32,4 +30,2 @@ "@typescript-eslint/parser": "^4.14.0", | ||
"jest": "^26.6.3", | ||
"react": "^17.0.2", | ||
"react-test-renderer": "^17.0.2", | ||
"rollup": "^2.38.0", | ||
@@ -46,5 +42,3 @@ "rollup-plugin-dts": "^3.0.1", | ||
}, | ||
"dependencies": { | ||
"@types/react": "^17.0.3" | ||
} | ||
} | ||
"gitHead": "d07bbd6f87bac044201cf349a0bcfde0789fc244" | ||
} |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
0
-100%19
-17.39%0
-100%6938
-39.02%106
-46.46%- Removed
- Removed
- Removed
- Removed
- Removed