copay/www/views/walletDetails.html

271 lines
12 KiB
HTML
Raw Normal View History

<ion-view id="walletDetails">
2016-11-10 11:26:22 -08:00
<ion-nav-bar ng-style="{'background-color': wallet.color}">
<ion-nav-title>{{wallet.name}}</ion-nav-title>
2016-09-16 08:19:40 -07:00
<ion-nav-back-button>
</ion-nav-back-button>
2016-09-16 07:30:16 -07:00
<ion-nav-buttons side="secondary">
<button class="button back-button" ng-click="startSearch(); openSearchModal()" ng-if="txHistory.length > 4">
<i class="icon ion-ios-search-strong tx-search"></i>
2016-09-16 07:30:16 -07:00
</button>
</ion-nav-buttons>
</ion-nav-bar>
<div class="bp-content" ng-class="{'status-bar': isCordova && isIOS}">
<div class="amount-wrapper" ng-show="wallet && wallet.isComplete() && amountIsCollapsible" ng-style="{'background-color':wallet.color}">
2016-11-10 11:02:34 -08:00
<div
class="amount-bg"
ng-style="{'background-color':wallet.color}"
ng-class="{collapsible: amountIsCollapsible}"
></div>
<div
ng-style="{'background-color':wallet.color, 'height': amountHeight}"
class="amount"
ng-class="{collapsible: amountIsCollapsible}"
>
<div ng-if="!notAuthorized && !updatingStatus">
<div ng-show="updateStatusError">
<a class="button button-outline button-light button-small" ng-click='update()' translate>Tap to retry</a>
</div>
<div ng-show="walletNotRegistered">
<span class="size-12 db m10b" translate>This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.</span>
<a class="button button-outline button-light button-small" ng-click='recreate()' translate>Recreate</a>
</div>
<div ng-show="wallet.walletScanStatus == 'error'" ng-click='retryScan()'>
<span translate>Scan status finished with error</span>
<br><span translate>Tap to retry</span>
</div>
2016-11-09 10:15:42 -08:00
<div
ng-click='updateAll(true)'
ng-show="!updateStatusError && wallet.walletScanStatus != 'error' && !wallet.balanceHidden"
on-hold="hideToggle()"
ng-style="{'transform': amountScale}"
2016-11-14 11:42:04 -08:00
class="amount__balance"
2016-11-09 10:15:42 -08:00
>
<strong ng-if="!status.pendingAmount" class="size-36">{{status.totalBalanceStr}}</strong>
2016-11-09 10:15:42 -08:00
<div
ng-if="!status.pendingAmount"
class="size-14 amount-alternative"
ng-if="status.totalBalanceAlternative"
ng-style="{opacity: altAmountOpacity}"
>
{{status.totalBalanceAlternative}} {{status.alternativeIsoCode}}
</div>
<div class="size-20" ng-if="status.pendingAmount">
<div style="margin-bottom:.5rem"><span translate>Available</span>: {{status.totalBalanceStr}}</div>
<div><span translate>Confirming</span>: {{status.pendingAmountStr}}</div>
</div>
</div>
<div ng-show="!updateStatusError && wallet.walletScanStatus != 'error' && wallet.balanceHidden" on-hold="hideToggle()">
<strong class="size-24" translate>[Balance Hidden]</strong>
<div class="size-14" translate>
Tap and hold to show
</div>
</div>
</div>
<div ng-if="updatingStatus" class="amount__updating">
<div class="size-36">
<strong>...</strong>
</div>
</div>
</div>
2016-11-09 10:15:42 -08:00
<div class="wallet-details-wallet-info" ng-style="{opacity: altAmountOpacity}">
<span ng-include="'views/includes/walletInfo.html'"></span>
</div>
</div>
<ion-content ng-style="{'margin-top': contentMargin}" ng-class="{collapsible: amountIsCollapsible}">
2016-10-10 11:19:33 -07:00
<ion-refresher
ng-if="isAndroid"
2016-10-10 11:19:33 -07:00
pulling-icon="ion-ios-refresh"
spinner="ios-small"
on-refresh="onRefresh()">
</ion-refresher>
2016-08-15 12:07:30 -07:00
2016-11-15 08:27:14 -08:00
<div class="amount-wrapper" ng-if="wallet && wallet.isComplete() && !amountIsCollapsible">
<div
class="amount-bg"
ng-style="{'background-color':wallet.color}"
></div>
<div
ng-style="{'background-color':wallet.color}"
class="amount"
ng-class="{'collapsible': amountIsCollapsible}"
>
<div ng-if="!updatingStatus">
<div ng-show="updateStatusError">
<span class="size-12 db m10b">{{updateStatusError}}</span>
<a class="button button-outline button-light button-small" ng-click='updateAll()' translate>Tap to retry</a>
</div>
<div ng-show="walletNotRegistered">
<span class="size-12 db m10b" translate>This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.</span>
<a class="button button-outline button-light button-small" ng-click='recreate()' translate>Recreate</a>
</div>
<div ng-click='updateAll(true)' ng-show="!updateStatusError && !wallet.balanceHidden" on-hold="hideToggle()">
<strong ng-if="!status.pendingAmount" class="size-36">{{status.totalBalanceStr}}</strong>
<div ng-if="!status.pendingAmount" class="size-14 amount-alternative" ng-if="status.totalBalanceAlternative">{{status.totalBalanceAlternative}} {{status.alternativeIsoCode}}</div>
<div class="size-20" ng-if="status.pendingAmount">
<div style="margin-bottom:.5rem"><span translate>Available</span>: {{status.totalBalanceStr}}</div>
<div><span translate>Confirming</span>: {{status.pendingAmountStr}}</div>
</div>
</div>
<div ng-show="!updateStatusError && wallet.balanceHidden" on-hold="hideToggle()">
<strong class="size-24" translate>[Balance Hidden]</strong>
<div class="size-14" translate>
Tap and hold to show
</div>
</div>
</div>
<div ng-if="updatingStatus">
<div class="size-36">
<strong>...</strong>
</div>
</div>
</div> <!-- amount -->
<div class="wallet-details-wallet-info">
<span ng-include="'views/includes/walletInfo.html'"></span>
</div>
</div> <!-- oh -->
2016-11-15 08:27:14 -08:00
<a class="wallet-not-backed-up-warning" ng-if="!isBackedUp" ui-sref="tabs.wallet.backupWarning({from: 'tabs.wallet', walletId: walletId})">
Wallet not backed up
</a>
2016-08-15 12:07:30 -07:00
2016-11-15 08:27:14 -08:00
<div class="p60b" ng-if="wallet && wallet.isComplete() && !walletNotRegistered" style="padding-top: 1rem;">
2016-08-15 12:07:30 -07:00
<div class="oh pr m20t" ng-show="wallet.incorrectDerivation">
<div class="text-center text-warning">
<i class="fi-alert"></i>
<span translate>
WARNING: Key derivation is not working on this device/wallet. Actions cannot be performed on this wallet.
</span>
</div>
</div>
<div class="list" ng-if="txps[0]">
2016-11-03 14:38:46 -07:00
<!-- <div class="item item-heading" translate>
<span ng-show="requiresMultipleSignatures" translate>Payment Proposals</span>
<span ng-show="!requiresMultipleSignatures" translate>Unsent transactions</span>
2016-11-03 14:38:46 -07:00
</div> -->
<div class="wallet-details__group-label" style="padding-bottom: 8px;">
<span ng-show="requiresMultipleSignatures" translate>Proposals</span>
<span ng-show="!requiresMultipleSignatures" translate>Unsent transactions</span>
</div>
2016-11-03 14:29:29 -07:00
<div ng-repeat="tx in txps" ng-click="openTxpModal(tx)">
2016-11-03 14:38:46 -07:00
<div class="wallet-details__item proposal" ng-include="'views/includes/txp.html'"></div>
</div>
<div class="item item-footer description" ng-show="status.lockedBalanceSat" style="background: white;">
<span translate>Total Locked Balance</span>:
<b>{{status.lockedBalanceStr}} </b>
<span> {{status.lockedBalanceAlternative}} {{status.alternativeIsoCode}} </span>
</div>
2016-08-23 13:31:50 -07:00
</div>
2016-08-18 06:37:08 -07:00
<!-- Transactions -->
2016-08-15 06:25:43 -07:00
2016-08-15 12:07:30 -07:00
<div class="oh pr m20t text-gray size-12 text-center"
2016-11-14 12:19:10 -08:00
ng-show="!txHistory[0] && !updatingTxHistory && !txHistoryError && !updateStatusError" translate>
No transactions yet
2016-08-15 12:07:30 -07:00
</div>
2016-09-30 11:58:56 -07:00
<div ng-show="updatingTxHistory && updatingTxHistoryProgress>5" class="updatingHistory">
2016-08-23 08:10:48 -07:00
<div class="row" >
2016-08-18 13:56:04 -07:00
<ion-spinner class="spinner-dark" icon="lines"></ion-spinner>
2016-08-23 08:10:48 -07:00
</div>
<div class="row" >
<div class="col" translate>Updating transaction history. Please stand by.</div>
</div>
<div class="row" ng-show="updatingTxHistoryProgress>0" >
<div class="col" translate>{{updatingTxHistoryProgress}} transactions downloaded</div>
2016-08-15 12:07:30 -07:00
</div>
2016-08-18 13:56:04 -07:00
</div>
2016-08-15 06:25:43 -07:00
<div class="wallet-details__list" ng-show="txHistory[0]">
2016-11-01 14:32:18 -07:00
<div ng-repeat="btx in txHistory track by $index" ng-click="openTxModal(btx)">
2016-11-04 10:29:19 -07:00
<div class="wallet-details__group-label" ng-if="isFirstInGroup($index)">
2016-11-02 14:01:32 -07:00
<span ng-if="isDateInCurrentMonth(getDate(btx.time))">
Recent
</span>
<span ng-if="!isDateInCurrentMonth(getDate(btx.time))">
{{getDate(btx.time) | date:'MMMM'}}
</span>
</div>
2016-11-01 14:32:18 -07:00
2016-11-08 12:00:54 -08:00
<a class="wallet-details__item item">
2016-11-03 14:29:29 -07:00
<img class="wallet-details__tx-icon" src="img/icon-confirming.svg" width="40" ng-if="isUnconfirmed(btx)">
<span ng-if="!isUnconfirmed(btx)">
2016-11-08 11:15:24 -08:00
<img class="wallet-details__tx-icon" src="img/icon-tx-received-outline.svg" width="40" ng-if="btx.action == 'received'">
<img class="wallet-details__tx-icon" src="img/icon-tx-sent-outline.svg" width="40" ng-if="btx.action == 'sent'">
<img class="wallet-details__tx-icon" src="img/icon-tx-moved-outline.svg" width="40" ng-if="btx.action == 'moved'">
2016-11-03 12:11:06 -07:00
</span>
2016-11-01 14:32:18 -07:00
2016-11-04 10:29:19 -07:00
<div class="wallet-details__tx-content" ng-class="{'no-border': isLastInGroup($index)}">
2016-11-03 12:11:06 -07:00
2016-11-03 14:29:29 -07:00
<div class="wallet-details__tx-title" ng-if="!isUnconfirmed(btx)">
2016-11-01 14:32:18 -07:00
<div ng-show="btx.action == 'received'" class="ellipsis">
<div ng-if="btx.note.body" class="wallet-details__tx-message ellipsis">{{btx.note.body}}</div>
<div ng-if="!btx.note.body" class="wallet-details__tx-message ellipsis" translate> Received</div>
2016-11-01 14:32:18 -07:00
</div>
2016-11-01 14:32:18 -07:00
<div ng-show="btx.action == 'sent'" class="ellipsis">
<div ng-if="btx.message" class="wallet-details__tx-message ellipsis">{{btx.message}}</div>
<div ng-if="!btx.message && btx.note.body" class="wallet-details__tx-message ellipsis">{{btx.note.body}}</div>
<div ng-if="!btx.message && !btx.note.body && addressbook[btx.addressTo]" class="wallet-details__tx-message ellipsis">
2016-11-01 14:32:18 -07:00
{{addressbook[btx.addressTo].name || addressbook[btx.addressTo]}}
</div>
<div ng-if="!btx.message && !btx.note.body && !addressbook[btx.addressTo]" translate>Sent</div>
</div>
2016-11-01 14:32:18 -07:00
<div ng-show="btx.action == 'moved'" class="ellipsis">
<div ng-if="btx.note.body" class="wallet-details__tx-message ellipsis">{{btx.note.body}}</div>
<div ng-if="!btx.note.body" class="wallet-details__tx-message ellipsis" translate>Moved</div>
2016-11-01 14:32:18 -07:00
</div>
<span class="label tu warning radius" ng-if="btx.action == 'invalid'" translate>Invalid</span>
</div>
2016-11-03 14:29:29 -07:00
<div class="wallet-details__tx-title" ng-if="isUnconfirmed(btx)">
2016-11-03 12:11:06 -07:00
<div class="ellipsis" style="color: #B4B4B4;">
Confirming
</div>
</div>
2016-11-01 14:32:18 -07:00
<span class="item-note text-right wallet-details__tx-amount">
<span class="wallet-details__tx-amount" ng-class="{'wallet-details__tx-amount--recent': btx.recent, 'wallet-details__tx-amount--received': btx.action == 'received', 'wallet-details__tx-amount--sent': btx.action == 'sent'}">
<span ng-if="btx.action == 'sent'"></span>
<span class="size-12" ng-if="btx.action == 'invalid'" translate>
(possible double spend)
</span>
<span ng-if="btx.action != 'invalid'">
{{btx.amountStr}}
</span>
</span>
2016-11-01 14:32:18 -07:00
<div>
2016-11-03 14:29:29 -07:00
<time class="wallet-details__tx-time" ng-if="btx.time && createdWithinPastDay(btx.time)">{{btx.time * 1000 | amTimeAgo}}</time>
<time class="wallet-details__tx-time" ng-if="btx.time && !createdWithinPastDay(btx.time)">{{btx.time * 1000 | date:'MMMM d, y'}}</time>
2016-11-01 14:32:18 -07:00
</div>
</span>
2016-11-01 14:32:18 -07:00
</div>
2016-11-08 12:00:54 -08:00
</a>
2016-08-18 16:54:08 -07:00
</div>
</div>
<ion-infinite-scroll
ng-if="txHistoryShowMore"
on-infinite="showMore()"
distance="1%">
</ion-infinite-scroll>
2016-11-14 12:19:10 -08:00
</div>
2016-08-15 12:07:30 -07:00
</ion-content>
2016-11-10 11:26:22 -08:00
</div>
2016-08-15 12:07:30 -07:00
</ion-view>