diff --git a/app.vue b/app.vue index a5c6584..88fee67 100644 --- a/app.vue +++ b/app.vue @@ -11,7 +11,10 @@ import { invoke } from "@tauri-apps/api/core"; import { AppStatus } from "~/types"; import { listen } from "@tauri-apps/api/event"; import { useAppState } from "./composables/app-state.js"; -import { useRouter } from "#vue-router"; +import { + initialNavigation, + setupHooks, +} from "./composables/state-navigation.js"; const router = useRouter(); @@ -22,36 +25,8 @@ router.beforeEach(async () => { state.value = await invoke("fetch_state"); }); -switch (state.value.status) { - case AppStatus.NotConfigured: - router.push({ path: "/setup" }).then(() => { - console.log("Pushed Setup"); - }); - break; - case AppStatus.SignedOut: - router.push("/auth"); - break; - case AppStatus.SignedInNeedsReauth: - router.push("/auth/signedout"); - break; - case AppStatus.ServerUnavailable: - router.push("/error/serverunavailable"); - break; - default: - router.push("/store"); -} - -listen("auth/processing", () => { - router.push("/auth/processing"); -}); - -listen("auth/failed", () => { - router.push("/auth/failed"); -}); - -listen("auth/finished", () => { - router.push("/store"); -}); +setupHooks(); +initialNavigation(state); useHead({ title: "Drop", diff --git a/composables/state-navigation.ts b/composables/state-navigation.ts new file mode 100644 index 0000000..4658eb4 --- /dev/null +++ b/composables/state-navigation.ts @@ -0,0 +1,48 @@ +import { listen } from "@tauri-apps/api/event"; +import { AppStatus, type AppState } from "~/types"; + +export function setupHooks() { + const router = useRouter(); + + listen("auth/processing", (event) => { + router.push("/auth/processing"); + }); + + listen("auth/failed", (event) => { + router.push( + `/auth/failed?error=${encodeURIComponent(event.payload as string)}` + ); + }); + + listen("auth/finished", (event) => { + router.push("/store"); + }); + + document.addEventListener("contextmenu", (event) => { + event.target?.dispatchEvent(new Event("contextmenu")); + event.preventDefault(); + }); +} + +export function initialNavigation(state: Ref) { + const router = useRouter(); + + switch (state.value.status) { + case AppStatus.NotConfigured: + router.push({ path: "/setup" }).then(() => { + console.log("Pushed Setup"); + }); + break; + case AppStatus.SignedOut: + router.push("/auth"); + break; + case AppStatus.SignedInNeedsReauth: + router.push("/auth/signedout"); + break; + case AppStatus.ServerUnavailable: + router.push("/error/serverunavailable"); + break; + default: + router.push("/store"); + } +} diff --git a/pages/auth/failed.vue b/pages/auth/failed.vue index 04e0f89..db8a6e5 100644 --- a/pages/auth/failed.vue +++ b/pages/auth/failed.vue @@ -4,11 +4,12 @@