diff --git a/apps/frontend/nuxt.config.ts b/apps/frontend/nuxt.config.ts index 6f941883..354bff29 100644 --- a/apps/frontend/nuxt.config.ts +++ b/apps/frontend/nuxt.config.ts @@ -126,6 +126,7 @@ export default defineNuxtConfig({ homePageSearch?: any[]; homePageNotifs?: any[]; products?: any[]; + errors?: number[]; } = {}; try { @@ -157,6 +158,14 @@ export default defineNuxtConfig({ }, }; + const caughtErrorCodes = new Set(); + + function handleFetchError(err: any, defaultValue: any) { + console.error("Error generating state: ", err); + caughtErrorCodes.add(err.status); + return defaultValue; + } + const [ categories, loaders, @@ -168,15 +177,25 @@ export default defineNuxtConfig({ homePageNotifs, products, ] = await Promise.all([ - $fetch(`${API_URL}tag/category`, headers), - $fetch(`${API_URL}tag/loader`, headers), - $fetch(`${API_URL}tag/game_version`, headers), - $fetch(`${API_URL}tag/donation_platform`, headers), - $fetch(`${API_URL}tag/report_type`, headers), - $fetch(`${API_URL}projects_random?count=60`, headers), - $fetch(`${API_URL}search?limit=3&query=leave&index=relevance`, headers), - $fetch(`${API_URL}search?limit=3&query=&index=updated`, headers), - $fetch(`${API_URL.replace("/v2/", "/_internal/")}billing/products`, headers), + $fetch(`${API_URL}tag/category`, headers).catch((err) => handleFetchError(err, [])), + $fetch(`${API_URL}tag/loader`, headers).catch((err) => handleFetchError(err, [])), + $fetch(`${API_URL}tag/game_version`, headers).catch((err) => handleFetchError(err, [])), + $fetch(`${API_URL}tag/donation_platform`, headers).catch((err) => + handleFetchError(err, []), + ), + $fetch(`${API_URL}tag/report_type`, headers).catch((err) => handleFetchError(err, [])), + $fetch(`${API_URL}projects_random?count=60`, headers).catch((err) => + handleFetchError(err, []), + ), + $fetch(`${API_URL}search?limit=3&query=leave&index=relevance`, headers).catch((err) => + handleFetchError(err, {}), + ), + $fetch(`${API_URL}search?limit=3&query=&index=updated`, headers).catch((err) => + handleFetchError(err, {}), + ), + $fetch(`${API_URL.replace("/v2/", "/_internal/")}billing/products`, headers).catch((err) => + handleFetchError(err, []), + ), ]); state.categories = categories; @@ -188,6 +207,7 @@ export default defineNuxtConfig({ state.homePageSearch = homePageSearch; state.homePageNotifs = homePageNotifs; state.products = products; + state.errors = [...caughtErrorCodes]; await fs.writeFile("./src/generated/state.json", JSON.stringify(state)); diff --git a/apps/frontend/src/assets/styles/layout.scss b/apps/frontend/src/assets/styles/layout.scss index 41be6710..60e05cfd 100644 --- a/apps/frontend/src/assets/styles/layout.scss +++ b/apps/frontend/src/assets/styles/layout.scss @@ -126,6 +126,7 @@ max-width: 80rem; column-gap: 0.75rem; padding: 0 1.5rem; + padding-bottom: 1.5rem; grid-template: "header" diff --git a/apps/frontend/src/error.vue b/apps/frontend/src/error.vue index 20cca3e9..be5cee6e 100644 --- a/apps/frontend/src/error.vue +++ b/apps/frontend/src/error.vue @@ -1,21 +1,52 @@ diff --git a/apps/frontend/src/layouts/default.vue b/apps/frontend/src/layouts/default.vue index 1e2297b6..11807424 100644 --- a/apps/frontend/src/layouts/default.vue +++ b/apps/frontend/src/layouts/default.vue @@ -80,6 +80,23 @@ /> +
+
+
+
+ {{ + formatMessage(failedToBuildBannerMessages.description, { + errors: generatedStateErrors, + url: config.public.apiBaseUrl, + }) + }} +
+
@@ -538,7 +555,7 @@