WIP fixes and improvements

This commit is contained in:
Thomas Zarebczan 2019-11-01 13:27:01 -04:00 committed by Sean Yesmunt
parent 0ad4adceca
commit 8583501e33
20 changed files with 80 additions and 116 deletions

View file

@ -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()),

View file

@ -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

View file

@ -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>

View file

@ -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(

View file

@ -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);
} }

View file

@ -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()),
}); });

View file

@ -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}
/> />

View file

@ -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)),
}); });

View file

@ -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

View file

@ -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(

View file

@ -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>
); );

View file

@ -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(

View file

@ -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(() => {

View file

@ -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 />}

View file

@ -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>

View file

@ -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') + ' ' + '($#@;/"<>%{}|^~[]`)';

View file

@ -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>

View file

@ -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(

View file

@ -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() {

View file

@ -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: {