@rpcbase/client 0.107.0 → 0.110.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/hashState.js +3 -2
- package/isEqualValues.js +47 -0
- package/package.json +1 -1
- package/rts/getUseQuery/index.js +3 -3
package/hashState.js
CHANGED
|
@@ -3,7 +3,8 @@ import {useState, useEffect, createContext, useContext, useCallback} from "react
|
|
|
3
3
|
import LZString from "lz-string"
|
|
4
4
|
import _isNil from "lodash/isNil"
|
|
5
5
|
import _omitBy from "lodash/omitBy"
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
import isEqualValues from "./isEqualValues"
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
const PAGE_NAVIGATION_EVENT = "RB_PAGE_NAVIGATION"
|
|
@@ -87,7 +88,7 @@ export const HashStateProvider = ({children}) => {
|
|
|
87
88
|
...parsed,
|
|
88
89
|
}
|
|
89
90
|
// apply only if changed
|
|
90
|
-
if (!
|
|
91
|
+
if (!isEqualValues(hashState, newState)) {
|
|
91
92
|
setHashState(newState)
|
|
92
93
|
}
|
|
93
94
|
}
|
package/isEqualValues.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* @flow */
|
|
2
|
+
const isEqual = require("fast-deep-equal/react")
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const isPlainObject = (obj) => {
|
|
6
|
+
return Object.prototype.toString.call(obj) === "[object Object]"
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const sortValuesConsideringObjects = (values) => {
|
|
10
|
+
return values
|
|
11
|
+
.map(val => (isPlainObject(val) ? sortValuesConsideringObjects(Object.values(val)) : val))
|
|
12
|
+
.sort()
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const isEqualValues = (a, b) => {
|
|
16
|
+
// Extract values and sort them if they belong to plain objects
|
|
17
|
+
const valsA = isPlainObject(a) ? sortValuesConsideringObjects(Object.values(a)) : a
|
|
18
|
+
const valsB = isPlainObject(b) ? sortValuesConsideringObjects(Object.values(b)) : b
|
|
19
|
+
|
|
20
|
+
if (valsA === null && valsB === null) {
|
|
21
|
+
return true
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (Array.isArray(valsA) || Array.isArray(valsB)) {
|
|
25
|
+
return isEqual(valsA, valsB)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Check value count
|
|
29
|
+
if (valsA.length !== valsB.length) return false
|
|
30
|
+
|
|
31
|
+
// Compare the sorted arrays of values
|
|
32
|
+
for (let i = 0; i < valsA.length; i++) {
|
|
33
|
+
if (typeof valsA[i] === "object" && typeof valsB[i] === "object") {
|
|
34
|
+
if (!isEqualValues(valsA[i], valsB[i])) {
|
|
35
|
+
return false
|
|
36
|
+
}
|
|
37
|
+
} else {
|
|
38
|
+
if (!isEqual(valsA[i], valsB[i])) {
|
|
39
|
+
return false
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return true
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
module.exports = isEqualValues
|
package/package.json
CHANGED
package/rts/getUseQuery/index.js
CHANGED
|
@@ -3,10 +3,10 @@ import assert from "assert"
|
|
|
3
3
|
import {Platform} from "react-native"
|
|
4
4
|
import {useCallback, useEffect, useState, useMemo, useId, useRef} from "react"
|
|
5
5
|
import debug from "debug"
|
|
6
|
-
import isEqual from "fast-deep-equal/react"
|
|
7
6
|
import _omit from "lodash/omit"
|
|
8
7
|
import LZString from "lz-string"
|
|
9
8
|
|
|
9
|
+
import isEqualValues from "../../isEqualValues"
|
|
10
10
|
import get_uid from "../../auth/get_uid"
|
|
11
11
|
|
|
12
12
|
import useData from "./useData"
|
|
@@ -142,7 +142,7 @@ const getUseQuery = (register_query) => (
|
|
|
142
142
|
hasFirstReply.current = true
|
|
143
143
|
|
|
144
144
|
// skip if we already have the data
|
|
145
|
-
if (
|
|
145
|
+
if (isEqualValues(data, newData)) {
|
|
146
146
|
applyContext(context)
|
|
147
147
|
return
|
|
148
148
|
}
|
|
@@ -158,7 +158,7 @@ const getUseQuery = (register_query) => (
|
|
|
158
158
|
return
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
-
if (!
|
|
161
|
+
if (!isEqualValues(data, newData)) {
|
|
162
162
|
applyContext(context)
|
|
163
163
|
applyNewData(newData, context)
|
|
164
164
|
} else {
|