From 25ca13b74cefdca3c5f29dbb1153769e2d23052e Mon Sep 17 00:00:00 2001 From: tdgao Date: Thu, 30 Jul 2026 15:32:24 -0700 Subject: [PATCH] feat: add/remove favourites group --- .../src/components/ui/library/index.vue | 43 ++++++++++-------- .../ui/library/instance-group/index.vue | 44 +++++++++++++------ .../library/instance-group/instance-card.vue | 25 ++++++++--- .../src/components/ui/library/use-library.ts | 31 ++++++++++++- .../src/helpers/instance-groups.ts | 2 + ...0260730120000_favorites-instance-group.sql | 6 +++ packages/app-lib/src/api/instance/groups.rs | 34 +++++++++++++- 7 files changed, 142 insertions(+), 43 deletions(-) create mode 100644 packages/app-lib/migrations/20260730120000_favorites-instance-group.sql diff --git a/apps/app-frontend/src/components/ui/library/index.vue b/apps/app-frontend/src/components/ui/library/index.vue index 25cae39ca..3540c8894 100644 --- a/apps/app-frontend/src/components/ui/library/index.vue +++ b/apps/app-frontend/src/components/ui/library/index.vue @@ -6,6 +6,7 @@ import { MinusIcon, PlayIcon, PlusIcon, + StarIcon, StopCircleIcon, TrashIcon, } from '@modrinth/assets' @@ -18,6 +19,7 @@ import InstanceGroupDnd from '@/components/ui/library/instance-group/instance-gr import LibraryToolbar from '@/components/ui/library/library-toolbar/index.vue' import LibrarySelectionActionBar from '@/components/ui/library/LibrarySelectionActionBar.vue' import { getLibraryInstanceSelectionKey, provideLibrary } from '@/components/ui/library/use-library' +import { FAVORITES_GROUP_ID } from '@/helpers/instance-groups' import ConfirmDeleteInstanceModal from '@/components/ui/modal/ConfirmDeleteInstanceModal.vue' import type { GameInstance } from '@/helpers/types' @@ -42,10 +44,11 @@ const hasActiveFilters = computed(() => ) const visibleInstanceGroups = computed(() => - instanceGroups.value.filter( - (instanceGroup) => - instanceGroup.instances.length > 0 || - (!hasActiveFilters.value && instanceGroup.key !== 'None'), + instanceGroups.value.filter((instanceGroup) => + instanceGroup.id === FAVORITES_GROUP_ID + ? instanceGroup.instances.length > 0 + : instanceGroup.instances.length > 0 || + (!hasActiveFilters.value && instanceGroup.key !== 'None'), ), ) @@ -107,22 +110,19 @@ function setConfirmDeleteModal(component: unknown) { confirmDeleteModal.value = component as InstanceType | null } -watch( - selectedLibraryInstances, - (selectedInstances) => { - if (selectedInstances.size === 0) { - anchorInstance.value = null - return - } +watch(selectedLibraryInstances, (selectedInstances) => { + if (selectedInstances.size === 0) { + anchorInstance.value = null + return + } - if ( - anchorInstance.value && - !selectedInstances.has(getLibraryInstanceSelectionKey(anchorInstance.value)) - ) { - anchorInstance.value = null - } - }, -) + if ( + anchorInstance.value && + !selectedInstances.has(getLibraryInstanceSelectionKey(anchorInstance.value)) + ) { + anchorInstance.value = null + } +})