You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.1 KiB
66 lines
2.1 KiB
1 month ago
|
import { create } from 'zustand';
|
||
|
import { ordersApi, PaginatedOrderResponse, PaginatedOrderRequest,UpdateOrderShippingInfo} from '../services/api/orders';
|
||
|
|
||
|
interface OrderListState {
|
||
|
orders: PaginatedOrderResponse,
|
||
|
getAllOrders: (data: PaginatedOrderRequest,page:number) => Promise<void>,
|
||
|
deleteOrder: (orderId: string) => Promise<void>,
|
||
|
changeOrder: (orderId: string,status:number) => Promise<void>,
|
||
|
updateOrderShippingInfo: (orderId: string,data:UpdateOrderShippingInfo) => Promise<void>,
|
||
|
}
|
||
|
|
||
|
export const useOrderListStore = create<OrderListState>((set, get) => ({
|
||
|
orders: {
|
||
|
items: [],
|
||
|
total: 0,
|
||
|
page: 1,
|
||
|
page_size: 10,
|
||
|
},
|
||
|
|
||
|
getAllOrders: async (data: PaginatedOrderRequest,page:number) => {
|
||
|
const response = await ordersApi.getAllOrders(data);
|
||
|
set((state) => ({
|
||
|
orders: {
|
||
|
...response,
|
||
|
items: page === 1
|
||
|
? response.items
|
||
|
: [...state.orders.items, ...response.items],
|
||
|
}
|
||
|
}));
|
||
|
},
|
||
|
|
||
|
deleteOrder: async (orderId: string) => {
|
||
|
await ordersApi.deleteOrder(orderId);
|
||
|
set((state) => ({
|
||
|
orders: {
|
||
|
...state.orders,
|
||
|
items: state.orders.items.filter(item => item.order_id !== orderId),
|
||
|
total: state.orders.total - 1
|
||
|
}
|
||
|
}));
|
||
|
},
|
||
|
|
||
|
changeOrder: async (orderId: string,status:number) => {
|
||
|
await ordersApi.changeOrder(orderId,status);
|
||
|
set((state) => ({
|
||
|
orders: {
|
||
|
...state.orders,
|
||
|
items: state.orders.items.filter(item => item.order_id !== orderId),
|
||
|
total: state.orders.total - 1
|
||
|
}
|
||
|
}));
|
||
|
},
|
||
|
|
||
|
updateOrderShippingInfo: async (orderId: string,data:UpdateOrderShippingInfo) => {
|
||
|
await ordersApi.updateOrderShippingInfo(orderId,data);
|
||
|
set((state) => ({
|
||
|
orders: {
|
||
|
...state.orders,
|
||
|
items: state.orders.items.filter(item => item.order_id !== orderId),
|
||
|
total: state.orders.total - 1
|
||
|
}
|
||
|
}));
|
||
|
},
|
||
|
}));
|
||
|
|