47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
|
import { api } from 'src/boot/axios';
|
||
|
import { defineStore } from 'pinia';
|
||
|
|
||
|
export const usePricelistStore = defineStore({
|
||
|
id: 'pricelist',
|
||
|
|
||
|
state: () => ({
|
||
|
drinkTypes: [] as Array<FG.DrinkType>,
|
||
|
drinks: [] as Array<FG.Drink>,
|
||
|
}),
|
||
|
|
||
|
actions: {
|
||
|
async getDrinkTypes(force = false) {
|
||
|
if (force || this.drinks.length == 0) {
|
||
|
const { data } = await api.get<Array<FG.DrinkType>>('/pricelist/drink-types');
|
||
|
this.drinkTypes = data;
|
||
|
}
|
||
|
return this.drinkTypes;
|
||
|
},
|
||
|
async addDrinkType(name: string) {
|
||
|
const { data } = await api.post<FG.DrinkType>('/pricelist/drink-types', { name: name });
|
||
|
this.drinkTypes.push(data);
|
||
|
},
|
||
|
async removeDrinkType(id: number) {
|
||
|
await api.delete(`/pricelist/drink-types/${id}`);
|
||
|
const idx = this.drinkTypes.findIndex((val) => val.id == id);
|
||
|
if (idx >= 0) this.drinkTypes.splice(idx, 1);
|
||
|
},
|
||
|
async changeDrinkTypeName(drinkType: FG.DrinkType) {
|
||
|
await api.put(`/pricelist/drink-types/${drinkType.id}`, drinkType);
|
||
|
const itm = this.drinkTypes.filter((val) => val.id == drinkType.id);
|
||
|
if (itm.length > 0) itm[0].name = drinkType.name;
|
||
|
},
|
||
|
async getDrinks(force = false) {
|
||
|
if (force || this.drinks.length == 0) {
|
||
|
const { data } = await api.get<Array<FG.Drink>>('/pricelist/drinks');
|
||
|
this.drinks = data;
|
||
|
}
|
||
|
return this.drinks;
|
||
|
},
|
||
|
async createDrink(drink: FG.Drink) {
|
||
|
await api.post('/pricelist/drinks', drink);
|
||
|
this.drinks.push(drink);
|
||
|
},
|
||
|
},
|
||
|
});
|