diff --git a/src/localization/en.json b/src/localization/en.json index 371d933b..20519eaf 100644 --- a/src/localization/en.json +++ b/src/localization/en.json @@ -178,6 +178,7 @@ "group_by_instance": "Group by Instance", "split_favorite_friends": "Show Favorite Groups", "hide_friends_in_same_instance": "Hide Grouped Friends", + "same_instance_above_favorites": "Prioritize Same Instance", "sort_primary": "Sort by", "sort_secondary": "Then by", "sort_tertiary": "Then by", diff --git a/src/stores/settings/appearance.js b/src/stores/settings/appearance.js index c2c1965d..aaa4f36f 100644 --- a/src/stores/settings/appearance.js +++ b/src/stores/settings/appearance.js @@ -81,6 +81,7 @@ export const useAppearanceSettingsStore = defineStore( const navWidth = ref(240); const isSidebarGroupByInstance = ref(true); const isHideFriendsInSameInstance = ref(false); + const isSameInstanceAboveFavorites = ref(false); const isSidebarDivideByFriendGroup = ref(false); const sidebarFavoriteGroups = ref([]); const sidebarFavoriteGroupOrder = ref([]); @@ -158,6 +159,7 @@ export const useAppearanceSettingsStore = defineStore( navWidthConfig, isSidebarGroupByInstanceConfig, isHideFriendsInSameInstanceConfig, + isSameInstanceAboveFavoritesConfig, isSidebarDivideByFriendGroupConfig, sidebarFavoriteGroupsConfig, sidebarFavoriteGroupOrderConfig, @@ -214,6 +216,10 @@ export const useAppearanceSettingsStore = defineStore( 'VRCX_hideFriendsInSameInstance', false ), + configRepository.getBool( + 'VRCX_sameInstanceAboveFavorites', + false + ), configRepository.getBool( 'VRCX_sidebarDivideByFriendGroup', true @@ -326,6 +332,8 @@ export const useAppearanceSettingsStore = defineStore( isSidebarGroupByInstance.value = isSidebarGroupByInstanceConfig; isHideFriendsInSameInstance.value = isHideFriendsInSameInstanceConfig; + isSameInstanceAboveFavorites.value = + isSameInstanceAboveFavoritesConfig; isSidebarDivideByFriendGroup.value = isSidebarDivideByFriendGroupConfig; sidebarFavoriteGroups.value = JSON.parse( @@ -792,6 +800,17 @@ export const useAppearanceSettingsStore = defineStore( isHideFriendsInSameInstance.value ); } + /** + * + */ + function setIsSameInstanceAboveFavorites() { + isSameInstanceAboveFavorites.value = + !isSameInstanceAboveFavorites.value; + configRepository.setBool( + 'VRCX_sameInstanceAboveFavorites', + isSameInstanceAboveFavorites.value + ); + } /** * */ @@ -1134,6 +1153,7 @@ export const useAppearanceSettingsStore = defineStore( navWidth, isSidebarGroupByInstance, isHideFriendsInSameInstance, + isSameInstanceAboveFavorites, isSidebarDivideByFriendGroup, sidebarFavoriteGroups, sidebarFavoriteGroupOrder, @@ -1173,6 +1193,7 @@ export const useAppearanceSettingsStore = defineStore( setNavWidth, setIsSidebarGroupByInstance, setIsHideFriendsInSameInstance, + setIsSameInstanceAboveFavorites, setIsSidebarDivideByFriendGroup, setSidebarFavoriteGroups, setSidebarFavoriteGroupOrder, diff --git a/src/views/Sidebar/Sidebar.vue b/src/views/Sidebar/Sidebar.vue index 117a8661..4b0df85d 100644 --- a/src/views/Sidebar/Sidebar.vue +++ b/src/views/Sidebar/Sidebar.vue @@ -76,6 +76,12 @@ :model-value="isHideFriendsInSameInstance" @update:modelValue="setIsHideFriendsInSameInstance" /> + + {{ t('side_panel.settings.same_instance_above_favorites') }} + + {{ t('side_panel.settings.split_favorite_friends') }} { - const rows = []; - - rows.push( - buildToggleRow({ - key: 'me-header', - label: t('side_panel.me'), - expanded: isFriendsGroupMe.value, - headerPadding: '0 0 5px', - onClick: toggleFriendsGroupMe - }) - ); - - if (isFriendsGroupMe.value) { - rows.push({ type: 'me-item', key: `me:${currentUser.value?.id ?? 'me'}` }); - } - + function buildFavoriteRows(rows) { const vipFriendCount = isSidebarDivideByFriendGroup.value ? vipFriendsDivideByGroup.value.reduce((sum, group) => sum + group.length, 0) : visibleFavoriteOnlineFriends.value.length; @@ -476,7 +461,9 @@ }); } } + } + function buildSameInstanceRows(rows) { if (isSidebarGroupByInstance.value && friendsInSameInstance.value.length) { rows.push( buildToggleRow({ @@ -512,6 +499,32 @@ }); } } + } + + const virtualRows = computed(() => { + const rows = []; + + rows.push( + buildToggleRow({ + key: 'me-header', + label: t('side_panel.me'), + expanded: isFriendsGroupMe.value, + headerPadding: '0 0 5px', + onClick: toggleFriendsGroupMe + }) + ); + + if (isFriendsGroupMe.value) { + rows.push({ type: 'me-item', key: `me:${currentUser.value?.id ?? 'me'}` }); + } + + if (isSameInstanceAboveFavorites.value) { + buildSameInstanceRows(rows); + buildFavoriteRows(rows); + } else { + buildFavoriteRows(rows); + buildSameInstanceRows(rows); + } if (onlineFriendsByGroupStatus.value.length) { rows.push(