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

fixed: small images for scaling problem #8761

Merged
merged 16 commits into from
Jul 11, 2022
Merged

Conversation

metehanozyurt
Copy link
Contributor

@metehanozyurt metehanozyurt commented Apr 24, 2022

Details

A picture with a small dimensions should be displayed exactly as it is provided in the preview modal.

Fixed Issues

$ #8471

Tests

1-) Open Expensify app or web
2-) Click an image dimensions lower than the modal.
3-) Notice that it gets not resized small images
4-) Zooming in-out small image
5-) Notice that resize image
6-) Click an image dimensions bigger than the modal.
7-) Notice that it is fit the modal
8-) Zooming in-out big image
9-) Notice that resize image

Note: on mWeb steps (4,5,8,9) not working because Pressable component not using it.

  • 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
  • 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.

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.

QA Steps

1-) Open Expensify app or web
2-) Click an image dimensions lower than the modal.
3-) Notice that it gets not resized small images
4-) Zooming in-out small image
5-) Notice that resize image
6-) Click an image dimensions bigger than the modal.
7-) Notice that it is fit the modal
8-) Zooming in-out big image
9-) Notice that resize image

Note: on mWeb steps (4,5,8,9) not working because Pressable component not using it.

  • Verify that no errors appear in the JS console

Screenshots

Web

web-Screen-Recording-2022-07-06-at-19.52.07.mp4

Mobile Web

ios-web-Screen-Recording-2022-07-06-at-19.50.02.mp4
android-web-Screen-Recording-2022-07-06-at-20.06.04.mp4

Desktop

desktop-Screen-Recording-2022-07-06-at-19.56.57.mp4

iOS

ios-native-Screen-Recording-2022-07-06-at-19.45.29.mp4

Android

android-native-Screen-Recording-2022-07-06-at-20.02.52.mp4

