You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1016 B
TypeScript
37 lines
1016 B
TypeScript
import { defineStore } from 'pinia';
|
|
import { dummyList, users } from './dummyData';
|
|
|
|
type User = {
|
|
name: string;
|
|
};
|
|
|
|
type ShoppingItem = {
|
|
name: string;
|
|
price: number;
|
|
isBought: boolean;
|
|
user: User;
|
|
};
|
|
|
|
export const useShoppingListStore = defineStore('shoppingList', {
|
|
state() {
|
|
return {
|
|
items: dummyList as Array<ShoppingItem>,
|
|
users: users as Array<User>,
|
|
};
|
|
},
|
|
actions: {},
|
|
getters: {
|
|
openItems: state => state.items.filter(item => !item.isBought),
|
|
boughtItems: state => state.items.filter(item => !!item.isBought),
|
|
itemsByUser: state => groupItemsByUser(state.items),
|
|
openItemsByUser: state => groupItemsByUser(state.items.filter(item => !item.isBought)),
|
|
boughtItemsByUser: state => groupItemsByUser(state.items.filter(item => !!item.isBought)),
|
|
},
|
|
});
|
|
|
|
export const groupItemsByUser = items => items.reduce((groups, item) => {
|
|
if (!groups[item.user.name]) groups[item.user.name] = [];
|
|
groups[item.user.name].push(item);
|
|
return groups;
|
|
}, {});
|