vuex-class-component
                                
                                
                                
                                    vuex-class-component copied to clipboard
                            
                            
                            
                        Feature request: create proxy inside of VuexModule
Wow this library is fantastic -- makes working with vuex modules much more intuitive and easy to use w/ type safety and intellisense!
The first module I implemented had to call out to another module that houses same shared logic, so I implemented using the raw action context, which worked but I lost all the type safety
import { VuexModule, Module, getter, action, getRawActionContext, mutation } from 'vuex-class-component';
import RootState from '../../types/RootState'
import Product from '../../types/product/Product';
import bodybuilder from 'bodybuilder';
export interface SubscriptionState {
  subscriptions: Product[] | [],
}
@Module({ namespacedPath: 'subscriptions/' })
export class SubscriptionStore extends VuexModule {
  @getter items: Product[] = []
  @mutation
  loadItems (items: Product[]) {
    this.items = items
  }
  @action({ mode: 'raw'})
  load (): Promise<void> {
    const context = getRawActionContext(this)
    const query = bodybuilder()
      .query('match', 'category.name', 'Subscriptions')
      .build()
    return context.dispatch('product/list', { query, start: 0, size: 10, updateState: false }, { root: true }).then(resp => {
      const subscriptions = (resp.items as Product[]).sort((p1, p2) => +p1.order - (+p2.order))
      context.commit('loadItems', subscriptions)
    }).catch((err) => {
      console.error(err)
    })
  }
}
Would it be possible to create a proxy that takes a VuexModule as a constructor? So inside my subscription vuex module it would look like:
product = ProductStore.CreateProxy(ProductStore, this)
Could that proxy method leverage the raw context to generate the necessary proxy? And then you have all the type safety you need when dispatching an action to another module
@cmeyertons With #23 you can create a proxy from inside your actions, like so:
@Module({ namespacedPath: 'subscriptions/' })
export class SubscriptionStore extends VuexModule {
  @getter items: Product[] = []
  @mutation
  loadItems (items: Product[]) {
    this.items = items
  }
  @action
  load (): Promise<void> {
    const productStore = ProductStore.CreateProxy(this.$store, ProductStore)
    const query = bodybuilder()
      .query('match', 'category.name', 'Subscriptions')
      .build()
    return productStore.list({query, start: 0, size: 10, updateState: false }}
        .then(resp => {
      const subscriptions = (resp.items as Product[]).sort((p1, p2) => +p1.order - (+p2.order))
      this.loadItems(subscriptions)
    }).catch((err) => {
      console.error(err)
    })
  }
}
                                    
                                    
                                    
                                
awesome! do you happen to know what version this will be released in?
I'm pretty sure it's already in the latest version