Fix Friends & Social member search; purge all account data on deletion

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DjMbLQujBHunCCu5GpsHaT
This commit is contained in:
Claude committed 2026-09-30 17:46:10 +00:00
1 parent 1a321336b4
commit e344e7144e
10 files changed
+430 -43

No files matched your search

+5 -3
View File
@@ -994,10 +994,12 @@ pub async fn remove_friend(state: State<'_, AppState>, friend_uuid: Option<Strin
#[tauri::command]
pub async fn search_members(state: State<'_, AppState>, query: String) -> Res<Vec<MemberProfile>> {
let req = account_api(&state, reqwest::Method::GET, &format!("/social/members?q={query}")).await?;
let resp = req.send().await.map_err(err)?;
let req = account_api(&state, reqwest::Method::GET, "/social/members").await?;
// `.query` percent-encodes, so names with spaces, `&` or `#` search correctly.
let resp = req.query(&[("q", query.trim())]).send().await.map_err(err)?;
if !resp.status().is_success() {
return Err("unable to search members".into());
let body: serde_json::Value = resp.json().await.unwrap_or_default();
return Err(body["error"].as_str().unwrap_or("unable to search members").to_string());
}
resp.json().await.map_err(err)
}
+7 -2
View File
@@ -59,7 +59,7 @@
try {
membersList = await invoke<MemberProfile[]>('search_members', { query: memberSearchQuery.trim() });
} catch (e: any) {
toast(e?.message ?? 'Failed to search members', 'error');
toast(typeof e === 'string' ? e : e?.message ?? 'Failed to search members', 'error');
} finally {
loadingMembers = false;
}
@@ -417,7 +417,10 @@
<div class="members-grid">
{#each membersList as member (member.uuid)}
{@const isMe = member.uuid === activeAccount()?.uuid}
<div class="member-card glass" class:is-me={isMe}>
<!-- svelte-ignore a11y_click_events_have_key_events -->
<div class="member-card glass clickable" class:is-me={isMe} role="button" tabindex="0" title="Open {member.username}'s profile"
onclick={(e) => { if (!(e.target as HTMLElement).closest('button')) app.viewProfileUuid = member.uuid; }}
onkeydown={(e) => e.key === 'Enter' && e.target === e.currentTarget && (app.viewProfileUuid = member.uuid)}>
<div class="member-card-top">
<div class="avatar-wrap" role="button" tabindex="0" onclick={() => (app.viewProfileUuid = member.uuid)} onkeydown={(e) => e.key === 'Enter' && (app.viewProfileUuid = member.uuid)}>
<Avatar uuid={member.uuid} name={member.username} size={2.8} />
@@ -1068,6 +1071,8 @@
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1rem;
}
.member-card.clickable { cursor: pointer; }
.member-card.clickable:hover { border-color: var(--line-strong); }
.member-card {
padding: 1.1rem;
border-radius: var(--radius);