2020-04-10 19:31:36 +02:00
|
|
|
// @flow
|
2020-06-02 18:32:58 +02:00
|
|
|
import * as ICONS from 'constants/icons';
|
2020-04-10 19:31:36 +02:00
|
|
|
import React, { useEffect } from 'react';
|
|
|
|
import { withRouter } from 'react-router';
|
|
|
|
import { TXO_LIST as TXO } from 'lbry-redux';
|
|
|
|
import TransactionListTable from 'component/transactionListTable';
|
|
|
|
import Paginate from 'component/common/paginate';
|
|
|
|
import { FormField } from 'component/common/form-components/form-field';
|
|
|
|
import Button from 'component/button';
|
|
|
|
import Card from 'component/common/card';
|
|
|
|
import { toCapitalCase } from 'util/string';
|
|
|
|
import classnames from 'classnames';
|
2020-04-21 16:18:54 +02:00
|
|
|
import HelpLink from 'component/common/help-link';
|
2021-04-23 18:10:37 +02:00
|
|
|
import FileExporter from 'component/common/file-exporter';
|
2020-04-10 19:31:36 +02:00
|
|
|
|
|
|
|
type Props = {
|
|
|
|
search: string,
|
2021-04-23 18:10:37 +02:00
|
|
|
history: { action: string, push: (string) => void, replace: (string) => void },
|
2020-04-10 19:31:36 +02:00
|
|
|
txoPage: Array<Transaction>,
|
|
|
|
txoPageNumber: string,
|
|
|
|
txoItemCount: number,
|
|
|
|
fetchTxoPage: () => void,
|
2021-04-23 18:10:37 +02:00
|
|
|
fetchTransactions: () => void,
|
|
|
|
isFetchingTransactions: boolean,
|
|
|
|
transactionsFile: string,
|
|
|
|
updateTxoPageParams: (any) => void,
|
|
|
|
toast: (string, boolean) => void,
|
2020-04-10 19:31:36 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
type Delta = {
|
|
|
|
dkey: string,
|
|
|
|
value: string,
|
2021-08-18 21:06:04 +02:00
|
|
|
tab: string
|
2020-04-10 19:31:36 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
function TxoList(props: Props) {
|
2021-04-23 18:10:37 +02:00
|
|
|
const {
|
|
|
|
search,
|
|
|
|
txoPage,
|
|
|
|
txoItemCount,
|
|
|
|
fetchTxoPage,
|
|
|
|
fetchTransactions,
|
|
|
|
updateTxoPageParams,
|
|
|
|
history,
|
|
|
|
isFetchingTransactions,
|
|
|
|
transactionsFile,
|
|
|
|
} = props;
|
2020-04-10 19:31:36 +02:00
|
|
|
|
|
|
|
const urlParams = new URLSearchParams(search);
|
|
|
|
const page = urlParams.get(TXO.PAGE) || String(1);
|
|
|
|
const pageSize = urlParams.get(TXO.PAGE_SIZE) || String(TXO.PAGE_SIZE_DEFAULT);
|
2020-04-15 20:09:22 +02:00
|
|
|
const type = urlParams.get(TXO.TYPE) || TXO.ALL;
|
2020-04-10 19:31:36 +02:00
|
|
|
const subtype = urlParams.get(TXO.SUB_TYPE);
|
2020-04-15 20:09:22 +02:00
|
|
|
const active = urlParams.get(TXO.ACTIVE) || TXO.ALL;
|
2021-08-18 21:06:04 +02:00
|
|
|
const currency = urlParams.get('currency') || 'credits';
|
2020-04-10 19:31:36 +02:00
|
|
|
|
|
|
|
const currentUrlParams = {
|
|
|
|
page,
|
|
|
|
pageSize,
|
|
|
|
active,
|
|
|
|
type,
|
|
|
|
subtype,
|
2021-08-19 13:29:10 +02:00
|
|
|
currency,
|
2020-04-10 19:31:36 +02:00
|
|
|
};
|
|
|
|
|
2020-04-16 22:25:15 +02:00
|
|
|
const hideStatus =
|
2020-04-17 18:06:49 +02:00
|
|
|
type === TXO.SENT || (currentUrlParams.type === TXO.RECEIVED && currentUrlParams.subtype !== TXO.TIP);
|
2020-04-16 22:25:15 +02:00
|
|
|
|
2020-04-10 19:31:36 +02:00
|
|
|
const params = {};
|
|
|
|
if (currentUrlParams.type) {
|
2020-04-15 20:09:22 +02:00
|
|
|
if (currentUrlParams.type === TXO.ALL) {
|
|
|
|
params[TXO.EXCLUDE_INTERNAL_TRANSFERS] = true;
|
2020-04-17 03:47:19 +02:00
|
|
|
params[TXO.IS_MY_INPUT_OR_OUTPUT] = true;
|
2020-04-15 20:09:22 +02:00
|
|
|
} else if (currentUrlParams.type === TXO.SENT) {
|
2020-04-10 19:31:36 +02:00
|
|
|
params[TXO.IS_MY_INPUT] = true;
|
|
|
|
params[TXO.IS_NOT_MY_OUTPUT] = true;
|
|
|
|
if (currentUrlParams.subtype === TXO.TIP) {
|
|
|
|
params[TXO.TX_TYPE] = TXO.SUPPORT;
|
|
|
|
} else if (currentUrlParams.subtype === TXO.PURCHASE) {
|
|
|
|
params[TXO.TX_TYPE] = TXO.PURCHASE;
|
2020-04-16 22:25:15 +02:00
|
|
|
} else if (currentUrlParams.subtype === TXO.PAYMENT) {
|
2020-04-10 19:31:36 +02:00
|
|
|
params[TXO.TX_TYPE] = TXO.OTHER;
|
|
|
|
} else {
|
|
|
|
params[TXO.TX_TYPE] = [TXO.OTHER, TXO.PURCHASE, TXO.SUPPORT];
|
|
|
|
}
|
|
|
|
} else if (currentUrlParams.type === TXO.RECEIVED) {
|
|
|
|
params[TXO.IS_MY_OUTPUT] = true;
|
|
|
|
params[TXO.IS_NOT_MY_INPUT] = true;
|
|
|
|
if (currentUrlParams.subtype === TXO.TIP) {
|
|
|
|
params[TXO.TX_TYPE] = TXO.SUPPORT;
|
|
|
|
} else if (currentUrlParams.subtype === TXO.PURCHASE) {
|
|
|
|
params[TXO.TX_TYPE] = TXO.PURCHASE;
|
2020-04-15 20:09:22 +02:00
|
|
|
} else if (currentUrlParams.subtype === TXO.PAYMENT) {
|
2020-04-10 19:31:36 +02:00
|
|
|
params[TXO.TX_TYPE] = TXO.OTHER;
|
2020-04-15 20:09:22 +02:00
|
|
|
params[TXO.EXCLUDE_INTERNAL_TRANSFERS] = true;
|
2020-04-10 19:31:36 +02:00
|
|
|
} else {
|
|
|
|
params[TXO.TX_TYPE] = [TXO.OTHER, TXO.PURCHASE, TXO.SUPPORT];
|
|
|
|
}
|
|
|
|
} else if (currentUrlParams.type === TXO.SUPPORT) {
|
|
|
|
params[TXO.TX_TYPE] = TXO.SUPPORT;
|
|
|
|
params[TXO.IS_MY_INPUT] = true;
|
|
|
|
params[TXO.IS_MY_OUTPUT] = true;
|
|
|
|
} else if (currentUrlParams.type === TXO.CHANNEL || currentUrlParams.type === TXO.REPOST) {
|
|
|
|
params[TXO.TX_TYPE] = currentUrlParams.type;
|
|
|
|
} else if (currentUrlParams.type === TXO.PUBLISH) {
|
|
|
|
params[TXO.TX_TYPE] = TXO.STREAM;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (currentUrlParams.active) {
|
|
|
|
if (currentUrlParams.active === 'spent') {
|
|
|
|
params[TXO.IS_SPENT] = true;
|
|
|
|
} else if (currentUrlParams.active === 'active') {
|
|
|
|
params[TXO.IS_NOT_SPENT] = true;
|
|
|
|
}
|
|
|
|
}
|
2020-04-16 22:25:15 +02:00
|
|
|
|
2020-04-10 19:31:36 +02:00
|
|
|
if (currentUrlParams.page) params[TXO.PAGE] = Number(page);
|
|
|
|
if (currentUrlParams.pageSize) params[TXO.PAGE_SIZE] = Number(pageSize);
|
|
|
|
|
|
|
|
function handleChange(delta: Delta) {
|
|
|
|
const url = updateUrl(delta);
|
|
|
|
history.push(url);
|
|
|
|
}
|
|
|
|
|
2021-08-18 21:06:04 +02:00
|
|
|
// let currency = 'credits';
|
2020-04-10 19:31:36 +02:00
|
|
|
function updateUrl(delta: Delta) {
|
|
|
|
const newUrlParams = new URLSearchParams();
|
2021-08-18 21:06:04 +02:00
|
|
|
|
|
|
|
// set tab name to account for wallet page tab
|
|
|
|
newUrlParams.set('tab', delta.tab);
|
2021-08-19 13:29:10 +02:00
|
|
|
|
|
|
|
// only update currency if it's being changed
|
|
|
|
if (delta.currency) {
|
|
|
|
newUrlParams.set('currency', delta.currency);
|
|
|
|
}
|
2021-08-18 21:06:04 +02:00
|
|
|
|
2020-04-10 19:31:36 +02:00
|
|
|
switch (delta.dkey) {
|
|
|
|
case TXO.PAGE:
|
|
|
|
if (currentUrlParams.type) {
|
|
|
|
newUrlParams.set(TXO.TYPE, currentUrlParams.type);
|
|
|
|
}
|
|
|
|
if (currentUrlParams.subtype) {
|
|
|
|
newUrlParams.set(TXO.SUB_TYPE, currentUrlParams.subtype);
|
|
|
|
}
|
|
|
|
if (currentUrlParams.active) {
|
|
|
|
newUrlParams.set(TXO.ACTIVE, currentUrlParams.active);
|
|
|
|
}
|
|
|
|
newUrlParams.set(TXO.PAGE, delta.value);
|
|
|
|
break;
|
|
|
|
case TXO.TYPE:
|
|
|
|
newUrlParams.set(TXO.TYPE, delta.value);
|
|
|
|
if (delta.value === TXO.SENT || delta.value === TXO.RECEIVED) {
|
2020-04-16 22:25:15 +02:00
|
|
|
newUrlParams.set(TXO.ACTIVE, 'all');
|
2020-04-10 19:31:36 +02:00
|
|
|
if (currentUrlParams.subtype) {
|
|
|
|
newUrlParams.set(TXO.SUB_TYPE, currentUrlParams.subtype);
|
|
|
|
} else {
|
|
|
|
newUrlParams.set(TXO.SUB_TYPE, 'all');
|
|
|
|
}
|
|
|
|
}
|
2020-04-17 17:20:48 +02:00
|
|
|
if (currentUrlParams.active && !hideStatus) {
|
2020-04-10 19:31:36 +02:00
|
|
|
newUrlParams.set(TXO.ACTIVE, currentUrlParams.active);
|
2020-04-17 03:47:10 +02:00
|
|
|
} else {
|
|
|
|
newUrlParams.set(TXO.ACTIVE, 'all');
|
2020-04-10 19:31:36 +02:00
|
|
|
}
|
|
|
|
newUrlParams.set(TXO.PAGE, String(1));
|
|
|
|
newUrlParams.set(TXO.PAGE_SIZE, currentUrlParams.pageSize);
|
|
|
|
break;
|
|
|
|
case TXO.SUB_TYPE:
|
|
|
|
if (currentUrlParams.type) {
|
|
|
|
newUrlParams.set(TXO.TYPE, currentUrlParams.type);
|
|
|
|
}
|
2020-04-17 03:47:10 +02:00
|
|
|
newUrlParams.set(TXO.ACTIVE, 'all');
|
2020-04-10 19:31:36 +02:00
|
|
|
newUrlParams.set(TXO.SUB_TYPE, delta.value);
|
|
|
|
newUrlParams.set(TXO.PAGE, String(1));
|
|
|
|
newUrlParams.set(TXO.PAGE_SIZE, currentUrlParams.pageSize);
|
|
|
|
break;
|
|
|
|
case TXO.ACTIVE:
|
|
|
|
if (currentUrlParams.type) {
|
|
|
|
newUrlParams.set(TXO.TYPE, currentUrlParams.type);
|
|
|
|
}
|
|
|
|
if (currentUrlParams.subtype) {
|
|
|
|
newUrlParams.set(TXO.SUB_TYPE, currentUrlParams.subtype);
|
|
|
|
}
|
|
|
|
newUrlParams.set(TXO.ACTIVE, delta.value);
|
|
|
|
newUrlParams.set(TXO.PAGE, String(1));
|
|
|
|
newUrlParams.set(TXO.PAGE_SIZE, currentUrlParams.pageSize);
|
|
|
|
break;
|
|
|
|
}
|
2020-04-17 17:20:48 +02:00
|
|
|
|
2020-04-10 19:31:36 +02:00
|
|
|
return `?${newUrlParams.toString()}`;
|
|
|
|
}
|
|
|
|
|
|
|
|
const paramsString = JSON.stringify(params);
|
|
|
|
|
2021-08-18 21:06:04 +02:00
|
|
|
// tab used in the wallet section
|
|
|
|
// TODO: change the name of this eventually
|
|
|
|
const tab = 'fiat-payment-history';
|
|
|
|
|
2020-04-10 19:31:36 +02:00
|
|
|
useEffect(() => {
|
|
|
|
if (paramsString && updateTxoPageParams) {
|
|
|
|
const params = JSON.parse(paramsString);
|
|
|
|
updateTxoPageParams(params);
|
|
|
|
}
|
|
|
|
}, [paramsString, updateTxoPageParams]);
|
|
|
|
|
|
|
|
return (
|
|
|
|
<Card
|
2021-08-18 20:06:12 +02:00
|
|
|
title={
|
|
|
|
<><div className="table__header-text" style={{width: '124px', display: 'inline-block'}}>{__(`Transactions`)}</div>
|
|
|
|
<div style={{display: 'inline-block'}}>
|
|
|
|
<fieldset-section>
|
|
|
|
<div className={'txo__radios'}>
|
|
|
|
<Button
|
|
|
|
button="alt"
|
2021-08-18 21:06:04 +02:00
|
|
|
onClick={(e) => handleChange({ currency: 'credits', tab })}
|
2021-08-18 20:06:12 +02:00
|
|
|
className={classnames(`button-toggle`, {
|
2021-08-18 21:06:04 +02:00
|
|
|
'button-toggle--active': currency === 'credits',
|
2021-08-18 20:06:12 +02:00
|
|
|
})}
|
2021-08-18 21:06:04 +02:00
|
|
|
label={__('Credits')}
|
2021-08-18 20:06:12 +02:00
|
|
|
/>
|
|
|
|
<Button
|
|
|
|
button="alt"
|
2021-08-18 21:06:04 +02:00
|
|
|
onClick={(e) => handleChange({ currency: 'fiat', tab })}
|
2021-08-18 20:06:12 +02:00
|
|
|
className={classnames(`button-toggle`, {
|
2021-08-18 21:06:04 +02:00
|
|
|
'button-toggle--active': currency === 'fiat',
|
2021-08-18 20:06:12 +02:00
|
|
|
})}
|
|
|
|
label={__('USD')}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</fieldset-section>
|
2021-04-23 18:10:37 +02:00
|
|
|
</div>
|
2021-08-18 20:06:12 +02:00
|
|
|
</>
|
|
|
|
|
|
|
|
}
|
|
|
|
titleActions={ <></>
|
|
|
|
// <div className="card__actions--inline">
|
|
|
|
// {!isFetchingTransactions && transactionsFile === null && (
|
|
|
|
// <label>{<span className="error__text">{__('Failed to process fetched data.')}</span>}</label>
|
|
|
|
// )}
|
|
|
|
// <div className="txo__export">
|
|
|
|
// <FileExporter
|
|
|
|
// data={transactionsFile}
|
|
|
|
// label={__('Export')}
|
|
|
|
// tooltip={__('Fetch transaction data for export')}
|
|
|
|
// defaultFileName={'transactions-history.csv'}
|
|
|
|
// onFetch={() => fetchTransactions()}
|
|
|
|
// progressMsg={isFetchingTransactions ? __('Fetching data') : ''}
|
|
|
|
// />
|
|
|
|
// </div>
|
|
|
|
// <Button button="alt" icon={ICONS.REFRESH} label={__('Refresh')} onClick={() => fetchTxoPage()} />
|
|
|
|
// </div>
|
2020-04-10 19:31:36 +02:00
|
|
|
}
|
2020-04-29 21:31:11 +02:00
|
|
|
isBodyList
|
2021-08-19 13:57:46 +02:00
|
|
|
body={ currency === 'credits' ?
|
2020-04-10 19:31:36 +02:00
|
|
|
<div>
|
|
|
|
<div className="card__body-actions">
|
|
|
|
<div className="card__actions">
|
|
|
|
<div>
|
|
|
|
<FormField
|
|
|
|
type="select"
|
|
|
|
name="type"
|
2020-04-21 16:18:54 +02:00
|
|
|
label={
|
|
|
|
<>
|
|
|
|
{__('Type')}
|
|
|
|
<HelpLink href="https://lbry.com/faq/transaction-types" />
|
|
|
|
</>
|
|
|
|
}
|
2020-04-10 19:31:36 +02:00
|
|
|
value={type || 'all'}
|
2021-08-18 21:06:04 +02:00
|
|
|
onChange={(e) => handleChange({ dkey: TXO.TYPE, value: e.target.value, tab })}
|
2020-04-10 19:31:36 +02:00
|
|
|
>
|
2021-04-23 18:10:37 +02:00
|
|
|
{Object.values(TXO.DROPDOWN_TYPES).map((v) => {
|
2020-04-10 19:31:36 +02:00
|
|
|
const stringV = String(v);
|
|
|
|
return (
|
|
|
|
<option key={stringV} value={stringV}>
|
|
|
|
{stringV && __(toCapitalCase(stringV))}
|
|
|
|
</option>
|
|
|
|
);
|
|
|
|
})}
|
|
|
|
</FormField>
|
|
|
|
</div>
|
|
|
|
{(type === TXO.SENT || type === TXO.RECEIVED) && (
|
|
|
|
<div>
|
|
|
|
<FormField
|
|
|
|
type="select"
|
|
|
|
name="subtype"
|
|
|
|
label={__('Payment Type')}
|
|
|
|
value={subtype || 'all'}
|
2021-08-18 21:06:04 +02:00
|
|
|
onChange={(e) => handleChange({ dkey: TXO.SUB_TYPE, value: e.target.value, tab })}
|
2020-04-10 19:31:36 +02:00
|
|
|
>
|
2021-04-23 18:10:37 +02:00
|
|
|
{Object.values(TXO.DROPDOWN_SUBTYPES).map((v) => {
|
2020-04-10 19:31:36 +02:00
|
|
|
const stringV = String(v);
|
|
|
|
return (
|
|
|
|
<option key={stringV} value={stringV}>
|
|
|
|
{stringV && __(toCapitalCase(stringV))}
|
|
|
|
</option>
|
|
|
|
);
|
|
|
|
})}
|
|
|
|
</FormField>
|
|
|
|
</div>
|
|
|
|
)}
|
2020-04-16 22:25:15 +02:00
|
|
|
{!hideStatus && (
|
|
|
|
<div>
|
|
|
|
<fieldset-section>
|
2020-07-02 17:39:12 +02:00
|
|
|
<label>{__('Status')}</label>
|
2020-04-16 22:25:15 +02:00
|
|
|
<div className={'txo__radios'}>
|
|
|
|
<Button
|
|
|
|
button="alt"
|
2021-08-18 21:06:04 +02:00
|
|
|
onClick={(e) => handleChange({ dkey: TXO.ACTIVE, value: 'active', tab })}
|
2020-04-16 22:25:15 +02:00
|
|
|
className={classnames(`button-toggle`, {
|
|
|
|
'button-toggle--active': active === TXO.ACTIVE,
|
|
|
|
})}
|
|
|
|
label={__('Active')}
|
|
|
|
/>
|
|
|
|
<Button
|
|
|
|
button="alt"
|
2021-08-18 21:06:04 +02:00
|
|
|
onClick={(e) => handleChange({ dkey: TXO.ACTIVE, value: 'spent', tab })}
|
2020-04-16 22:25:15 +02:00
|
|
|
className={classnames(`button-toggle`, {
|
|
|
|
'button-toggle--active': active === 'spent',
|
|
|
|
})}
|
|
|
|
label={__('Historical')}
|
|
|
|
/>
|
|
|
|
<Button
|
|
|
|
button="alt"
|
2021-08-18 21:06:04 +02:00
|
|
|
onClick={(e) => handleChange({ dkey: TXO.ACTIVE, value: 'all', tab })}
|
2020-04-16 22:25:15 +02:00
|
|
|
className={classnames(`button-toggle`, {
|
|
|
|
'button-toggle--active': active === 'all',
|
|
|
|
})}
|
|
|
|
label={__('All')}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</fieldset-section>
|
|
|
|
</div>
|
|
|
|
)}
|
2021-08-18 20:06:12 +02:00
|
|
|
<div className="card__actions--inline" style={{marginLeft: '200px'}}>
|
|
|
|
{!isFetchingTransactions && transactionsFile === null && (
|
|
|
|
<label>{<span className="error__text">{__('Failed to process fetched data.')}</span>}</label>
|
|
|
|
)}
|
|
|
|
<div className="txo__export">
|
|
|
|
<FileExporter
|
|
|
|
data={transactionsFile}
|
|
|
|
label={__('Export')}
|
|
|
|
tooltip={__('Fetch transaction data for export')}
|
|
|
|
defaultFileName={'transactions-history.csv'}
|
|
|
|
onFetch={() => fetchTransactions()}
|
|
|
|
progressMsg={isFetchingTransactions ? __('Fetching data') : ''}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
<Button button="alt" icon={ICONS.REFRESH} label={__('Refresh')} onClick={() => fetchTxoPage()} />
|
|
|
|
</div>
|
2020-04-10 19:31:36 +02:00
|
|
|
</div>
|
|
|
|
</div>
|
2021-08-18 20:06:12 +02:00
|
|
|
{/* listing of the transactions */}
|
2020-04-10 19:31:36 +02:00
|
|
|
<TransactionListTable txos={txoPage} />
|
|
|
|
<Paginate totalPages={Math.ceil(txoItemCount / Number(pageSize))} />
|
2021-08-19 13:57:46 +02:00
|
|
|
</div> :
|
|
|
|
<div>
|
|
|
|
<div className="card__body-actions">
|
|
|
|
<div className="card__actions">
|
|
|
|
<div>
|
|
|
|
<FormField
|
|
|
|
type="select"
|
|
|
|
name="type"
|
|
|
|
label={
|
|
|
|
<>
|
|
|
|
{__('Type')}
|
|
|
|
<HelpLink href="https://lbry.com/faq/transaction-types" />
|
|
|
|
</>
|
|
|
|
}
|
|
|
|
value={type || 'all'}
|
|
|
|
onChange={(e) => handleChange({ dkey: TXO.TYPE, value: e.target.value, tab })}
|
|
|
|
>
|
|
|
|
{Object.values(TXO.DROPDOWN_TYPES).map((v) => {
|
|
|
|
const stringV = String(v);
|
|
|
|
return (
|
|
|
|
<option key={stringV} value={stringV}>
|
|
|
|
{stringV && __(toCapitalCase(stringV))}
|
|
|
|
</option>
|
|
|
|
);
|
|
|
|
})}
|
|
|
|
</FormField>
|
|
|
|
</div>
|
|
|
|
{(type === TXO.SENT || type === TXO.RECEIVED) && (
|
|
|
|
<div>
|
|
|
|
<FormField
|
|
|
|
type="select"
|
|
|
|
name="subtype"
|
|
|
|
label={__('Payment Type')}
|
|
|
|
value={subtype || 'all'}
|
|
|
|
onChange={(e) => handleChange({ dkey: TXO.SUB_TYPE, value: e.target.value, tab })}
|
|
|
|
>
|
|
|
|
{Object.values(TXO.DROPDOWN_SUBTYPES).map((v) => {
|
|
|
|
const stringV = String(v);
|
|
|
|
return (
|
|
|
|
<option key={stringV} value={stringV}>
|
|
|
|
{stringV && __(toCapitalCase(stringV))}
|
|
|
|
</option>
|
|
|
|
);
|
|
|
|
})}
|
|
|
|
</FormField>
|
|
|
|
</div>
|
|
|
|
)}
|
|
|
|
{!hideStatus && (
|
|
|
|
<div>
|
|
|
|
<fieldset-section>
|
|
|
|
<label>{__('Status')}</label>
|
|
|
|
<div className={'txo__radios'}>
|
|
|
|
<Button
|
|
|
|
button="alt"
|
|
|
|
onClick={(e) => handleChange({ dkey: TXO.ACTIVE, value: 'active', tab })}
|
|
|
|
className={classnames(`button-toggle`, {
|
|
|
|
'button-toggle--active': active === TXO.ACTIVE,
|
|
|
|
})}
|
|
|
|
label={__('Active')}
|
|
|
|
/>
|
|
|
|
<Button
|
|
|
|
button="alt"
|
|
|
|
onClick={(e) => handleChange({ dkey: TXO.ACTIVE, value: 'spent', tab })}
|
|
|
|
className={classnames(`button-toggle`, {
|
|
|
|
'button-toggle--active': active === 'spent',
|
|
|
|
})}
|
|
|
|
label={__('Historical')}
|
|
|
|
/>
|
|
|
|
<Button
|
|
|
|
button="alt"
|
|
|
|
onClick={(e) => handleChange({ dkey: TXO.ACTIVE, value: 'all', tab })}
|
|
|
|
className={classnames(`button-toggle`, {
|
|
|
|
'button-toggle--active': active === 'all',
|
|
|
|
})}
|
|
|
|
label={__('All')}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</fieldset-section>
|
|
|
|
</div>
|
|
|
|
)}
|
|
|
|
<div className="card__actions--inline" style={{marginLeft: '200px'}}>
|
|
|
|
{!isFetchingTransactions && transactionsFile === null && (
|
|
|
|
<label>{<span className="error__text">{__('Failed to process fetched data.')}</span>}</label>
|
|
|
|
)}
|
|
|
|
<div className="txo__export">
|
|
|
|
<FileExporter
|
|
|
|
data={transactionsFile}
|
|
|
|
label={__('Export')}
|
|
|
|
tooltip={__('Fetch transaction data for export')}
|
|
|
|
defaultFileName={'transactions-history.csv'}
|
|
|
|
onFetch={() => fetchTransactions()}
|
|
|
|
progressMsg={isFetchingTransactions ? __('Fetching data') : ''}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
<Button button="alt" icon={ICONS.REFRESH} label={__('Refresh')} onClick={() => fetchTxoPage()} />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
{/* listing of the transactions */}
|
|
|
|
<Paginate totalPages={Math.ceil(txoItemCount / Number(pageSize))} />
|
2020-04-10 19:31:36 +02:00
|
|
|
</div>
|
|
|
|
}
|
2021-08-19 13:57:46 +02:00
|
|
|
|
2020-04-10 19:31:36 +02:00
|
|
|
/>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default withRouter(TxoList);
|