diff --git a/src/localization/en.json b/src/localization/en.json index c900cbb3..371d933b 100644 --- a/src/localization/en.json +++ b/src/localization/en.json @@ -744,6 +744,7 @@ "sort_favorite_by": "Sort Favorites by", "sort_favorite_by_name": "Name", "sort_favorite_by_date": "Date", + "sort_favorite_by_players": "Players", "sort_instance_users_by": "Sort Instance Users by", "sort_instance_users_by_time": "Time", "sort_instance_users_by_alphabet": "Alphabetical", diff --git a/src/views/Favorites/FavoritesAvatar.vue b/src/views/Favorites/FavoritesAvatar.vue index ef03a6b3..b7229e8e 100644 --- a/src/views/Favorites/FavoritesAvatar.vue +++ b/src/views/Favorites/FavoritesAvatar.vue @@ -2,7 +2,7 @@
@@ -606,7 +606,7 @@ * @param value */ function handleSortFavoritesChange(value) { - const next = Boolean(value); + const next = value === 'date'; if (next !== sortFavorites.value) { setSortFavorites(); } diff --git a/src/views/Favorites/FavoritesFriend.vue b/src/views/Favorites/FavoritesFriend.vue index 4ab28954..a9d1e983 100644 --- a/src/views/Favorites/FavoritesFriend.vue +++ b/src/views/Favorites/FavoritesFriend.vue @@ -2,7 +2,7 @@
@@ -490,7 +490,7 @@ * @param value */ function handleSortFavoritesChange(value) { - const next = Boolean(value); + const next = value === 'date'; if (next !== sortFavorites.value) { setSortFavorites(); } diff --git a/src/views/Favorites/FavoritesWorld.vue b/src/views/Favorites/FavoritesWorld.vue index e24dcaef..0fe6bf3c 100644 --- a/src/views/Favorites/FavoritesWorld.vue +++ b/src/views/Favorites/FavoritesWorld.vue @@ -2,7 +2,8 @@
@@ -500,6 +501,16 @@ const refreshCancelToken = ref(null); const worldEditMode = ref(false); const worldToolbarMenuOpen = ref(false); + const worldSortMode = ref('none'); + + const worldExtraSortOptions = computed(() => [ + { value: 'players', label: t('view.settings.appearance.appearance.sort_favorite_by_players') } + ]); + + const worldSortValue = computed(() => { + if (worldSortMode.value === 'players') return 'players'; + return sortFavorites.value ? 'date' : 'name'; + }); const { activeGroupMenu, @@ -589,14 +600,22 @@ if (!activeRemoteGroup.value) { return []; } - return groupedWorldFavorites.value[activeRemoteGroup.value.key] || []; + const list = groupedWorldFavorites.value[activeRemoteGroup.value.key] || []; + if (worldSortMode.value === 'players') { + return list.toSorted((a, b) => (b.ref?.occupants ?? 0) - (a.ref?.occupants ?? 0)); + } + return list; }); const currentLocalFavorites = computed(() => { if (!activeLocalGroupName.value) { return []; } - return localWorldFavorites.value[activeLocalGroupName.value] || []; + const list = localWorldFavorites.value[activeLocalGroupName.value] || []; + if (worldSortMode.value === 'players') { + return list.toSorted((a, b) => (b.occupants ?? 0) - (a.occupants ?? 0)); + } + return list; }); const localFavoritesViewportRef = ref(null); @@ -683,8 +702,13 @@ * * @param value */ - function handleSortFavoritesChange(value) { - const next = Boolean(value); + function handleSortValueChange(value) { + if (value === 'players') { + worldSortMode.value = 'players'; + return; + } + worldSortMode.value = 'none'; + const next = value === 'date'; if (next !== sortFavorites.value) { setSortFavorites(); } diff --git a/src/views/Favorites/components/FavoritesToolbar.vue b/src/views/Favorites/components/FavoritesToolbar.vue index 3e846dce..29cccdca 100644 --- a/src/views/Favorites/components/FavoritesToolbar.vue +++ b/src/views/Favorites/components/FavoritesToolbar.vue @@ -1,7 +1,7 @@