[PROPOSAL] New editing mechanism for small screens#76741
[PROPOSAL] New editing mechanism for small screens#76741Kureev wants to merge 185 commits intoExpensify:mainfrom
Conversation
Code Review SummaryI've completed a comprehensive review of this PR. The implementation adapts message editing behavior based on screen size, using the bottom composer for narrow layouts and maintaining inline editing for wide layouts. Key Findings✅ Strengths:
Several inline comments have been posted with specific suggestions. The main areas of concern are:
Testing RecommendationsBeyond the test plan provided:
Overall, this is a solid implementation that addresses the UX issues with inline editing on mobile. The inline comments provide specific suggestions for improvement. |
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
Simulator.Screen.Recording.-.iPhone.17.-.2025-12-05.at.11.09.48.mov |
|
@Kureev I think you have linked wrong issue Can you please post videos of the behaviour before and after this change with clear explanation of what the changes are so the design and product team can discuss this? |
|
Oops, I lost track of this one so I’ll catch up on the context and review it later today. Currently, we still have a conflict on this PR. |
|
@Kureev Hi! I notice this PR references fix issue #63871 (16KB memory pages) but the changes seem to be about message editing UI (which matches issue #64085). Can you clarify if:
The proposal link points to PR 66240 which is about the same UI editing issue. |
|
@Kureev We have an issue where multiple message items cannot be edited, and after submitting all changes, the editing highlight still appears on the edited message. BeforeCleanShot.2025-12-12.at.01.14.14.mp4AfterCleanShot.2025-12-12.at.01.12.01.mp4 |
|
@Kureev There is still a conflict on this PR, along with feedback on the remaining issue. |
|
Hi all, sorry, was on a holidays, will look into it today |
|
I fixed the merge conflict with the |
|
We’re still waiting for @Kureev to handle this issue. |
|
@suneox i'm going to take this over from Alexey. I'll hopefully be able to address this later today, otherwise on Monday! |
|
@hungvu193 the failing TS checks are unrelated and they are coming from |
Let me clear cache and try again. I was building from remote build btw. |
|
I also can't reproduce these two, I'll take another test today to see if there's any bug left. |
|
@chrispader Can you merge main again? I can't live without remote build 😢
|
@hungvu193 done! |
|
Bug: Composer is focused but keyboard doesn't open after editing message: Screen.Recording.2026-03-27.at.10.23.17.mov |
|
Bug: Screen is flashing while editing message.
Screen.Recording.2026-03-27.at.10.25.28.mov |
|
Bug mSafari: Can't close or save thread parent message:
I couldn't reproduce it after a while 🤔 Screen.Recording.2026-03-27.at.10.38.02.mov |
|
@chrispader Any updates? 😄 I think we're close |
|
@hungvu193 going to resolve merge conflicts and fix last issues today! |
…t by adding key" This reverts commit 4f1fa08.
@hungvu193 fixed! After editing, the composer will restore the previous draft comment focus. If the composer was focused before, it will focus again, otherwise blur. Simulator.Screen.Recording.-.iPhone.17.Pro.-.2026-04-03.at.13.21.47.mov |
@hungvu193 this should be fixed as well. I reverted a change where i would rely on React key to re-render the composer to fix previous issues where the composer would not resize if we switch from singleline to multiline messages and vice versa. The implementation now doesn't rely on a key anymore, since i found a better solution to force the layout re-calculation. This means, the composer now also does not loose focus anymore, when switching from editing to draft mode. Simulator.Screen.Recording.-.iPhone.17.Pro.-.2026-04-03.at.13.27.37.mov |
@hungvu193 i cannot repro this one and since you also couldn't after a while, let's ignore this i would say.. Simulator.Screen.Recording.-.iPhone.17.Pro.-.2026-04-03.at.13.32.59.mov |
|
@hungvu193 addressed all your remaining issues. I think this should be the final review, couldn't find any other issues myself while testing all the edge cases and previous issues 🙌🏼 |
|
Thanks @chrispader I'll review it this weekend |
@chrispader I think I'm still able to reproduce this one, after a few times, I tried to switch editing mode between 2 messages. Screen.Recording.2026-04-06.at.09.01.27.mov |
|
@chrispader I'm now able to reproduce this bug again:
Screen.Recording.2026-04-06.at.09.06.51.movUpdate: I can reproduce it directly sometimes by editing multiple lines text message. |
|
Looks like that's it. I hope that we can resolve the rest of the bugs this attempt 🤞 |

Explanation of Change
Adapt message editing behavior based on screen size to match Slack-style UX. On narrow layouts, editing now uses the main bottom composer instead of inline editing inside the message list, preventing layout shifts, disappearing headers, and scroll jumps. On wide layouts, the existing multi-inline editing behavior is preserved.
Fixed Issues
$ #64085
PROPOSAL: #66240 (comment)
Tests
Offline tests
QA Steps
Same as Tests.
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.npm run compress-svg)Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari
MacOS: Desktop