WIP fixes and improvements
This commit is contained in:
parent
0ad4adceca
commit
8583501e33
20 changed files with 80 additions and 116 deletions
|
@ -1,14 +1,7 @@
|
||||||
import * as SETTINGS from 'constants/settings';
|
import * as SETTINGS from 'constants/settings';
|
||||||
import { hot } from 'react-hot-loader/root';
|
import { hot } from 'react-hot-loader/root';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import {
|
import { selectUser, doRewardList, doFetchAccessToken, selectGetSyncErrorMessage, selectUploadCount } from 'lbryinc';
|
||||||
selectUser,
|
|
||||||
doRewardList,
|
|
||||||
doFetchRewardedContent,
|
|
||||||
doFetchAccessToken,
|
|
||||||
selectGetSyncErrorMessage,
|
|
||||||
selectUploadCount,
|
|
||||||
} from 'lbryinc';
|
|
||||||
import { doFetchTransactions, doFetchChannelListMine } from 'lbry-redux';
|
import { doFetchTransactions, doFetchChannelListMine } from 'lbry-redux';
|
||||||
import { makeSelectClientSetting, selectThemePath } from 'redux/selectors/settings';
|
import { makeSelectClientSetting, selectThemePath } from 'redux/selectors/settings';
|
||||||
import { selectIsUpgradeAvailable, selectAutoUpdateDownloaded } from 'redux/selectors/app';
|
import { selectIsUpgradeAvailable, selectAutoUpdateDownloaded } from 'redux/selectors/app';
|
||||||
|
@ -28,8 +21,7 @@ const select = state => ({
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
fetchRewards: () => dispatch(doRewardList()),
|
fetchRewards: () => dispatch(doRewardList()),
|
||||||
fetchRewardedContent: () => dispatch(doFetchRewardedContent()),
|
fetchTransactions: (page, pageSize) => dispatch(doFetchTransactions(page, pageSize)),
|
||||||
fetchTransactions: () => dispatch(doFetchTransactions()),
|
|
||||||
fetchAccessToken: () => dispatch(doFetchAccessToken()),
|
fetchAccessToken: () => dispatch(doFetchAccessToken()),
|
||||||
fetchChannelListMine: () => dispatch(doFetchChannelListMine()),
|
fetchChannelListMine: () => dispatch(doFetchChannelListMine()),
|
||||||
signIn: () => dispatch(doSignIn()),
|
signIn: () => dispatch(doSignIn()),
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
// @flow
|
// @flow
|
||||||
import * as ICONS from 'constants/icons';
|
import * as ICONS from 'constants/icons';
|
||||||
import * as PAGES from 'constants/pages';
|
import * as PAGES from 'constants/pages';
|
||||||
|
import { LATEST_PAGE_SIZE } from 'constants/claim';
|
||||||
import React, { useEffect, useRef, useState } from 'react';
|
import React, { useEffect, useRef, useState } from 'react';
|
||||||
import classnames from 'classnames';
|
import classnames from 'classnames';
|
||||||
import analytics from 'analytics';
|
import analytics from 'analytics';
|
||||||
|
@ -31,8 +32,7 @@ type Props = {
|
||||||
location: { pathname: string, hash: string },
|
location: { pathname: string, hash: string },
|
||||||
history: { push: string => void },
|
history: { push: string => void },
|
||||||
fetchRewards: () => void,
|
fetchRewards: () => void,
|
||||||
fetchRewardedContent: () => void,
|
fetchTransactions: (page, pageSize) => void,
|
||||||
fetchTransactions: () => void,
|
|
||||||
fetchAccessToken: () => void,
|
fetchAccessToken: () => void,
|
||||||
fetchChannelListMine: () => void,
|
fetchChannelListMine: () => void,
|
||||||
signIn: () => void,
|
signIn: () => void,
|
||||||
|
@ -53,7 +53,6 @@ function App(props: Props) {
|
||||||
const {
|
const {
|
||||||
theme,
|
theme,
|
||||||
fetchRewards,
|
fetchRewards,
|
||||||
fetchRewardedContent,
|
|
||||||
fetchTransactions,
|
fetchTransactions,
|
||||||
user,
|
user,
|
||||||
fetchAccessToken,
|
fetchAccessToken,
|
||||||
|
@ -100,14 +99,13 @@ function App(props: Props) {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
ReactModal.setAppElement(appRef.current);
|
ReactModal.setAppElement(appRef.current);
|
||||||
fetchAccessToken();
|
fetchAccessToken();
|
||||||
fetchRewardedContent();
|
|
||||||
|
|
||||||
// @if TARGET='app'
|
// @if TARGET='app'
|
||||||
fetchRewards();
|
fetchRewards();
|
||||||
fetchTransactions();
|
fetchTransactions(1, LATEST_PAGE_SIZE);
|
||||||
fetchChannelListMine(); // This needs to be done for web too...
|
fetchChannelListMine(); // This needs to be done for web too...
|
||||||
// @endif
|
// @endif
|
||||||
}, [fetchRewards, fetchRewardedContent, fetchTransactions, fetchAccessToken, fetchChannelListMine]);
|
}, [fetchRewards, fetchTransactions, fetchAccessToken, fetchChannelListMine]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// $FlowFixMe
|
// $FlowFixMe
|
||||||
|
|
|
@ -25,6 +25,9 @@ export default function FileProperties(props: Props) {
|
||||||
{isSubscribed && <Icon tooltip icon={icons.SUBSCRIBE} />}
|
{isSubscribed && <Icon tooltip icon={icons.SUBSCRIBE} />}
|
||||||
{!claimIsMine && downloaded && <Icon tooltip icon={icons.DOWNLOAD} />}
|
{!claimIsMine && downloaded && <Icon tooltip icon={icons.DOWNLOAD} />}
|
||||||
{isRewardContent && <Icon tooltip icon={icons.FEATURED} />}
|
{isRewardContent && <Icon tooltip icon={icons.FEATURED} />}
|
||||||
|
trending group:{claim.meta.trending_group}
|
||||||
|
trending mixed:{claim.meta.trending_mixed}
|
||||||
|
{claim.meta.support_amount}
|
||||||
<FilePrice hideFree uri={uri} />
|
<FilePrice hideFree uri={uri} />
|
||||||
<VideoDuration className="media__subtitle" uri={uri} />
|
<VideoDuration className="media__subtitle" uri={uri} />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,42 +1,13 @@
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import {
|
import { selectPublishFormValues, doUpdatePublishForm } from 'lbry-redux';
|
||||||
doResolveUri,
|
|
||||||
selectBalance,
|
|
||||||
selectPublishFormValues,
|
|
||||||
selectIsStillEditing,
|
|
||||||
selectMyClaimForUri,
|
|
||||||
selectIsResolvingPublishUris,
|
|
||||||
selectTakeOverAmount,
|
|
||||||
doResetThumbnailStatus,
|
|
||||||
doClearPublish,
|
|
||||||
doUpdatePublishForm,
|
|
||||||
doPrepareEdit,
|
|
||||||
} from 'lbry-redux';
|
|
||||||
import { doPublishDesktop } from 'redux/actions/publish';
|
|
||||||
import { selectUnclaimedRewardValue } from 'lbryinc';
|
|
||||||
import PublishPage from './view';
|
import PublishPage from './view';
|
||||||
|
|
||||||
const select = state => ({
|
const select = state => ({
|
||||||
...selectPublishFormValues(state),
|
...selectPublishFormValues(state),
|
||||||
// The winning claim for a short lbry uri
|
|
||||||
amountNeededForTakeover: selectTakeOverAmount(state),
|
|
||||||
// My previously published claims under this short lbry uri
|
|
||||||
myClaimForUri: selectMyClaimForUri(state),
|
|
||||||
// If I clicked the "edit" button, have I changed the uri?
|
|
||||||
// Need this to make it easier to find the source on previously published content
|
|
||||||
isStillEditing: selectIsStillEditing(state),
|
|
||||||
isResolvingUri: selectIsResolvingPublishUris(state),
|
|
||||||
totalRewardValue: selectUnclaimedRewardValue(state),
|
|
||||||
balance: selectBalance(state),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
updatePublishForm: value => dispatch(doUpdatePublishForm(value)),
|
updatePublishForm: value => dispatch(doUpdatePublishForm(value)),
|
||||||
clearPublish: () => dispatch(doClearPublish()),
|
|
||||||
resolveUri: uri => dispatch(doResolveUri(uri)),
|
|
||||||
publish: () => dispatch(doPublishDesktop()),
|
|
||||||
prepareEdit: (claim, uri) => dispatch(doPrepareEdit(claim, uri)),
|
|
||||||
resetThumbnailStatus: () => dispatch(doResetThumbnailStatus()),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connect(
|
export default connect(
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// @flow
|
// @flow
|
||||||
import * as ICONS from 'constants/icons';
|
import * as ICONS from 'constants/icons';
|
||||||
import React, { useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { regexInvalidURI } from 'lbry-redux';
|
import { regexInvalidURI } from 'lbry-redux';
|
||||||
import FileSelector from 'component/common/file-selector';
|
import FileSelector from 'component/common/file-selector';
|
||||||
import Button from 'component/button';
|
import Button from 'component/button';
|
||||||
|
@ -32,6 +32,12 @@ function PublishFile(props: Props) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (currentFile) {
|
||||||
|
updatePublishForm();
|
||||||
|
}
|
||||||
|
}, [currentFile]);
|
||||||
|
|
||||||
function handleFileChange(file: WebFile) {
|
function handleFileChange(file: WebFile) {
|
||||||
// if electron, we'll set filePath to the path string because SDK is handling publishing.
|
// if electron, we'll set filePath to the path string because SDK is handling publishing.
|
||||||
// if web, we set the filePath (dumb name) to the File() object
|
// if web, we set the filePath (dumb name) to the File() object
|
||||||
|
@ -52,10 +58,13 @@ function PublishFile(props: Props) {
|
||||||
// @endif
|
// @endif
|
||||||
const publishFormParams: { filePath: string | WebFile, name?: string } = {
|
const publishFormParams: { filePath: string | WebFile, name?: string } = {
|
||||||
filePath: file.path || file,
|
filePath: file.path || file,
|
||||||
name: file.name,
|
name: '',
|
||||||
};
|
};
|
||||||
const parsedFileName = file.name.replace(regexInvalidURI, '');
|
// Strip off extention and replace invalid characters
|
||||||
publishFormParams.name = parsedFileName.replace(' ', '-');
|
let fileName = file.name.substr(0, file.name.lastIndexOf('.')) || file.name;
|
||||||
|
let replaceChars = new RegExp(regexInvalidURI, 'gu');
|
||||||
|
let parsedFileName = fileName.replace(replaceChars, '-');
|
||||||
|
publishFormParams.name = parsedFileName;
|
||||||
updatePublishForm(publishFormParams);
|
updatePublishForm(publishFormParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ const perform = dispatch => ({
|
||||||
updatePublishForm: value => dispatch(doUpdatePublishForm(value)),
|
updatePublishForm: value => dispatch(doUpdatePublishForm(value)),
|
||||||
clearPublish: () => dispatch(doClearPublish()),
|
clearPublish: () => dispatch(doClearPublish()),
|
||||||
resolveUri: uri => dispatch(doResolveUri(uri)),
|
resolveUri: uri => dispatch(doResolveUri(uri)),
|
||||||
publish: () => dispatch(doPublishDesktop()),
|
publish: filePath => dispatch(doPublishDesktop(filePath)),
|
||||||
prepareEdit: (claim, uri) => dispatch(doPrepareEdit(claim, uri)),
|
prepareEdit: (claim, uri) => dispatch(doPrepareEdit(claim, uri)),
|
||||||
resetThumbnailStatus: () => dispatch(doResetThumbnailStatus()),
|
resetThumbnailStatus: () => dispatch(doResetThumbnailStatus()),
|
||||||
});
|
});
|
||||||
|
|
|
@ -26,7 +26,7 @@ import Card from 'component/common/card';
|
||||||
type Props = {
|
type Props = {
|
||||||
disabled: boolean,
|
disabled: boolean,
|
||||||
tags: Array<Tag>,
|
tags: Array<Tag>,
|
||||||
publish: PublishParams => void,
|
publish: string => void,
|
||||||
filePath: ?string,
|
filePath: ?string,
|
||||||
bid: ?number,
|
bid: ?number,
|
||||||
editingURI: ?string,
|
editingURI: ?string,
|
||||||
|
@ -112,7 +112,7 @@ function PublishForm(props: Props) {
|
||||||
// We are only going to store the full uri, but we need to resolve the uri with and without the channel name
|
// We are only going to store the full uri, but we need to resolve the uri with and without the channel name
|
||||||
let uri;
|
let uri;
|
||||||
try {
|
try {
|
||||||
uri = buildURI({ streamName: name, channelName });
|
uri = name && buildURI({ streamName: name, channelName });
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
|
||||||
if (channelName && name) {
|
if (channelName && name) {
|
||||||
|
@ -182,7 +182,7 @@ function PublishForm(props: Props) {
|
||||||
<div className="card__actions">
|
<div className="card__actions">
|
||||||
<Button
|
<Button
|
||||||
button="primary"
|
button="primary"
|
||||||
onClick={publish}
|
onClick={() => publish(filePath)}
|
||||||
label={submitLabel}
|
label={submitLabel}
|
||||||
disabled={formDisabled || !formValid || uploadThumbnailStatus === THUMBNAIL_STATUSES.IN_PROGRESS}
|
disabled={formDisabled || !formValid || uploadThumbnailStatus === THUMBNAIL_STATUSES.IN_PROGRESS}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -1,43 +1,23 @@
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import {
|
import {
|
||||||
doResolveUri,
|
|
||||||
selectPublishFormValues,
|
selectPublishFormValues,
|
||||||
selectIsStillEditing,
|
|
||||||
selectMyClaimForUri,
|
selectMyClaimForUri,
|
||||||
selectIsResolvingPublishUris,
|
doUpdatePublishForm,
|
||||||
selectTakeOverAmount,
|
|
||||||
selectFileInfosByOutpoint,
|
selectFileInfosByOutpoint,
|
||||||
doResetThumbnailStatus,
|
doResetThumbnailStatus,
|
||||||
doClearPublish,
|
|
||||||
doUpdatePublishForm,
|
|
||||||
doPrepareEdit,
|
|
||||||
} from 'lbry-redux';
|
} from 'lbry-redux';
|
||||||
|
|
||||||
import { doOpenModal } from 'redux/actions/app';
|
import { doOpenModal } from 'redux/actions/app';
|
||||||
import { doPublishDesktop } from 'redux/actions/publish';
|
|
||||||
import { selectUnclaimedRewardValue } from 'lbryinc';
|
|
||||||
import PublishPage from './view';
|
import PublishPage from './view';
|
||||||
|
|
||||||
const select = state => ({
|
const select = state => ({
|
||||||
...selectPublishFormValues(state),
|
...selectPublishFormValues(state),
|
||||||
fileInfos: selectFileInfosByOutpoint(state),
|
fileInfos: selectFileInfosByOutpoint(state),
|
||||||
// The winning claim for a short lbry uri
|
|
||||||
amountNeededForTakeover: selectTakeOverAmount(state),
|
|
||||||
// My previously published claims under this short lbry uri
|
|
||||||
myClaimForUri: selectMyClaimForUri(state),
|
myClaimForUri: selectMyClaimForUri(state),
|
||||||
// If I clicked the "edit" button, have I changed the uri?
|
|
||||||
// Need this to make it easier to find the source on previously published content
|
|
||||||
isStillEditing: selectIsStillEditing(state),
|
|
||||||
isResolvingUri: selectIsResolvingPublishUris(state),
|
|
||||||
totalRewardValue: selectUnclaimedRewardValue(state),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
updatePublishForm: value => dispatch(doUpdatePublishForm(value)),
|
updatePublishForm: value => dispatch(doUpdatePublishForm(value)),
|
||||||
clearPublish: () => dispatch(doClearPublish()),
|
|
||||||
resolveUri: uri => dispatch(doResolveUri(uri)),
|
|
||||||
publish: () => dispatch(doPublishDesktop()),
|
|
||||||
prepareEdit: (claim, uri) => dispatch(doPrepareEdit(claim, uri)),
|
|
||||||
resetThumbnailStatus: () => dispatch(doResetThumbnailStatus()),
|
resetThumbnailStatus: () => dispatch(doResetThumbnailStatus()),
|
||||||
openModal: (modal, props) => dispatch(doOpenModal(modal, props)),
|
openModal: (modal, props) => dispatch(doOpenModal(modal, props)),
|
||||||
});
|
});
|
||||||
|
|
|
@ -45,7 +45,7 @@ function TransactionList(props: Props) {
|
||||||
<h2 className="card__title--between">
|
<h2 className="card__title--between">
|
||||||
{title}
|
{title}
|
||||||
<div className="card__actions--inline">
|
<div className="card__actions--inline">
|
||||||
<RefreshTransactionButton />
|
<RefreshTransactionButton slim={slim} />
|
||||||
{/* @if TARGET='app' */}
|
{/* @if TARGET='app' */}
|
||||||
{!slim && (
|
{!slim && (
|
||||||
<FileExporter
|
<FileExporter
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { doFetchTransactions, selectRecentTransactions, doFetchClaimListMine } from 'lbry-redux';
|
import { doFetchTransactions, makeSelectLatestTransactions } from 'lbry-redux';
|
||||||
import TransactionListRecent from './view';
|
import TransactionListRecent from './view';
|
||||||
|
|
||||||
const select = state => ({
|
const select = state => {
|
||||||
transactions: selectRecentTransactions(state),
|
return {
|
||||||
});
|
transactions: makeSelectLatestTransactions(state),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
fetchTransactions: () => dispatch(doFetchTransactions()),
|
fetchTransactions: (page, pageSize) => dispatch(doFetchTransactions(page, pageSize)),
|
||||||
fetchMyClaims: () => dispatch(doFetchClaimListMine()),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connect(
|
export default connect(
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
// @flow
|
// @flow
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import TransactionList from 'component/transactionList';
|
import TransactionList from 'component/transactionList';
|
||||||
|
import { LATEST_PAGE_SIZE } from 'constants/claim';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
fetchTransactions: () => void,
|
fetchTransactions: (page, pageSize) => void,
|
||||||
fetchingTransactions: boolean,
|
fetchingTransactions: boolean,
|
||||||
hasTransactions: boolean,
|
hasTransactions: boolean,
|
||||||
transactions: Array<Transaction>,
|
transactions: Array<Transaction>,
|
||||||
fetchMyClaims: () => void,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class TransactionListRecent extends React.PureComponent<Props> {
|
class TransactionListRecent extends React.PureComponent<Props> {
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const { fetchMyClaims, fetchTransactions } = this.props;
|
const { fetchTransactions } = this.props;
|
||||||
|
|
||||||
fetchMyClaims();
|
fetchTransactions(1, LATEST_PAGE_SIZE);
|
||||||
fetchTransactions();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
@ -24,9 +23,9 @@ class TransactionListRecent extends React.PureComponent<Props> {
|
||||||
<section className="card">
|
<section className="card">
|
||||||
<TransactionList
|
<TransactionList
|
||||||
slim
|
slim
|
||||||
title={__('Recent Transactions')}
|
title={__('Latest Transactions')}
|
||||||
transactions={transactions}
|
transactions={transactions}
|
||||||
emptyMessage={__("Looks like you don't have any recent transactions.")}
|
emptyMessage={__("Looks like you don't have any transactions.")}
|
||||||
/>
|
/>
|
||||||
</section>
|
</section>
|
||||||
);
|
);
|
||||||
|
|
|
@ -7,7 +7,7 @@ const select = state => ({
|
||||||
});
|
});
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
fetchTransactions: () => dispatch(doFetchTransactions()),
|
fetchTransactions: (page, pageSize) => dispatch(doFetchTransactions(page, pageSize)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connect(
|
export default connect(
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
// @flow
|
// @flow
|
||||||
import React, { PureComponent } from 'react';
|
import React, { PureComponent } from 'react';
|
||||||
import Button from 'component/button';
|
import Button from 'component/button';
|
||||||
|
import { LATEST_PAGE_SIZE } from 'constants/claim';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
fetchTransactions: () => void,
|
fetchTransactions: () => void,
|
||||||
fetchingTransactions: boolean,
|
fetchingTransactions: boolean,
|
||||||
|
slim: boolean,
|
||||||
};
|
};
|
||||||
|
|
||||||
type State = {
|
type State = {
|
||||||
|
@ -22,11 +24,16 @@ class TransactionRefreshButton extends PureComponent<Props, State> {
|
||||||
}
|
}
|
||||||
|
|
||||||
handleClick() {
|
handleClick() {
|
||||||
const { fetchTransactions } = this.props;
|
const { fetchTransactions, slim } = this.props;
|
||||||
|
|
||||||
// The fetchTransactions call will be super fast most of the time.
|
// The fetchTransactions call will be super fast most of the time.
|
||||||
// Instead of showing a loading spinner for 100ms, change the label and show as "Refreshed!"
|
// Instead of showing a loading spinner for 100ms, change the label and show as "Refreshed!"
|
||||||
fetchTransactions();
|
if (slim) {
|
||||||
|
fetchTransactions(1, LATEST_PAGE_SIZE);
|
||||||
|
} else {
|
||||||
|
fetchTransactions(1, 999999);
|
||||||
|
}
|
||||||
|
|
||||||
this.setState({ label: __('Refreshed!'), disabled: true });
|
this.setState({ label: __('Refreshed!'), disabled: true });
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|
|
@ -73,7 +73,8 @@ class WalletAddress extends React.PureComponent<Props, State> {
|
||||||
<Button button="link" label={showQR ? __('Hide QR code') : __('Show QR code')} onClick={this.toggleQR} />
|
<Button button="link" label={showQR ? __('Hide QR code') : __('Show QR code')} onClick={this.toggleQR} />
|
||||||
</div>
|
</div>
|
||||||
<p className="help">
|
<p className="help">
|
||||||
{__('You can generate a new address at any time, and any previous addresses will continue to work.')}
|
{!IS_WEB &&
|
||||||
|
__('You can generate a new address at any time, and any previous addresses will continue to work.')}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{showQR && <QRCode value={receiveAddress} paddingTop />}
|
{showQR && <QRCode value={receiveAddress} paddingTop />}
|
||||||
|
|
|
@ -102,7 +102,7 @@ class WalletBackup extends React.PureComponent<Props, State> {
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
{__(
|
{__(
|
||||||
'Currently, there is no automatic backup. If you lose access to these files, you will lose your credits.'
|
'If Sync is on, LBRY will backup your wallet and preferences. If disabled, you are responsible for keeping a backup.'
|
||||||
)}
|
)}
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
|
|
@ -3,6 +3,7 @@ export const MINIMUM_PUBLISH_BID = 0.00000001;
|
||||||
export const CHANNEL_ANONYMOUS = 'anonymous';
|
export const CHANNEL_ANONYMOUS = 'anonymous';
|
||||||
export const CHANNEL_NEW = 'new';
|
export const CHANNEL_NEW = 'new';
|
||||||
export const PAGE_SIZE = 20;
|
export const PAGE_SIZE = 20;
|
||||||
|
export const LATEST_PAGE_SIZE = 20;
|
||||||
|
|
||||||
export const INVALID_NAME_ERROR =
|
export const INVALID_NAME_ERROR =
|
||||||
__('LBRY names cannot contain spaces or reserved symbols') + ' ' + '($#@;/"<>%{}|^~[]`)';
|
__('LBRY names cannot contain spaces or reserved symbols') + ' ' + '($#@;/"<>%{}|^~[]`)';
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Modal } from 'modal/modal';
|
import { Modal } from 'modal/modal';
|
||||||
import ClaimPreview from 'component/claimPreview';
|
import ClaimPreview from 'component/claimPreview';
|
||||||
|
import Button from 'component/button';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
closeModal: () => void,
|
closeModal: () => void,
|
||||||
|
@ -9,14 +10,14 @@ type Props = {
|
||||||
navigate: string => void,
|
navigate: string => void,
|
||||||
uri: string,
|
uri: string,
|
||||||
isEdit: boolean,
|
isEdit: boolean,
|
||||||
|
filePath: ?string,
|
||||||
};
|
};
|
||||||
|
|
||||||
class ModalPublishSuccess extends React.PureComponent<Props> {
|
class ModalPublishSuccess extends React.PureComponent<Props> {
|
||||||
render() {
|
render() {
|
||||||
const { closeModal, clearPublish, navigate, uri, isEdit } = this.props;
|
const { closeModal, clearPublish, navigate, uri, isEdit, filePath } = this.props;
|
||||||
const contentLabel = isEdit ? 'Updates published' : 'File published';
|
const contentLabel = isEdit ? 'Update published' : 'File published';
|
||||||
const publishMessage = isEdit ? 'updates have been' : 'file has been';
|
const publishMessage = isEdit ? 'update is now' : 'file is now';
|
||||||
const publishType = isEdit ? 'updates' : 'file';
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
|
@ -35,13 +36,22 @@ class ModalPublishSuccess extends React.PureComponent<Props> {
|
||||||
closeModal();
|
closeModal();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<p className="card__subtitle">{__(`Your %publishMessage% published to LBRY.`, { publishMessage })}</p>
|
<p className="card__subtitle">
|
||||||
|
{__(`Your %publishMessage% pending on LBRY. It will take a few minutes to appear for other users.`, {
|
||||||
|
publishMessage,
|
||||||
|
})}
|
||||||
|
</p>
|
||||||
<div className="card--inline">
|
<div className="card--inline">
|
||||||
<ClaimPreview uri={uri} />
|
<ClaimPreview uri={uri} />
|
||||||
</div>
|
</div>
|
||||||
<p className="help">
|
<p className="help">
|
||||||
{__(
|
{filePath && !IS_WEB && (
|
||||||
`The ${publishType} will take a few minutes to appear for other LBRY users. Until then it will be listed as "pending" under your published files.`
|
<React.Fragment>
|
||||||
|
{__(
|
||||||
|
`Upload will continue in the background, please do not shut down immediately. Leaving the app running helps the network, thank you!`
|
||||||
|
)}{' '}
|
||||||
|
<Button button="link" href="https://lbry.com/faq/host-content" label={__('Learn More')} />
|
||||||
|
</React.Fragment>
|
||||||
)}
|
)}
|
||||||
</p>
|
</p>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
|
@ -1,10 +1,5 @@
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import {
|
import { doFetchTransactions, makeSelectFilteredTransactionsForPage, selectFilteredTransactionCount } from 'lbry-redux';
|
||||||
doFetchTransactions,
|
|
||||||
doFetchClaimListMine,
|
|
||||||
makeSelectFilteredTransactionsForPage,
|
|
||||||
selectFilteredTransactionCount,
|
|
||||||
} from 'lbry-redux';
|
|
||||||
import { withRouter } from 'react-router';
|
import { withRouter } from 'react-router';
|
||||||
|
|
||||||
import TransactionHistoryPage from './view';
|
import TransactionHistoryPage from './view';
|
||||||
|
@ -21,8 +16,7 @@ const select = (state, props) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
fetchTransactions: () => dispatch(doFetchTransactions()),
|
fetchTransactions: (page, pageSize) => dispatch(doFetchTransactions(page, pageSize)),
|
||||||
fetchMyClaims: () => dispatch(doFetchClaimListMine()),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
export default withRouter(
|
export default withRouter(
|
||||||
|
|
|
@ -4,8 +4,7 @@ import TransactionList from 'component/transactionList';
|
||||||
import Page from 'component/page';
|
import Page from 'component/page';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
fetchMyClaims: () => void,
|
fetchTransactions: (page, pageSize) => void,
|
||||||
fetchTransactions: () => void,
|
|
||||||
fetchingTransactions: boolean,
|
fetchingTransactions: boolean,
|
||||||
filteredTransactionPage: Array<{}>,
|
filteredTransactionPage: Array<{}>,
|
||||||
filteredTransactionsCount: number,
|
filteredTransactionsCount: number,
|
||||||
|
@ -13,10 +12,9 @@ type Props = {
|
||||||
|
|
||||||
class TransactionHistoryPage extends React.PureComponent<Props> {
|
class TransactionHistoryPage extends React.PureComponent<Props> {
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const { fetchMyClaims, fetchTransactions } = this.props;
|
const { fetchTransactions } = this.props;
|
||||||
|
|
||||||
fetchMyClaims();
|
fetchTransactions(1, 999999);
|
||||||
fetchTransactions();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|
|
@ -9,7 +9,7 @@ import analytics from 'analytics';
|
||||||
import { formatLbryUriForWeb } from 'util/uri';
|
import { formatLbryUriForWeb } from 'util/uri';
|
||||||
import { doOpenModal } from './app';
|
import { doOpenModal } from './app';
|
||||||
|
|
||||||
export const doPublishDesktop = () => (dispatch: Dispatch, getState: () => {}) => {
|
export const doPublishDesktop = (filePath: string) => (dispatch: Dispatch, getState: () => {}) => {
|
||||||
const publishSuccess = successResponse => {
|
const publishSuccess = successResponse => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const myClaims = selectMyClaims(state);
|
const myClaims = selectMyClaims(state);
|
||||||
|
@ -30,7 +30,7 @@ export const doPublishDesktop = () => (dispatch: Dispatch, getState: () => {}) =
|
||||||
const myNewClaims = isEdit
|
const myNewClaims = isEdit
|
||||||
? myClaims.map(claim => (isMatch(claim) ? pendingClaim : claim))
|
? myClaims.map(claim => (isMatch(claim) ? pendingClaim : claim))
|
||||||
: myClaims.concat(pendingClaim);
|
: myClaims.concat(pendingClaim);
|
||||||
actions.push(doOpenModal(MODALS.PUBLISH, { uri: url, isEdit }));
|
actions.push(doOpenModal(MODALS.PUBLISH, { uri: url, isEdit, filePath }));
|
||||||
actions.push({
|
actions.push({
|
||||||
type: ACTIONS.FETCH_CLAIM_LIST_MINE_COMPLETED,
|
type: ACTIONS.FETCH_CLAIM_LIST_MINE_COMPLETED,
|
||||||
data: {
|
data: {
|
||||||
|
|
Loading…
Reference in a new issue