+18
-12
lines changedFilter options
+18
-12
lines changed Original file line number Diff line number Diff line change
@@ -1,29 +1,35 @@
1
-
import { hasOwnProperty } from './object'
1
+
import cloneDeep from './clone-deep'
2
+
import looseEqual from './loose-equal'
3
+
import { hasOwnProperty, keys } from './object'
4
+
5
+
const isEmpty = value => !value || keys(value).length === 0
2
6
3
7
export const makePropWatcher = propName => ({
4
-
handler(newVal, oldVal) {
5
-
for (const key in oldVal) {
6
-
if (!hasOwnProperty(newVal, key)) {
8
+
handler(newValue, oldValue) {
9
+
if (looseEqual(newValue, oldValue)) {
10
+
return
11
+
}
12
+
if (isEmpty(newValue) || isEmpty(oldValue)) {
13
+
this[propName] = cloneDeep(newValue)
14
+
return
15
+
}
16
+
for (const key in oldValue) {
17
+
if (!hasOwnProperty(newValue, key)) {
7
18
this.$delete(this.$data[propName], key)
8
19
}
9
20
}
10
-
for (const key in newVal) {
11
-
this.$set(this.$data[propName], key, newVal[key])
21
+
for (const key in newValue) {
22
+
this.$set(this.$data[propName], key, newValue[key])
12
23
}
13
24
}
14
25
})
15
26
16
27
export const makePropCacheMixin = (propName, proxyPropName) => ({
17
28
data() {
18
-
return {
19
-
[proxyPropName]: {}
20
-
}
29
+
return { [proxyPropName]: cloneDeep(this[propName]) }
21
30
},
22
31
watch: {
23
32
// Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115
24
33
[propName]: makePropWatcher(proxyPropName)
25
-
},
26
-
created() {
27
-
this[proxyPropName] = { ...this[propName] }
28
34
}
29
35
})
You can’t perform that action at this time.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4