Skip to content

Commit 161ed90

Browse files
authored
Merge pull request #10 from Roshanjossey/fix-pnpm-lock-issue
move fetching data of icons to client side
2 parents f736e69 + 933896a commit 161ed90

File tree

6 files changed

+75
-57
lines changed

6 files changed

+75
-57
lines changed

.github/workflows/deploy-preview.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ permissions:
88
contents: read
99
pages: write
1010
id-token: write
11+
issues: write
12+
pull-requests: write
1113

1214
concurrency:
1315
group: "pages-preview-${{ github.event.pull_request.number }}"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
},
2929
"dependencies": {
3030
"@tailwindcss/vite": "^4.0.12",
31-
"devicon": "^2.16.0",
31+
"devicon": "^2.17.0",
3232
"tailwindcss": "^4.0.12"
3333
}
3434
}

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/lib/stores/iconStore.js

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,50 @@ export const isDarkMode = writable(false);
99
export const selectedIcon = writable(null);
1010
export const isModalOpen = writable(false);
1111

12-
// Initialize store with data from server
13-
export function initializeStore(initialIcons, initialTags) {
14-
icons.set(initialIcons);
15-
availableTags.set(initialTags);
16-
17-
// Check local storage for dark mode preference
18-
if (typeof window !== 'undefined') {
19-
const storedDarkMode = localStorage.getItem('darkMode') === 'true';
20-
isDarkMode.set(storedDarkMode);
21-
22-
// Apply theme to document
23-
if (storedDarkMode) {
24-
document.documentElement.classList.add('dark');
25-
}
12+
// Load icons data from GitHub API
13+
export async function loadIconsData() {
14+
try {
15+
const response = await fetch('https://raw.githubusercontent.com/devicons/devicon/master/devicon.json');
16+
17+
if (!response.ok) {
18+
throw new Error(`Failed to fetch icons: ${response.statusText}`);
19+
}
20+
21+
const iconsData = await response.json();
22+
23+
// Extract all available tags
24+
const availableTagsData = new Set();
25+
iconsData.forEach(icon => {
26+
if (icon.tags && Array.isArray(icon.tags)) {
27+
icon.tags.forEach(tag => availableTagsData.add(tag));
2628
}
29+
});
30+
31+
// Set the data in stores
32+
icons.set(iconsData);
33+
availableTags.set(Array.from(availableTagsData).sort());
34+
35+
return { icons: iconsData, availableTags: Array.from(availableTagsData).sort() };
36+
} catch (error) {
37+
console.error('Error fetching icons:', error);
38+
icons.set([]);
39+
availableTags.set([]);
40+
throw error;
41+
}
42+
}
43+
44+
// Initialize store with dark mode preference
45+
export function initializeStore() {
46+
// Check local storage for dark mode preference
47+
if (typeof window !== 'undefined') {
48+
const storedDarkMode = localStorage.getItem('darkMode') === 'true';
49+
isDarkMode.set(storedDarkMode);
50+
51+
// Apply theme to document
52+
if (storedDarkMode) {
53+
document.documentElement.classList.add('dark');
54+
}
55+
}
2756
}
2857

2958
// Derived store for filtered icons

src/routes/+page.server.js

Lines changed: 0 additions & 31 deletions
This file was deleted.

src/routes/+page.svelte

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,26 @@
55
import IconModal from "../components/IconModal.svelte";
66
import {
77
initializeStore,
8+
loadIconsData,
89
filteredIcons,
910
isModalOpen,
1011
} from "$lib/stores/iconStore";
1112
12-
export let data;
13+
let isLoading = true;
14+
let error = null;
1315
14-
onMount(() => {
15-
// Initialize store with server-fetched data
16-
initializeStore(data.icons, data.availableTags);
16+
onMount(async () => {
17+
// Initialize store with dark mode preference
18+
initializeStore();
19+
20+
try {
21+
// Load icons data from GitHub API
22+
await loadIconsData();
23+
isLoading = false;
24+
} catch (err) {
25+
error = err.message;
26+
isLoading = false;
27+
}
1728
});
1829
</script>
1930

@@ -22,9 +33,16 @@
2233
>
2334
<div class="container mx-auto p-4" >
2435

25-
{#if data.error}
36+
{#if isLoading}
37+
<div class="flex justify-center items-center min-h-64">
38+
<div class="text-center">
39+
<div class="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4"></div>
40+
<p class="text-gray-600 dark:text-gray-400">Loading icons...</p>
41+
</div>
42+
</div>
43+
{:else if error}
2644
<div class="bg-red-100 dark:bg-red-900 p-4 rounded-lg">
27-
<p class="text-red-700 dark:text-red-300">Error: {data.error}</p>
45+
<p class="text-red-700 dark:text-red-300">Error: {error}</p>
2846
</div>
2947
{:else}
3048
<SearchFilter />

0 commit comments

Comments
 (0)