[TS migration] Migrate 'withPolicy.js' HOC to TypeScript#29554
[TS migration] Migrate 'withPolicy.js' HOC to TypeScript#29554joelbettner merged 12 commits intoExpensify:mainfrom
Conversation
src/pages/workspace/withPolicy.tsx
Outdated
| WithPolicy.displayName = `withPolicy(${getComponentDisplayName(WrappedComponent)})`; | ||
| const withPolicy = React.forwardRef((props, ref) => ( |
There was a problem hiding this comment.
Why did you remove the forwardRef?
There was a problem hiding this comment.
According to our guidelines, forwardRef should be used like this:
function CustomTextInput(props: CustomTextInputProps, ref: ForwardedRef<TextInput>) {
return (
<View>
<TextInput ref={ref} />
{props.children}
</View>
);
};
export default forwardRef(CustomTextInput);I just moved it to withOnyx call :D
|
@Ollyws I resolved the conflicts. You can work on the reviewer checklist now, thanks! 😄 |
Reviewer Checklist
Screenshots/VideosAndroid: Native01_Android_Native.mp4Android: mWeb Chrome02_Android_Chrome.mp4iOS: Native03_iOS_Native.mp4iOS: mWeb Safari04_iOS_Safari.mp4MacOS: Chrome / Safari05_MacOS_Chrome.mp4MacOS: Desktop06_MacOS_Desktop.mp4 |
|
We did not find an internal engineer to review this PR, trying to assign a random engineer to #24965 as well as to this PR... Please reach out for help on Slack if no one gets assigned! |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/joelbettner in version: 1.3.94-0 🚀
|
1 similar comment
|
🚀 Deployed to staging by https://github.com/joelbettner in version: 1.3.94-0 🚀
|
|
🚀 Deployed to production by https://github.com/Beamanator in version: 1.3.94-2 🚀
|
|
🚀 Deployed to staging by https://github.com/joelbettner in version: 1.3.95-0 🚀
|
|
🚀 Deployed to production by https://github.com/puneetlath in version: 1.3.95-9 🚀
|
| forwardedRef: PropTypes.func, | ||
| export default function <TProps extends WithPolicyProps, TRef>(WrappedComponent: ComponentType<TProps & RefAttributes<TRef>>): React.ComponentType<Omit<TProps, keyof WithPolicyOnyxProps>> { | ||
| function WithPolicy(props: TProps, ref: ForwardedRef<TRef>) { | ||
| const routes = useNavigationState((state) => state.routes || []); |
There was a problem hiding this comment.
@blazejkustra why did we use useNavigationState here to get the current route instead of just using useRoute?
There was a problem hiding this comment.
I reused the logic that was written before, with Typescript migration I usually try to avoid refactoring that could cause regressions, also at the time navigation wasn't migrated yet so I just didn't want to touch it here 😄
const currentRoute = _.last(useNavigationState((state) => state.routes || []));
Details
Migration of 'withPolicy.js' to Typescript.
Fixed Issues
$ #24965
PROPOSAL: N/A
Tests
withPolicyis used in multiple components inside workspaces)Offline tests
N/A
QA Steps
Same as Tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)myBool && <MyComponent />.src/languages/*files and using the translation methodWaiting for Copylabel for a copy review on the original GH to get the correct copy.STYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)/** 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)StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))Avataris modified, I verified thatAvataris working as expected in all cases)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
Web
web.mov
Mobile Web - Chrome
a-web.webm
Mobile Web - Safari
i-web.mp4
Desktop
desktop.mov
iOS
ios.mp4
Android
android2.webm