import { defineStore } from 'pinia'; import { computed, ref } from 'vue'; import { useRoute } from 'vue-router'; import { ROUTE_NAMES } from '@/consts/routeNames'; import { api } from '@/plugins/axios'; import type { PaginatedResponse } from '@/types/PaginatedResponse'; import type { OrderExtended } from '@/types/order/OrderExtended'; import type { OrderListItem } from '@/types/order/OrderListItem'; import type { OrderMessage } from '@/types/order/OrderMessage'; import type { SetDeliveryCostPayload } from '@/types/order/SetDeliveryCostPayload'; export const useOrdersStore = defineStore('orders', () => { const route = useRoute(); const orderList = ref([]); const currentOrder = ref(null); const currentOrderId = computed(() => { if (route.name !== ROUTE_NAMES.OrderDetail) { return null; } const id = route.params.id; return typeof id === 'string' && id ? id : null; }); const fetchList = async ({ page, limit }: { page: number; limit: number; }): Promise> => { const { data } = await api.get>('/orders', { params: { page, limit } }); orderList.value = data.items; return data; }; const fetchById = async (id: string): Promise => { const { data } = await api.get(`/orders/${id}`); currentOrder.value = data; return data; }; const markChatRead = async (id: string): Promise => { await api.post(`/orders/${id}/messages/mark-read`); }; const sendMessage = async (id: string, body: string): Promise => { const { data } = await api.post(`/orders/${id}/messages`, { body }); if (currentOrder.value?.id === id) { currentOrder.value = { ...currentOrder.value, messages: data }; } return data; }; const deleteMessage = async (orderId: string, messageId: string): Promise => { const { data } = await api.delete(`/orders/${orderId}/messages/${messageId}`); if (currentOrder.value?.id === orderId) { currentOrder.value = { ...currentOrder.value, messages: data }; } return data; }; const setDeliveryCost = async (id: string, payload: SetDeliveryCostPayload): Promise => { const { data } = await api.post(`/orders/${id}/delivery-cost`, payload); currentOrder.value = data; return data; }; const fulfillManualLine = async (orderId: string, lineId: string): Promise => { const { data } = await api.post(`/orders/${orderId}/lines/${lineId}/fulfill`); currentOrder.value = data; return data; }; return { orderList, currentOrder, currentOrderId, fetchList, fetchById, markChatRead, sendMessage, deleteMessage, setDeliveryCost, fulfillManualLine }; });