async-selector
Advanced tools
Comparing version 1.0.12 to 1.0.13
@@ -848,2 +848,76 @@ import createAsyncSelector from '../src/index'; | ||
}, 200); | ||
}); | ||
}); | ||
test('debounces only memoized version', done => { | ||
let state = {employees: ['Mark Metzger'], maxAge: 15}; | ||
let result = null | ||
const throttle = f => _.debounce(f, 150); | ||
const ages = createAsyncSelector( | ||
{...params2, throttle}, | ||
s => s.employees, | ||
s => s.maxAge); | ||
const expected1 = { | ||
value: [], | ||
previous: undefined, | ||
isWaiting: true, | ||
isResolved: false, | ||
isRejected: false, | ||
} | ||
const expected2 = { | ||
value: [12], | ||
previous: [12], | ||
isWaiting: false, | ||
isResolved: true, | ||
isRejected: false, | ||
} | ||
const result1 = ages(state); | ||
console.log({result1}); | ||
expect(deepEqual(result1, expected1)).toBe(true); | ||
setTimeout(() => { | ||
const result2 = ages(state); | ||
console.log({result2}); | ||
expect(deepEqual(result2, expected1)).toBe(true); | ||
setTimeout(() => { | ||
const result3 = ages(state); | ||
console.log({result3}); | ||
expect(deepEqual(result3, expected1)).toBe(true); | ||
setTimeout(() => { | ||
const result4 = ages(state); | ||
console.log({result4}); | ||
expect(deepEqual(result4, expected2)).toBe(true); | ||
setTimeout(() => { | ||
const result5 = ages(state); | ||
console.log({result5}); | ||
expect(deepEqual(result5, expected2)).toBe(true); | ||
done(); | ||
}, 100); | ||
}, 100); | ||
}, 100); | ||
}, 100); | ||
}); | ||
test('sync by default returns undefined', done => { | ||
let state = {employees: ['Mark Metzger'], maxAge: 15}; | ||
const ages = createAsyncSelector( | ||
{...params2, sync: null}, | ||
s => s.employees, | ||
s => s.maxAge); | ||
const expected1 = { | ||
value: undefined, | ||
previous: undefined, | ||
isWaiting: true, | ||
isResolved: false, | ||
isRejected: false, | ||
} | ||
const result = ages(state); | ||
expect(deepEqual(result, expected1)).toBe(true); | ||
done(); | ||
}); |
@@ -15,5 +15,2 @@ 'use strict'; | ||
} | ||
if (typeof params.sync !== 'function') { | ||
throw new Error('Looking for a function called "sync". This function is called to before the promise resolves'); | ||
} | ||
if (typeof params.async !== 'function') { | ||
@@ -59,2 +56,3 @@ throw new Error('Looking for a function called "async". This function returns a promise which handles asynchronous code'); | ||
sync = typeof sync === 'function' ? sync : emptyFunction; | ||
onReject = typeof onReject === 'function' ? onReject : emptyFunction; | ||
@@ -66,3 +64,3 @@ onResolve = typeof onResolve === 'function' ? onResolve : emptyFunction; | ||
}; | ||
omitStatus = omitStatus === undefined ? false : omitStatus; | ||
omitStatus = omitStatus === void 0 ? false : omitStatus; | ||
throttle = typeof throttle === 'function' ? throttle : null; | ||
@@ -74,3 +72,3 @@ | ||
var oldInputs = null; | ||
var previousResolution = undefined; | ||
var previousResolution = void 0; | ||
var f = null; | ||
@@ -89,3 +87,3 @@ | ||
if (f !== null && internal === false) { | ||
f(state, forceUpdate); | ||
f(state, props, forceUpdate); | ||
memoizedResult = createResultObject(sync.apply(undefined, _toConsumableArray(mapped)), previousResolution, true, false, false, omitStatus); | ||
@@ -127,5 +125,15 @@ return memoizedResult; | ||
if (throttle !== null && f === null) { | ||
f = throttle(function (state, props) { | ||
var throttled = throttle(function (state, props) { | ||
return func(state, props, true, true); | ||
}); | ||
var old = null; | ||
f = function f(state, props) { | ||
var New = selectors.map(function (s) { | ||
return s(state, props); | ||
}); | ||
if (hasChanged(old, New)) { | ||
old = New; | ||
throttled(state, props); | ||
} | ||
}; | ||
} | ||
@@ -132,0 +140,0 @@ func.forceUpdate = function (state, props) { |
{ | ||
"name": "async-selector", | ||
"version": "1.0.12", | ||
"version": "1.0.13", | ||
"description": "Select values from databases using asynchronous selectors.", | ||
@@ -5,0 +5,0 @@ "main": "./dist/index.js", |
@@ -190,3 +190,3 @@ A simple, lightweight library inspired by [reselect](https://github.com/reduxjs/reselect) which allows you select data out of a remote database almost as easily as you would from local state. This library will normally be used in conjunction with redux and reselect but it has no dependencies. | ||
params is an object | ||
### params.sync (Required) | ||
### params.sync (Optional) | ||
```js | ||
@@ -193,0 +193,0 @@ function sync(...selectorResults) -> any |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
243353
6812
1