diff --git a/components/NewsDirectory.vue b/components/NewsDirectory.vue
index d84e548..73b3092 100644
--- a/components/NewsDirectory.vue
+++ b/components/NewsDirectory.vue
@@ -1,3 +1,4 @@
+
} = {};
+// const taskStates: { [key: string]: } = {};
+const taskStates = new Map>();
function handleUpdateMessage(msg: TaskMessage) {
const taskStates = useTaskStates();
- const state = taskStates[msg.id];
+ const state = taskStates.get(msg.id);
if (!state) return;
if (!state.value || msg.reset) {
state.value = msg;
@@ -29,18 +30,22 @@ websocketHandler.listen((message) => {
const [action, ...data] = message.split("/");
switch (action) {
- case "connect":
+ case "connect": {
const taskReady = useTaskReady();
taskReady.value = true;
break;
- case "disconnect":
+ }
+ case "disconnect": {
const disconnectTaskId = data[0];
- delete taskStates[disconnectTaskId];
+ taskStates.delete(disconnectTaskId);
console.log(`disconnected from ${disconnectTaskId}`);
break;
- case "error":
+ }
+ case "error": {
const [taskId, title, description] = data;
- taskStates[taskId].value ??= {
+ const state = taskStates.get(taskId);
+ if (!state) break;
+ state.value ??= {
id: taskId,
name: "Unknown task",
success: false,
@@ -48,8 +53,9 @@ websocketHandler.listen((message) => {
error: undefined,
log: [],
};
- taskStates[taskId].value.error = { title, description };
+ state.value.error = { title, description };
break;
+ }
}
}
});
@@ -61,15 +67,12 @@ export const useTaskReady = () => useState("taskready", () => false);
export const useTask = (taskId: string): Ref => {
if (import.meta.server) return ref(undefined);
const taskStates = useTaskStates();
- if (
- taskStates[taskId] &&
- taskStates[taskId].value &&
- !taskStates[taskId].value.error
- )
- return taskStates[taskId];
+ const task = taskStates.get(taskId);
+ if (task && task.value && !task.value.error) return task;
- taskStates[taskId] = ref(undefined);
+ taskStates.set(taskId, ref(undefined));
console.log("connecting to " + taskId);
websocketHandler.send(`connect/${taskId}`);
- return taskStates[taskId];
+ // TODO: this may have changed behavior
+ return taskStates.get(taskId) ?? ref(undefined);
};
diff --git a/composables/ws.ts b/composables/ws.ts
index 01db40f..282cc30 100644
--- a/composables/ws.ts
+++ b/composables/ws.ts
@@ -30,7 +30,7 @@ export class WebSocketHandler {
this.ws.onmessage = (e) => {
const message = e.data;
switch (message) {
- case "unauthenticated":
+ case "unauthenticated": {
const error = createError({
statusCode: 403,
statusMessage: "Unable to connect to websocket - unauthenticated",
@@ -40,6 +40,7 @@ export class WebSocketHandler {
} else {
throw error;
}
+ }
}
if (this.listeners.length == 0) {
this.inQueue.push(message);
diff --git a/error.vue b/error.vue
index f8314bf..c6b0489 100644
--- a/error.vue
+++ b/error.vue
@@ -2,7 +2,10 @@
import type { NuxtError } from "#app";
const props = defineProps({
- error: Object as () => NuxtError,
+ error: {
+ type: Object as () => NuxtError,
+ default: () => ({}),
+ },
});
const route = useRoute();
@@ -105,7 +108,7 @@ if (import.meta.client) {
src="/wallpapers/error-wallpaper.jpg"
class="absolute inset-0 h-full w-full object-cover"
alt=""
- >
+ />