diff --git a/CONTRIBUTING/TEMPLATE.svelte b/CONTRIBUTING/TEMPLATE.svelte index 79430ba3c..a53639ba5 100644 --- a/CONTRIBUTING/TEMPLATE.svelte +++ b/CONTRIBUTING/TEMPLATE.svelte @@ -19,28 +19,9 @@ COMPONENT JS (w/ TS) //#region ➤ [MAIN] Package Imports // <-imports-go-here-> - //#region ➤ Svelte/SvelteKit Imports - // <-imports-go-here-> import { onMount } from 'svelte'; - //#endregion ➤ Svelte/SvelteKit Imports - - //#region ➤ Project Custom Imports - // <-imports-go-here-> import { viewport_change } from '$lib/utils/platform-functions'; - //#endregion ➤ Project Custom Imports - - //#region ➤ [PLUGIN] Firebase Imports - // <-imports-go-here-> - //#endregion ➤ [PLUGIN] Firebase Imports - - //#region ➤ Types Imports - // <-imports-go-here-> - //#endregion ➤ Types Imports - - //#region ➤ Assets Imports - // <-imports-go-here-> import profile_avatar from './assets/profile-avatar.svg'; - //#endregion ➤ Assets Imports //#endregion ➤ [MAIN] Package Imports diff --git a/package-lock.json b/package-lock.json index bad7a6828..bf8c7b15b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "betarena-scores-platform", "version": "0.8.0", "dependencies": { - "@betarena/scores-lib": "^0.10.18", + "@betarena/scores-lib": "^0.11.1", "@lukeed/uuid": "^2.0.1", "@metamask/sdk": "^0.1.0", "@moralisweb3/client-firebase-auth-utils": "^2.18.4", @@ -537,9 +537,9 @@ } }, "node_modules/@betarena/scores-lib": { - "version": "0.10.18", - "resolved": "https://registry.npmjs.org/@betarena/scores-lib/-/scores-lib-0.10.18.tgz", - "integrity": "sha512-mdorRdtncw2F6eUE5g9wddjEHhxZ23pKXZoMKsffA2Ym7zJcNc3zmbv0moSjHwCJ2ohSHqMtzbMchgptv05EmA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@betarena/scores-lib/-/scores-lib-0.11.1.tgz", + "integrity": "sha512-tZyDUqAU9ztCsAYcaf1eRIjjkyhjSTNiqdsqP1GhN+C6UWjywtUOB4U6iqbQUmZop1CcLgQBT3hd03V3irGOcw==", "dependencies": { "firebase": "^9.17.2", "graphql-request": "^5.0.0", @@ -10703,9 +10703,9 @@ } }, "@betarena/scores-lib": { - "version": "0.10.18", - "resolved": "https://registry.npmjs.org/@betarena/scores-lib/-/scores-lib-0.10.18.tgz", - "integrity": "sha512-mdorRdtncw2F6eUE5g9wddjEHhxZ23pKXZoMKsffA2Ym7zJcNc3zmbv0moSjHwCJ2ohSHqMtzbMchgptv05EmA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@betarena/scores-lib/-/scores-lib-0.11.1.tgz", + "integrity": "sha512-tZyDUqAU9ztCsAYcaf1eRIjjkyhjSTNiqdsqP1GhN+C6UWjywtUOB4U6iqbQUmZop1CcLgQBT3hd03V3irGOcw==", "requires": { "firebase": "^9.17.2", "graphql-request": "^5.0.0", diff --git a/package.json b/package.json index 683d6fbe0..798527fbd 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ }, "type": "module", "dependencies": { - "@betarena/scores-lib": "^0.10.18", + "@betarena/scores-lib": "^0.11.1", "@lukeed/uuid": "^2.0.1", "@metamask/sdk": "^0.1.0", "@moralisweb3/client-firebase-auth-utils": "^2.18.4", diff --git a/src/app.html b/src/app.html index 7af323aaa..4824ecdf4 100644 --- a/src/app.html +++ b/src/app.html @@ -4,7 +4,11 @@ - [ℹ] YANDEX - ORIGINAL - [ℹ] GOOGLE V1 - ORIGINAL - [ℹ] GOOGLE V2 - NONCE BASED + [ℹ] 1. SMARTLOOK + [ℹ] 2. GOOGLE ANALYTICS --> - + > + - %sveltekit.head% { // ... verify if the response is error-free @@ -25,7 +25,7 @@ export async function get( if (dev) logErrorGroup( 'utils [DEV]', - `response: ${response}` + `response: ${JSON.stringify(response)}` ); throw new Error( 'Network response was not ok' @@ -34,6 +34,7 @@ export async function get( // ... return the data return response.json(); }); + return response; } /** @@ -54,7 +55,7 @@ export async function post( data ): Promise { // ... - return await fetch(path, { + const response = await fetch(path, { method: 'POST', credentials: 'include', body: JSON.stringify(data), @@ -69,7 +70,7 @@ export async function post( if (dev) logErrorGroup( 'utils [DEV]', - `response: ${response}` + `response: ${JSON.stringify(response)}` ); throw new Error( 'Network response was not ok' @@ -78,4 +79,5 @@ export async function post( // ... return the data return response.json(); }); + return response; } diff --git a/src/lib/components/Widget-No-Data.svelte b/src/lib/components/Widget-No-Data.svelte new file mode 100644 index 000000000..6b28d56f6 --- /dev/null +++ b/src/lib/components/Widget-No-Data.svelte @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + +
+ + No widget visual icon + +
+

