Fix searching group members

This commit is contained in:
Natsumi
2025-08-29 17:18:03 +12:00
parent 6754b72e92
commit d854f3f009
2 changed files with 56 additions and 27 deletions

View File

@@ -1212,7 +1212,8 @@
userImage,
userStatusClass,
formatDateFilter,
textToHex
textToHex,
debounce
} from '../../../shared/utils';
import {
useAppearanceSettingsStore,
@@ -1253,8 +1254,6 @@
const groupDialogRef = ref(null);
const isGroupMembersDone = ref(false);
const isGroupMembersLoading = ref(false);
const groupMembersSearchTimer = ref(null);
const groupMembersSearchPending = ref(false);
const groupDialogGalleryCurrentName = ref('0');
const groupDialogTabCurrentName = ref('0');
const isGroupGalleryLoading = ref(false);
@@ -1328,37 +1327,22 @@
}
function groupMembersSearch() {
if (groupMembersSearchTimer.value) {
groupMembersSearchPending.value = true;
} else {
groupMembersSearchExecute();
groupMembersSearchTimer.value = setTimeout(() => {
if (groupMembersSearchPending.value) {
groupMembersSearchExecute();
}
groupMembersSearchTimer.value = null;
}, 500);
if (groupDialog.value.memberSearch.length < 3) {
groupDialog.value.memberSearchResults = [];
isGroupMembersLoading.value = false;
return;
}
debounce(groupMembersSearchDebounced, 200)();
}
function groupMembersSearchExecute() {
try {
groupMembersSearchDebounce();
} catch (err) {
console.error(err);
}
groupMembersSearchTimer.value = null;
groupMembersSearchPending.value = false;
}
function groupMembersSearchDebounce() {
function groupMembersSearchDebounced() {
const D = groupDialog.value;
const search = D.memberSearch;
D.memberSearchResults = [];
if (!search || search.length < 3) {
return;
}
isGroupMembersLoading.value = false;
isGroupMembersLoading.value = true;
groupRequest
.getGroupMembersSearch({
groupId: D.id,

View File

@@ -846,7 +846,7 @@
import * as workerTimers from 'worker-timers';
import { groupRequest, userRequest } from '../../../api';
import { groupDialogFilterOptions, groupDialogSortingOptions } from '../../../shared/constants';
import { hasGroupPermission, userImage, userImageFull, formatDateFilter } from '../../../shared/utils';
import { hasGroupPermission, userImage, userImageFull, formatDateFilter, debounce } from '../../../shared/utils';
import { useAppearanceSettingsStore, useGalleryStore, useGroupStore, useUserStore } from '../../../stores';
import GroupMemberModerationExportDialog from './GroupMemberModerationExportDialog.vue';
@@ -864,7 +864,6 @@
const selectedUsersArray = ref([]);
const isGroupMembersLoading = ref(false);
const isGroupMembersDone = ref(false);
const groupMembersSearch = ref('');
const memberFilter = ref({
id: null,
name: 'dialog.group.members.filters.everyone'
@@ -1774,6 +1773,52 @@
.replace(/\b\w/g, (l) => l.toUpperCase());
}
function groupMembersSearch() {
if (memberSearch.value.length < 3) {
groupMemberModerationTable.data = [];
isGroupMembersLoading.value = false;
return;
}
isGroupMembersLoading.value = true;
debounce(groupMembersSearchDebounced, 200)();
}
function groupMembersSearchDebounced() {
const groupId = groupMemberModeration.value.id;
const search = memberSearch.value;
groupMemberModerationTable.data = [];
if (memberSearch.value.length < 3) {
return;
}
isGroupMembersLoading.value = true;
groupRequest
.getGroupMembersSearch({
groupId,
query: search,
n: 100,
offset: 0
})
.then((args) => {
for (const json of args.json.results) {
handleGroupMember({
json,
params: {
groupId: args.params.groupId
}
});
}
if (groupId === args.params.groupId) {
groupMemberModerationTable.data = args.json.results.map((member) => ({
...member,
$selected: Boolean(selectedUsers[member.userId])
}));
}
})
.finally(() => {
isGroupMembersLoading.value = false;
});
}
async function getGroupMembers() {
members.value = [];
isGroupMembersDone.value = false;