Skip to content

feat(translate): add per-card temporary service switch (with localStorage persistence)#1193

Open
CaptainMusX wants to merge 1 commit into
pot-app:masterfrom
CaptainMusX:feat/translate-temp-switch-persist
Open

feat(translate): add per-card temporary service switch (with localStorage persistence)#1193
CaptainMusX wants to merge 1 commit into
pot-app:masterfrom
CaptainMusX:feat/translate-temp-switch-persist

Conversation

@CaptainMusX
Copy link
Copy Markdown

What

  • 在翻译界面的每个服务卡片(TargetArea 标题区域)新增“临时开关”。
  • 关闭后:该卡片不再触发翻译请求、保持折叠并灰显;开启后恢复正常。
  • 通过 localStorage 记忆禁用集合(键:tempDisabledServices),关闭窗口或重启应用后仍保持上次选择。
  • 多窗口/多实例下通过 storage 事件同步状态。

Related

Closes #1094

Changes

  • 新增src/state/temp-switch.js
    • tempTranslateDisabledSetAtom: 保存被禁用的服务实例 key
    • toggleTempTranslateDisabledAtom: 切换禁用态,并写入 localStorage
    • isTempDisabledAtom(instanceKey): 读取某实例是否处于禁用状态
  • 修改src/window/Translate/components/TargetArea/index.jsx
    • CardHeader 右侧加入 Switch(isSelected = !isDisabled
    • useEffecttranslate() 内部增加短路逻辑:禁用时不再发请求
    • 组件挂载时从 localStorage 恢复禁用集合,并监听 storage 事件同步状态
    • UI:禁用时卡片 opacity-60,折叠按钮不可用

UX

  • 每个翻译服务实例单独控制,不影响其他服务。
  • 临时状态跨窗口、跨会话记忆,不会污染全局配置(useConfig 不受影响)。

Test Plan

  1. 打开翻译界面,关闭 2~3 个服务卡片的开关。
  2. 关闭“翻译窗口”,重新打开:上述卡片保持关闭状态。
  3. 再打开其中一个:立即恢复翻译功能。
  4. 完全退出应用并重启:仍保持关闭状态。
  5. 文本变化时,已关闭的卡片不会发起请求(无 loading、无结果)。

Screenshots

PixPin_2025-09-25_18-03-46 PixPin_2025-09-25_18-04-49

Notes

  • localStorage 不可用,则退化为内存态,不影响主流程。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: 建议增加临时开关

1 participant