+ {NO_DATA_TITLE} +

+

+ {NO_DATA_DESC} +

+
+
+ + + + \ No newline at end of file diff --git a/src/lib/components/_Splash_screen.svelte b/src/lib/components/_Splash_screen.svelte index 75cb79801..37cdd8d3d 100644 --- a/src/lib/components/_Splash_screen.svelte +++ b/src/lib/components/_Splash_screen.svelte @@ -13,20 +13,20 @@ * page/component; */ onMount(async () => { + document.documentElement.classList.remove( + 'googlebot-override' + ); + document.body.classList.remove( + 'googlebot-override' + ); + document.documentElement.classList.remove( + 'no-scrollbar' + ); + document.body.classList.remove( + 'no-scrollbar' + ); setTimeout(async () => { show = false; - document.documentElement.classList.remove( - 'googlebot-override' - ); - document.body.classList.remove( - 'googlebot-override' - ); - document.documentElement.classList.remove( - 'no-scrollbar' - ); - document.body.classList.remove( - 'no-scrollbar' - ); }, 500); }); diff --git a/src/lib/components/_main_/footer/_Footer.svelte b/src/lib/components/_main_/footer/_Footer.svelte index 3fce827f1..af2e4b6b2 100644 --- a/src/lib/components/_main_/footer/_Footer.svelte +++ b/src/lib/components/_main_/footer/_Footer.svelte @@ -5,6 +5,7 @@ -
- + + - - {/if} + --> +
+

{SEO_BLOCK_DATA.title}

