Skip to content

feat(mobile): page comments on the native composer (suggestion for #7810) - #7923

Closed
saddlepaddle wants to merge 1 commit into
httpslinear.appsuperset-shissu-4from
saddlepaddle/pr-7810-native-composer
Closed

saddlepaddle wants to merge 1 commit into
httpslinear.appsuperset-shissu-4from
saddlepaddle/pr-7810-native-composer

Conversation

@saddlepaddle

@saddlepaddle saddlepaddle commented Sep 29, 2026 •

Copy link
Copy Markdown
Collaborator

A suggestion for #7810, as one commit on top of 3e576fff9f. @harshithmullapudi, please validate it on your side before merging it into your branch.

Review with screenshots: https://app.superset.sh/page/pr-7810-review-mobile-comment-bottom-sheet-6btmik

What

  • Page comments use the native composer, the one Home and the workspace already use, instead of a CommentComposer in a formSheet. With the keyboard up, the sheet ran behind the keyboard. react-native-screens has no keyboard handling, so iOS extended the sheet under it. The native composer tracks the keyboard itself.
  • The composer gains controls: a caller's own buttons in the expanded control row beside +, drawn like the mic and send. A control with a menu opens a native menu, which covers the presets. disabled keeps quick replies from posting over a typed draft, which was your rule.
  • Reply drafts are kept per thread in the all-comments sheet, so tapping Reply on another thread no longer throws away a half-written reply.
  • Deleted, now without callers: the comment route, CommentSheet, QuickReplies, @superset/symbol-button, and the pick fields of the page comment store.
  • focus() waits one frame after mount, because the overlay attaches after the first commit.

Verified

On an iPhone 17 Pro Max simulator (iOS 26) against production, with a fresh native build:

  • Opening the composer on a block works.
  • The keyboard-up layout works.
  • A typed post works.
  • Thumbs-up and presets work.
  • Quick replies stay disabled while a draft is typed.
  • Tapping outside closes the composer.
  • Reply drafts are kept per thread.

Typecheck, biome, check:i18n and the page tests are clean. The catalogs didn't change, because the quick-reply labels reuse your translated ids.

Not verified

  • VoiceOver
  • A physical device
  • The preview-sheet presentation of the page

Needs a native rebuild (ios/ pods), since it adds a Swift file to the composer and removes a module.

Open design call

The composer dims the page while it's open, which hides the outlined block. backdrop="passthrough" would keep the block visible, but it lets taps reach the page while typing.


Summary by cubic

Replaces the page comment sheet with the native composer, so the keyboard no longer runs behind the form sheet. The old fitToContents sheet had no keyboard handling; the native composer tracks the keyboard itself.

The composer gains caller-defined controls in the expanded row beside +, which power the page's quick replies: delete, approve, and a native menu of presets. Controls stay disabled while a draft is typed, and reply drafts in the all-comments sheet are now kept per thread instead of being discarded when switching threads. The now-unused comment route, CommentSheet, QuickReplies, @superset/symbol-button, and the pick fields of the page comment store are removed.

Migration

  • Requires a native rebuild (iOS pods): the composer adds a Swift file and removes a module.

Written for commit 73b02c1. Summary will update on new commits.

Review in cubic

The comment sheet was a second composer: a React Native CommentComposer in a
fitToContents formSheet. react-native-screens does nothing with the keyboard,
so iOS extended the sheet behind it, and its quick replies were bare glyphs
pushed into the sheet's corner. Home and the workspace already have a
composer that tracks the keyboard natively, so the page uses that.

The composer gains `controls`: a caller's own 32pt buttons in the expanded
control row beside `+`, drawn with ComposerControlStyle like the mic and send.
One with a `menu` opens a native menu, which is what the presets need, and
`disabled` keeps quick replies from posting over a typed draft. That leaves
@superset/symbol-button, the comment route, CommentSheet, QuickReplies and
the pick fields of the page comment store with no callers, so they go.

focus() waits a frame after mount: the overlay attaches after the first
commit, and focusing before that left the composer collapsed.

Reply drafts in the all-comments sheet are kept per thread, so switching
threads no longer discards a half-written reply.
@coderabbitai

coderabbitai Bot commented Sep 29, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

🧹 Preview Cleanup Complete

The following preview resources have been cleaned up:

  • ✅ Neon database branch

Thank you for your contribution! 🎉

@saddlepaddle
saddlepaddle deleted the saddlepaddle/pr-7810-native-composer branch September 29, 2026 02:02

This branch had an error being deployed

1 failed deployment
preview — 73b02c1e Deployed Sep 29, 2026 by saddlepaddle via Deploy Database (Neon) #10530
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