@metehanozyurt metehanozyurt requested a review from a team as a code owner April 24, 2022 08:43
@melvin-bot melvin-bot bot requested review from flodnv and parasharrajat and removed request for a team April 24, 2022 08:43
Comment on lines 80 to 82
if (imageHeight < containerHeight && imageWidth < containerWidth) {
imageHeight *= aspectRatio;
imageWidth *= aspectRatio;
// imageHeight *= aspectRatio;
// imageWidth *= aspectRatio;
Copy link
Member

Choose a reason for hiding this comment

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

What is the use of this condition now?

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 was undecided about changing this line. You are absolutely right. I immediately delete unnecessary lines of code. Thank you so much @parasharrajat 🙏.

New version look like this.

            if ((imageHeight > containerHeight || imageWidth > containerWidth) && imageHeight > imageWidth) {
                imageHeight *= aspectRatio;
            } else if(imageHeight > containerHeight ||  imageWidth > containerWidth){
                imageWidth *= aspectRatio;
            }

@parasharrajat
Copy link
Member

I am testing it currently.

@parasharrajat
Copy link
Member

parasharrajat commented Apr 26, 2022

@metehanozyurt Please correct all the videos. They should

  1. Show the zooming in-out using image dimensions lower than the modal.
  2. Show the zooming in-out using image dimensions bigger than the modal.

Correct the template of the PR. Add detailed QA steps.
image

const containerHeight = this.state.containerHeight;
const containerWidth = this.state.containerWidth;

// return if image not loaded yet
if (imageHeight <= 0 || containerHeight <= 0) {
Copy link
Member

Choose a reason for hiding this comment

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

I think this check was precautionary. What will happen if this is not present at line 165.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Nothing changes you are right again and again . I will remove this line.

Copy link
Member

Choose a reason for hiding this comment

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

Could you please revert this change? why have you removed || containerHeight <= 0?

src/components/ImageView/index.js Show resolved Hide resolved
>
<Image
source={{uri: this.props.url}}
style={[
styles.w100,
styles.h100,
]}
resizeMode="contain"
resizeMode={this.state.zoomScale >= 1 ? 'center' : 'contain'}
Copy link
Member

Choose a reason for hiding this comment

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

Why do we need to dynamically check and set the resizeMode here? Isn't center will work?

Can you show me videos to indicate the difference it makes?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

You are absolutely right 😮. I focused on fixing the version that works with the previous big image and missed it. This will change a lot of things thank you so much 🙏 . We dont need a lot of changes no more 🙏 🙏 .

Note : To get the zoomScale information, I made changes in componentDidMount and added the View onLayoutand ref callbacks.

Comment on lines 79 to 82
if ((imageHeight > containerHeight || imageWidth > containerWidth) && imageHeight > imageWidth) {
imageHeight *= aspectRatio;
imageWidth *= aspectRatio;
} else if (imageHeight > imageWidth) {
imageHeight *= aspectRatio;
} else {
} else if (imageHeight > containerHeight || imageWidth > containerWidth) {
imageWidth *= aspectRatio;
Copy link
Member

Choose a reason for hiding this comment

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

Please clean up these conditions. Don't you think we should also set the resize mode to center like the web?

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 think we need still contain because when we will use center zoom not working well. same as Web and Desktop version.

            if (imageHeight > imageWidth) {
                imageHeight *= aspectRatio;
            } else {
                imageWidth *= aspectRatio;
            }

I change like this because still need this for bigger images.
otherwise look like this:

resize-mobile.mp4

@metehanozyurt
Copy link
Contributor Author

metehanozyurt commented Apr 26, 2022

I will all videos take and showing steps (I mixed it up with other videos. I will take more detail). After update the PR steps. Taking videos now. Thank you for your patience, I'm doing my best not to make a mistake again so sorry🙏.

Copy link
Member

@parasharrajat parasharrajat left a comment

Choose a reason for hiding this comment

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

Ok, There have been many changes back and forth here. I think it would be great to make a list of things to test and I would ask you run each and test your changes against it.

  • A smaller image should show its true dimensions which means no scaling.
  • A larger image should be scaled down to the container dimensions respecting the aspect ratio.
  • User should be able to zoom on the image via pin-zoom on the mobile web.
  • user should be able to zoom on the image via clicking on the area on the image on the web and desktop.
  • User should be able to zoom in/out the image on native devices via pinch-zoom.

Other than that, I have questions about why are we using center for resizeMode on the Mobile web and not on the native. And if we don't have to do that on native then how is it working fine?

Comment on lines 137 to 147
// return if image not loaded yet
if (imageHeight <= 0 || containerHeight <= 0) {
return;
}

// Fit the image to container size if image small than container.
const aspectRatio = Math.min(containerHeight / imageHeight, containerWidth / imageWidth);
if (aspectRatio > 1) {
width *= (aspectRatio);
height *= (aspectRatio);
}
Copy link
Member

Choose a reason for hiding this comment

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

Why are we removing this code?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

this code scale image to container height (143-147). When image comes smaller than the modal.

Copy link
Member

Choose a reason for hiding this comment

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

ok, but I think this code is necessary.

   if (imageHeight <= 0 || containerHeight <= 0) {
            return;
        }

Copy link
Contributor Author

@metehanozyurt metehanozyurt Apr 30, 2022

Choose a reason for hiding this comment

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

My first offer was as follows.

if (imageHeight <= 0) {
            return;
        }

ContainerHeight may not have arrived when the image is loaded. That's why I suggested a change like this before. In our previous conversations, we also found that sometimes this function is not called first but some times called last . The following codes are actually required for the last calls conditions.

You are right. If the image height is not reached, the continuation of the code does not matter. It won't be able to set the image height anyway.

I will add line like this.

if (imageHeight <= 0) {
            return;
        }

I am making new commit now. Thank you.

@metehanozyurt
Copy link
Contributor Author

Ok, There have been many changes back and forth here. I think it would be great to make a list of things to test and I would ask you run each and test your changes against it.

  • A smaller image should show its true dimensions which means no scaling.
  • A larger image should be scaled down to the container dimensions respecting the aspect ratio.
  • User should be able to zoom on the image via pin-zoom on the mobile web.
  • user should be able to zoom on the image via clicking on the area on the image on the web and desktop.
  • User should be able to zoom in/out the image on native devices via pinch-zoom.

Other than that, I have questions about why are we using center for resizeMode on the Mobile web and not on the native. And if we don't have to do that on native then how is it working fine?

The problem mentioned in the issue. small images were scaled. looks like blurry.

So this code fix only this problem.
A smaller image should show its true dimensions which means no scaling.

If we want to User should be able to zoom on the image via pin-zoom on the mobile web my changes not fixing this because its not zooming before. Other steps after my changes not broken but same as working before.
But i will check ofcourse again today to previous abilities , but I think I did not broke anything 😢.

@parasharrajat
Copy link
Member

Ok, Thanks. I was just sharing a list. I will test them myself.

@metehanozyurt
Copy link
Contributor Author

metehanozyurt commented Apr 28, 2022

Thank you 🙏 .Please don't get me wrong, I've already take videos and test all of these.
user should be able to zoom on the image via clicking on the area on the image on the web and desktop.
This is fixed on other issue (8119) I just make pull request yesterday.

This one not working like before. I try in my test videos too but not work. IOS zoom but zoom on page.
User should be able to zoom on the image via pin-zoom on the mobile web

These are working in test videos too
User should be able to zoom in/out the image on native devices via pinch-zoom.
A larger image should be scaled down to the container dimensions respecting the aspect ratio.

@parasharrajat
Copy link
Member

Sorry for the delay @metehanozyurt. Just need to test it on all platforms.

@metehanozyurt
Copy link
Contributor Author

Oh no problem. Thank you for spending your time on this PR @parasharrajat .

const containerHeight = this.state.containerHeight;
const containerWidth = this.state.containerWidth;

// return if image not loaded yet
if (imageHeight <= 0 || containerHeight <= 0) {
Copy link
Member

Choose a reason for hiding this comment

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

Could you please revert this change? why have you removed || containerHeight <= 0?

Copy link
Member

@parasharrajat parasharrajat left a comment

Choose a reason for hiding this comment

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

I tested this. Overall, looking good except that on native, the thumbnail shown is bigger than the image size which looks odd. Thumbnails can be seen during image loading on the attachment modal.
Use this image.
image

@metehanozyurt
Copy link
Contributor Author

I had concerns because it was called asynchronously, so I thought about the possibility of containerHeight information not coming. But I did a lot of tests and did not encounter a problem. You're right, I will revert this change.

I tested this. Overall, looking good except that on native, the thumbnail shown is bigger than the image size which looks odd. Thumbnails can be seen during image loading on the attachment modal. Use this image. image

For this situation we cant do anything. I try to use changing resizeMode to center but for big dimension images not looking good when loading. This happens with all images btw.

I did research about this situation. The best approach is to give a specific width and height and using resizeMode 'contain' when loading. This method has been used already.

My suggestion :
We can remove the photo view at the time of loading to avoid this situation.

@parasharrajat
Copy link
Member

I did research about this situation. The best approach is to give a specific width and height and using resizeMode 'contain' when loading. This method has been used already.

Hmm, I see. Asked here https://expensify.slack.com/archives/C01GTK53T8Q/p1652698911379689

@metehanozyurt
Copy link
Contributor Author

Thank you so much for your attention @parasharrajat 🙏 .

@parasharrajat
Copy link
Member

@metehanozyurt Could you please share the screen recording for both scenarios on the slack?

  • One with thumbnail preview.
  • other without the preview.

@parasharrajat
Copy link
Member

https://expensify.slack.com/archives/C01GTK53T8Q/p1652698911379689 Suggests removing the thumbnail preview. @flodnv What are your thoughts for #8761 (review)?

@flodnv
Copy link
Contributor

flodnv commented May 19, 2022

I took a look at that discussion and agree that we should remove the preview.

@metehanozyurt
Copy link
Contributor Author

In fact, this has always been the case. I would like to show it with a photo with a different aspect ratio. This happens to us because the size of the container grows when we zoom. Small size photos just act like big photos now.

screen-zoom-sample-Screen-Recording-2022-06-17-at-22.14.11.mp4

@parasharrajat
Copy link
Member

Got it. Thanks.

Comment on lines 214 to 216
resizeMode={this.state.zoomScale > 1 ? 'center' : 'contain'} // When Image dimensions are lower
// than the container boundary(zoomscale <= 1), use `contain` to render the image with natural dimensions.
// Both `center` and `contain` keeps the image centered on both x and y axis.
Copy link
Member

@parasharrajat parasharrajat Jun 20, 2022

Choose a reason for hiding this comment

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

As comments are bigger now, I think it would be better to move the comments before the prop.

e.g.

Suggested change
resizeMode={this.state.zoomScale > 1 ? 'center' : 'contain'} // When Image dimensions are lower
// than the container boundary(zoomscale <= 1), use `contain` to render the image with natural dimensions.
// Both `center` and `contain` keeps the image centered on both x and y axis.
// When Image dimensions are lower than the container boundary(zoomscale <= 1), use `contain` to render the image with natural dimensions.
// Both `center` and `contain` keeps the image centered on both x and y axis.
resizeMode={this.state.zoomScale > 1 ? 'center' : 'contain'}

parasharrajat
parasharrajat previously approved these changes Jun 20, 2022
Copy link
Member

@parasharrajat parasharrajat left a comment

Choose a reason for hiding this comment

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

LGTM. Thanks for the changes @metehanozyurt.

cc: @flodnv

PR Reviewer Checklist

  • I verified the PR has a small number of commits behind main
  • 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 testing environment is mentioned in the test steps
  • I verified testing steps cover success & fail scenarios (if applicable)
  • 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 related to changes in this PR
  • I verified proper code patterns were followed (see Reviewing the code)
    • I verified comments were added when the code was not self explanatory
    • I verified any copy / text shown in the product was added in all src/languages/* files (if applicable)
    • I verified proper naming convention for platform-specific files was followed (if applicable)
    • I verified style guidelines were followed
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • I verified that this PR follows the guidelines as stated in the Review Guidelines
  • I verified other components are not impacted by changes in this PR (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 the UI performance was not affected (the performance is the same than main branch)
  • If a new component is created I verified that a similar component doesn't exist in the codebase

🎀 👀 🎀 C+ reviewed

@flodnv
Copy link
Contributor

flodnv commented Jun 21, 2022

Thanks @parasharrajat @metehanozyurt! Can you please complete the PR checklist and make sure you've done all of it? 🙏
This is essential for every PR we push out, to ensure no one misses anything. Thanks in advance!

Copy link
Contributor

@flodnv flodnv left a comment

Choose a reason for hiding this comment

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

^

@parasharrajat
Copy link
Member

I can't edit the PR description but I have followed everything on the PR.

@metehanozyurt
Copy link
Contributor Author

I marked some steps in the checklist. But I didn't mark it because I didn't work in some areas(If a new component is created I verified that:). If you want me to fill them all out, I can fill them. Please excuse me if I don't understand the problem.

@flodnv
Copy link
Contributor

flodnv commented Jun 23, 2022

@parasharrajat @metehanozyurt thanks for your patience. We are discussing internally on how to improve this.

@metehanozyurt yes please fill all of them out. If some item does not apply, check it off (I will soon update the template to make this clear)

@parasharrajat Can you copy/paste the checklist into a comment of your own here and then complete it?

Thanks!

@parasharrajat
Copy link
Member

@flodnv Updated.

Copy link
Contributor

@flodnv flodnv left a comment

Choose a reason for hiding this comment

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

@metehanozyurt can you please complete the PR checklist (and check off items that do not apply)?

Also, there are conflicts now 😬

* @param {Number} imageHeight
*/
setScale(containerWidth, containerHeight, imageWidth, imageHeight) {
if (!containerWidth || !imageWidth) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Sorry, I am asking why this if statement is here? Why are we only checking *Width and not *Height?

@flodnv
Copy link
Contributor

flodnv commented Jul 5, 2022

Good tests! Why do I see the image flicker very quickly in the first second of ios-mWeb.mp4 ?

@metehanozyurt
Copy link
Contributor Author

I think I checked what I did in the PR checklist. I don't understand the problem or my mistake.
I think the width is enough for us to understand that the photo has been loaded.
I can resolve the conflicts today.
The image flicker in the videos has been fixed, so I can update the videos today . I haven't updated the videos after last changes.

@flodnv
Copy link
Contributor

flodnv commented Jul 5, 2022

I think I checked what I did in the PR checklist. I don't understand the problem or my mistake.

Expensify needs you to check off ALL items; lots of items are still unchecked. If an item does not apply, check it off.

I think the width is enough for us to understand that the photo has been loaded.

Let's keep this in the comment thread please: #8761 (comment)

I can resolve the conflicts today.
The image flicker in the videos has been fixed, so I can update the videos today . I haven't updated the videos after last changes.

Thanks! 👍

@parasharrajat
Copy link
Member

@metehanozyurt Please merge main. Thanks.

@metehanozyurt
Copy link
Contributor Author

I merged main , uploaded new videos. I have completed the PR checklist. Thank you for your patience @parasharrajat @flodnv 🙏 .

Copy link
Contributor

@flodnv flodnv left a comment

Choose a reason for hiding this comment

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

Thanks! @parasharrajat if you wanna approve one last time, I can merge this!

@parasharrajat
Copy link
Member

Checking...

Copy link
Member

@parasharrajat parasharrajat left a comment

Choose a reason for hiding this comment

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

LGTM.

@flodnv flodnv merged commit ff1b9cd into Expensify:main Jul 11, 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.

@OSBotify
Copy link
Contributor

🚀 Deployed to staging by @flodnv in version: 1.1.83-1 🚀

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

@OSBotify
Copy link
Contributor

🚀 Deployed to production by @chiragsalian in version: 1.1.84-13 🚀

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.

4 participants