[Payment due @dukenv0307] Add a UI to Chronos for creating OOO events#87543
Conversation
This comment has been minimized.
This comment has been minimized.
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.
|
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9377c6979e
ℹ️ About Codex in GitHub
Codex has been enabled to automatically 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 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| const timeValue = values[INPUT_IDS.TIME]?.trim(); | ||
| if (timeValue && !/^(1[0-2]|0?[1-9])(:[0-5]\d)?$/.test(timeValue)) { | ||
| addErrorMessage(errors, INPUT_IDS.TIME, translate('chronos.invalidTimeFormat')); |
There was a problem hiding this comment.
Require AM/PM when time is provided
This validation allows a time value without timePeriod, and buildOOOCommand() only appends the period when it exists, so submitting 12:30 can generate ooo <date> 12:30 with no AM/PM. Since this form intentionally validates a 12-hour clock (1-12), the command is ambiguous and can schedule the wrong half-day OOO window when users forget to pick AM/PM. Please require timePeriod whenever time is filled (or provide a default) before submission.
Useful? React with 👍 / 👎.
|
@dukenv0307 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] |
|
Access to Chronos is open to everyone, but there are a few features that not everyone can use. Come to think of it, OOO is one of them (because the events go on the OOO calendar). So, I'll need to mark this as internal! |
AndrewGable
left a comment
There was a problem hiding this comment.
Thanks for adding automated tests!
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
[Payment due @dukenv0307] Add a UI to Chronos for creating OOO events (cherry picked from commit 65098ab) (cherry-picked to staging by AndrewGable)
|
🚧 @AndrewGable has triggered a test Expensify/App build. You can view the workflow run here. |
|
Internal QA passed for me on staging web 👍 |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Cherry-picked to staging by https://github.com/AndrewGable in version: 9.3.59-1 🚀
Bundle Size Analysis (Sentry): |
|
No help site changes are required for this PR. Reason: Chronos is an internal Expensify employee tool (time-tracking bot). The "Schedule OOO" feature added here is accessed exclusively through the Chronos chat's header dropdown — it is not a customer-facing feature. The help site under The existing out-of-office help articles ( |
|
Deploy Blocker #87815 was identified to be related to this PR. |
|
Deploy Blocker ##87820 was identified to be related to this PR |
|
🚀 Deployed to production by https://github.com/AndrewGable in version: 9.3.59-4 🚀
|
|
🤖 Payment issue created: #88024 |
|
🚀 Cherry-picked to staging by https://github.com/AndrewGable in version: 9.3.60-0 🚀
Bundle Size Analysis (Sentry): |
|
No help site changes are required for this PR. Reasoning:
|
|
Internal QA passed for me on staging web 👍 |
|
🚀 Deployed to production by https://github.com/mountiny in version: 9.3.60-22 🚀
|
Fixed Issues
$ https://github.com/Expensify/Expensify/issues/622509
Tests
Offline tests
Same
QA Steps
Same
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./** comment above it */thisproperly so there are no scoping issues (i.e. foronClick={this.submit}the methodthis.submitshould be bound tothisin the constructor)thisare necessary to be bound (i.e. avoidthis.submit = this.submit.bind(this);ifthis.submitis never passed to a component event handler likeonClick)Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari