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:
10 files changed
+430
-43
No files matched your search
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user