Reverse fav export order

This commit is contained in:
Natsumi
2026-02-22 16:11:33 +11:00
parent 612ea945b4
commit bd8551461b
13 changed files with 39 additions and 29 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
<span v-if="avatarName" class="flex items-center mr-1" <span v-if="avatarName" class="flex items-center mr-1"
>{{ avatarName }} <Lock v-if="avatarType && avatarType === '(own)'" class="h-4 w-4 ml-1" >{{ avatarName }} <Lock v-if="avatarType && avatarType === '(own)'" class="h-4 w-4 ml-1"
/></span> /></span>
<span v-else class="text-muted-foreground">Unknown Avatar</span> <span v-else class="flex items-center mr-1 text-muted-foreground">Unknown Avatar</span>
<TooltipWrapper v-if="avatarTags"> <TooltipWrapper v-if="avatarTags">
<template #content> <template #content>
<span class="truncate">{{ avatarTags }}</span> <span class="truncate">{{ avatarTags }}</span>
@@ -63,7 +63,7 @@
>{{ props.setAvatarTagsDialog.selectedAvatarIds.length }} / >{{ props.setAvatarTagsDialog.selectedAvatarIds.length }} /
{{ setAvatarTagsDialog.ownAvatars.length }}</span {{ setAvatarTagsDialog.ownAvatars.length }}</span
> >
<Loader2 v-if="setAvatarTagsDialog.loading" class="is-loading" style="margin-left: 5px" /> <Spinner v-if="setAvatarTagsDialog.loading" class="inline-block ml-2" />
<br /> <br />
<div class="x-friend-list" style="margin-top: 10px; min-height: 60px; max-height: 280px"> <div class="x-friend-list" style="margin-top: 10px; min-height: 60px; max-height: 280px">
<div <div
@@ -111,7 +111,7 @@
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
import { Checkbox } from '@/components/ui/checkbox'; import { Checkbox } from '@/components/ui/checkbox';
import { InputGroupTextareaField } from '@/components/ui/input-group'; import { InputGroupTextareaField } from '@/components/ui/input-group';
import { Loader2 } from 'lucide-vue-next'; import { Spinner } from '@/components/ui/spinner';
import { toast } from 'vue-sonner'; import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { watch } from 'vue'; import { watch } from 'vue';
@@ -532,7 +532,7 @@
>{{ t('dialog.group_member_moderation.unban') }}</Button >{{ t('dialog.group_member_moderation.unban') }}</Button
> >
<span v-if="progressCurrent" style="margin-top: 10px"> <span v-if="progressCurrent" style="margin-top: 10px">
<Loader2 class="is-loading" style="margin-left: 5px; margin-right: 5px" /> <Spinner class="inline-block ml-2 mr-2" />
{{ t('dialog.group_member_moderation.progress') }} {{ progressCurrent }}/{{ progressTotal }} {{ t('dialog.group_member_moderation.progress') }} {{ progressCurrent }}/{{ progressTotal }}
</span> </span>
<Button <Button
+9 -1
View File
@@ -1202,6 +1202,7 @@ export const useUserStore = defineStore('User', () => {
async function refreshUserDialogAvatars(fileId) { async function refreshUserDialogAvatars(fileId) {
const D = userDialog.value; const D = userDialog.value;
const userId = D.id;
if (D.isAvatarsLoading) { if (D.isAvatarsLoading) {
return; return;
} }
@@ -1237,7 +1238,9 @@ export const useUserStore = defineStore('User', () => {
}, },
done: () => { done: () => {
const array = Array.from(map.values()); const array = Array.from(map.values());
sortUserDialogAvatars(array); if (userId === D.id) {
sortUserDialogAvatars(array);
}
D.isAvatarsLoading = false; D.isAvatarsLoading = false;
if (fileId) { if (fileId) {
D.loading = false; D.loading = false;
@@ -1871,6 +1874,10 @@ export const useUserStore = defineStore('User', () => {
currentAvatarThumbnailImageUrl: '', currentAvatarThumbnailImageUrl: '',
date_joined: '', date_joined: '',
developerType: '', developerType: '',
discordDetails: {
global_name: '',
id: ''
},
discordId: '', discordId: '',
displayName: '', displayName: '',
emailVerified: false, emailVerified: false,
@@ -1880,6 +1887,7 @@ export const useUserStore = defineStore('User', () => {
friends: [], friends: [],
googleId: '', googleId: '',
hasBirthday: false, hasBirthday: false,
hasDiscordFriendsOptOut: false,
hasEmail: false, hasEmail: false,
hasLoggedInFromClient: false, hasLoggedInFromClient: false,
hasPendingEmail: false, hasPendingEmail: false,
-1
View File
@@ -1599,7 +1599,6 @@
display: flex; display: flex;
align-items: center; align-items: center;
flex-direction: column; flex-direction: column;
gap: 6px;
} }
.group-item__count { .group-item__count {
+6
View File
@@ -1242,6 +1242,12 @@
font-weight: 600; font-weight: 600;
} }
.group-item__right {
display: flex;
align-items: center;
flex-direction: column;
}
.group-item__count { .group-item__count {
font-size: 12px; font-size: 12px;
} }
@@ -249,7 +249,7 @@
} }
} }
} }
avatarExportContent.value = lines.join('\n'); avatarExportContent.value = lines.reverse().join('\n');
} }
function selectAvatarExportGroup(group) { function selectAvatarExportGroup(group) {
avatarExportFavoriteGroup.value = group; avatarExportFavoriteGroup.value = group;
@@ -10,7 +10,7 @@
<div v-if="avatarImportDialog.progress"> <div v-if="avatarImportDialog.progress">
{{ t('dialog.avatar_import.process_progress') }} {{ avatarImportDialog.progress }} / {{ t('dialog.avatar_import.process_progress') }} {{ avatarImportDialog.progress }} /
{{ avatarImportDialog.progressTotal }} {{ avatarImportDialog.progressTotal }}
<Loader2 style="margin: 0 5px" /> <Spinner class="inline-block ml-2 mr-2" />
</div> </div>
<Button v-if="avatarImportDialog.loading" size="sm" variant="secondary" @click="cancelAvatarImport"> <Button v-if="avatarImportDialog.loading" size="sm" variant="secondary" @click="cancelAvatarImport">
{{ t('dialog.avatar_import.cancel') }} {{ t('dialog.avatar_import.cancel') }}
@@ -89,7 +89,7 @@
</div> </div>
</div> </div>
<span v-if="avatarImportDialog.importProgress" style="margin: 10px"> <span v-if="avatarImportDialog.importProgress" style="margin: 10px">
<Loader2 style="margin-right: 5px" /> <Spinner class="inline-block ml-2 mr-2" />
{{ t('dialog.avatar_import.import_progress') }} {{ t('dialog.avatar_import.import_progress') }}
{{ avatarImportDialog.importProgress }}/{{ avatarImportDialog.importProgressTotal }} {{ avatarImportDialog.importProgress }}/{{ avatarImportDialog.importProgressTotal }}
</span> </span>
@@ -121,7 +121,7 @@
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
import { DataTableLayout } from '@/components/ui/data-table'; import { DataTableLayout } from '@/components/ui/data-table';
import { InputGroupTextareaField } from '@/components/ui/input-group'; import { InputGroupTextareaField } from '@/components/ui/input-group';
import { Loader2 } from 'lucide-vue-next'; import { Spinner } from '@/components/ui/spinner';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner'; import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
@@ -247,11 +247,10 @@
} }
} }
D.progress++; D.progress++;
if (D.progress === avatarIdList.size) {
D.progress = 0;
}
} }
D.loading = false; D.loading = false;
D.progress = 0;
D.progressTotal = 0;
} }
function deleteItemAvatarImport(ref) { function deleteItemAvatarImport(ref) {
@@ -207,7 +207,7 @@
} }
} }
} }
friendExportContent.value = lines.join('\n'); friendExportContent.value = lines.reverse().join('\n');
} }
function selectFriendExportGroup(group) { function selectFriendExportGroup(group) {
@@ -10,7 +10,7 @@
<div v-if="friendImportDialog.progress"> <div v-if="friendImportDialog.progress">
{{ t('dialog.friend_import.process_progress') }} {{ friendImportDialog.progress }} / {{ t('dialog.friend_import.process_progress') }} {{ friendImportDialog.progress }} /
{{ friendImportDialog.progressTotal }} {{ friendImportDialog.progressTotal }}
<Loader2 style="margin: 0 5px" /> <Spinner class="inline-block ml-1 mr-1" />
</div> </div>
<Button v-if="friendImportDialog.loading" size="sm" variant="secondary" @click="cancelFriendImport"> <Button v-if="friendImportDialog.loading" size="sm" variant="secondary" @click="cancelFriendImport">
{{ t('dialog.friend_import.cancel') }} {{ t('dialog.friend_import.cancel') }}
@@ -93,7 +93,7 @@
</div> </div>
</div> </div>
<span v-if="friendImportDialog.importProgress" style="margin: 10px"> <span v-if="friendImportDialog.importProgress" style="margin: 10px">
<Loader2 style="margin-right: 5px" /> <Spinner class="inline-block ml-2 mr-2" />
{{ t('dialog.friend_import.import_progress') }} {{ friendImportDialog.importProgress }}/{{ {{ t('dialog.friend_import.import_progress') }} {{ friendImportDialog.importProgress }}/{{
friendImportDialog.importProgressTotal friendImportDialog.importProgressTotal
}} }}
@@ -124,7 +124,7 @@
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
import { DataTableLayout } from '@/components/ui/data-table'; import { DataTableLayout } from '@/components/ui/data-table';
import { InputGroupTextareaField } from '@/components/ui/input-group'; import { InputGroupTextareaField } from '@/components/ui/input-group';
import { Loader2 } from 'lucide-vue-next'; import { Spinner } from '@/components/ui/spinner';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner'; import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
@@ -340,11 +340,10 @@
} }
} }
D.progress++; D.progress++;
if (D.progress === userIdList.size) {
D.progress = 0;
}
} }
D.loading = false; D.loading = false;
D.progress = 0;
D.progressTotal = 0;
} }
function resetFriendImport() { function resetFriendImport() {
friendImportDialog.value.input = ''; friendImportDialog.value.input = '';
@@ -242,7 +242,7 @@
} }
} }
} }
worldExportContent.value = lines.join('\n'); worldExportContent.value = lines.reverse().join('\n');
} }
function selectWorldExportGroup(group) { function selectWorldExportGroup(group) {
@@ -10,7 +10,7 @@
<div v-if="worldImportDialog.progress"> <div v-if="worldImportDialog.progress">
{{ t('dialog.world_import.process_progress') }} {{ t('dialog.world_import.process_progress') }}
{{ worldImportDialog.progress }} / {{ worldImportDialog.progressTotal }} {{ worldImportDialog.progress }} / {{ worldImportDialog.progressTotal }}
<Loader2 style="margin: 0 5px" /> <Spinner class="inline-block ml-2 mr-2" />
</div> </div>
<Button v-if="worldImportDialog.loading" size="sm" variant="outline" @click="cancelWorldImport"> <Button v-if="worldImportDialog.loading" size="sm" variant="outline" @click="cancelWorldImport">
{{ t('dialog.world_import.cancel') }} {{ t('dialog.world_import.cancel') }}
@@ -93,7 +93,7 @@
</div> </div>
</div> </div>
<span v-if="worldImportDialog.importProgress" style="margin: 10px"> <span v-if="worldImportDialog.importProgress" style="margin: 10px">
<Loader2 style="margin-right: 5px" /> <Spinner class="inline-block ml-2 mr-2" />
{{ t('dialog.world_import.import_progress') }} {{ t('dialog.world_import.import_progress') }}
{{ worldImportDialog.importProgress }}/{{ worldImportDialog.importProgressTotal }} {{ worldImportDialog.importProgress }}/{{ worldImportDialog.importProgressTotal }}
</span> </span>
@@ -125,7 +125,7 @@
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
import { DataTableLayout } from '@/components/ui/data-table'; import { DataTableLayout } from '@/components/ui/data-table';
import { InputGroupTextareaField } from '@/components/ui/input-group'; import { InputGroupTextareaField } from '@/components/ui/input-group';
import { Loader2 } from 'lucide-vue-next'; import { Spinner } from '@/components/ui/spinner';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { toast } from 'vue-sonner'; import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
@@ -257,11 +257,10 @@
} }
} }
D.progress++; D.progress++;
if (D.progress === worldIdList.size) {
D.progress = 0;
}
} }
D.loading = false; D.loading = false;
D.progress = 0;
D.progressTotal = 0;
} }
function deleteItemWorldImport(ref) { function deleteItemWorldImport(ref) {
+2 -2
View File
@@ -37,7 +37,7 @@
{{ t('dialog.note_export.cancel') }} {{ t('dialog.note_export.cancel') }}
</Button> </Button>
<span v-if="loading" style="margin: 10px"> <span v-if="loading" style="margin: 10px">
<Loader2 style="margin-right: 5px" /> <Spinner class="inline-block ml-2 mr-2" />
{{ t('dialog.note_export.progress') }} {{ progress }}/{{ progressTotal }} {{ t('dialog.note_export.progress') }} {{ progress }}/{{ progressTotal }}
</span> </span>
@@ -67,7 +67,7 @@
import { computed, ref, watch } from 'vue'; import { computed, ref, watch } from 'vue';
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
import { DataTableLayout } from '@/components/ui/data-table'; import { DataTableLayout } from '@/components/ui/data-table';
import { Loader2 } from 'lucide-vue-next'; import { Spinner } from '@/components/ui/spinner';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';