firex-store
If you use this npm, you can read and write firestore data in Vuex, easily.
- It is inspired by vuexfire
- With this NPM, you can read and write Firestore data in Vuex like the following code
import { FirestoreMapper } from 'firex-store'
class Model extends FirestoreMapper {
static fromJson(data) {
return new Model(data.id, `${data.family_name} ${data.first_name}` )
}
static toJson(data) {
return { id: data.id, family_name: data.fullName.split(' ')[0], first_name: data.fullName.split(' ')[1] }
}
construnctor(id, fullName) {
this.id = id
this.fullName = fullName
}
}
import { to, from, on, firestoreMutations, bindTo, map } from 'firex-store'
import { Model } from '~/model'
import { firestore } from '~/plugins/firebase'
export default {
state: {
comments: [],
isLoaded: false
},
mutations: {
...firestoreMutations('collection'),
setIsLoaded: (state, isLast) => {
state.isLoaded = isLast
}
},
actions: {
streamSubscribe: ({ state, commit }) => {
const toComment = (data) => new Comment(...data)
const ref = firestore.collection('comments')
from(ref)
.pipe(
map(toComment),
bindTo('comments'),
(({ isLast }) => commit('setIsLoaded', isLast))
)
.subscribe(state, commit)
},
subscribe: ({ state, commit }) => {
const ref = firestore.collection('comments')
from(ref)
.mapOf(Model)
.bindTo('comments')
.subscribe(state, commit, )
},
subscribeOnce: async ({ commit }) => {
const ref = firestore.collection('comments')
await from(ref)
.mapOf(Model)
.bindTo('comments')
.subscribeOnce(commit, )
}
unsubscribe: ({ state }) => {
on('comments').unsubscribe(state)
},
find: async (_, { commentId }) => {
const ref = firestore.collection('comments').doc(commentId)
result = await from(ref)
.once()
.mapOf(Model)
.find()
return result
},
add: (_, { data }) => {
const ref = firestore.collection('comments')
return to(ref)
.mapOf(Model)
.add(data, )
},
set: (_, { data, commentId }) => {
const ref = firestore.collection('comments').doc(commentId)
return to(ref)
.mapOf(Model)
.transaction()
.set(data, )
},
mergeSet: (_, { data, commentId }) => {
const ref = firestore.collection('comments').doc(commentId)
return to(ref)
.mapOf(Model)
.transaction()
.mergeSet(data, )
},
delete: (_) => {
const ref = firestore.collection('comments').doc('commentId')
return to(ref)
.transaction()
.delete()
}
}
}
Installation
npm install --save firex-store
Example
Important
-
Return values or state values bound to Firestore has docId
(documentId in Firestore) property.
-
A state in store cannot subscribe to more than one 'collection' and 'document'
-
If you'd like to subscribe again after unsubscribing 'collection', set the property of the store you'd like to subscribe to []
and then subscribe.
-
If you'd like to use helper method in pipe function, use stream-executor library.
Usage
- If you'd like to know more, see here, please
Difference from v0
- If you'd like to know more, see here, please
v0 Usage
- If you'd like to know more, see here, please