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

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;
}, {});