davestewart / vuex-pathify

Vue / Vuex plugin providing a unified path syntax to Vuex stores
https://davestewart.github.io/vuex-pathify
MIT License
1.37k stars 57 forks source link

should the get() component helper reference getters, vis-a-vis variable expansion #85

Open shasderias opened 5 years ago

shasderias commented 5 years ago

Thank you for the library! Ran into a "problem" when using the get() component helper. Not sure if a change is necessary (other than perhaps clarifying the documentation). For your consideration.

When used as a component helper, it seems that:

  1. get() references getters and state; and
  2. sync() references state only.

I think in line with Pathify's accessor priority, this is fine. But when the path passed to get() references a getter and there is a variable to be expanded in the path, get() does not work. See the following link for a repro:

Code Sandbox

There are a few distinct issues that might be worth addressing here:

davestewart commented 5 years ago

Hey @shasderias

Thanks for the ticket and demo.

You mention variable expansion, but I can't see that in the demo link you posted.

And I can't tell what problem you are having from the demo, as it seems to work as intended.

Is that correct?

shasderias commented 5 years ago

Ugh. Apparently I can't work websites.

Code Sandbox

Relevant statements from App.vue, lines 52-54 (1) aryByGet: get("ary@[:index]"), (2) aryBySync: sync("ary@[:index]"), (3) aryByGetNoSubPropOperator: get("ary[:index]")

Just discovered while recreating the demo, that in addition to (2), (3) also works. The issue I was trying to report is why (2) works, but (1) doesn't. I wonder if this is user error.

Sorry for the noise, please take another look.

davestewart commented 5 years ago

That's OK, I don't mind helping!

Maybe you're the lucky one who's found a bug 😆

bkarlson commented 4 years ago

Just stumbled upon this as well, for those who come here googling:

This works:

  ...get('userStore/', {cart: 'carts[:lastShopId]'}),
  ...sync('userStore/', {syncCart: 'carts@:lastShopId'}),

While this does not:

...get('userStore/', {cart: 'carts@:lastShopId'}),

From reading the docs I cannot graps why second get is not defined.. but at least there's a workaround.

davestewart commented 4 years ago

OK, there's been quite a lot of activity here.

I guess thing for me to look at is this:

...when a path passed to get() references a getter and there is a variable to be expanded in the path, get() does not work

Is that right?

bkarlson commented 4 years ago

yes, correct, but the getter is created by pathify itself, i.e. I'm just trying to access a property in a storage using ...get() with var expansion.