+ {@html SEO_BLOCK_DATA.html} +
+
+ +
- {#if noSEOBlockData && !loaded} - -

- {SEO_BLOCK_DATA.title} -

- - -
- {#if $userBetarenaSettings.theme == 'Dark'} - no-featured-match-visual_dark - {:else} - no-featured-match-visual - {/if} - - -
-

- No SEO Block Available -

-

- Sorry, at this time there is no SEO data - available! -

-
-
+ {/if} {:then data} - -

- {SEO_BLOCK_DATA.title} -

-
- + {:catch error} {error} {/await} @@ -162,19 +123,6 @@ COMPONENT STYLE ==================== --> + \ No newline at end of file diff --git a/src/routes/[[lang=lang]]/+page.ts b/src/routes/[[lang=lang]]/+page.ts index bc897b597..ca098fec6 100644 --- a/src/routes/[[lang=lang]]/+page.ts +++ b/src/routes/[[lang=lang]]/+page.ts @@ -7,32 +7,56 @@ import { } from '$lib/utils/debug'; import { error } from '@sveltejs/kit'; +import { PRELOAD_invalid_data, promiseUrlsPreload, promiseValidUrlCheck } from '$lib/utils/platform-functions.js'; import type { PageLoad } from './$types'; -/** - * @type {import('./$types').PageLoad} - */ -export async function load({ - url, - params, - fetch -}): Promise { +/** @type {import('./$types').PageLoad} */ +export async function load +( + { + // url, + params, + fetch + } +): Promise < PageLoad > +{ const t0 = performance.now(); + //#region [0] IMPORTANT EXTRACT URL DATA + const urlLang: string = - params.lang == undefined + params?.lang == undefined ? 'en' - : params.lang + : params?.lang ; - // -------------- - // [ℹ] preload data DOC: REF: [2] - // -------------- + //#endregion [0] IMPORTANT EXTRACT URL DATA + + //#region [0] IMPORTANT VALID URL CHECK + + const validUrlCheck = await promiseValidUrlCheck + ( + fetch, + urlLang + ) + + // [ℹ] exit; + if (!validUrlCheck) { + throw error( + ERROR_CODE_INVALID, + PAGE_INVALID_MSG + ); + } + + //#endregion [0] IMPORTANT EXTRACT URL DATA + + //#region [0] IMPORTANT (PRE) PRE-LOAD DATA DOC: REF: [2] const urls = [ - `/api/cache/_main_/pages_and_seo?lang=${urlLang}&page=homepage`, - // [ℹ] home + // [ℹ] home (page) + `/api/data/main/seo-pages?lang=${urlLang}&page=homepage`, + // [ℹ] home (widgets) `/api/cache/home/featured_match?lang=${urlLang}`, `/api/cache/home/featured_betting_sites?lang=${urlLang}`, `/api/cache/home/best_goalscorer?lang=${urlLang}`, @@ -41,18 +65,13 @@ export async function load({ `/api/cache/home/seo_block?lang=${urlLang}`, `/api/cache/home/livescores-v2?lang=${urlLang}`, `/api/cache/home/livescores-v2?seo=true&lang=${urlLang}`, - // [ℹ] page validation check; - `/api/cache/_main_/pages_and_seo?url=${url.pathname}` ]; - const promises = urls.map((_url) => - fetch(_url).then((response) => - response.json() - ) - ); - - const data = await Promise.all(promises); - dlog(data, false); + const data = await promiseUrlsPreload + ( + urls, + fetch + ); const [ PAGE_DATA_SEO, @@ -63,37 +82,17 @@ export async function load({ LEAGUES_TABLE_SCORES_SEO_DATA, SEO_BLOCK_DATA, LIVESCORES_V2_T_DATA, - LIVESCORES_V2_SEO, - VALID_URL + LIVESCORES_V2_SEO ] = data; - // -------------- - // [ℹ] return(s) - // -------------- + dlog(data, false); - // [ℹ] exit; - if (!VALID_URL) { - throw error( - ERROR_CODE_INVALID, - PAGE_INVALID_MSG - ); - } + //#endregion [0] IMPORTANT (PRE) PRE-LOAD DATA DOC: REF: [2] + + //#region [3] IMPORTANT RETURN // [ℹ] FIXME: valid-page does not count data[7] - already checked - const INVALID_PAGE_DATA_POINTS: boolean = - data.includes(undefined); - - const indexesOf = (arr, item) => - arr.reduce( - (acc, v, i) => ( - v === item && acc.push(i), acc - ), - [] - ); - dlog( - `null (preload): ${indexesOf(data, null)}`, - true - ); + const INVALID_PAGE_DATA_POINTS: boolean = data.includes(undefined); // FIXME: currently based on checking for any NULL/UNDEFINED data points // FIXME: should still allow for page access if page is VALID but widget data or @@ -106,11 +105,19 @@ export async function load({ ); } + PRELOAD_invalid_data(data) + + // [🐞] const t1 = performance.now(); - dlog(`⏳ [HOME] preload ${(t1 - t0) / 1000} sec`, true) + dlog(`⏳ [HOME] preload ${((t1 - t0) / 1000).toFixed(2)} sec`, true) // FIXME: types not working return { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + // NOTE: issues with setting correct types, + // NOTE: not being applied to return; + // NOTE: not critical - can be silenced; PAGE_DATA_SEO, FEATURED_MATCH_WIDGET_DATA_SEO, FEATURED_BETTING_SITES_WIDGET_DATA_SEO, @@ -121,4 +128,7 @@ export async function load({ LIVESCORES_V2_T_DATA, LIVESCORES_V2_SEO }; -} + + //#endregion [3] IMPORTANT RETURN + +} \ No newline at end of file diff --git a/src/routes/[[lang=lang]]/[player=player]/[...player_fill]/+page.ts b/src/routes/[[lang=lang]]/[player=player]/[...player_fill]/+page.ts index cbf153cbe..4e51cebfd 100644 --- a/src/routes/[[lang=lang]]/[player=player]/[...player_fill]/+page.ts +++ b/src/routes/[[lang=lang]]/[player=player]/[...player_fill]/+page.ts @@ -1,5 +1,5 @@ import { dlog, ERROR_CODE_INVALID, PAGE_INVALID_MSG } from "$lib/utils/debug"; -import { PRELOAD_invalid_data } from "$lib/utils/platform-functions"; +import { PRELOAD_invalid_data, promiseUrlsPreload, promiseValidUrlCheck } from "$lib/utils/platform-functions"; import type { B_SAP_D1, B_SAP_D2, B_SAP_PP_D, B_SAP_PP_T } from "@betarena/scores-lib/types/seo-pages"; import { error } from "@sveltejs/kit"; import type { B_PFIX_D, B_PFIX_T } from "node_modules/@betarena/scores-lib/types/player-fixtures"; @@ -7,53 +7,81 @@ import type { B_PPRO_T } from "node_modules/@betarena/scores-lib/types/player-pr import type { PageLoad } from "../$types"; /** @type {import('./$types').PageLoad} */ -export async function load({ url, params, fetch }): Promise { +export async function load +( + { + url, + params, + fetch + } +): Promise < PageLoad > +{ const t0 = performance.now(); - const { + //#region [0] IMPORTANT EXTRACT URL DATA + + const { lang, - // (example) -> player | jugador + // (example) -> player | jugador (translation) // player, // (example) -> teddy-teuma/829643 | harry-kane/997 player_fill } = params; // console.log(params) - // TODO: - // missing VALID_URL check; - // & redirect; - // IMPORTANT - - //#region [0] IMPORTANT EXTRACT URL DATA - const _lang = lang == undefined ? 'en' : lang; const player_id = player_fill.match(/\d+$/); - // console.log(player_id.toString()) //#endregion [0] IMPORTANT EXTRACT URL DATA + //#region [0] IMPORTANT VALID URL CHECK + + const validUrlCheck = await promiseValidUrlCheck + ( + fetch, + _lang, + null, + null, + null, + null, + player_fill + ) + + // [ℹ] exit; + if (!validUrlCheck) { + // [🐞] + const t1 = performance.now(); + dlog(`⏳ [PLAYER] preload ${((t1 - t0) / 1000).toFixed(2)} sec`, true) + throw error( + ERROR_CODE_INVALID, + PAGE_INVALID_MSG + ); + } + + //#endregion [0] IMPORTANT VALID URL CHECK + //#region [0] IMPORTANT (PRE) PRE-LOAD DATA - const PAGE_DATA: B_SAP_PP_D = await fetch( - `/api/hasura/_main_/seo-pages?player_id=${player_id}`, - { - method: 'GET' - } - ).then((r) => r.json()); - - // TEMP VALIDATE - // console.log('PAGE_DATA', PAGE_DATA) - // [ℹ] exit; - if (!PAGE_DATA) { - const t1 = performance.now(); - dlog(`fixture (load) (exit) complete in: ${(t1 - t0) / 1000} sec`, true) - throw error(ERROR_CODE_INVALID, PAGE_INVALID_MSG); - } + // [1] FIXTURE (CRITICAL) page data; + + type PP_PROMISE_0 = [ + B_SAP_PP_D | undefined + ] + + const data_0: PP_PROMISE_0 = await promiseUrlsPreload + ( + [`/api/data/main/seo-pages?player_id=${player_id}&page=player`], + fetch + ) as PP_PROMISE_0; + + const [ + PAGE_DATA + ] = data_0; const country_id = PAGE_DATA?.data?.country_id; @@ -67,15 +95,11 @@ export async function load({ url, params, fetch }): Promise { //#region [1] IMPORTANT PRE-LOAD DATA - // -------------- - // [ℹ] preload data DOC: REF: [2] - // -------------- - const urls: string[] = [ // NOTE:WARNING:TODO: remove for a cache solution - `/api/hasura/_main_/seo-pages?lang=${_lang}&page=player`, - `/api/cache/_main_/pages_and_seo?country_id=${country_id}`, - `/api/cache/_main_/pages_and_seo?months=true&lang=${_lang}`, + `/api/data/main/seo-pages?lang=${_lang}&page=player`, + `/api/data/main/seo-pages?country_id=${country_id}`, + `/api/data/main/seo-pages?months=true&lang=${_lang}`, // NOTE:WARNING:TODO: remove for a cache solution `/api/data/players/profile?lang=${_lang}`, // NOTE:WARNING:TODO: remove for a cache solution @@ -84,12 +108,6 @@ export async function load({ url, params, fetch }): Promise { `/api/data/players/fixtures?player_id=${player_id}&limit=10&offset=0` ] - const promises = urls.map((_url) => - fetch(_url).then((response) => - response.json() - ) - ); - type PP_PROMISE = [ B_SAP_PP_T | undefined, B_SAP_D1 | undefined, @@ -99,7 +117,11 @@ export async function load({ url, params, fetch }): Promise { B_PFIX_D | undefined ] - const data: PP_PROMISE = await Promise.all(promises) as PP_PROMISE; + const data = await promiseUrlsPreload + ( + urls, + fetch + ) as PP_PROMISE; const [ PAGE_SEO, @@ -154,20 +176,14 @@ export async function load({ url, params, fetch }): Promise { //#region [3] IMPORTANT RETURN // const INVALID_PAGE_DATA: boolean = data.includes(undefined); - - // console.log(data) + console.log(data) PRELOAD_invalid_data(data) const t1 = performance.now(); - dlog(`⏳ [PLAYERS] (pre-load) ${(t1 - t0) / 1000} sec`, true) + dlog(`⏳ [PLAYERS] (pre-load) ${((t1 - t0) / 1000).toFixed(2)} sec`, true) return { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - // NOTE: issues with setting correct types, - // NOTE: not being applied to return; - // NOTE: not critical - can be silenced; PAGE_DATA, PAGE_SEO, B_SAP_D1, diff --git a/src/routes/[[lang=lang]]/[sport]/+page.ts b/src/routes/[[lang=lang]]/[sport]/+page.ts index ba186717d..665e28d94 100644 --- a/src/routes/[[lang=lang]]/[sport]/+page.ts +++ b/src/routes/[[lang=lang]]/[sport]/+page.ts @@ -1,39 +1,61 @@ import { dlog, ERROR_CODE_INVALID, PAGE_INVALID_MSG } from '$lib/utils/debug'; +import { promiseValidUrlCheck } from '$lib/utils/platform-functions.js'; import { error, redirect } from '@sveltejs/kit'; import type { PageLoad, PageLoadEvent } from '../$types'; /** @type {import('./$types').PageLoad} */ -export async function load({ - url, - params, - fetch -}: PageLoadEvent): Promise < PageLoad > { +export async function load +( + { + // url, + params, + fetch + }: PageLoadEvent +): Promise < PageLoad > +{ const t0 = performance.now(); + //#region [0] IMPORTANT EXTRACT URL DATA + + const { + lang, + // @ts-expect-error unknown RouteParam, that exists + sport + } = params + + console.log("SPORT", sport) + + const urlLang: string = + params?.lang == undefined + ? 'en' + : params?.lang + ; + + //#endregion [0] IMPORTANT EXTRACT URL DATA + //#region IMPORTANT URL (validation) - // [ℹ] validate [1] - const VALID_URL = await fetch( - `/api/cache/_main_/pages_and_seo?url=${url.pathname}`, - { - method: 'GET' - } - ).then((r) => r.json()); - - // [ℹ] exit (condition) - if (!VALID_URL) { + const validUrlCheck = await promiseValidUrlCheck + ( + fetch, + urlLang, + sport + ) + + // [ℹ] exit; + if (!validUrlCheck) { + // [🐞] const t1 = performance.now(); - dlog(`fixture (load) (exit) complete in: ${(t1 - t0) / 1000} sec`, true) - throw error(ERROR_CODE_INVALID, PAGE_INVALID_MSG); + dlog(`⏳ [SPORT] preload ${((t1 - t0) / 1000).toFixed(2)} sec`, true) + throw error( + ERROR_CODE_INVALID, + PAGE_INVALID_MSG + ); } //#endregion IMPORTANT URL (validation) - const { - lang - } = params - const URL: string = lang == undefined ? '/' diff --git a/src/routes/[[lang=lang]]/[sport]/[country]/+page.ts b/src/routes/[[lang=lang]]/[sport]/[country]/+page.ts index ba186717d..decb79e48 100644 --- a/src/routes/[[lang=lang]]/[sport]/[country]/+page.ts +++ b/src/routes/[[lang=lang]]/[sport]/[country]/+page.ts @@ -1,38 +1,60 @@ import { dlog, ERROR_CODE_INVALID, PAGE_INVALID_MSG } from '$lib/utils/debug'; +import { promiseValidUrlCheck } from '$lib/utils/platform-functions.js'; import { error, redirect } from '@sveltejs/kit'; import type { PageLoad, PageLoadEvent } from '../$types'; /** @type {import('./$types').PageLoad} */ -export async function load({ - url, - params, - fetch -}: PageLoadEvent): Promise < PageLoad > { +export async function load +( + { + // url, + params, + fetch + }: PageLoadEvent +): Promise < PageLoad > +{ const t0 = performance.now(); - //#region IMPORTANT URL (validation) + //#region [0] IMPORTANT EXTRACT URL DATA - // [ℹ] validate [1] - const VALID_URL = await fetch( - `/api/cache/_main_/pages_and_seo?url=${url.pathname}`, - { - method: 'GET' - } - ).then((r) => r.json()); - - // [ℹ] exit (condition) - if (!VALID_URL) { - const t1 = performance.now(); - dlog(`fixture (load) (exit) complete in: ${(t1 - t0) / 1000} sec`, true) - throw error(ERROR_CODE_INVALID, PAGE_INVALID_MSG); - } + const { + lang, + sport, + // @ts-expect-error unknown RouteParam, that exists + country + } = params - //#endregion IMPORTANT URL (validation) + const urlLang: string = + params?.lang == undefined + ? 'en' + : params?.lang + ; - const { - lang - } = params + //#endregion [0] IMPORTANT EXTRACT URL DATA + + //#region IMPORTANT URL (validation) + + const validUrlCheck = await promiseValidUrlCheck + ( + fetch, + urlLang, + sport, + country + ) + + // [ℹ] exit; + if (!validUrlCheck) { + // [🐞] + const t1 = performance.now(); + dlog(`⏳ [SPORT] preload ${((t1 - t0) / 1000).toFixed(2)} sec`, true) + throw error( + ERROR_CODE_INVALID, + PAGE_INVALID_MSG + ); + } + + //#endregion IMPORTANT URL (validation) const URL: string = lang == undefined diff --git a/src/routes/[[lang=lang]]/[sport]/[country]/[league_name]/+page.svelte b/src/routes/[[lang=lang]]/[sport]/[country]/[league_name]/+page.svelte index 980d7664c..450cdfee6 100644 --- a/src/routes/[[lang=lang]]/[sport]/[country]/[league_name]/+page.svelte +++ b/src/routes/[[lang=lang]]/[sport]/[country]/[league_name]/+page.svelte @@ -39,7 +39,6 @@ } from '$lib/models/tournaments/fixtures_odds/types'; import type { BETARENA_HASURA_scores_tournaments } from '$lib/models/hasura'; - import { dlog } from '$lib/utils/debug'; import { platfrom_lang_ssr, viewport_change } from '$lib/utils/platform-functions'; let PAGE_DATA_SEO: Cache_Single_Tournaments_SEO_Translation_Response; @@ -54,21 +53,15 @@ let FIXTURES_ODDS_DATA: REDIS_CACHE_SINGLE_tournaments_fixtures_odds_widget_data_response; $: PAGE_DATA_SEO = $page.data.PAGE_DATA_SEO; - $: TOURNAMENT_DATA_TRANSLATED_COPIES = - $page.data.TOURNAMENT_DATA_TRANSLATED_COPIES; + $: TOURNAMENT_DATA_TRANSLATED_COPIES = $page.data.TOURNAMENT_DATA_TRANSLATED_COPIES; $: TOURNAMENT_DATA = $page.data.TOURNAMENT_DATA; - $: LEAGUE_INFO_DATA = - $page.data.LEAGUE_INFO_DATA; + $: LEAGUE_INFO_DATA = $page.data.LEAGUE_INFO_DATA; $: STANDINGS_T = $page.data.STANDINGS_T; $: STANDINGS_DATA = $page.data.STANDINGS_DATA; $: TOP_PLAYERS_T = $page.data.TOP_PLAYERS_T; - $: TOP_PLAYERS_DATA = - $page.data.TOP_PLAYERS_DATA; + $: TOP_PLAYERS_DATA = $page.data.TOP_PLAYERS_DATA; $: FIXTURES_ODDS_T = $page.data.FIXTURES_ODDS_T; - $: FIXTURES_ODDS_DATA = - $page.data.FIXTURES_ODDS_DATA; - - $: dlog(`TOURNAMENT_DATA?.tournament_id: ${TOURNAMENT_DATA?.tournament_id}`, true) + $: FIXTURES_ODDS_DATA = $page.data.FIXTURES_ODDS_DATA; // TODO: FIXME: replace into a single __layout.svelte method [?] using page-stores [?] @@ -132,31 +125,28 @@ SVELTE INJECTION TAGS =================== --> - {#if PAGE_DATA_SEO} {/if} - {#if PAGE_DATA_SEO} - {#each PAGE_DATA_SEO.hreflang as item} + {#each PAGE_DATA_SEO?.hreflang || [] as item} {#each TOURNAMENT_DATA_TRANSLATED_COPIES as item_} {#if item.link == item_.lang}