-
Notifications
You must be signed in to change notification settings - Fork 2.9k
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
fix: blank space for corrupt files preview #29692
fix: blank space for corrupt files preview #29692
Conversation
c33a90e
to
1e386eb
Compare
@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] |
@abdel-h66, change tests to
|
src/components/AttachmentModal.js
Outdated
@@ -447,6 +447,7 @@ function AttachmentModal(props) { | |||
onToggleKeyboard={updateConfirmButtonVisibility} | |||
isWorkspaceAvatar={props.isWorkspaceAvatar} | |||
fallbackSource={props.fallbackSource} | |||
isAttachmentModal |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
isAttachmentModal | |
isUsedInAttachmentModal |
@@ -118,6 +119,7 @@ function AttachmentView({ | |||
onScaleChanged={onScaleChanged} | |||
onToggleKeyboard={onToggleKeyboard} | |||
onLoadComplete={() => !loadComplete && setLoadComplete(true)} | |||
isAttachmentModal={isAttachmentModal} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can simplify this and forego the need for the new PDFPreviewError
component
Instead of passing isAttachmentModal
prop, we'll just pass errorLabelStyles
errorLabelStyles={isUsedInAttachmentModal && [styles.textLabel, styles.textLarge]}
And then in PDFView.index/index.native.js
, we use those styles directly
error={<Text style={this.props.errorLabelStyles}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>}
Do you think the background should have a color ? or none at all :) ? |
The text shouldn't have a separate background color, it should look like this when the message is hovered over Screen.Recording.2023-10-17.at.09.49.23.mov |
@@ -2159,7 +2159,6 @@ const styles = (theme: ThemeDefault) => | |||
// It's being used on Web/Desktop only to vertically center short PDFs, | |||
// while preventing the overflow of the top of long PDF files. | |||
...display.dGrid, | |||
backgroundColor: theme.modalBackground, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Removed this one here, it's only used in the touched component on desktop, and does not really add anything. This was the one causing the weird background on hover.
src/components/PDFView/index.js
Outdated
@@ -283,7 +284,7 @@ class PDFView extends Component { | |||
}) => this.setState({containerWidth: width, containerHeight: height})} | |||
> | |||
<Document | |||
error={<Text style={[styles.textLabel, styles.textLarge]}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>} | |||
error={<Text style={[this.props.errorLabelStyles, cursor.cursorAuto]}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I had to add cusrorAuto, because I'm not sure if you have noticed, but the text is still clickable to download the PDF, since the PDF is not corrupt, it's just the preview that is corrupt, I was even thinking that we might another way to do this.
@@ -8,12 +8,14 @@ const attachmentViewPdfPropTypes = { | |||
encryptedSourceUrl: PropTypes.string.isRequired, | |||
onToggleKeyboard: PropTypes.func.isRequired, | |||
onLoadComplete: PropTypes.func.isRequired, | |||
errorLabelStyles: PropTypes.arrayOf(PropTypes.object), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
errorLabelStyles: PropTypes.arrayOf(PropTypes.object), | |
errorLabelStyles: stylePropTypes, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
in both files errorLabelStyles
prop type needs a comment explaining what it's used for
@@ -118,6 +119,7 @@ function AttachmentView({ | |||
onScaleChanged={onScaleChanged} | |||
onToggleKeyboard={onToggleKeyboard} | |||
onLoadComplete={() => !loadComplete && setLoadComplete(true)} | |||
errorLabelStyles={isUsedInAttachmentModal ? [styles.textLabel, styles.textLarge] : []} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
errorLabelStyles={isUsedInAttachmentModal ? [styles.textLabel, styles.textLarge] : []} | |
errorLabelStyles={isUsedInAttachmentModal && [styles.textLabel, styles.textLarge]} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will send a boolean
down. Id rather limit the leakage here. What do you think. ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it's fine as long as we have a defaultProps, it'll be replaced with []
@@ -27,6 +27,8 @@ const propTypes = { | |||
/** Should focus to the password input */ | |||
isFocused: PropTypes.bool, | |||
|
|||
errorLabelStyles: PropTypes.arrayOf(PropTypes.object), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
errorLabelStyles: PropTypes.arrayOf(PropTypes.object), | |
errorLabelStyles: stylePropTypes, |
50e2a9f
to
79c2469
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- pull the latest main
- there is a crash when you try to send an attachment
Screen.Recording.2023-10-18.at.10.22.37.mov
I have fixed the above issue, it was due to style not being passed down in the correct type. Codebases with no typing are a little tricky to work with 😞 pdf-ios-native.mp4pdf-web-chrome.mp4 |
79c2469
to
485dc49
Compare
I also noticed that on |
8201199
to
37bf809
Compare
@@ -132,6 +133,7 @@ function AttachmentView({ | |||
onScaleChanged={onScaleChanged} | |||
onToggleKeyboard={onToggleKeyboard} | |||
onLoadComplete={() => !loadComplete && setLoadComplete(true)} | |||
errorLabelStyles={isUsedInAttachmentModal ? [styles.textLabel, styles.textLarge] : []} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't we add cursor.cursorAuto
only if isUsedInAttachmentModal=true
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes we could, I was thinking maybe we can omit the whole Text change thing, and stick with only the small size text for both cases. that will remove so much overhead. what do you think. ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think it's that much overhead, ideally, we should retain the current design
src/components/PDFView/index.js
Outdated
@@ -283,7 +286,7 @@ class PDFView extends Component { | |||
}) => this.setState({containerWidth: width, containerHeight: height})} | |||
> | |||
<Document | |||
error={<Text style={[styles.textLabel, styles.textLarge]}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>} | |||
error={<Text style={[...errorLabelStyles, cursor.cursorAuto]}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
error={<Text style={[...errorLabelStyles, cursor.cursorAuto]}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>} | |
error={<Text style={[...this.props.errorLabelStyles, cursor.cursorAuto]}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have the errorLabelStyles
defined at line 275 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is in necessary? I think we can just use this.props.errorLabelStyles
directly
error={<Text style={this.props.errorLabelStyles}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From the proptype
, PropTypes.oneOfType([PropTypes.object, PropTypes.arrayOf(PropTypes.object), PropTypes.func])
. I know in our case we are passing an array, but there will be no linter errors if a single object is passed down. I will just keep this as a guard.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will work correctly even if we pass styles as a single object
The previous crash was due to nested arrays, it won't happen if we pass a single object
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure, it should be up-to-date now.
return ( | ||
<View style={containerStyles}> | ||
{this.state.failedToLoadPDF && ( | ||
<View style={[styles.flex1, styles.justifyContentCenter]}> | ||
<Text style={[styles.textLabel, styles.textLarge]}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text> | ||
<Text style={errorLabelStyles}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<Text style={errorLabelStyles}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text> | |
<Text style={this.props.errorLabelStyles}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text> |
@@ -27,6 +27,9 @@ const propTypes = { | |||
/** Should focus to the password input */ | |||
isFocused: PropTypes.bool, | |||
|
|||
/** Array of styles for error label */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/** Array of styles for error label */ | |
/** Styles for the error label */ |
37bf809
to
ffb2272
Compare
@@ -8,12 +9,16 @@ const attachmentViewPdfPropTypes = { | |||
encryptedSourceUrl: PropTypes.string.isRequired, | |||
onToggleKeyboard: PropTypes.func.isRequired, | |||
onLoadComplete: PropTypes.func.isRequired, | |||
|
|||
/** Array of styles for error label */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/** Array of styles for error label */ | |
/** Styles for the error label */ |
Same thing here
src/components/PDFView/index.js
Outdated
import compose from '../../libs/compose'; | ||
import PressableWithoutFeedback from '../Pressable/PressableWithoutFeedback'; | ||
import Log from '../../libs/Log'; | ||
import ONYXKEYS from '../../ONYXKEYS'; | ||
import Text from '../Text'; | ||
import cursor from '../../styles/utilities/cursor'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Linter error
src/components/PDFView/index.js
Outdated
@@ -283,7 +286,7 @@ class PDFView extends Component { | |||
}) => this.setState({containerWidth: width, containerHeight: height})} | |||
> | |||
<Document | |||
error={<Text style={[styles.textLabel, styles.textLarge]}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>} | |||
error={<Text style={errorLabelStyles}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
error={<Text style={errorLabelStyles}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>} | |
error={<Text style={this.props.errorLabelStyles}>{this.props.translate('attachmentView.failedToLoadPDF')}</Text>} |
ffb2272
to
1f0cdd1
Compare
29ed892
to
1d74b7c
Compare
Reviewer Checklist
Screenshots/VideosWebScreen.Recording.2023-10-23.at.12.36.56.movMobile Web - Chromescreen-20231023-123514.mp4Mobile Web - SafariScreen.Recording.2023-10-23.at.12.36.19.movDesktopScreen.Recording.2023-10-23.at.12.38.21.moviOSScreen.Recording.2023-10-23.at.12.31.41.movAndroidscreen-20231023-123359.mp4 |
Co-authored-by: Eugene Voloshchak <[email protected]>
Bug on native platforms (iOS and Android) Screen.Recording.2023-10-19.at.19.24.33.mov |
Could not replicate this one, I could see the loading after the upload. But not on this screen. |
It's 100% reproducible for me, both iOS and Android screen-20231019-194906.mp4
Are you experiencing this issue? |
Yes I only experience the loading animation that you mentioned in the issue. I think the flashing could be due to the background we removed, I believe now that the background was added there to cover up on this one. |
Yup, flashing is caused by removal of style={isUsedInAttachmentModal ? styles.imageModalPDF : styles.flex1} I did some testing and it seems to resolve the issue, but please verify this is working and doesn't introduce new regressions |
Your solution seems to be good, here are some screen recordings after the change. iOS nativehttps://github.com/Expensify/App/assets/144037189/e2cb4a7a-102a-4839-8703-eb807f5ead9cmacOS chromemacos-chrome.mp4 |
@abdel-h66, this introduces a bug on iOS/Android Screen.Recording.2023-10-23.at.11.14.25.mov |
That looks like an existing behavior, I could see that on main as well. not sure if we can address it here. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
✋ 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.90-0 🚀
|
🚀 Deployed to production by https://github.com/marcaaron in version: 1.3.90-2 🚀
|
🚀 Deployed to staging by https://github.com/joelbettner in version: 1.3.91-0 🚀
|
🚀 Deployed to production by https://github.com/marcaaron in version: 1.3.91-8 🚀
|
Details
Fixed Issues
$ #27292
PROPOSAL: #27292 (comment)
Tests
QA Expensify-corrupt.pdf
Offline tests
QA Steps
PR Author Checklist
### Fixed Issues
section aboveTests
sectionOffline steps
sectionQA steps
sectiontoggleReport
and notonIconClick
)myBool && <MyComponent />
.src/languages/*
files and using the translation methodWaiting for Copy
label for a copy review on the original GH to get the correct copy.STYLE.md
) were followedAvatar
, I verified the components usingAvatar
are working as expected)/** comment above it */
this
properly so there are no scoping issues (i.e. foronClick={this.submit}
the methodthis.submit
should be bound tothis
in the constructor)this
are necessary to be bound (i.e. avoidthis.submit = this.submit.bind(this);
ifthis.submit
is never passed to a component event handler likeonClick
)StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)
)Avatar
is modified, I verified thatAvatar
is working as expected in all cases)ScrollView
component to make it scrollable when more elements are added to the page.main
branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTest
steps.Screenshots/Videos
Android: Native
android-native.mp4
Android: mWeb Chrome
android-chrome.mp4
iOS: Native
ios-native.mp4
iOS: mWeb Safari
ios-safari.mp4
MacOS: Chrome / Safari
web-chrome.mp4
MacOS: Desktop
desktop-native.mp4