fix: item history page now live updates

This commit is contained in:
2025-11-19 21:08:18 -07:00
parent 17f8f18574
commit 3382c0ef4e
7 changed files with 39 additions and 22 deletions

View File

@@ -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
}
}))