feat: wire order and chat state flow
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
import { create } from "zustand"
|
||||
import { mockOrders } from "@/lib/mock"
|
||||
import type { Order, OrderStatus, PlayerService } from "@/lib/types"
|
||||
|
||||
interface CreateOrderInput {
|
||||
consumerId: string
|
||||
consumerName: string
|
||||
playerId: string
|
||||
playerName: string
|
||||
shopId?: string
|
||||
shopName?: string
|
||||
service: PlayerService
|
||||
totalPrice: number
|
||||
note?: string
|
||||
status?: OrderStatus
|
||||
}
|
||||
|
||||
interface OrderState {
|
||||
orders: Order[]
|
||||
createOrder: (input: CreateOrderInput) => Order
|
||||
updateOrderStatus: (orderId: string, status: OrderStatus) => void
|
||||
}
|
||||
|
||||
export const useOrderStore = create<OrderState>((set) => ({
|
||||
orders: mockOrders,
|
||||
createOrder: (input) => {
|
||||
const order: Order = {
|
||||
id: `ord${Date.now()}`,
|
||||
consumerId: input.consumerId,
|
||||
consumerName: input.consumerName,
|
||||
playerId: input.playerId,
|
||||
playerName: input.playerName,
|
||||
shopId: input.shopId,
|
||||
shopName: input.shopName,
|
||||
service: input.service,
|
||||
status: input.status ?? "pending_payment",
|
||||
totalPrice: input.totalPrice,
|
||||
note: input.note?.trim() ? input.note.trim() : undefined,
|
||||
createdAt: new Date().toISOString(),
|
||||
}
|
||||
|
||||
set((state) => ({
|
||||
orders: [order, ...state.orders],
|
||||
}))
|
||||
|
||||
return order
|
||||
},
|
||||
updateOrderStatus: (orderId, status) =>
|
||||
set((state) => ({
|
||||
orders: state.orders.map((order) => {
|
||||
if (order.id !== orderId) return order
|
||||
|
||||
const now = new Date().toISOString()
|
||||
|
||||
switch (status) {
|
||||
case "in_progress":
|
||||
return {
|
||||
...order,
|
||||
status,
|
||||
acceptedAt: order.acceptedAt ?? now,
|
||||
}
|
||||
case "pending_review":
|
||||
return {
|
||||
...order,
|
||||
status,
|
||||
closedAt: order.closedAt ?? now,
|
||||
}
|
||||
case "completed":
|
||||
return {
|
||||
...order,
|
||||
status,
|
||||
closedAt: order.closedAt ?? now,
|
||||
completedAt: order.completedAt ?? now,
|
||||
}
|
||||
default:
|
||||
return {
|
||||
...order,
|
||||
status,
|
||||
}
|
||||
}
|
||||
}),
|
||||
})),
|
||||
}))
|
||||
Reference in New Issue
Block a user