mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[REF] store: make getters functions instead of properties
This commit is contained in:
+4
-7
@@ -47,7 +47,7 @@ export class Store extends EventBus {
|
|||||||
env: any;
|
env: any;
|
||||||
observer: Observer;
|
observer: Observer;
|
||||||
set: any;
|
set: any;
|
||||||
getters: { [name: string]: Getter };
|
getters: { [name: string]: (payload?) => any };
|
||||||
|
|
||||||
constructor(config: StoreConfig, options: StoreOption = {}) {
|
constructor(config: StoreConfig, options: StoreOption = {}) {
|
||||||
super();
|
super();
|
||||||
@@ -70,12 +70,9 @@ export class Store extends EventBus {
|
|||||||
for (let entry of Object.entries(config.getters || {})) {
|
for (let entry of Object.entries(config.getters || {})) {
|
||||||
const name: string = entry[0];
|
const name: string = entry[0];
|
||||||
const func: (...any) => any = entry[1];
|
const func: (...any) => any = entry[1];
|
||||||
Object.defineProperty(this.getters, name, {
|
this.getters[name] = payload => {
|
||||||
get: func.bind(this, {
|
return func({ state: this.state, getters: this.getters }, payload);
|
||||||
state: this.state,
|
}
|
||||||
getters: this.getters
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+16
-22
@@ -187,10 +187,8 @@ describe("basic use", () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
const getters = {
|
const getters = {
|
||||||
beerTasterName({ state }) {
|
beerTasterName({ state }, beerID) {
|
||||||
return beerID => {
|
return state.tasters[state.beers[beerID].tasterID].name;
|
||||||
return state.tasters[state.beers[beerID].tasterID].name;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
bestBeerName({ state }) {
|
bestBeerName({ state }) {
|
||||||
return state.beers[1].name;
|
return state.beers[1].name;
|
||||||
@@ -198,7 +196,7 @@ describe("basic use", () => {
|
|||||||
};
|
};
|
||||||
const store = new Store({ state, mutations: {}, actions: {}, getters });
|
const store = new Store({ state, mutations: {}, actions: {}, getters });
|
||||||
expect(store.getters).toBeDefined();
|
expect(store.getters).toBeDefined();
|
||||||
expect((<any>store.getters).bestBeerName).toBe("bertinchamps");
|
expect((<any>store.getters).bestBeerName()).toBe("bertinchamps");
|
||||||
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
|
expect((<any>store.getters).beerTasterName(1)).toBe("aaron");
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -220,10 +218,8 @@ describe("basic use", () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
const getters = {
|
const getters = {
|
||||||
beerTasterName({ state }) {
|
beerTasterName({ state }, beerID) {
|
||||||
return beerID => {
|
return state.tasters[state.beers[beerID].tasterID].name;
|
||||||
return state.tasters[state.beers[beerID].tasterID].name;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
bestBeerName({ state }) {
|
bestBeerName({ state }) {
|
||||||
return state.beers[1].name;
|
return state.beers[1].name;
|
||||||
@@ -232,7 +228,7 @@ describe("basic use", () => {
|
|||||||
const actions = {
|
const actions = {
|
||||||
action({ getters }) {
|
action({ getters }) {
|
||||||
expect(getters).toBeDefined();
|
expect(getters).toBeDefined();
|
||||||
expect(getters.bestBeerName).toBe("bertinchamps");
|
expect(getters.bestBeerName()).toBe("bertinchamps");
|
||||||
expect(getters.beerTasterName(1)).toBe("aaron");
|
expect(getters.beerTasterName(1)).toBe("aaron");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -258,10 +254,8 @@ describe("basic use", () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
const getters = {
|
const getters = {
|
||||||
beerTasterName({ state }) {
|
beerTasterName({ state }, beerID) {
|
||||||
return beerID => {
|
return state.tasters[state.beers[beerID].tasterID].name;
|
||||||
return state.tasters[state.beers[beerID].tasterID].name;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
bestBeerName({ state }) {
|
bestBeerName({ state }) {
|
||||||
return state.beers[1].name;
|
return state.beers[1].name;
|
||||||
@@ -270,7 +264,7 @@ describe("basic use", () => {
|
|||||||
const mutations = {
|
const mutations = {
|
||||||
mutation({ getters }) {
|
mutation({ getters }) {
|
||||||
expect(getters).toBeDefined();
|
expect(getters).toBeDefined();
|
||||||
expect(getters.bestBeerName).toBe("bertinchamps");
|
expect(getters.bestBeerName()).toBe("bertinchamps");
|
||||||
expect(getters.beerTasterName(1)).toBe("aaron");
|
expect(getters.beerTasterName(1)).toBe("aaron");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -281,18 +275,18 @@ describe("basic use", () => {
|
|||||||
test("can use getters inside a getter", () => {
|
test("can use getters inside a getter", () => {
|
||||||
const getters = {
|
const getters = {
|
||||||
a({ getters }) {
|
a({ getters }) {
|
||||||
return `${getters.b}${getters.c(1)}`;
|
return `${getters.b()}${getters.c(1)}`;
|
||||||
},
|
},
|
||||||
b() {
|
b() {
|
||||||
return 'b';
|
return 'b';
|
||||||
},
|
},
|
||||||
c() {
|
c({}, i) {
|
||||||
return i => `c${i}`;
|
return `c${i}`;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const store = new Store({ getters });
|
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 }) {
|
importantTodoText({ state }) {
|
||||||
return state.todos.find(todo => todo.id === state.importantID).text;
|
return state.todos.find(todo => todo.id === state.importantID).text;
|
||||||
},
|
},
|
||||||
text({ state }) {
|
text({ state }, id) {
|
||||||
return id => state.todos.find(todo => todo.id === id).text;
|
return state.todos.find(todo => todo.id === id).text;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
const store = new Store({ state, getters });
|
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);
|
const todo = state.todos.find(t => t.id === props.id);
|
||||||
return {
|
return {
|
||||||
activeTodoText: getters.text(todo.id),
|
activeTodoText: getters.text(todo.id),
|
||||||
importantTodoText: getters.importantTodoText,
|
importantTodoText: getters.importantTodoText(),
|
||||||
};
|
};
|
||||||
})(TodoItem);
|
})(TodoItem);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user