Skip to content

NumberForm migration batch 2: MoneyRequestAmountInput hub #98174

Open

Description

@mountiny

Sub-issue of #97970.
Migration plan: jmgraa comment.

Second migration batch, same shape as the AmountForm hub. MoneyRequestAmountInput is the second hub, and it sits under a second order hub, MoneyRequestAmountForm, so both migrate together.

Scope

  • Step: 5 of the migration plan, MoneyRequestAmountInput hub
  • Shape: currency amount, IOU flows
  • Scope: 2 files

Files

  • src/components/MoneyRequestAmountInput.tsx:227 — the direct render, plus the NumberWithSymbolFormRef type at :120 and :192
  • src/pages/iou/MoneyRequestAmountForm.tsx:124 — follow up type and ref update. It wraps MoneyRequestAmountInput and holds a useRef<NumberWithSymbolFormRef>.

Blast radius

MoneyRequestAmountInput is rendered by 5 files and its props type is used by src/libs/ReportUtils.ts on amountInputProps:

  • src/components/MoneyRequestConfirmationList/hooks/useSplitParticipants.tsx
  • src/components/OptionRow.tsx
  • src/components/SelectionList/ListItem/SplitListItem/SplitAmountInput.tsx
  • src/components/TransactionItemRow/DataCells/TotalCell.tsx
  • src/pages/iou/MoneyRequestAmountForm.tsx

MoneyRequestAmountForm is itself rendered by 4 more files:

  • src/pages/iou/request/step/IOURequestStepAmount.tsx
  • src/pages/iou/request/step/DynamicIOURequestStepTaxAmountPage.tsx
  • src/pages/iou/request/step/IOURequestStepTimeRate.tsx
  • src/pages/Search/SearchEditMultiple/SearchEditMultipleAmountPage.tsx

Both public APIs stay unchanged, so none of those 9 files needs an edit.

Existing test coverage to keep green

  • tests/ui/IOURequestStepAmountDraftTest.tsx renders the whole chain unmocked and asserts getByTestId('moneyRequestAmountInput'). That test id must survive the migration.
  • tests/unit/hooks/useSplitParticipants.test.tsx mocks @components/MoneyRequestAmountInput, so the mock's shape may need updating if the props change.

Composition

Compose the primitives inline, following the prop mapping table from #98172. No preset.

Out of scope

  • Any change to the public props of MoneyRequestAmountInput or MoneyRequestAmountForm
  • The 9 downstream consumer files
  • The AmountForm hub — #98173

Acceptance criteria

  • MoneyRequestAmountInput.tsx renders the NumberForm composition, no NumberWithSymbolForm import
  • Public props of both files are unchanged, so none of the 9 consumers needs an edit
  • The moneyRequestAmountInput test id still resolves
  • tests/ui/IOURequestStepAmountDraftTest.tsx passes unchanged
  • The ref contract still exposes clearSelection, updateNumber and getNumber
  • The seatbelt rows for both files are removed
  • Manual pass over the IOU amount page, the tax amount page and split amount editing, in both orientations
  • Verify that no errors appear in the JS console

Dependencies

Issue OwnerCurrent Issue Owner: @bernhardoj

Activity

  1. added
    Skip PaymentSkips all the payment process steps for an issue. Use it for fixed-price projects.
    on Aug 10, 2026
  2. melvin-bot commented on Sep 2, 2026

    @melvin-bot

    This issue has not been updated in over 15 days. @mountiny, @bernhardoj eroding to Monthly issue.

    P.S. Is everyone reading this sure this is really a near-term priority? Be brave: if you disagree, go ahead and close it out. If someone disagrees, they'll reopen it, and if they don't: one less thing to do!

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

Metadata

Metadata

Labels

MonthlyKSv2Skip PaymentSkips all the payment process steps for an issue. Use it for fixed-price projects.Task

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions