Restructure project

This commit is contained in:
Florian Hoss 2023-07-04 23:07:23 +02:00
parent e44e7caa11
commit 16b2f17301
46 changed files with 1744 additions and 1265 deletions

View file

@ -18,7 +18,6 @@ import "primeicons/primeicons.css";
import "primeflex/primeflex.css";
export const API_ENDPOINT_URL = window.origin + "/api";
export const WEBSOCKET_ENDPOINT_URL = API_ENDPOINT_URL.replace("http", "ws") + "/orders/ws";
OpenAPI.BASE = API_ENDPOINT_URL;
async function getHealth() {

View file

@ -27,7 +27,7 @@ import { computed, defineComponent, onUnmounted, provide, ref } from "vue";
import BaseCard from "@/components/UI/BaseCard.vue";
import { OrdersService, service_Order, types_ItemType, user_User } from "@/services/openapi";
import { detailedItemTypeIcon, detailedItemTypeString, NotifierType, WebSocketMsg } from "@/utils";
import { WEBSOCKET_ENDPOINT_URL } from "@/main";
import { API_ENDPOINT_URL } from "@/main";
import EmptyView from "@/views/Empty.vue";
import WaveSpinner from "@/components/UI/WaveSpinner.vue";
import { disabled, loading } from "@/keys";
@ -68,7 +68,7 @@ export default defineComponent({
return new Map([...temp.entries()].sort());
});
const coldOrders = computed(() => orders.value.filter((order) => order.order_item.item_type === types_ItemType.ColdDrink));
const ws = ref<WebSocket | null>(null);
const sse = ref<EventSource | null>(null);
getData();
function getData() {
@ -77,51 +77,36 @@ export default defineComponent({
.then((res) => (orders.value = res))
.finally(() => {
isLoading.value = false;
startWebsocket();
setupSSE();
});
}
onUnmounted(() => stopWebsocket());
onUnmounted(() => sse.value && sse.value.close());
addEventListener("beforeunload", () => {
sse.value && sse.value.close();
});
function filterOrder(id: number) {
orders.value = orders.value.filter((old) => old.id !== id);
}
function startWebsocket() {
ws.value = new WebSocket(WEBSOCKET_ENDPOINT_URL);
ws.value.addEventListener("message", parseWebsocket);
ws.value.addEventListener("error", handleWebsocketError);
}
function stopWebsocket() {
if (ws.value) {
ws.value.removeEventListener("message", parseWebsocket);
ws.value.removeEventListener("error", handleWebsocketError);
ws.value.close();
}
}
function handleWebsocketError() {
stopWebsocket();
setTimeout(() => {
startWebsocket();
}, 1000);
}
function parseWebsocket(evt: Event) {
isDisabled.value = true;
const messageEvent = evt as MessageEvent;
const webSocketMsg: WebSocketMsg = JSON.parse(messageEvent.data);
if (webSocketMsg.type === NotifierType.Create) {
orders.value.push(webSocketMsg.payload[0]);
} else if (webSocketMsg.type === NotifierType.Delete) {
orders.value = orders.value.filter((o) => o.id !== webSocketMsg.payload[0].id);
} else if (webSocketMsg.type === NotifierType.DeleteAll) {
webSocketMsg.payload.forEach((obj) => {
orders.value = orders.value.filter((o) => o.id !== obj.id);
});
}
sortOrders();
isDisabled.value = false;
function setupSSE() {
sse.value = new EventSource(API_ENDPOINT_URL + "/orders/sse?stream=sse");
sse.value.onmessage = (evt: Event) => {
isDisabled.value = true;
const messageEvent = evt as MessageEvent;
const webSocketMsg: WebSocketMsg = JSON.parse(messageEvent.data);
if (webSocketMsg.type === NotifierType.Create) {
orders.value.push(webSocketMsg.payload[0]);
} else if (webSocketMsg.type === NotifierType.Delete) {
orders.value = orders.value.filter((o) => o.id !== webSocketMsg.payload[0].id);
} else if (webSocketMsg.type === NotifierType.DeleteAll) {
webSocketMsg.payload.forEach((obj) => {
orders.value = orders.value.filter((o) => o.id !== obj.id);
});
}
sortOrders();
isDisabled.value = false;
};
}
function sortOrders() {