Skip to content

Comments

feat: Implement Undo/Redo functionality with Redux middleware and UI integration#772

Open
Unnamed2964 wants to merge 1 commit intorailmapgen:mainfrom
Unnamed2964:main
Open

feat: Implement Undo/Redo functionality with Redux middleware and UI integration#772
Unnamed2964 wants to merge 1 commit intorailmapgen:mainfrom
Unnamed2964:main

Conversation

@Unnamed2964
Copy link

@Unnamed2964 Unnamed2964 commented Feb 20, 2026

描述

本 PR 为项目引入了基于 Redux Middleware 的,与 RML 项目体验相连续的撤销/重做顶栏和快捷键功能,并针对频繁输入的文本框进行了防抖优化,以配合撤销功能的实现。

主要更改

撤销/重做 (Undo/Redo)

  • 实现机制
    • 新增 undo-middleware.ts:采用 Redux Middleware 拦截 param/ 开头的 Action,维护 pastfuture 历史栈。目前策略为全量记录所有状态变更(暂未细分 Action 粒度)。
    • 新增 undo-slice.ts:在 Redux Store 中轻量级地同步历史记录数量 (pastCount, futureCount),用于驱动 UI 状态。
  • UI 集成
    • 更新 WindowHeader:添加撤销/重做按钮。
    • 状态联动:当无法撤销或重做时,对应按钮自动置灰(不可用状态)。
  • 交互优化
    • 快捷键支持:引入 react-hotkeys-hook,支持与 RML 体验相连续的快捷键操作。
      • 撤销:Ctrl+Z / Cmd+Z(取决于是否是 MacOS)
      • 重做:Ctrl+Y / Cmd+Shift+Z(取决于是否是 MacOS)
    • 边界处理:在新建项目或导入外部项目时,自动清空历史记录栈,防止意外回退到上一个项目的状态。
    • 在部分高频输入的文本框(如站点名称、编号、换乘信息等)中,利用组件库的 debouncedDelay 属性添加了防抖处理(300ms),减少 Redux Action 的派发频率,以减少意外的撤销列表插入。

其他说明

  • 本功能代码主要由 Gemini 3 Pro 辅助生成。
  • 经过人工审查与初步的测试,确认功能行为符合预期且与现有业务逻辑兼容。

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.

1 participant