Skip to content

Commit 0966eec

Browse files
committed
🐛 Add missing files
1 parent 5643e69 commit 0966eec

File tree

3 files changed

+84
-0
lines changed

3 files changed

+84
-0
lines changed

packages/vuexfire/src/mutations.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import {
2+
VUEXFIRE_SET_VALUE,
3+
VUEXFIRE_ARRAY_ADD,
4+
VUEXFIRE_ARRAY_REMOVE,
5+
} from './types'
6+
7+
import { walkSet } from './utils'
8+
9+
export default {
10+
[VUEXFIRE_SET_VALUE] (state, { path, target, data }) {
11+
walkSet(target, path, data)
12+
// state[key] = record
13+
},
14+
15+
[VUEXFIRE_ARRAY_ADD] (state, { newIndex, data, target }) {
16+
target.splice(newIndex, 0, data)
17+
},
18+
19+
[VUEXFIRE_ARRAY_REMOVE] (state, { oldIndex, target }) {
20+
return target.splice(oldIndex, 1)[0]
21+
},
22+
}

packages/vuexfire/src/types.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const VUEXFIRE_SET_VALUE = 'vuexfire/SET_VALUE'
2+
export const VUEXFIRE_ARRAY_ADD = 'vuexfire/ARRAY_ADD'
3+
export const VUEXFIRE_ARRAY_REMOVE = 'vuexfire/ARRAY_REMOVE'

packages/vuexfire/src/utils.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
export function createSnapshot (doc) {
2+
// defaults everything to false, so no need to set
3+
return Object.defineProperty(doc.data(), 'id', {
4+
value: doc.id,
5+
})
6+
}
7+
8+
const isObject = o => o && typeof o === 'object'
9+
10+
export function extractRefs (doc, oldDoc, path = '', result = [{}, {}]) {
11+
// must be set here because walkGet can return null or undefined
12+
oldDoc = oldDoc || {}
13+
const idDescriptor = Object.getOwnPropertyDescriptor(doc, 'id')
14+
if (idDescriptor && !idDescriptor.enumerable) {
15+
Object.defineProperty(result[0], 'id', idDescriptor)
16+
}
17+
return Object.keys(doc).reduce((tot, key) => {
18+
const ref = doc[key]
19+
// if it's a ref
20+
if (ref && typeof ref.isEqual === 'function') {
21+
tot[0][key] = oldDoc[key] || ref.path
22+
tot[1][path + key] = ref
23+
} else if (Array.isArray(ref)) {
24+
tot[0][key] = Array(ref.length).fill(null)
25+
extractRefs(ref, oldDoc[key], path + key + '.', [tot[0][key], tot[1]])
26+
} else if (isObject(ref)) {
27+
tot[0][key] = {}
28+
extractRefs(ref, oldDoc[key], path + key + '.', [tot[0][key], tot[1]])
29+
} else {
30+
tot[0][key] = ref
31+
}
32+
return tot
33+
}, result)
34+
}
35+
36+
export function callOnceWithArg (fn, argFn) {
37+
let called
38+
return () => {
39+
if (!called) {
40+
called = true
41+
return fn(argFn())
42+
}
43+
}
44+
}
45+
46+
export function walkGet (obj, path) {
47+
return path.split('.').reduce((target, key) => target[key], obj)
48+
}
49+
50+
export function walkSet (obj, path, value) {
51+
// path can be a number
52+
const keys = ('' + path).split('.')
53+
const key = keys.pop()
54+
const target = keys.reduce((target, key) => target[key], obj)
55+
// global isFinite is different from Number.isFinite
56+
// it converts values to numbers
57+
if (isFinite(key)) target.splice(key, 1, value)
58+
else target[key] = value
59+
}

0 commit comments

Comments
 (0)