Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IOS/Android - Payments - Making payment method default will have keyboard overlapping password prompt #10162

Merged
merged 39 commits into from
Aug 22, 2022

Conversation

dhairyasenjaliya
Copy link
Contributor

@dhairyasenjaliya dhairyasenjaliya commented Aug 1, 2022

Details

  • Here we are addressing 2 issues
  1. IOS/Android - Payments - Making payment method default will have keyboard overlapping password prompt

    • For this issue, we are adding <KeyboardSpacer /> in order to avoid text input to hide behind the keyboard making component usable to the user
    • With this issue, we are incorporating <KeyboardSpacer /> into our code base and removing the external library which was abandoned
  2. Whitespace on the screen where the keyboard used to be

Fixed Issues

$ #9928
$ #10188

Tests (Issue 9928)

  1. Open the app and log in
  2. Tap on the Profile icon > Payments
  3. Tap on a payment method
  4. Tap "Make default payment method"
  5. Verify that keyboard doesn't overlap the password text input

Tests (Issue 10188)

  1. Open any chat
  2. Press on the composer (open keyboard)
  3. Put the app in the background
  4. Open again with the keyboard open
  5. Press back immediately
  6. You should see the bottom space same as the keyboard height
  • Verify that no errors appear in the JS console

PR Review Checklist

