Skip to content

[ui][bug] History 页 listHistory/clear/delete 失败无反馈 — loading 可能永卡 #310

@appergb

Description

@appergb

现象

openless-all/app/src/pages/History.tsx 的三个数据动作都没有 try/catch/finally,IPC 一旦 reject,UI 不会回到可用状态,且用户看不到任何错误提示。

完整链路(UI → IPC → Rust handler)

动作 UI IPC 包装 Rust handler
刷新 / 初次加载 History.tsx:46-56 refresh()Btn[refresh] History.tsx:95 listHistory src/lib/ipc.ts:188invokeOrMock('list_history', …) commands.rs:539 pub fn list_history(…) -> Result<Vec<DictationSession>, String>
清空 History.tsx:68-74 onClear()Btn[clear] History.tsx:96 clearHistory src/lib/ipc.ts:196invokeOrMock('clear_history', …) commands.rs:549 pub fn clear_history(…) -> Result<(), String>
单条删除 History.tsx:76-80 onDelete()Btn[trash] History.tsx:178 deleteHistoryEntry src/lib/ipc.ts:192invokeOrMock('delete_history_entry', { id }, …) commands.rs:544 pub fn delete_history_entry(…) -> Result<(), String>

失败路径

refresh() 当前实现:

const refresh = async () => {
  const data = await listHistory();
  setItems(data);
  setLoading(false);          // ← listHistory reject 时永远不执行
  if (data.length > 0 && !selectedId) setSelectedId(data[0].id);
};
  • listHistory reject(如 history.json 损坏 / IO 错误,handler 返回 Err(String))→ setLoading(false) 永不执行 → 列表区永远显示 t('common.loading') 文案,主面板也永远显示"加载中"
  • onClear / onDelete reject → 后端清/删失败,但前端 setItems([…]) 已经把项移走 → UI 与磁盘不一致;用户不知道
  • 三处都没有 user-visible error toast / inline message

用户可见后果

  1. 列表加载失败 = 永久"加载中…"卡死状态,无重试入口
  2. 删除/清空表面上"成功",下次重启或 refresh 后条目又出现,用户不知道刚才点的删除其实没生效

建议接受标准

  • refresh() 失败时把 loading 置回 false 并显示可点的"加载失败,重试"占位
  • onClear / onDelete 失败时回滚 items 状态 + 显示错误提示
  • 错误信息来自 handler 返回的 Err(String),避免泄露内部细节但要可读
  • 不引入新的全局 toast 系统时,可以在 Card 内 inline 显示

不在范围

  • 不重写错误展示组件 / 不引入新 toast 库
  • 不修改 Rust 端 handler 行为(handler 已经返回 Result<_, String>,前端只是不用)
  • 其他页类似问题分别在 Overview / Style / Translation / SelectionAsk 单独跟踪

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions