fix: item history page now live updates
This commit is contained in:
@@ -2,11 +2,12 @@ import { create } from 'zustand'
|
||||
import * as ItemController from '../client/controllers/ItemController'
|
||||
import { CreateItemQuery } from '../client/queries/CreateItemQuery'
|
||||
import { SetItemPriceQuery } from '../client/queries/SetItemPriceQuery'
|
||||
import { ItemPriceResponse, OrderFilledResponse, OrderItemPriceResponse } from '../client/response'
|
||||
import { ItemHistoryResponse, ItemPriceResponse, OrderFilledResponse, OrderItemPriceResponse } from '../client/response'
|
||||
|
||||
export type ItemData = {
|
||||
items: ItemPriceResponse[],
|
||||
orderItems: OrderItemPriceResponse[]
|
||||
itemHistories: ItemHistoryResponse[]
|
||||
}
|
||||
|
||||
export type ItemActions = {
|
||||
@@ -20,11 +21,13 @@ export type ItemActions = {
|
||||
setItemQuantity: (orderId: number, itemId: number, quantity: number) => Promise<OrderFilledResponse>
|
||||
deleteOrderItem: (orderId: number, itemId: number) => Promise<void>
|
||||
deleteItem: (itemId: number) => Promise<void>
|
||||
getItemHistory: (itemId: number) => Promise<ItemHistoryResponse[]>
|
||||
}
|
||||
|
||||
export const useItemStore = create<ItemData & ItemActions>((set, get) => ({
|
||||
items: [],
|
||||
orderItems: [],
|
||||
itemHistories: [],
|
||||
sync: async (): Promise<void> => {
|
||||
const itemPrices = await ItemController.GetItems()
|
||||
set((state) => ({
|
||||
@@ -52,7 +55,7 @@ export const useItemStore = create<ItemData & ItemActions>((set, get) => ({
|
||||
item_price: price.toString()
|
||||
}
|
||||
|
||||
await ItemController.SetItemPrice(itemPriceQuery)
|
||||
const itemPrice = await ItemController.SetItemPrice(itemPriceQuery)
|
||||
|
||||
set((state) => {
|
||||
const item = state.items.filter((i) => i.ItemId === itemId)[0]
|
||||
@@ -68,7 +71,14 @@ export const useItemStore = create<ItemData & ItemActions>((set, get) => ({
|
||||
if(!a.InSeason && b.InSeason)
|
||||
return -1
|
||||
return a.ItemId - b.ItemId
|
||||
})
|
||||
}),
|
||||
itemHistories: [...state.itemHistories, {
|
||||
ItemId: itemPrice.ItemId.toString(),
|
||||
ItemName: itemPrice.ItemName,
|
||||
ItemPrice: (Math.trunc(itemPrice.ItemPrice * 100) / 100).toString(),
|
||||
ValidFrom: new Date().toLocaleDateString(),
|
||||
ValidTo: new Date().toLocaleDateString()
|
||||
} as ItemHistoryResponse]
|
||||
}
|
||||
})
|
||||
},
|
||||
@@ -151,7 +161,7 @@ export const useItemStore = create<ItemData & ItemActions>((set, get) => ({
|
||||
const orderItem = state.orderItems.filter((oi) => oi.ItemId === itemId && oi.OrderId === orderId)[0]
|
||||
const orderItemsWithoutOrderItem = state.orderItems.filter((oi) => oi.ItemId !== itemId || oi.OrderId !== orderId)
|
||||
|
||||
orderItem.Quantity = quantity
|
||||
orderItem.Quantity= quantity
|
||||
|
||||
return {
|
||||
...state,
|
||||
@@ -183,5 +193,18 @@ export const useItemStore = create<ItemData & ItemActions>((set, get) => ({
|
||||
orderItems: orderItemsWithoutItem
|
||||
}
|
||||
})
|
||||
},
|
||||
getItemHistory: async (itemId: number): Promise<ItemHistoryResponse[]> => {
|
||||
const currHist = get().itemHistories.filter((ih) => parseInt(ih.ItemId) === itemId)
|
||||
if(currHist.length > 0)
|
||||
return currHist
|
||||
const itemHistory = await ItemController.GetItemHistory(itemId)
|
||||
|
||||
set((state) => ({
|
||||
...state,
|
||||
itemHistories: [...state.itemHistories, ...itemHistory]
|
||||
}))
|
||||
|
||||
return itemHistory
|
||||
}
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user