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(