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 @@