[Personal Karma] Add NewDot toggle flow under Save The World#84504
[Personal Karma] Add NewDot toggle flow under Save The World#84504fedirjh wants to merge 30 commits intoExpensify:mainfrom
Conversation
- Introduced ONYXKEYS for managing Personal Karma donation states. - Added new API command and parameters for updating Personal Karma. - Updated Subscription actions to include a function for updating Personal Karma. - Added a help URL for Personal and Corporate Karma in the constants.
- Created a new BillingCardDetails component to encapsulate billing card information display. - Replaced inline billing card rendering in CardSection with the new BillingCardDetails component for improved code organization and readability. - Removed unused imports and optimized existing code in CardSection.
- Added new translations for the Personal Karma feature in German, English, Spanish, French, Italian, Japanese, Dutch, Polish, Brazilian Portuguese, and Simplified Chinese. - Each translation includes title, description, prompts for adding a payment card, stopping donations, and the title for the donation card.
- Introduced a new SectionSubtitleHTML component to handle HTML subtitles with optional muted styling and link press handling. - Replaced instances of RenderHTML in various pages (DomainSamlPage, SecuritySettingsPage, TroubleshootPage, WorkspaceReportsPage, IndividualExpenseRulesSection) with SectionSubtitleHTML for improved consistency and maintainability. - Updated related styles and props to accommodate the new component.
- Integrated Personal Karma toggle functionality with modals for adding payment cards and disabling donations. - Added new state management for displaying billing card details and handling user interactions. - Updated UI components to include SectionSubtitleHTML for improved subtitle rendering. - Enhanced user experience with confirmation modals for payment card actions and personal karma updates.
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx ts-node ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
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.
|
|
@garrettmknight do you want to review the product side of this PR? |
…dPage and CardSection - Introduced a new PaymentCardDetails component for displaying billing card information. - Replaced instances of BillingCardDetails with PaymentCardDetails in SaveTheWorldPage and CardSection for consistency and improved functionality.
|
@fedirjh checks failed |
trjExpensify
left a comment
There was a problem hiding this comment.
Overall, looking pretty good! Just a few things:
- The toggle label supplied in the mocks from @dannymcclain read
Enable Personal Karma. The video in the OP is slightly different.
-
The video only shows one case (you have a card already). Can you show the other case where you have to add a payment card so the evidence matches the tests to sense check?
-
Where did this copy change in the modal come from? Looks different to the mocks supplied in the parent issue.
PR:
…ature - Introduced SETTINGS_SAVE_THE_WORLD_ADD_PAYMENT_CARD route in ROUTES.ts. - Added ADD_PAYMENT_CARD screen to SCREENS.ts. - Updated TeachersUniteNavigator to include the new ADD_PAYMENT_CARD screen. - Modified linking configuration to route to the new screen. - Adjusted SaveTheWorldPage to navigate to the new payment card screen and removed the old modal implementation.
|
@MelvinBot Fix prettier and lint errors? |
Co-authored-by: Fedi Rajhi <fedirjh@users.noreply.github.com>
|
Fixed the prettier and ESLint errors:
|
|
Should this be out of WIP now? |
|
@ZhenjaHorbach Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
@eVoloshchak Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
@fedirjh |
@ZhenjaHorbach Yes, need testing and the checklist. I think this can be tested in stating till https://github.com/Expensify/Web-Expensify/pull/51567 reaches prod. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f2d2b99ba8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ize useIsFocused for effect dependencies
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / Safari |
|
Thanks @ZhenjaHorbach , please let me know when this is ready |
I think I will complete the review tomorrow morning! |
|
Thank you!
…On Tue, Apr 7, 2026 at 10:44 AM Yauheni Horbach ***@***.***> wrote:
*ZhenjaHorbach* left a comment (Expensify/App#84504)
<#84504 (comment)>
Thanks @ZhenjaHorbach <https://github.com/ZhenjaHorbach> , please let me
know when this is ready
I think I will complete the review tomorrow morning!
—
Reply to this email directly, view it on GitHub
<#84504 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/AA7Y2OPRJVEMHPRQCOJKO3L4UUH5JAVCNFSM6AAAAACWKXCKNSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHM2DCOJZHAZTOOJUGA>
.
You are receiving this because your review was requested.Message ID:
***@***.***>
|
|
Minor comment 2026-04-08.16.46.06.movAs we usually do 2026-04-08.16.46.43.mov |
|
And should we have a dynamic price depending on location? |
IT should match the oldDot behaviour which was 1$ regardless of the location. |



Explanation of Change
This PR adds Personal Karma support to NewDot under
/settings/teachersunite.UpdatePersonalKarmaAPI action.SectionSubtitleHTML) and reusable billing card rendering (BillingCardDetails) used by related settings sections.Fixed Issues
$ https://github.com/Expensify/Expensify/issues/601130
PROPOSAL:
Tests
/settings/teachersunite.Donate $1 to Expensify.org for every $500 you spend each month Learn more.Offline tests
/settings/teachersunite.QA Steps
Same as tests.
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)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.Screenshots/Videos
CleanShot.2026-03-12.at.00.36.48.mp4
CleanShot.2026-03-12.at.01.35.39.mp4
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari