From 364db9dafa9c6f746c93cc9a08d4cfd847dc8b3b Mon Sep 17 00:00:00 2001 From: infinite-persistence Date: Wed, 21 Apr 2021 11:31:54 +0800 Subject: [PATCH] Propagate thumbnail errors to PublishFormData Thumbnail errors were just being used in `selectThumbnail`. The form doesn't know about it and was using allowing invalid thumbnails like 'helloworld' to pass through. --- flow-typed/publish.js | 1 + static/app-strings.json | 3 +++ ui/component/publishForm/view.jsx | 3 +++ ui/component/publishFormErrors/index.js | 1 + ui/component/publishFormErrors/view.jsx | 3 +++ ui/component/selectThumbnail/view.jsx | 28 +++++++++---------------- 6 files changed, 21 insertions(+), 18 deletions(-) diff --git a/flow-typed/publish.js b/flow-typed/publish.js index 3862c26ee..ca11a6a5d 100644 --- a/flow-typed/publish.js +++ b/flow-typed/publish.js @@ -11,6 +11,7 @@ declare type UpdatePublishFormData = { thumbnail_url?: string, uploadThumbnailStatus?: string, thumbnailPath?: string, + thumbnailError?: boolean, description?: string, language?: string, channel?: string, diff --git a/static/app-strings.json b/static/app-strings.json index 6faa0899a..fbb288205 100644 --- a/static/app-strings.json +++ b/static/app-strings.json @@ -310,6 +310,9 @@ "upload": "upload", "Uploading thumbnail": "Uploading thumbnail", "Please wait for thumbnail to finish uploading": "Please wait for thumbnail to finish uploading", + "A thumbnail is required. Please upload or provide an image URL above.": "A thumbnail is required. Please upload or provide an image URL above.", + "Thumbnail is invalid.": "Thumbnail is invalid.", + "Please reselect a file after changing the LBRY URL": "Please reselect a file after changing the LBRY URL", "API connection string": "API connection string", "Method": "Method", "Parameters": "Parameters", diff --git a/ui/component/publishForm/view.jsx b/ui/component/publishForm/view.jsx index bfefb3c54..7c3125eee 100644 --- a/ui/component/publishForm/view.jsx +++ b/ui/component/publishForm/view.jsx @@ -46,6 +46,7 @@ type Props = { editingURI: ?string, title: ?string, thumbnail: ?string, + thumbnailError: ?boolean, uploadThumbnailStatus: ?string, thumbnailPath: ?string, description: ?string, @@ -95,6 +96,7 @@ function PublishForm(props: Props) { // Detect upload type from query in URL const { thumbnail, + thumbnailError, name, editingURI, myClaimForUri, @@ -227,6 +229,7 @@ function PublishForm(props: Props) { thumbnail && !bidError && !emptyPostError && + !thumbnailError && !(uploadThumbnailStatus === THUMBNAIL_STATUSES.IN_PROGRESS); const isOverwritingExistingClaim = !editingURI && myClaimForUri; diff --git a/ui/component/publishFormErrors/index.js b/ui/component/publishFormErrors/index.js index 651ed5991..28ca6c690 100644 --- a/ui/component/publishFormErrors/index.js +++ b/ui/component/publishFormErrors/index.js @@ -10,6 +10,7 @@ const select = (state) => ({ editingURI: makeSelectPublishFormValue('editingURI')(state), uploadThumbnailStatus: makeSelectPublishFormValue('uploadThumbnailStatus')(state), thumbnail: makeSelectPublishFormValue('thumbnail')(state), + thumbnailError: makeSelectPublishFormValue('thumbnailError')(state), isStillEditing: selectIsStillEditing(state), }); diff --git a/ui/component/publishFormErrors/view.jsx b/ui/component/publishFormErrors/view.jsx index 069629351..36fa4d355 100644 --- a/ui/component/publishFormErrors/view.jsx +++ b/ui/component/publishFormErrors/view.jsx @@ -13,6 +13,7 @@ type Props = { isStillEditing: boolean, uploadThumbnailStatus: string, thumbnail: string, + thumbnailError: boolean, waitForFile: boolean, }; @@ -27,6 +28,7 @@ function PublishFormErrors(props: Props) { isStillEditing, uploadThumbnailStatus, thumbnail, + thumbnailError, waitForFile, } = props; // These are extra help @@ -46,6 +48,7 @@ function PublishFormErrors(props: Props) { {!isUploadingThumbnail && !thumbnail && (
{__('A thumbnail is required. Please upload or provide an image URL above.')}
)} + {thumbnailError &&
{__('Thumbnail is invalid.')}
} {editingURI && !isStillEditing && !filePath && (
{__('Please reselect a file after changing the LBRY URL')}
)} diff --git a/ui/component/selectThumbnail/view.jsx b/ui/component/selectThumbnail/view.jsx index 2293d5e31..a96fc11a0 100644 --- a/ui/component/selectThumbnail/view.jsx +++ b/ui/component/selectThumbnail/view.jsx @@ -17,23 +17,15 @@ type Props = { formDisabled: boolean, uploadThumbnailStatus: string, thumbnailPath: ?string, + thumbnailError: ?string, openModal: (id: string, {}) => void, updatePublishForm: ({}) => void, resetThumbnailStatus: () => void, }; -type State = { - thumbnailError: boolean, -}; - -class SelectThumbnail extends React.PureComponent { +class SelectThumbnail extends React.PureComponent { constructor() { super(); - - this.state = { - thumbnailError: false, - }; - (this: any).handleThumbnailChange = this.handleThumbnailChange.bind(this); } @@ -41,8 +33,10 @@ class SelectThumbnail extends React.PureComponent { const { updatePublishForm } = this.props; const newThumbnail = e.target.value.replace(' ', ''); - updatePublishForm({ thumbnail: newThumbnail }); - this.setState({ thumbnailError: false }); + updatePublishForm({ + thumbnail: newThumbnail, + thumbnailError: false, + }); } render() { @@ -56,10 +50,10 @@ class SelectThumbnail extends React.PureComponent { openModal, updatePublishForm, thumbnailPath, + thumbnailError, resetThumbnailStatus, } = this.props; - const { thumbnailError } = this.state; const accept = '.png, .jpg, .jpeg, .gif'; const outpoint = myClaimForUri ? `${myClaimForUri.txid}:${myClaimForUri.nout}` : undefined; @@ -99,10 +93,8 @@ class SelectThumbnail extends React.PureComponent { style={{ display: 'none' }} src={thumbnailSrc} alt={__('Thumbnail Preview')} - onError={e => { - this.setState({ - thumbnailError: true, - }); + onError={(e) => { + updatePublishForm({ thumbnailError: true }); }} /> @@ -133,7 +125,7 @@ class SelectThumbnail extends React.PureComponent { label={__('Thumbnail')} placeholder={__('Choose a thumbnail')} accept={accept} - onFileChosen={file => openModal(MODALS.CONFIRM_THUMBNAIL_UPLOAD, { file })} + onFileChosen={(file) => openModal(MODALS.CONFIRM_THUMBNAIL_UPLOAD, { file })} /> )} {status === THUMBNAIL_STATUSES.COMPLETE && thumbnail && (