diff --git a/backend/endpoints/responses/rom.py b/backend/endpoints/responses/rom.py index d2df8842b..758cc48af 100644 --- a/backend/endpoints/responses/rom.py +++ b/backend/endpoints/responses/rom.py @@ -14,6 +14,7 @@ class RomSchema(BaseModel): platform_id: int platform_slug: str + platform_name: str file_name: str file_name_no_tags: str diff --git a/frontend/src/__generated__/models/EnhancedRomSchema.ts b/frontend/src/__generated__/models/EnhancedRomSchema.ts index 3c6a38b94..61aef9d1a 100644 --- a/frontend/src/__generated__/models/EnhancedRomSchema.ts +++ b/frontend/src/__generated__/models/EnhancedRomSchema.ts @@ -14,6 +14,7 @@ export type EnhancedRomSchema = { sgdb_id: (number | null); platform_id: number; platform_slug: string; + platform_name: string; file_name: string; file_name_no_tags: string; file_extension: string; diff --git a/frontend/src/__generated__/models/RomSchema.ts b/frontend/src/__generated__/models/RomSchema.ts index 087a2fd78..99591f7e0 100644 --- a/frontend/src/__generated__/models/RomSchema.ts +++ b/frontend/src/__generated__/models/RomSchema.ts @@ -13,6 +13,7 @@ export type RomSchema = { sgdb_id: (number | null); platform_id: number; platform_slug: string; + platform_name: string; file_name: string; file_name_no_tags: string; file_extension: string; diff --git a/frontend/src/components/Dialog/Rom/SearchRomGlobal.vue b/frontend/src/components/Dialog/Rom/SearchRomGlobal.vue index a5574aa40..f3b7e6351 100644 --- a/frontend/src/components/Dialog/Rom/SearchRomGlobal.vue +++ b/frontend/src/components/Dialog/Rom/SearchRomGlobal.vue @@ -13,6 +13,9 @@ const show = ref(false); const searching = ref(false); const router = useRouter(); const searchedRoms = ref(); +const filteredRoms = ref(); +const platforms = ref(); +const selectedPlatform = ref(); const searchValue = ref(""); const emitter = inject>("emitter"); @@ -21,7 +24,7 @@ emitter?.on("showSearchRomGlobalDialog", () => { }); function clearFilter() { - searchValue.value = ""; + selectedPlatform.value = null; } async function searchRoms() { @@ -29,11 +32,30 @@ async function searchRoms() { searchedRoms.value = ( await api_rom.getRoms({ searchTerm: searchValue.value }) ).data.items.sort((a, b) => { - return a.platform_slug.localeCompare(b.platform_slug); + return a.platform_name.localeCompare(b.platform_name); }); + platforms.value = [ + ...new Set( + searchedRoms.value.map( + (rom: { platform_name: string }) => rom.platform_name + ) + ), + ]; + filterRoms(); searching.value = false; } +async function filterRoms() { + if (!selectedPlatform.value) { + filteredRoms.value = searchedRoms.value; + } else { + filteredRoms.value = searchedRoms.value.filter( + (rom: { platform_name: string }) => + rom.platform_name == selectedPlatform.value + ); + } +} + function romDetails(rom: RomSchema) { router.push({ name: "rom", @@ -97,11 +119,11 @@ onBeforeUnmount(() => { - + { clearable /> + + + + { md="2" lg="2" v-show="!searching" - v-for="rom in searchedRoms" + v-for="rom in filteredRoms" > { - +