direct-vuex icon indicating copy to clipboard operation
direct-vuex copied to clipboard

Uncaught TypeError: rootCommit is undefined

Open rostamiani opened this issue 4 years ago • 1 comments

I have several modules and want to commit chat module from one on actions of the user module.

The problem:

i cannot use rootCommit. There is no Type error but at runtime this error occures:

Uncaught TypeError: rootCommit is undefined

This is my store:

const {
  store,
  rootActionContext,
  moduleActionContext,
  rootGetterContext,
  moduleGetterContext,
} = createDirectStore({
  state: {
    initialised: false,
  },
  actions: {
    // Some actions
  },
  mutations: {
    setInit(states) {
      states.initialised = true;
    },
  },
  modules: {
    chat: chatModule,
    user: userModule,
    session: sessionModule,
  },
});

export {
  store,
  rootActionContext,
  moduleActionContext,
  rootGetterContext,
  moduleGetterContext,
};

My userModule:

export const userModule = defineModule({
  namespaced: true as true,
  state: {
    userList: [],
    currentUserId: 0,
  } as UserStates,

  actions: userActions,
  mutations: userMutations,
  getters: userGetters,
});

And this is a part of my userActions:

export const userActions = defineActions({

  join(context) {
    const { rootCommit } = storeActionContext(context);
    
    Server.instance.send('something').subscribe((message)=>{
      rootCommit.chat.addMessage(message);
    })

  }

}

const storeActionContext = (context: any) =>
  moduleActionContext(context, userModule);

rostamiani avatar Jul 14 '20 07:07 rostamiani

It should work. Maybe you could add some debug log:

  join(context) {
    const directContext = storeActionContext(context);    
    Server.instance.send('something').subscribe((message)=>{
      console.log("directContext", directContext);
      directContext.rootCommit.chat.addMessage(message);
    })
  }

paleo avatar Jul 16 '20 10:07 paleo