diff --git a/src/store.ts b/src/store.ts index 78a8cfd8..78d98894 100644 --- a/src/store.ts +++ b/src/store.ts @@ -47,7 +47,7 @@ export class Store extends EventBus { env: any; observer: Observer; set: any; - getters: { [name: string]: Getter }; + getters: { [name: string]: (payload?) => any }; constructor(config: StoreConfig, options: StoreOption = {}) { super(); @@ -70,12 +70,9 @@ export class Store extends EventBus { for (let entry of Object.entries(config.getters || {})) { const name: string = entry[0]; const func: (...any) => any = entry[1]; - Object.defineProperty(this.getters, name, { - get: func.bind(this, { - state: this.state, - getters: this.getters - }) - }); + this.getters[name] = payload => { + return func({ state: this.state, getters: this.getters }, payload); + } } } diff --git a/tests/store.test.ts b/tests/store.test.ts index f4b2d108..70f2a801 100644 --- a/tests/store.test.ts +++ b/tests/store.test.ts @@ -187,10 +187,8 @@ describe("basic use", () => { }, }; const getters = { - beerTasterName({ state }) { - return beerID => { - return state.tasters[state.beers[beerID].tasterID].name; - } + beerTasterName({ state }, beerID) { + return state.tasters[state.beers[beerID].tasterID].name; }, bestBeerName({ state }) { return state.beers[1].name; @@ -198,7 +196,7 @@ describe("basic use", () => { }; const store = new Store({ state, mutations: {}, actions: {}, getters }); expect(store.getters).toBeDefined(); - expect((store.getters).bestBeerName).toBe("bertinchamps"); + expect((store.getters).bestBeerName()).toBe("bertinchamps"); expect((store.getters).beerTasterName(1)).toBe("aaron"); }); @@ -220,10 +218,8 @@ describe("basic use", () => { }, }; const getters = { - beerTasterName({ state }) { - return beerID => { - return state.tasters[state.beers[beerID].tasterID].name; - } + beerTasterName({ state }, beerID) { + return state.tasters[state.beers[beerID].tasterID].name; }, bestBeerName({ state }) { return state.beers[1].name; @@ -232,7 +228,7 @@ describe("basic use", () => { const actions = { action({ getters }) { expect(getters).toBeDefined(); - expect(getters.bestBeerName).toBe("bertinchamps"); + expect(getters.bestBeerName()).toBe("bertinchamps"); expect(getters.beerTasterName(1)).toBe("aaron"); } }; @@ -258,10 +254,8 @@ describe("basic use", () => { }, }; const getters = { - beerTasterName({ state }) { - return beerID => { - return state.tasters[state.beers[beerID].tasterID].name; - } + beerTasterName({ state }, beerID) { + return state.tasters[state.beers[beerID].tasterID].name; }, bestBeerName({ state }) { return state.beers[1].name; @@ -270,7 +264,7 @@ describe("basic use", () => { const mutations = { mutation({ getters }) { expect(getters).toBeDefined(); - expect(getters.bestBeerName).toBe("bertinchamps"); + expect(getters.bestBeerName()).toBe("bertinchamps"); expect(getters.beerTasterName(1)).toBe("aaron"); } }; @@ -281,18 +275,18 @@ describe("basic use", () => { test("can use getters inside a getter", () => { const getters = { a({ getters }) { - return `${getters.b}${getters.c(1)}`; + return `${getters.b()}${getters.c(1)}`; }, b() { return 'b'; }, - c() { - return i => `c${i}`; + c({}, i) { + return `c${i}`; }, }; const store = new Store({ getters }); - expect(store.getters.a).toBe('bc1'); + expect(store.getters.a()).toBe('bc1'); }); }); @@ -593,8 +587,8 @@ describe("connecting a component to store", () => { importantTodoText({ state }) { return state.todos.find(todo => todo.id === state.importantID).text; }, - text({ state }) { - return id => state.todos.find(todo => todo.id === id).text; + text({ state }, id) { + return state.todos.find(todo => todo.id === id).text; }, }; const store = new Store({ state, getters }); @@ -609,7 +603,7 @@ describe("connecting a component to store", () => { const todo = state.todos.find(t => t.id === props.id); return { activeTodoText: getters.text(todo.id), - importantTodoText: getters.importantTodoText, + importantTodoText: getters.importantTodoText(), }; })(TodoItem);