@owstack/ows-wallet-applet-coinbase
Version:
An OWS Wallet applet plugin for Coinbase.
246 lines (218 loc) • 6.42 kB
JavaScript
'use strict';
angular.module('owsWalletPlugin').config(function($stateProvider) {
$stateProvider
/**
* Onboarding navigation (logged out)
*/
.state('onboarding', {
url: '/onboarding',
abstract: true,
template: '<ion-nav-view name="onboarding"></ion-nav-view>'
})
.state('onboarding.start', {
url: '/start/:error',
views: {
'onboarding': {
controller: 'StartCtrl',
templateUrl: 'views/start/start.html'
}
}
})
.state('onboarding.login', {
url: '/login',
views: {
'onboarding': {
controller: 'LoginCtrl',
templateUrl: 'views/login/login.html'
}
}
})
/**
* Tabs navigation (logged in)
*/
.state('tabs', {
url: '/tabs',
abstract: true,
controller: 'TabsCtrl',
templateUrl: 'views/navigation/tabs/tabs.html'
})
.state('tabs.prices', {
url: '/prices',
views: {
'tab-prices': {
controller: 'PricesCtrl',
templateUrl: 'views/prices/prices.html'
}
}
})
.state('tabs.accounts', {
url: '/accounts',
views: {
'tab-accounts': {
controller: 'AccountsCtrl',
templateUrl: 'views/accounts/accounts.html'
}
}
})
.state('tabs.alerts', {
url: '/alerts',
views: {
'tab-alerts': {
controller: 'AlertsCtrl',
templateUrl: 'views/alerts/alerts.html'
}
}
})
.state('tabs.settings', {
url: '/settings',
views: {
'tab-settings': {
controller: 'SettingsCtrl',
templateUrl: 'views/settings/settings.html',
}
}
})
/**
* Accounts tab
*/
.state('tabs.account', {
url: '/account/:accountId',
views: {
'tab-accounts@tabs': {
controller: 'AccountCtrl',
templateUrl: 'views/account/account.html'
}
}
})
.state('tabs.wallet', {
url: '/wallet/:walletId',
views: {
'tab-accounts@tabs': {
controller: 'WalletCtrl',
templateUrl: 'views/wallet/wallet.html'
}
}
})
// Send transaction
.state('tabs.account-send', {
url: '/account-send/:accountId',
views: {
'tab-accounts@tabs': {
controller: 'SendCtrl',
templateUrl: 'views/account/send/send.html'
}
}
})
.state('tabs.account-send-recipient', {
url: '/account-send-recipient/:accountId/:amount/:currency',
views: {
'tab-accounts@tabs': {
controller: 'RecipientCtrl',
templateUrl: 'views/account/send/recipient/recipient.html'
}
}
})
// Buy and sell
.state('tabs.buy-sell-amount', {
url: '/buy-sell-amount/:action/:accountId/:walletId/:currency',
views: {
'tab-accounts@tabs': {
controller: 'BuySellAmountCtrl',
templateUrl: 'views/buy-sell-amount/buy-sell-amount.html'
}
}
})
.state('tabs.linked-accounts', {
url: '/linked-accounts/:action/:accountId/:paymentMethodId',
views: {
'tab-accounts@tabs': {
controller: 'LinkedAccountsCtrl',
templateUrl: 'views/linked-accounts/linked-accounts.html'
}
}
})
.state('tabs.buy-sell-preview', {
url: '/buy-sell-preview/:accountId/:orderId',
views: {
'tab-accounts@tabs': {
controller: 'BuySellPreviewCtrl',
templateUrl: 'views/buy-sell-preview/buy-sell-preview.html'
}
}
})
.state('tabs.buy-sell-confirm', {
url: '/buy-sell-confirm/:accountId/:orderId',
views: {
'tab-accounts@tabs': {
controller: 'BuySellConfirmCtrl',
templateUrl: 'views/buy-sell-confirm/buy-sell-confirm.html'
}
}
})
/**
* Settings tab
*/
.state('tabs.session-log', {
url: '/session-log',
views: {
'tab-settings@tabs': {
templateUrl: 'views/settings/session-log/session-log.html'
}
}
});
/*
.state('coinbase.amount', {
url: '/amount/:nextStep/:currency',
controller: 'amountController',
templateUrl: 'views/amount.html'
})
.state('buy', {
url: '/buy/:amount/:currency',
controller: 'BuyCtrl',
templateUrl: 'views/buy/buy.html'
})
.state('sell', {
url: '/sell/:amount/:currency',
controller: 'SellCtrl',
templateUrl: 'views/sell/sell.html'
});
*/
}).run(function($rootScope, $state, $log, $ionicConfig, coinbaseService, lodash, gettextCatalog, popupService,
/* @namespace owsWalletPlugin.api.coinbase */ CoinbaseServlet) {
// Ionic platform defaults.
$ionicConfig.backButton.icon('icon ion-arrow-left-c').text('');
// Wait for this plugin and its dependents to become ready.
owswallet.Plugin.openForBusiness([CoinbaseServlet.id], function() {
// Wait for initial Coinbase service connection.
coinbaseService.whenAvailable(function(error, coinbase) {
if (!error) {
if (!lodash.isEmpty(coinbase.accounts)) {
$state.go('tabs.prices');
} else {
$state.go('onboarding.start');
}
} else {
// If the error is a request timeout the login credentials (token) may still be valid.
// Allow the user to retry (without having to re-login).
if (error.message == 'REQUEST_TIMED_OUT') {
var title = gettextCatalog.getString('Request Timeout');
var message = gettextCatalog.getString('Coinbase did not respond in time. You can retry or close the applet.');
var okText = gettextCatalog.getString('Retry');
var cancelText = gettextCatalog.getString('Close');
popupService.showConfirm(title, message, okText, cancelText, function(retry) {
if (retry) {
coinbaseService.retry();
} else {
owswallet.Plugin.close({confirm: false});
}
});
} else {
$state.go('onboarding.start', {error: error.message});
}
}
});
});
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
$log.debug('Applet route change start from:', fromState.name || '-', ' to:', toState.name);
});
});