fix(web): code review round 1 remaining UI fixes
- EmojiPanel: add missing 手势/物品 categories, 12-column grid per README §3.3
- DetailColumn: add 投诉举报 row, real ID/region/签名 via new getUserProfile
API, chevron_right icons now use --color-icon-arrow token (were tertiary
text color), regroup rows so dividers only sit between sections not every
row (matches design-code reference exactly)
- MessageBubble/ConversationView: right-clicked message bubble now gets the
spec's outline while its context menu is open
- ChatListColumn/AppShell: pinned 系统消息/文件助手 rows using confirmed
bootstrap entries/entry_badges topic names ("sys"/"slf"); route to the
existing SectionPlaceholder pattern since their own dedicated layouts are
Phase 8, not built yet
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
a7da4dc079
commit
93d4077d1e
@@ -13,10 +13,34 @@ export interface RealnameStatus {
|
||||
status: 'unverified' | 'pending' | 'verified' | string;
|
||||
}
|
||||
|
||||
/** README §2.1's "固定置顶两项" -- topic names are fixed/well-known on this backend (confirmed:
|
||||
* docs/IM-前后端对接文档.md:909, `file_assistant.topic:"slf"`, `system_messages.topic:"sys"`), not
|
||||
* per-user values the client has to discover another way. */
|
||||
export interface BootstrapEntry {
|
||||
enabled: boolean;
|
||||
route: string;
|
||||
topic?: string;
|
||||
unread_count: number;
|
||||
}
|
||||
|
||||
export interface BootstrapConfig {
|
||||
message_policy?: MessagePolicy;
|
||||
limits?: { max_forward_targets?: number; [key: string]: unknown };
|
||||
security?: { realname?: RealnameStatus };
|
||||
entries?: {
|
||||
new_friends?: BootstrapEntry;
|
||||
groups?: BootstrapEntry;
|
||||
file_assistant?: BootstrapEntry;
|
||||
system_messages?: BootstrapEntry;
|
||||
};
|
||||
entry_badges?: {
|
||||
new_friends_pending_count?: number;
|
||||
groups_unread_count?: number;
|
||||
file_assistant_unread_count?: number;
|
||||
system_unread_count?: number;
|
||||
workbench_total_unread?: number;
|
||||
};
|
||||
system_topic?: { topic: string; type: string };
|
||||
[key: string]: unknown;
|
||||
}
|
||||
|
||||
|
||||
@@ -72,6 +72,25 @@ export function rejectFriendRequest(requestId: string, version?: number) {
|
||||
return imPost<void>(`/friend-requests/${encodeURIComponent(requestId)}/reject`, version !== undefined ? { version } : {});
|
||||
}
|
||||
|
||||
export interface UserProfile {
|
||||
user_id: string;
|
||||
display_name: string;
|
||||
remark?: string;
|
||||
avatar_file_id?: string;
|
||||
gender?: string;
|
||||
region?: string;
|
||||
public_account?: string;
|
||||
signature?: string;
|
||||
relationship: string;
|
||||
topic?: string;
|
||||
}
|
||||
|
||||
/** `identifier` accepts `user_id`, `username`, or `public_account` -- P2P topic names are the peer's
|
||||
* own user_id (Tinode convention), so DetailColumn can pass `topicId` straight through. */
|
||||
export function getUserProfile(identifier: string) {
|
||||
return imGet<UserProfile>(`/users/${encodeURIComponent(identifier)}/profile`);
|
||||
}
|
||||
|
||||
export interface ConversationSettings {
|
||||
pinned: boolean;
|
||||
mute_notifications: boolean;
|
||||
|
||||
Reference in New Issue
Block a user