Хранилище доступа Nuxt (в режиме модуля) из файла JS - PullRequest
1 голос
/ 14 февраля 2020

У меня есть AuthService, который я использую в хранилище имен в моем приложении Nuxt. Мне нужно зафиксировать мутации из AuthService в хранилище пространств имен, но я не могу понять, как импортировать хранилище в мой AuthService.

Я видел примеры, когда хранилище импортируется в файл JS, но хранилище явно определено в приложении Vue. Поскольку я использую Nuxt с режимом модуля для своего магазина, я не уверен в пути root, где я могу импортировать свое хранилище в файл AuthService. Насколько я понимаю, Nuxt обрабатывает создание хранилища root и всех хранилищ пространств имен за кулисами, когда используется «Режим модуля»

Каталог My Nuxt store включает index.js (который пуст) и auth.js с мутациями, которые я хочу вызвать из AuthService.

auth. js

import AuthService from '../firebase/authService'

const authService = new AuthService()

export const state = () => ({
  user: null
})

export const mutations = {
  setUser (state, user) {
    state.user = user
  }
}

export const actions = {
  async signUp ({ commit }, payload) {
    try {
      await authServices.createUser(payload)
      return Promise.resolve()
    } catch (err) {
      const notification = {
        duration: 5000,
        message: err.message,
        type: 'error'
      }
      commit('ui/activateNotification', notification, { root: true })
      return Promise.reject()
    }
  }
}

authService. js

import { fAuth, fDb } from './config'

// I think I need to import auth store here but I'm not sure how

export default class AuthClient {
  async createUser (payload) {
    try {
      const res = await fAuth.createUserWithEmailAndPassword(payload.email, payload.password)
      const { uid } = res.user
      const user = {
        ...payload,
        uid
      }
      await this._createUserDoc(user)
      this._initAuthListener()
      return Promise.resolve()
    } catch (err) {
      return Promise.reject(err)
    }
  }

  async _createUserDoc (user) {
    await fDb.collection('users').doc(user.uid).set(user)
  }

  _initAuthListener () {
    fAuth.onAuthStateChanged(async (user) => {
      try {
        if (user) {
          const userProfileRef = fDb.collection('users').doc(user.uid)
          const userProfileDoc = await userProfileRef.get()
          const { uid, userName } = userProfileDoc.data()

          // Here is where I want to call a mutation from the auth store

          this.store.commit('setUser', {
            uid,
            userName
          })
        } else {
          this.store.commit('setUser', null)
        }
      } catch (err) {
        console.log(err)
      }
    })
  }
}

...