Contributor (PR Author) Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • iOS / native
    • Android / native
    • iOS / Safari
    • Android / Chrome
    • MacOS / Chrome
    • MacOS / Desktop
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I followed proper code patterns (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product was added in all src/languages/* files
    • I verified any copy / text that was added to the app is correct English and approved by marketing by tagging the marketing team on the original GH to get the correct copy.
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately and each prop has a /** comment above it */
    • Any functional components have the displayName property
    • The file is named correctly
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
    • Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
    • All JSX used for rendering exists in the render method
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

PR Reviewer Checklist

The Contributor+ will copy/paste it into a new comment and complete it after the author checklist is completed

  • I have verified the author checklist is complete (all boxes are checked off).
  • I verified the correct issue is linked in the ### Fixed Issues section above
  • I verified testing steps are clear and they cover the changes made in this PR
    • I verified the steps for local testing are in the Tests section
    • I verified the steps for Staging and/or Production testing are in the QA steps section
    • I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
  • I checked that screenshots or videos are included for tests on all platforms
  • I verified tests pass on all platforms & I tested again on:
    • iOS / native
    • Android / native
    • iOS / Safari
    • Android / Chrome
    • MacOS / Chrome
    • MacOS / Desktop
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I verified proper code patterns were followed (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product was added in all src/languages/* files
    • I verified any copy / text that was added to the app is correct English and approved by marketing by tagging the marketing team on the original GH to get the correct copy.
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I verified that this PR follows the guidelines as stated in the Review Guidelines
  • I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately and each prop has a /** comment above it */
    • Any functional components have the displayName property
    • The file is named correctly
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
    • Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
    • All JSX used for rendering exists in the render method
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

QA Steps (Issue 9928)

  1. Open the app and log in
  2. Tap on the Profile icon > Payments
  3. Tap on a payment method
  4. Tap "Make default payment method"
  5. Verify that keyboard doesn't overlap the password text input

QA Steps (Issue 10188)

  1. Open any chat
  2. Press on the composer (open keyboard)
  3. Put the app in the background
  4. Open again with the keyboard open
  5. Press back immediately
  6. You should see the bottom space same as the keyboard height
  • Verify that no errors appear in the JS console

Screenshots (Issue 9928)

Mobile Web

chrome_mobile.mov
safari_mobile.mp4

iOS

iphone_default_modal.mp4

Android

android_modal_fix.mp4

Desktop

  • issue affected only mobile devices which have a keyboard

Web

  • issue affected only mobile devices which have a keyboard

Screenshots (Issue 10188)

iOS

Fix_Issue.mp4

This issue only affects iOS so no other platform changes

@melvin-bot
Copy link

melvin-bot bot commented Aug 1, 2022

Hey! I see that you made changes to our Form component. Make sure to update the docs in FORMS.md accordingly. Cheers!

Copy link
Member

@rushatgabhane rushatgabhane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dhairyasenjaliya keyboardspacer tests fine.

I'm leaving a general feedback since this is a draft PR.
You could choose to wait for this slack 🧵 to resolve before making any changes.

}

componentDidMount() {
const updateListener = Platform.OS === 'android' ? 'keyboardDidShow' : 'keyboardWillShow';
Copy link
Member

@rushatgabhane rushatgabhane Aug 1, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove all platform specific code.

You could follow this code structure -

  • BaseKeyboardSpacer
  • index.ios.js
  • index.android.js

A good example is https://github.com/Expensify/App/tree/main/src/components/Modal

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alright will follow this approach

@@ -92,6 +95,7 @@ class PasswordPopover extends Component {
onSubmitEditing={() => this.props.onSubmit(this.state.password)}
style={styles.mt3}
autoFocus
shouldDelayFocus={getPlatform() === CONST.PLATFORM.ANDROID}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bit confused about this one I mean we should keep delay only for android so do I need to create separately files for all platform's

Copy link
Member

@rushatgabhane rushatgabhane Aug 2, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dhairyasenjaliya maybe give this a look, you'll notice how shouldDelayFocus is used for Android only with the help of index.android.js

https://github.com/Expensify/App/pull/10194/files#diff-6cb3961bd6fb8147573af653e9795b8f58a0d2671fecabb6782a63be0b4d706f

Let me know if you have any questions :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see, this is recent changes to allow shouldDelayFocus for only android will check and add according thank you :)

this.input.focus();
if (this.props.shouldDelayFocus) {
setTimeout(() => this.input.focus(), CONST.ANIMATED_TRANSITION);
} else {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we could return early here

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure we can, I was just following the previous codebase how about we set 100ms ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'll experiment it towards the end of the PR

Copy link
Contributor

@mountiny mountiny left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good work so far, great suggestions by @rushatgabhane

Comment on lines 3 to 9
Keyboard,
LayoutAnimation,
View,
Dimensions,
ViewPropTypes,
Platform,
StyleSheet,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NAB, let's put these in alphabetical order.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure

@rushatgabhane
Copy link
Member

rushatgabhane commented Aug 2, 2022

@dhairyasenjaliya just a gentle reminder to mark this PR as ready for review after you're done with cleaning up the code

@dhairyasenjaliya
Copy link
Contributor Author

@dhairyasenjaliya just a gentle reminder to mark this PR as ready for review after you're done with cleaning up the code

Sure, this time I will require a bit of time due to new components changes so will wrap as soon as possible

@rushatgabhane
Copy link
Member

that's not a problem at all, thanks for letting us know!!

@dhairyasenjaliya
Copy link
Contributor Author

that's not a problem at all, thanks for letting us know!!

@rushatgabhane do I need to commit package-lock.json since I removed KeyboardSpacer package ?

@rushatgabhane
Copy link
Member

@dhairyasenjaliya yepp

@dhairyasenjaliya
Copy link
Contributor Author

but it creates different integrity is that fine for merging?

@rushatgabhane
Copy link
Member

rushatgabhane commented Aug 3, 2022

it creates different integrity is that fine for merging?

i don't think so

Make sure your npm version is 6.14.17 and then do the npm uninstall etc

@dhairyasenjaliya
Copy link
Contributor Author

Make sure your npm version is 6.14.17 and then do the npm uninstall etc

hm I have 6.14.9 do I need to downgrade ?

@dhairyasenjaliya dhairyasenjaliya marked this pull request as ready for review August 3, 2022 12:22
@dhairyasenjaliya dhairyasenjaliya requested a review from a team as a code owner August 3, 2022 12:22
@melvin-bot melvin-bot bot requested review from mountiny and rushatgabhane and removed request for a team August 3, 2022 12:22
@dhairyasenjaliya
Copy link
Contributor Author

alright we are good to go for review @rushatgabhane

@mountiny
Copy link
Contributor

mountiny commented Aug 3, 2022

Regarding the freezeing issue you have raised here https://expensify.slack.com/archives/C01GTK53T8Q/p1659503910525829, does this PR also fix that?

@mountiny
Copy link
Contributor

mountiny commented Aug 3, 2022

We could obviously increase the reward for this and also check if this issue has not been reported before.

@dhairyasenjaliya
Copy link
Contributor Author

Regarding the freezeing issue you have raised here https://expensify.slack.com/archives/C01GTK53T8Q/p1659503910525829, does this PR also fix that?

This PR doesn't solve that one since I believe that issue is related react native reanimation package has some issue with modal so will try to investigate more

@rushatgabhane
Copy link
Member

related react native reanimation package

I'm pretty sure react-native-reanimated isn't being used in the app. It's just installed.

Do you mean react-native's built-in Animated library?

@dhairyasenjaliya
Copy link
Contributor Author

related react native reanimation package

I'm pretty sure react-native-reanimated isn't being used in the app. It's just installed.

Do you mean react-native's built-in Animated library?

Yup I mean by react-native-reanimated sure we don't use it directly into app but this library is used by lot's of other packages e.g react navigation depends upon reanimated
And others as well

Im pretty sure that this could be the root cause for modal freez issue due to blocked touch point app stuck I'm checking what best we can put to solve will update soon

@rushatgabhane
Copy link
Member

rushatgabhane commented Aug 3, 2022

@dhairyasenjaliya ohhhh TIL

@dhairyasenjaliya if the fix is simple / related, let's do it in this PR.
Otherwise it'll be best to do it in another PR.

@dhairyasenjaliya
Copy link
Contributor Author

@dhairyasenjaliya ohhhh TIL

@dhairyasenjaliya if the fix is simple / related, let's do it in this PR. Otherwise it'll be best to do it in another PR.

Sure I will check tomorrow morning first

Copy link
Contributor

@mountiny mountiny left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So far looks good to me, just need to retest this

Copy link
Member

@rushatgabhane rushatgabhane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dhairyasenjaliya Is it just me or the app freezes after the keyboard has been closed.

We also get this warning on closing the keyboard: Warning: Overriding previous layout animation with new one before the first began

Steps

  1. Payments page
  2. Click on any payment
  3. Make default
  4. Click somewhere outside to close the password modal
Screen.Recording.2022-08-21.at.2.34.30.PM.mov

Copy link
Member

@rushatgabhane rushatgabhane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dhairyasenjaliya please merge main into your branch as we've updated npm version

@dhairyasenjaliya
Copy link
Contributor Author

dhairyasenjaliya commented Aug 21, 2022

@dhairyasenjaliya Is it just me or the app freezes after the keyboard has been closed.

We also get this warning on closing the keyboard: Warning: Overriding previous layout animation with new one before the first began

Steps

  1. Payments page
  2. Click on any payment
  3. Make default
  4. Click somewhere outside to close the password modal

Screen.Recording.2022-08-21.at.2.34.30.PM.mov

Yup that bug i have reported right before working on this PR

https://expensify.slack.com/archives/C01GTK53T8Q/p1659503910525829?thread_ts=1659503910.525829&cid=C01GTK53T8Q

Not on close keyboard but clicking outside the modal

@rushatgabhane
Copy link
Member

Oh yeah, totally forgot about that. Thanks for reminding me.

@dhairyasenjaliya what do you think about the console warning? #10162 (review)

@dhairyasenjaliya
Copy link
Contributor Author

dhairyasenjaliya commented Aug 21, 2022

Oh yeah, totally forgot about that. Thanks for reminding me.

@dhairyasenjaliya what do you think about the console warning? #10162 (review)

Yeah that warning ⚠️ is also related to that close modal issue, I did found one of the old PR where this issue was resolved but now started happening again will share that old PR number soon

Copy link
Member

@rushatgabhane rushatgabhane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mentioning here because it's not in the diff

  1. In KeyboardSpacer/index.js
    Please change this comment
    On non-iOS platforms we do not need to implement a keyboard spacer, so we return a null component.
    ->
    On non native platforms we do not need to implement a keyboard spacer, so we return a null component.

  2. Please delete KeyboardSpacer/KeyboardSpacer.js
    https://github.com/dhairyasenjaliya/Expensify/blob/Fix_issue_9928/src/components/KeyboardSpacer/KeyboardSpacer.js

Copy link
Member

@rushatgabhane rushatgabhane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dhairyasenjaliya In Tests/QA (Issue 9928)

Add a 5th step - "Verify that keyboard doesn't overlap the password text input"

@dhairyasenjaliya
Copy link
Contributor Author

@rushatgabhane added all requested changes

Copy link
Member

@rushatgabhane rushatgabhane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dhairyasenjaliya this is a iOS - Safari only issue and works well on Android - Chrome.
Keyboard is overlapping the button - "Make default payment method".

We aren't modifying the web code, and it's also present on main.

Screen.Recording.2022-08-21.at.10.05.21.PM.mov

@dhairyasenjaliya
Copy link
Contributor Author

dhairyasenjaliya commented Aug 21, 2022

@dhairyasenjaliya this is a iOS Safari only issue and works well on Android - Chrome.

Keyboard is overlapping the button - "Make default payment method"

Screen.Recording.2022-08-21.at.10.05.21.PM.mov

hm this is new let me check coz we have added this only for the native platform previously was working in non-native platform checking in new code

@rushatgabhane
Copy link
Member

rushatgabhane commented Aug 21, 2022

@dhairyasenjaliya yeah, iOS Safari was working when we started working on this PR.
Now it's also present on main.

@dhairyasenjaliya
Copy link
Contributor Author

dhairyasenjaliya commented Aug 21, 2022

@rushatgabhane I did check the latest code actually it's not a bug

let me explain

So what I debug is when we are testing code in safari and by default, if we don't have a keyboard always open (command + k), and then we have a condition where there is autofocus the small amount of keyboard remains at the bottom and then you press (command + k) at that time this keyboard avoid is occurring

  • Now test this condition as make sure you always have the keyboard open (command + k) and then try to follow the QA steps
  • As in real devices by default keyboard is always open

Result with keyboard always open (same as real device)

actualResult.mp4

Result without keyboard always open

withoutAlwasyKeyboardOpen.mp4

Copy link
Member

@rushatgabhane rushatgabhane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Excellent work and investigation @dhairyasenjaliya

@mountiny tests well on all platforms! 🎉

PR Reviewer Checklist
  • I verified the correct issue is linked in the ### Fixed Issues section above
  • I verified testing steps are clear and they cover the changes made in this PR
    • I verified the steps for local testing are in the Tests section
    • I verified the steps for Staging and/or Production testing are in the QA steps section
    • I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
  • I checked that screenshots or videos are included for tests on all platforms
  • I verified tests pass on all platforms & I tested again on:
    • iOS / native
    • Android / native
    • iOS / Safari
    • Android / Chrome
    • MacOS / Chrome
    • MacOS / Desktop
  • I verified there are no console errors (if there’s a console error not related to the PR, report it or open an issue for it to be fixed)
  • I verified proper code patterns were followed (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained “why” the code was doing something instead of only explaining “what” the code was doing.
    • I verified any copy / text shown in the product was added in all src/languages/* files
    • I verified any copy / text that was added to the app is correct English and approved by marketing by tagging the marketing team on the original GH to get the correct copy.
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named “index.js”. All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I verified that this PR follows the guidelines as stated in the Review Guidelines
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately and each prop has a /** comment above it */
    • Any functional components have the displayName property
    • The file is named correctly
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
    • Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
    • All JSX used for rendering exists in the render method
    • The component has the minimum amount of code necessary for its purpose and it is broken down into smaller components in order to separate concerns and functions
  • If a new CSS style is added I verified that:
    • A similar style doesn’t already exist
    • The style can’t be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Copy link
Contributor

@mountiny mountiny left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great job @dhairyasenjaliya and thanks for such a thorough review @rushatgabhane!

@mountiny mountiny merged commit a70aa0c into Expensify:main Aug 22, 2022
@OSBotify
Copy link
Contributor

✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

@rushatgabhane
Copy link
Member

rushatgabhane commented Aug 22, 2022

Bug that seems related to this PR but is not (because reverting doesn't fix it) - https://expensify.slack.com/archives/C01GTK53T8Q/p1661203695542579

Please correct me if I'm wrong

@dhairyasenjaliya
Copy link
Contributor Author

@rushatgabhane I checked that bug I dont think this is related here, as the composer never uses keyboardSpacer in the first place

@OSBotify
Copy link
Contributor

🚀 Deployed to staging by @mountiny in version: 1.1.89-0 🚀

platform result
🤖 android 🤖 success ✅
🖥 desktop 🖥 success ✅
🍎 iOS 🍎 success ✅
🕸 web 🕸 success ✅

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.

5 participants