From ffcd20a62732f7b337a6c66c5b57f562908f6b3b Mon Sep 17 00:00:00 2001 From: Zonian <57513632+ZonianMidian@users.noreply.github.com> Date: Wed, 30 Oct 2024 02:39:16 -0500 Subject: [PATCH] Upgrade in loading system --- src/components/Spinner.svelte | 12 +- src/lib/stores/store.ts | 5 + src/lib/types/index.ts | 12 ++ src/lib/utils/utils.ts | 13 +++ src/routes/+page.server.ts | 25 ++++ src/routes/+page.svelte | 108 +++++++++--------- .../api/languages/[langCode]/+server.ts | 11 ++ src/routes/api/names/[countryCode]/+server.ts | 11 ++ svelte.config.js | 2 + 9 files changed, 135 insertions(+), 64 deletions(-) create mode 100644 src/lib/stores/store.ts create mode 100644 src/lib/types/index.ts create mode 100644 src/routes/+page.server.ts create mode 100644 src/routes/api/languages/[langCode]/+server.ts create mode 100644 src/routes/api/names/[countryCode]/+server.ts diff --git a/src/components/Spinner.svelte b/src/components/Spinner.svelte index 899cc9b..40d3418 100644 --- a/src/components/Spinner.svelte +++ b/src/components/Spinner.svelte @@ -1,8 +1,4 @@ - - -
+
@@ -29,10 +25,6 @@ display: flex; justify-content: center; align-items: center; - height: 100vh; - } - - .loading-div { - height: 100% !important; + height: 70vh; } diff --git a/src/lib/stores/store.ts b/src/lib/stores/store.ts new file mode 100644 index 0000000..9e382bf --- /dev/null +++ b/src/lib/stores/store.ts @@ -0,0 +1,5 @@ +import type { CountryData, Category } from '$types'; +import { writable } from 'svelte/store'; + +export const countriesStore = writable>({}); +export const categoriesStore = writable>({}); diff --git a/src/lib/types/index.ts b/src/lib/types/index.ts new file mode 100644 index 0000000..254ade8 --- /dev/null +++ b/src/lib/types/index.ts @@ -0,0 +1,12 @@ +export type CountryData = { + name: { [key: string]: string }; + alt: string[]; +}; + +export type Category = { + [key: string]: string[]; +}; + +export type LanguageData = { + [key: string]: string; +}; diff --git a/src/lib/utils/utils.ts b/src/lib/utils/utils.ts index 97db2fe..a90ce35 100644 --- a/src/lib/utils/utils.ts +++ b/src/lib/utils/utils.ts @@ -1,3 +1,16 @@ +import type { CountryData } from '$types'; + +export async function loadCountryData(countryCode: string): Promise { + try { + const response = await fetch(`/api/names/${countryCode}`); + if (!response.ok) throw new Error('Failed to load country data'); + return await response.json(); + } catch (error) { + console.error(`Error loading data for ${countryCode}:`, error); + return null; + } +} + function normalizeText(text: string): string { return text .normalize('NFD') diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts new file mode 100644 index 0000000..d038498 --- /dev/null +++ b/src/routes/+page.server.ts @@ -0,0 +1,25 @@ +import type { Category, CountryData } from '$types'; +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async () => { + const categoriesFiles = import.meta.glob<{ default: Category }>('$data/categories/*.json'); + const categories: Record = {}; + + for (const path in categoriesFiles) { + const module = await categoriesFiles[path](); + const categoryName = path.split('/').pop()?.replace('.json', '') || ''; + categories[categoryName] = module.default; + } + + const countriesFiles = import.meta.glob<{ default: CountryData }>('$data/names/*.json'); + const allFlags = []; + for (const path in countriesFiles) { + const countryCode = path.split('/').pop()?.replace('.json', '') || ''; + allFlags.push(countryCode); + } + + return { + categories, + allFlags + }; +}; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 3dccd48..92c9f78 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,31 +1,24 @@