diff --git a/packages/gui/src/components/CategorizedPackages/CategorizedPackages.svelte b/packages/gui/src/components/CategorizedPackages/CategorizedPackages.svelte
new file mode 100644
index 0000000..8ff82c8
--- /dev/null
+++ b/packages/gui/src/components/CategorizedPackages/CategorizedPackages.svelte
@@ -0,0 +1,30 @@
+
+
+{#each categories as category}
+
+
+ {#each category.packages as pkg}
+
+ {
+ console.log('do something with:', pkg.full_name);
+ }}
+ />
+
+ {/each}
+
+{/each}
diff --git a/packages/gui/src/components/InstalledPackages/InstalledPackages.svelte b/packages/gui/src/components/InstalledPackages/InstalledPackages.svelte
index 76b1709..76a8393 100644
--- a/packages/gui/src/components/InstalledPackages/InstalledPackages.svelte
+++ b/packages/gui/src/components/InstalledPackages/InstalledPackages.svelte
@@ -21,7 +21,6 @@
{
console.log('do something with:', pkg.full_name);
diff --git a/packages/gui/src/libs/api/mock.ts b/packages/gui/src/libs/api/mock.ts
index b96ed7f..ac91c9e 100644
--- a/packages/gui/src/libs/api/mock.ts
+++ b/packages/gui/src/libs/api/mock.ts
@@ -6,7 +6,7 @@
* * make cors work with api.tea.xyz/v1
*/
import type { Package, Review, AirtablePost } from '@tea/ui/types';
-import type { GUIPackage, Course } from '../types';
+import type { GUIPackage, Course, Category } from '../types';
import { PackageStates } from '../types';
import { loremIpsum } from 'lorem-ipsum';
import _ from 'lodash';
@@ -298,3 +298,27 @@ export async function getAllPosts(type: string): Promise {
return posts;
}
+
+export async function getCategorizedPackages(): Promise {
+ const mockPackages = packages.slice(0, 9).map((pkg) => ({
+ ...pkg,
+ state: PackageStates.AVAILABLE
+ }));
+ return [
+ {
+ label: 'framework essentials',
+ cta_label: 'View all essentials >',
+ packages: mockPackages
+ },
+ {
+ label: 'star-struck heavyweights',
+ cta_label: 'View all star-strucks >',
+ packages: mockPackages
+ },
+ {
+ label: 'simply delightful',
+ cta_label: 'View all delightful packages >',
+ packages: mockPackages
+ }
+ ];
+}
diff --git a/packages/gui/src/libs/api/tauri.ts b/packages/gui/src/libs/api/tauri.ts
index de0ac21..753180f 100644
--- a/packages/gui/src/libs/api/tauri.ts
+++ b/packages/gui/src/libs/api/tauri.ts
@@ -15,7 +15,7 @@ import { getClient } from '@tauri-apps/api/http';
import { Command } from '@tauri-apps/api/shell';
import { readDir, BaseDirectory } from '@tauri-apps/api/fs';
import type { Package, Review, AirtablePost } from '@tea/ui/types';
-import type { GUIPackage, Course } from '../types';
+import type { GUIPackage, Course, Category } from '../types';
import * as mock from './mock';
import { PackageStates } from '../types';
@@ -156,3 +156,8 @@ export async function getAllPosts(tag: string): Promise {
const posts = await get('posts', { tag });
return posts;
}
+
+export async function getCategorizedPackages(): Promise {
+ const cats = await mock.getCategorizedPackages();
+ return cats;
+}
diff --git a/packages/gui/src/libs/types.ts b/packages/gui/src/libs/types.ts
index e7bde39..b4617f4 100644
--- a/packages/gui/src/libs/types.ts
+++ b/packages/gui/src/libs/types.ts
@@ -23,3 +23,9 @@ export type Course = {
banner_image_url: string;
link: string;
};
+
+export type Category = {
+ label: string;
+ cta_label: string;
+ packages: GUIPackage[];
+};
diff --git a/packages/gui/src/routes/+page.svelte b/packages/gui/src/routes/+page.svelte
index b7b8a6d..091d638 100644
--- a/packages/gui/src/routes/+page.svelte
+++ b/packages/gui/src/routes/+page.svelte
@@ -7,6 +7,7 @@
import GettingStarted from '$components/GettingStarted/GettingStarted.svelte';
import TopPackages from '$components/TopPackages/TopPackages.svelte';
import News from '$components/News/News.svelte';
+ import CategorizedPackages from '$components/CategorizedPackages/CategorizedPackages.svelte';
backLink.set('');
@@ -21,6 +22,9 @@
+