From 91c6764d310f7518af71ee7378d7ad059d4d6d89 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 3 Apr 2018 19:17:40 -0400 Subject: [PATCH 01/10] fix: don't show undefined for channel name when editing anonymous claim --- src/renderer/component/publishForm/view.jsx | 203 ++++++++++---------- 1 file changed, 103 insertions(+), 100 deletions(-) diff --git a/src/renderer/component/publishForm/view.jsx b/src/renderer/component/publishForm/view.jsx index aaf90e188..0da85023c 100644 --- a/src/renderer/component/publishForm/view.jsx +++ b/src/renderer/component/publishForm/view.jsx @@ -68,6 +68,106 @@ class PublishForm extends React.PureComponent { (this: any).getNewUri = this.getNewUri.bind(this); } + // Returns a new uri to be used in the form and begins to resolve that uri for bid help text + getNewUri(name: string, channel: string) { + const { resolveUri } = this.props; + // If they are midway through a channel creation, treat it as anonymous until it completes + const channelName = channel === CHANNEL_ANONYMOUS || channel === CHANNEL_NEW ? '' : channel; + + let uri; + try { + uri = buildURI({ contentName: name, channelName }); + } catch (e) { + // something wrong with channel or name + } + + if (uri) { + resolveUri(uri); + return uri; + } + + return ''; + } + + handleFileChange(filePath: string, fileName: string) { + const { updatePublishForm, channel, name } = this.props; + const newFileParams: { + filePath: string, + name?: string, + uri?: string, + } = { filePath }; + + if (!name) { + const parsedFileName = fileName.replace(regexInvalidURI, ''); + const uri = this.getNewUri(parsedFileName, channel); + newFileParams.name = parsedFileName; + newFileParams.uri = uri; + } + + updatePublishForm(newFileParams); + } + + handleNameChange(name: ?string) { + const { channel, updatePublishForm } = this.props; + + if (!name) { + updatePublishForm({ name, nameError: undefined }); + return; + } + + if (!isNameValid(name, false)) { + updatePublishForm({ + name, + nameError: __('LBRY names must contain only letters, numbers and dashes.'), + }); + return; + } + + const uri = this.getNewUri(name, channel); + updatePublishForm({ + name, + uri, + nameError: undefined, + }); + } + + handleChannelChange(channelName: string) { + const { name, updatePublishForm } = this.props; + if (name) { + const uri = this.getNewUri(name, channelName); + updatePublishForm({ channel: channelName, uri }); + } else { + updatePublishForm({ channel: channelName }); + } + } + + handleBidChange(bid: number) { + const { balance, updatePublishForm } = this.props; + + let bidError; + if (balance <= bid) { + bidError = __('Not enough credits'); + } else if (bid <= MINIMUM_PUBLISH_BID) { + bidError = __('Your bid must be higher'); + } + + updatePublishForm({ bid, bidError }); + } + + editExistingClaim() { + const { myClaimForUri, prepareEdit, scrollToTop } = this.props; + if (myClaimForUri) { + prepareEdit(myClaimForUri); + scrollToTop(); + } + } + + handleCancelPublish() { + const { clearPublish, scrollToTop } = this.props; + scrollToTop(); + clearPublish(); + } + handlePublish() { const { publish, @@ -125,105 +225,6 @@ class PublishForm extends React.PureComponent { publish(publishParams); } - handleCancelPublish() { - const { clearPublish, scrollToTop } = this.props; - scrollToTop(); - clearPublish(); - } - - editExistingClaim() { - const { myClaimForUri, prepareEdit, scrollToTop } = this.props; - if (myClaimForUri) { - prepareEdit(myClaimForUri); - scrollToTop(); - } - } - - handleFileChange(filePath: string, fileName: string) { - const { updatePublishForm, channel, name } = this.props; - const newFileParams: { - filePath: string, - name?: string, - uri?: string - } = { filePath }; - - if (!name) { - const parsedFileName = fileName.replace(regexInvalidURI, ''); - const uri = this.getNewUri(parsedFileName, channel); - newFileParams.name = parsedFileName; - } - - updatePublishForm(newFileParams); - } - - handleNameChange(name: ?string) { - const { channel, updatePublishForm } = this.props; - - if (!name) { - updatePublishForm({ name, nameError: undefined }); - return; - } - - if (!isNameValid(name, false)) { - updatePublishForm({ - name, - nameError: __('LBRY names must contain only letters, numbers and dashes.'), - }); - return; - } - - const uri = this.getNewUri(name, channel); - updatePublishForm({ - name, - uri, - nameError: undefined, - }); - } - - handleChannelChange(channelName: string) { - const { name, updatePublishForm } = this.props; - if (name) { - const uri = this.getNewUri(name, channelName); - updatePublishForm({ channel: channelName, uri }); - } else { - updatePublishForm({ channel: channelName }); - } - } - - handleBidChange(bid: number) { - const { balance, updatePublishForm } = this.props; - - let bidError; - if (balance <= bid) { - bidError = __('Not enough credits'); - } else if (bid <= MINIMUM_PUBLISH_BID) { - bidError = __('Your bid must be higher'); - } - - updatePublishForm({ bid, bidError }); - } - - // Returns a new uri to be used in the form and begins to resolve that uri for bid help text - getNewUri(name: string, channel: string) { - const { resolveUri } = this.props; - // If they are midway through a channel creation, treat it as anonymous until it completes - const channelName = channel === CHANNEL_ANONYMOUS || channel === CHANNEL_NEW ? '' : channel; - - let uri; - try { - uri = buildURI({ contentName: name, channelName }); - } catch (e) { - // something wrong with channel or name - } - - if (uri) { - resolveUri(uri); - return uri; - } - - return ''; - } - checkIsFormValid() { const { name, nameError, title, bid, bidError, tosAccepted } = this.props; return name && !nameError && title && bid && !bidError && tosAccepted; @@ -421,7 +422,9 @@ class PublishForm extends React.PureComponent { Date: Tue, 3 Apr 2018 19:46:03 -0400 Subject: [PATCH 02/10] fix: allow metadata only edits --- src/renderer/component/publishForm/view.jsx | 12 ++++++++++++ src/renderer/redux/actions/publish.js | 8 +++++++- src/renderer/redux/reducers/publish.js | 6 ++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/renderer/component/publishForm/view.jsx b/src/renderer/component/publishForm/view.jsx index 0da85023c..8118e5b0b 100644 --- a/src/renderer/component/publishForm/view.jsx +++ b/src/renderer/component/publishForm/view.jsx @@ -38,6 +38,11 @@ type Props = { winningBidForClaimUri: number, myClaimForUri: ?{ amount: number, + value: { + stream: { + source: { source: string }, + }, + }, }, licenseType: string, otherLicenseDescription: ?string, @@ -187,6 +192,7 @@ class PublishForm extends React.PureComponent { contentIsFree, price, uri, + myClaimForUri, } = this.props; let publishingLicense; @@ -222,6 +228,12 @@ class PublishForm extends React.PureComponent { uri, }; + // Editing a claim + if (!filePath && myClaimForUri) { + const { source } = myClaimForUri.value.stream; + publishParams.source = source; + } + publish(publishParams); } diff --git a/src/renderer/redux/actions/publish.js b/src/renderer/redux/actions/publish.js index ba0da04b8..a66cfbe77 100644 --- a/src/renderer/redux/actions/publish.js +++ b/src/renderer/redux/actions/publish.js @@ -84,6 +84,7 @@ export const doPublish = (params: PublishParams): ThunkAction => { contentIsFree, price, uri, + source, } = params; const channelName = channel === CHANNEL_ANONYMOUS || channel === CHANNEL_NEW ? '' : channel; @@ -107,13 +108,18 @@ export const doPublish = (params: PublishParams): ThunkAction => { } const publishPayload = { - file_path: filePath, name, channel_name: channelName, bid, metadata, }; + if (filePath) { + publishPayload.file_path = filePath; + } else { + publishPayload.sources = source; + } + return (dispatch: Dispatch) => { dispatch({ type: ACTIONS.PUBLISH_START }); diff --git a/src/renderer/redux/reducers/publish.js b/src/renderer/redux/reducers/publish.js index 195e8c6cf..8bc91918b 100644 --- a/src/renderer/redux/reducers/publish.js +++ b/src/renderer/redux/reducers/publish.js @@ -75,6 +75,12 @@ export type PublishParams = { currency: string, amount: number, }, + source?: { + contentType: string, + source: string, + sourceType: string, + version: string, + }, }; const defaultState: PublishState = { From 93bd6a1d31378d67eee48d4cb186dcd43e4d0bed Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 3 Apr 2018 19:58:58 -0400 Subject: [PATCH 03/10] fix: send tip --- src/renderer/component/walletSendTip/index.js | 8 ++++---- src/renderer/component/walletSendTip/view.jsx | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/renderer/component/walletSendTip/index.js b/src/renderer/component/walletSendTip/index.js index daa4ec66a..7677f0a7a 100644 --- a/src/renderer/component/walletSendTip/index.js +++ b/src/renderer/component/walletSendTip/index.js @@ -1,17 +1,17 @@ -import React from 'react'; import { connect } from 'react-redux'; import { doSendSupport } from 'redux/actions/wallet'; -import WalletSendTip from './view'; -import { makeSelectTitleForUri } from 'redux/selectors/claims'; +import { makeSelectTitleForUri, makeSelectClaimForUri } from 'redux/selectors/claims'; import { selectIsSendingSupport } from 'redux/selectors/wallet'; +import WalletSendTip from './view'; const select = (state, props) => ({ isPending: selectIsSendingSupport(state), title: makeSelectTitleForUri(props.uri)(state), + claim: makeSelectClaimForUri(props.uri)(state), }); const perform = dispatch => ({ - sendSupport: (amount, claim_id, uri) => dispatch(doSendSupport(amount, claim_id, uri)), + sendSupport: (amount, claimId, uri) => dispatch(doSendSupport(amount, claimId, uri)), }); export default connect(select, perform)(WalletSendTip); diff --git a/src/renderer/component/walletSendTip/view.jsx b/src/renderer/component/walletSendTip/view.jsx index 6433d0cc1..9af0da866 100644 --- a/src/renderer/component/walletSendTip/view.jsx +++ b/src/renderer/component/walletSendTip/view.jsx @@ -5,9 +5,9 @@ import { FormField } from 'component/common/form'; import UriIndicator from 'component/uriIndicator'; type Props = { - claim_id: string, uri: string, title: string, + claim: { claim_id: string }, errorMessage: string, isPending: boolean, sendSupport: (number, string, string) => void, @@ -31,7 +31,8 @@ class WalletSendTip extends React.PureComponent { } handleSendButtonClicked() { - const { claim_id: claimId, uri, sendSupport, sendTipCallback } = this.props; + const { claim, uri, sendSupport, sendTipCallback } = this.props; + const { claim_id: claimId } = claim; const { amount } = this.state; sendSupport(amount, claimId, uri); @@ -49,7 +50,7 @@ class WalletSendTip extends React.PureComponent { } render() { - const { errorMessage, isPending, title, uri, onCancel } = this.props; + const { title, errorMessage, isPending, uri, onCancel } = this.props; return (
From 04457373068a954409863c09c92cdd82eef93c20 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 3 Apr 2018 20:01:32 -0400 Subject: [PATCH 04/10] fix: remove tip button from channel page --- src/renderer/page/channel/view.jsx | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/renderer/page/channel/view.jsx b/src/renderer/page/channel/view.jsx index a2e80df44..4c62894d3 100644 --- a/src/renderer/page/channel/view.jsx +++ b/src/renderer/page/channel/view.jsx @@ -3,11 +3,9 @@ import React from 'react'; import BusyIndicator from 'component/common/busy-indicator'; import { FormField, FormRow } from 'component/common/form'; import ReactPaginate from 'react-paginate'; -import Button from 'component/button'; import SubscribeButton from 'component/subscribeButton'; import Page from 'component/page'; import FileList from 'component/fileList'; -import * as modals from 'constants/modal_types'; type Props = { uri: string, @@ -23,7 +21,6 @@ type Props = { fetchClaims: (string, number) => void, fetchClaimCount: string => void, navigate: (string, {}) => void, - openModal: (string, {}) => void, }; class ChannelPage extends React.PureComponent { @@ -61,7 +58,7 @@ class ChannelPage extends React.PureComponent { } render() { - const { fetching, claimsInChannel, claim, uri, page, totalPages, openModal } = this.props; + const { fetching, claimsInChannel, claim, uri, page, totalPages } = this.props; const { name } = claim; let contentList; @@ -81,12 +78,6 @@ class ChannelPage extends React.PureComponent {

{name}

-
From acef0546139e2674fc014a7bdd0b4df5fe126c0c Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 3 Apr 2018 20:09:01 -0400 Subject: [PATCH 05/10] fix: show price on channel page --- src/renderer/component/common/category-list.jsx | 3 +-- src/renderer/component/fileList/view.jsx | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/renderer/component/common/category-list.jsx b/src/renderer/component/common/category-list.jsx index 13aacab76..f20b355bc 100644 --- a/src/renderer/component/common/category-list.jsx +++ b/src/renderer/component/common/category-list.jsx @@ -234,8 +234,7 @@ class CategoryList extends React.PureComponent { }} className="card-row__scrollhouse" > - {names && - names.map(name => )} + {names && names.map(name => )}
); diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index f6a128bb8..ae80eecdd 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -166,7 +166,7 @@ class FileList extends React.PureComponent { const uri = buildURI(uriParams); - content.push(); + content.push(); }); return ( From a69fdfc523050b9782846a45b955132a0d893e19 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Tue, 3 Apr 2018 20:28:53 -0400 Subject: [PATCH 06/10] fix: remove navigation from redux-persist so lbry:// links work on cold open --- src/renderer/store.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/store.js b/src/renderer/store.js index b7ab9c01d..7e4ef6835 100644 --- a/src/renderer/store.js +++ b/src/renderer/store.js @@ -98,7 +98,7 @@ const saveClaimsFilter = createFilter('claims', ['byId', 'claimsByUri']); const subscriptionsFilter = createFilter('subscriptions', ['subscriptions']); const persistOptions = { - whitelist: ['claims', 'subscriptions', 'navigation', 'publish'], + whitelist: ['claims', 'subscriptions', 'publish'], // Order is important. Needs to be compressed last or other transforms can't // read the data transforms: [saveClaimsFilter, subscriptionsFilter, compressor], From 66b63a27c767d8dca7bcfecab2dfbb2151601e12 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Wed, 4 Apr 2018 00:07:17 -0400 Subject: [PATCH 07/10] fix: force light mode --- src/renderer/component/theme/view.jsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/renderer/component/theme/view.jsx b/src/renderer/component/theme/view.jsx index bac5410d8..e998d6d20 100644 --- a/src/renderer/component/theme/view.jsx +++ b/src/renderer/component/theme/view.jsx @@ -3,11 +3,15 @@ import React from 'react'; const Theme = props => { const { themePath } = props; - if (!themePath) { - return null; - } + // Force light mode while until dark mode is ready + // This is so we don't have to change users settings for them + return null; - return ; + // if (!themePath) { + // return null; + // } + // + // return ; }; export default Theme; From 5489d9909907d65e18d6867717a19f8baebb1ab1 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Wed, 4 Apr 2018 12:08:27 -0400 Subject: [PATCH 08/10] fix: multiple pending publishes when editing --- src/renderer/component/fileCard/index.js | 11 ++++------- src/renderer/component/fileList/view.jsx | 5 +++-- src/renderer/page/fileListPublished/index.js | 4 ++-- src/renderer/page/fileListPublished/view.jsx | 12 ++++++++++-- src/renderer/redux/selectors/publish.js | 12 +++++++++--- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/renderer/component/fileCard/index.js b/src/renderer/component/fileCard/index.js index 12bc9e649..c7334c1b8 100644 --- a/src/renderer/component/fileCard/index.js +++ b/src/renderer/component/fileCard/index.js @@ -1,4 +1,3 @@ -import React from 'react'; import { connect } from 'react-redux'; import { doNavigate } from 'redux/actions/navigation'; import { doResolveUri } from 'redux/actions/content'; @@ -10,12 +9,10 @@ import { selectPendingPublish } from 'redux/selectors/publish'; import FileCard from './view'; const select = (state, props) => { - let claim; - let fileInfo; - let metadata; - let isResolvingUri; - - const pendingPublish = selectPendingPublish(props.uri)(state); + let pendingPublish; + if (props.checkPending) { + pendingPublish = selectPendingPublish(props.uri)(state); + } const fileCardInfo = pendingPublish || { claim: makeSelectClaimForUri(props.uri)(state), diff --git a/src/renderer/component/fileList/view.jsx b/src/renderer/component/fileList/view.jsx index ae80eecdd..88037eb19 100644 --- a/src/renderer/component/fileList/view.jsx +++ b/src/renderer/component/fileList/view.jsx @@ -25,6 +25,7 @@ type Props = { sortByHeight?: boolean, claimsById: Array<{}>, fileInfos: Array, + checkPending?: boolean, }; type State = { @@ -138,7 +139,7 @@ class FileList extends React.PureComponent { } render() { - const { fileInfos, hideFilter } = this.props; + const { fileInfos, hideFilter, checkPending } = this.props; const { sortBy } = this.state; const content = []; @@ -166,7 +167,7 @@ class FileList extends React.PureComponent { const uri = buildURI(uriParams); - content.push(); + content.push(); }); return ( diff --git a/src/renderer/page/fileListPublished/index.js b/src/renderer/page/fileListPublished/index.js index a053baa3a..8b7546b73 100644 --- a/src/renderer/page/fileListPublished/index.js +++ b/src/renderer/page/fileListPublished/index.js @@ -1,13 +1,13 @@ import { connect } from 'react-redux'; import { selectMyClaimsWithoutChannels } from 'redux/selectors/claims'; -import { selectPendingPublishes } from 'redux/selectors/publish'; +import { selectPendingPublishesLessEdits } from 'redux/selectors/publish'; import { doNavigate } from 'redux/actions/navigation'; import { doCheckPendingPublishes } from 'redux/actions/publish'; import FileListPublished from './view'; const select = state => ({ claims: selectMyClaimsWithoutChannels(state), - pendingPublishes: selectPendingPublishes(state), + pendingPublishes: selectPendingPublishesLessEdits(state), }); const perform = dispatch => ({ diff --git a/src/renderer/page/fileListPublished/view.jsx b/src/renderer/page/fileListPublished/view.jsx index 24b0520d0..5eee36a48 100644 --- a/src/renderer/page/fileListPublished/view.jsx +++ b/src/renderer/page/fileListPublished/view.jsx @@ -1,9 +1,17 @@ +// @flow import React from 'react'; import Button from 'component/button'; import FileList from 'component/fileList'; import Page from 'component/page'; -class FileListPublished extends React.PureComponent { +type Props = { + pendingPublishes: Array<{}>, + claims: Array<{}>, + checkIfPublishesConfirmed: (Array<{}>) => void, + navigate: (string, ?{}) => void, +}; + +class FileListPublished extends React.PureComponent { componentDidMount() { const { pendingPublishes, checkIfPublishesConfirmed } = this.props; if (pendingPublishes.length) { @@ -18,7 +26,7 @@ class FileListPublished extends React.PureComponent { return ( {fileInfos.length ? ( - + ) : (
{__("It looks like you haven't published anything to LBRY yet.")} diff --git a/src/renderer/redux/selectors/publish.js b/src/renderer/redux/selectors/publish.js index 38d7c67cc..21f27d7d1 100644 --- a/src/renderer/redux/selectors/publish.js +++ b/src/renderer/redux/selectors/publish.js @@ -3,9 +3,15 @@ import { parseURI } from 'lbryURI'; const selectState = state => state.publish || {}; -export const selectPendingPublishes = createSelector(selectState, state => { - return state.pendingPublishes.map(pendingClaim => ({ ...pendingClaim, pending: true })) || []; -}); +export const selectPendingPublishes = createSelector( + selectState, + state => state.pendingPublishes.map(pendingClaim => ({ ...pendingClaim, pending: true })) || [] +); + +export const selectPendingPublishesLessEdits = createSelector( + selectPendingPublishes, + pendingPublishes => pendingPublishes.filter(pendingPublish => !pendingPublish.sources) +); export const selectPublishFormValues = createSelector(selectState, state => { const { pendingPublish, ...formValues } = state; From 778466bb1a95094474f4e2dce9fcdbfcae5334ca Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Wed, 4 Apr 2018 12:32:02 -0400 Subject: [PATCH 09/10] fix: allow 0.xx entries for publish cost --- .../component/common/form-components/form-field-price.jsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/renderer/component/common/form-components/form-field-price.jsx b/src/renderer/component/common/form-components/form-field-price.jsx index 16e76c0dd..d8fcd2120 100644 --- a/src/renderer/component/common/form-components/form-field-price.jsx +++ b/src/renderer/component/common/form-components/form-field-price.jsx @@ -25,9 +25,10 @@ export class FormFieldPrice extends React.PureComponent { handleAmountChange(event: SyntheticInputEvent<*>) { const { price, onChange } = this.props; + const amount = event.target.value ? parseFloat(event.target.value) : ''; onChange({ currency: price.currency, - amount: parseFloat(event.target.value), + amount, }); } @@ -50,7 +51,7 @@ export class FormFieldPrice extends React.PureComponent { type="number" className="form-field input--price-amount" min={min} - value={price.amount || ''} + value={price.amount} onChange={this.handleAmountChange} placeholder={placeholder || 5} disabled={disabled} From 0b4d9d25d572b3bb06145ac4732bee0cb2de6e40 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Wed, 4 Apr 2018 13:18:52 -0400 Subject: [PATCH 10/10] change source to sources for more clarity --- src/renderer/component/publishForm/view.jsx | 2 +- src/renderer/redux/actions/publish.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/renderer/component/publishForm/view.jsx b/src/renderer/component/publishForm/view.jsx index 8118e5b0b..138313e71 100644 --- a/src/renderer/component/publishForm/view.jsx +++ b/src/renderer/component/publishForm/view.jsx @@ -231,7 +231,7 @@ class PublishForm extends React.PureComponent { // Editing a claim if (!filePath && myClaimForUri) { const { source } = myClaimForUri.value.stream; - publishParams.source = source; + publishParams.sources = source; } publish(publishParams); diff --git a/src/renderer/redux/actions/publish.js b/src/renderer/redux/actions/publish.js index a66cfbe77..3bda0253c 100644 --- a/src/renderer/redux/actions/publish.js +++ b/src/renderer/redux/actions/publish.js @@ -84,7 +84,7 @@ export const doPublish = (params: PublishParams): ThunkAction => { contentIsFree, price, uri, - source, + sources, } = params; const channelName = channel === CHANNEL_ANONYMOUS || channel === CHANNEL_NEW ? '' : channel; @@ -117,7 +117,7 @@ export const doPublish = (params: PublishParams): ThunkAction => { if (filePath) { publishPayload.file_path = filePath; } else { - publishPayload.sources = source; + publishPayload.sources = sources; } return (dispatch: Dispatch) => {