init
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
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<OrderListItem[]>([]);
|
||||
const currentOrder = ref<OrderExtended | null>(null);
|
||||
|
||||
const currentOrderId = computed<string | null>(() => {
|
||||
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<PaginatedResponse<OrderListItem>> => {
|
||||
const { data } = await api.get<PaginatedResponse<OrderListItem>>('/orders', {
|
||||
params: { page, limit }
|
||||
});
|
||||
|
||||
orderList.value = data.items;
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
const fetchById = async (id: string): Promise<OrderExtended> => {
|
||||
const { data } = await api.get<OrderExtended>(`/orders/${id}`);
|
||||
|
||||
currentOrder.value = data;
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
const markChatRead = async (id: string): Promise<void> => {
|
||||
await api.post(`/orders/${id}/messages/mark-read`);
|
||||
};
|
||||
|
||||
const sendMessage = async (id: string, body: string): Promise<OrderMessage[]> => {
|
||||
const { data } = await api.post<OrderMessage[]>(`/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<OrderMessage[]> => {
|
||||
const { data } = await api.delete<OrderMessage[]>(`/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<OrderExtended> => {
|
||||
const { data } = await api.post<OrderExtended>(`/orders/${id}/delivery-cost`, payload);
|
||||
|
||||
currentOrder.value = data;
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
const fulfillManualLine = async (orderId: string, lineId: string): Promise<OrderExtended> => {
|
||||
const { data } = await api.post<OrderExtended>(`/orders/${orderId}/lines/${lineId}/fulfill`);
|
||||
|
||||
currentOrder.value = data;
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
return {
|
||||
orderList,
|
||||
currentOrder,
|
||||
currentOrderId,
|
||||
fetchList,
|
||||
fetchById,
|
||||
markChatRead,
|
||||
sendMessage,
|
||||
deleteMessage,
|
||||
setDeliveryCost,
|
||||
fulfillManualLine
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user