From fd4ed811be7871f85abbf6b8e86b8eb13b90cf94 Mon Sep 17 00:00:00 2001
From: Party Wumpus <48649272+PartyWumpus@users.noreply.github.com>
Date: Wed, 7 Feb 2024 17:38:08 +0000
Subject: Refactor plugin store and add sorting by downloads and release date
 (#547)

* untested first commit

* fix types & names

* comment out built in sorting for now

* rerun search when sort changes

* fix ts complaints

* use prettier

* stop switch-case fall through

* move spinner

* use locale instead of hardcoded string

* fix typo

* add sorting by downloads & try using the data field in the dropdown for data

* fix typing error

* fix asc/desc in dropdown

* fix asc/desc again. asc = smaller one go first aaaaa

* I don't think i know what ascending means maybe

* use props instead of children, like a normal component
---
 frontend/src/store.tsx | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

(limited to 'frontend/src/store.tsx')

diff --git a/frontend/src/store.tsx b/frontend/src/store.tsx
index fd458bef..ee32f0f9 100644
--- a/frontend/src/store.tsx
+++ b/frontend/src/store.tsx
@@ -7,6 +7,17 @@ export enum Store {
   Custom,
 }
 
+export enum SortOptions {
+  name = 'name',
+  date = 'date',
+  downloads = 'downloads',
+}
+
+export enum SortDirections {
+  ascending = 'asc',
+  descending = 'desc',
+}
+
 export interface StorePluginVersion {
   name: string;
   hash: string;
@@ -36,11 +47,20 @@ export async function getStore(): Promise<Store> {
   return await getSetting<Store>('store', Store.Default);
 }
 
-export async function getPluginList(): Promise<StorePlugin[]> {
+export async function getPluginList(
+  sort_by: SortOptions | null = null,
+  sort_direction: SortDirections | null = null,
+): Promise<StorePlugin[]> {
   let version = await window.DeckyPluginLoader.updateVersion();
   let store = await getSetting<Store | null>('store', null);
 
   let customURL = await getSetting<string>('store-url', 'https://plugins.deckbrew.xyz/plugins');
+
+  let query: URLSearchParams | string = new URLSearchParams();
+  sort_by && query.set('sort_by', sort_by);
+  sort_direction && query.set('sort_direction', sort_direction);
+  query = '?' + String(query);
+
   let storeURL;
   if (store === null) {
     console.log('Could not get store, using Default.');
@@ -62,7 +82,7 @@ export async function getPluginList(): Promise<StorePlugin[]> {
       storeURL = 'https://plugins.deckbrew.xyz/plugins';
       break;
   }
-  return fetch(storeURL, {
+  return fetch(storeURL + query, {
     method: 'GET',
     headers: {
       'X-Decky-Version': version.current,
-- 
cgit v1.2.3

