Get new frontend to type check clean

Epic undertaking.
This commit is contained in:
Eli Ribble 2026-03-31 14:52:53 +00:00
parent 6f9a511874
commit 21b7b68f50
No known key found for this signature in database
52 changed files with 1616 additions and 1126 deletions

View file

@ -1,15 +1,14 @@
import { defineStore } from "pinia";
import { ref } from "vue";
import { ReviewTask } from "../types";
import { SSEManager } from "../SSEManager";
import { useUserStore } from "./user";
import { SSEManager } from "@/SSEManager";
import { ReviewTask } from "@/types";
import { useSessionStore } from "@/store/session";
export const useReviewTaskStore = defineStore("review-task", () => {
// State
const _byID = ref<Map<int, ReviewTask>>(new Map());
const all = ref<ReviewTask[] | null>(null);
const loading = ref(false);
const error = ref(null);
const _byID = ref<Map<number, ReviewTask>>(new Map());
const loading = ref<boolean>(false);
const error = ref<string | null>(null);
// Subscription
SSEManager.subscribe("*", (e) => {
@ -18,12 +17,15 @@ export const useReviewTaskStore = defineStore("review-task", () => {
}
});
// Actions
function byID(id: int) {
function all(): ReviewTask[] {
return Array.from(_byID.value.values());
}
function byID(id: number) {
return _byID.value.get(id);
}
async function fetchAll(): Promise<void> {
const userStore = useUserStore();
if (userStore.urls == null) {
const session = useSessionStore();
if (session.urls == null) {
throw new Error("can't fetch without user URL data");
}
@ -34,15 +36,13 @@ export const useReviewTaskStore = defineStore("review-task", () => {
params.append("sort", "-created");
//if (typeFilter.value) params.append("type", typeFilter.value);
const response = await fetch(
`${userStore.urls.api.review_task}?${params}`,
);
const response = await fetch(`${session.urls.api.review_task}?${params}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
all.value = data.tasks;
_byID.value = new Map();
for (const t of data.tasks) {
_byID.value.set(t.id, t);
}
@ -54,16 +54,16 @@ export const useReviewTaskStore = defineStore("review-task", () => {
loading.value = false;
}
}
async function fetchOne(id: int) {
const userStore = useUserStore();
if (userStore.urls == null) {
async function fetchOne(id: number) {
const session = useSessionStore();
if (session.urls == null) {
throw new Error("can't fetch without user URL data");
}
loading.value = true;
error.value = null;
try {
const response = await fetch(`${userStore.urls.api.review_task}/${id}`);
const response = await fetch(`${session.urls.api.review_task}/${id}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
@ -76,6 +76,9 @@ export const useReviewTaskStore = defineStore("review-task", () => {
throw err;
}
}
function remove(id: number) {
_byID.value.delete(id);
}
return {
// State
@ -84,5 +87,6 @@ export const useReviewTaskStore = defineStore("review-task", () => {
byID,
fetchAll,
fetchOne,
remove,
};
});