diff --git a/next-ui/src/pages/claim.vue b/next-ui/src/pages/claim.vue index cad941fbb..1d291cbb0 100644 --- a/next-ui/src/pages/claim.vue +++ b/next-ui/src/pages/claim.vue @@ -179,10 +179,12 @@ async function submitForm() { } } -const { refresh: claimStatus } = useClaimStatus() -void claimStatus().then(({ data }) => { - if (data?.isClaimed) void router.push('/') -}) +void useClaimStatus() + .refresh() + .then(({ data, error }) => { + if (error) void router.push('/error') + else if (data?.isClaimed) void router.push('/') + }) diff --git a/next-ui/src/pages/error.vue b/next-ui/src/pages/error.vue new file mode 100644 index 000000000..483fff294 --- /dev/null +++ b/next-ui/src/pages/error.vue @@ -0,0 +1,27 @@ + + + + + +meta: + layout: single + noAuth: true + diff --git a/next-ui/src/pages/login.vue b/next-ui/src/pages/login.vue index 1185c4c24..708b6658a 100644 --- a/next-ui/src/pages/login.vue +++ b/next-ui/src/pages/login.vue @@ -175,10 +175,12 @@ async function submitForm() { }) } -const { refresh: claimStatus } = useClaimStatus() -void claimStatus().then(({ data }) => { - if (data?.isClaimed == false) void router.push('/') -}) +void useClaimStatus() + .refresh() + .then(({ data, error }) => { + if (error) void router.push('/error') + else if (data?.isClaimed == false) void router.push('/') + }) diff --git a/next-ui/src/pages/startup.vue b/next-ui/src/pages/startup.vue index d761d7c75..d5ef83e7e 100644 --- a/next-ui/src/pages/startup.vue +++ b/next-ui/src/pages/startup.vue @@ -16,15 +16,17 @@ async function checkAuthenticated() { const router = useRouter() const route = useRoute() const { data, error, refresh } = useCurrentUser() - const { data: claimData, refresh: claimRefresh } = useClaimStatus() + const { data: claimData, error: claimError, refresh: claimRefresh } = useClaimStatus() await refresh() await claimRefresh() - if (data.value) { + // if we can't get the claim status, most likely the server is unreachable + if (claimError.value) { + await router.push({ name: '/error' }) + } else if (data.value) { if (route.query.redirect) await router.push({ path: route.query.redirect.toString() }) else await router.push('/') - } - if (error.value) { + } else if (error.value) { if (claimData.value?.isClaimed) await router.push({ name: '/login', query: { redirect: route.query.redirect } }) else await router.push({ name: '/claim', query: { redirect: route.query.redirect } }) diff --git a/next-ui/src/typed-router.d.ts b/next-ui/src/typed-router.d.ts index ed3fbb469..cfef3dfcd 100644 --- a/next-ui/src/typed-router.d.ts +++ b/next-ui/src/typed-router.d.ts @@ -25,6 +25,7 @@ declare module 'vue-router/auto-routes' { '/account/details': RouteRecordInfo<'/account/details', '/account/details', Record, Record>, '/account/ui': RouteRecordInfo<'/account/ui', '/account/ui', Record, Record>, '/claim': RouteRecordInfo<'/claim', '/claim', Record, Record>, + '/error': RouteRecordInfo<'/error', '/error', Record, Record>, '/history': RouteRecordInfo<'/history', '/history', Record, Record>, '/import/books': RouteRecordInfo<'/import/books', '/import/books', Record, Record>, '/import/readlist': RouteRecordInfo<'/import/readlist', '/import/readlist', Record, Record>, @@ -83,6 +84,10 @@ declare module 'vue-router/auto-routes' { routes: '/claim' views: never } + 'src/pages/error.vue': { + routes: '/error' + views: never + } 'src/pages/history.vue': { routes: '/history' views: never