mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-02-03 19:56:39 +00:00
onramper partners
This commit is contained in:
parent
3b71b679bb
commit
5739bda8de
4 changed files with 65 additions and 63 deletions
|
@ -15,6 +15,20 @@ import 'package:collection/collection.dart';
|
|||
enum OnRamperPartner {
|
||||
guardarian,
|
||||
paybis,
|
||||
utorg
|
||||
}
|
||||
|
||||
extension Name on OnRamperPartner {
|
||||
String get name {
|
||||
switch (this) {
|
||||
case OnRamperPartner.guardarian:
|
||||
return 'Guardarian';
|
||||
case OnRamperPartner.paybis:
|
||||
return 'Paybis';
|
||||
case OnRamperPartner.utorg:
|
||||
return 'Utorg';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class OnRamperBuyProvider extends BuyProvider {
|
||||
|
|
|
@ -23,11 +23,7 @@ class BuyViewModel = BuyViewModelBase with _$BuyViewModel;
|
|||
abstract class BuyViewModelBase with Store {
|
||||
BuyViewModelBase(this.ordersSource, this.ordersStore, this.settingsStore, this.buyAmountViewModel,
|
||||
{required this.wallet})
|
||||
: isRunning = false,
|
||||
orderId = '',
|
||||
isDisabled = true,
|
||||
isShowProviderButtons = false,
|
||||
items = <BuyItem>[] {}
|
||||
: orderId = '';
|
||||
|
||||
final Box<Order> ordersSource;
|
||||
final OrdersStore ordersStore;
|
||||
|
@ -39,18 +35,6 @@ abstract class BuyViewModelBase with Store {
|
|||
|
||||
ProviderType? selectedProviderType;
|
||||
|
||||
@observable
|
||||
List<BuyItem> items;
|
||||
|
||||
@observable
|
||||
bool isRunning;
|
||||
|
||||
@observable
|
||||
bool isDisabled;
|
||||
|
||||
@observable
|
||||
bool isShowProviderButtons;
|
||||
|
||||
WalletType get type => wallet.type;
|
||||
|
||||
double get doubleAmount => buyAmountViewModel.doubleAmount;
|
||||
|
@ -85,44 +69,50 @@ abstract class BuyViewModelBase with Store {
|
|||
}
|
||||
}
|
||||
|
||||
void processProviderUrl({required String urlStr}) async {
|
||||
if (selectedProviderType == null) return;
|
||||
|
||||
final orderId = extractInfoFromUrl(urlStr, selectedProviderType!);
|
||||
final onRamperPartner = determineOnRamperPartner(urlStr);
|
||||
final onRamperPartnerRaw = onRamperPartner != null ? onRamperPartner.index : null;
|
||||
|
||||
if (orderId != null && orderId.isNotEmpty && orderId != this.orderId) {
|
||||
this.orderId = orderId;
|
||||
await saveOrder(orderId, onRamperPartnerRaw: onRamperPartnerRaw);
|
||||
}
|
||||
}
|
||||
|
||||
String? extractInfoFromUrl(String url, ProviderType providerType) {
|
||||
final config = providerUrlConfigs[providerType];
|
||||
if (config == null) return null;
|
||||
|
||||
for (var entry in config.parameterKeywords.entries) {
|
||||
final keyword = entry.value;
|
||||
final paramIndex = url.indexOf('$keyword=');
|
||||
if (paramIndex != -1) {
|
||||
final start = paramIndex + keyword.length + 1;
|
||||
int end = config.splitSymbol != null ? url.indexOf(config.splitSymbol!, start) : url.length;
|
||||
end = end == -1 ? url.length : end;
|
||||
return url.substring(start, end);
|
||||
final keywords = entry.value;
|
||||
final startKeyword = keywords['start'];
|
||||
final endKeyword = keywords['end'];
|
||||
|
||||
if (startKeyword != null) {
|
||||
final startIndex = url.indexOf(startKeyword);
|
||||
if (startIndex != -1) {
|
||||
final start = startIndex + startKeyword.length;
|
||||
int end = endKeyword != null ? url.indexOf(endKeyword, start) : url.length;
|
||||
end = end == -1 ? url.length : end;
|
||||
return url.substring(start, end);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
void processProviderUrl({required String urlStr}) async {
|
||||
if (selectedProviderType == null) return;
|
||||
|
||||
final orderId = extractInfoFromUrl(urlStr, selectedProviderType!);
|
||||
final onRamperPartner = determineOnRamperPartner(urlStr); // Determine the partner
|
||||
final onRamperPartnerRaw = onRamperPartner != null ? onRamperPartner.index : null; // Serialize the partner for storage
|
||||
|
||||
if (orderId != null && orderId.isNotEmpty && orderId != this.orderId) {
|
||||
this.orderId = orderId;
|
||||
await saveOrder(orderId, onRamperPartnerRaw: onRamperPartnerRaw); // Pass the partner information
|
||||
}
|
||||
}
|
||||
|
||||
OnRamperPartner? determineOnRamperPartner(String url) {
|
||||
if (url.contains('guardarian')) {
|
||||
return OnRamperPartner.guardarian;
|
||||
} else if (url.contains('paybis')) {
|
||||
return OnRamperPartner.paybis;
|
||||
} else if (url.contains('utpay')) {
|
||||
return OnRamperPartner.utorg;
|
||||
}
|
||||
// Add more partners as needed
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -130,35 +120,26 @@ abstract class BuyViewModelBase with Store {
|
|||
ProviderType.onramper: ProviderUrlConfig(
|
||||
name: ProviderType.onramper.title,
|
||||
parameterKeywords: {
|
||||
'guardarian': 'tid',
|
||||
'paybis': 'requestId',
|
||||
},
|
||||
splitSymbol: '&',
|
||||
),
|
||||
ProviderType.dfx: ProviderUrlConfig(
|
||||
name: ProviderType.dfx.title,
|
||||
parameterKeywords: {
|
||||
'transaction': 'id', // Adjust based on actual URL scheme.
|
||||
'guardarian': {
|
||||
'start': 'tid=',
|
||||
'end': '&',
|
||||
},
|
||||
'paybis': {
|
||||
'start': 'requestId=',
|
||||
'end': '&',
|
||||
},
|
||||
'utpay': {
|
||||
'start': '/order/',
|
||||
'end': '/',
|
||||
},
|
||||
},
|
||||
),
|
||||
ProviderType.robinhood: ProviderUrlConfig(
|
||||
name: ProviderType.robinhood.title,
|
||||
parameterKeywords: {
|
||||
'order': 'ref', // Adjust based on actual URL scheme.
|
||||
},
|
||||
),
|
||||
// Add more providers as necessary, using their titles.
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
class ProviderUrlConfig {
|
||||
final String name;
|
||||
final Map<String, String> parameterKeywords;
|
||||
final String? splitSymbol;
|
||||
final Map<String, Map<String, String?>> parameterKeywords;
|
||||
|
||||
ProviderUrlConfig({required this.name, required this.parameterKeywords, this.splitSymbol});
|
||||
ProviderUrlConfig({required this.name, required this.parameterKeywords});
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -42,7 +42,6 @@ import 'package:cw_core/wallet_type.dart';
|
|||
import 'package:eth_sig_util/util/utils.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:cake_wallet/entities/provider_types.dart';
|
||||
|
||||
part 'dashboard_view_model.g.dart';
|
||||
|
||||
|
|
|
@ -49,8 +49,10 @@ abstract class OrderDetailsViewModelBase with Store {
|
|||
updatedOrder.to = order.to;
|
||||
updatedOrder.receiveAddress = order.receiveAddress;
|
||||
updatedOrder.walletId = order.walletId;
|
||||
updatedOrder.providerRaw = order.provider != null
|
||||
updatedOrder.providerRaw = order.provider != null
|
||||
? ProvidersHelper.serialize(order.provider!) : null;
|
||||
updatedOrder.onramperPartnerRaw = order.onramperPartner != null
|
||||
? order.onramperPartner!.index : null;
|
||||
order = updatedOrder;
|
||||
_updateItems();
|
||||
} catch (e) {
|
||||
|
@ -78,6 +80,12 @@ abstract class OrderDetailsViewModelBase with Store {
|
|||
value: order.provider?.title ?? '')
|
||||
);
|
||||
|
||||
items.add(
|
||||
StandartListItem(
|
||||
title: 'Partner',
|
||||
value: order.onramperPartner?.name ?? '')
|
||||
);
|
||||
|
||||
if(_provider != null) {
|
||||
if(_provider!.trackUrl.isNotEmpty && order.transferId.isNotEmpty) {
|
||||
final buildURL = _provider!.trackUrl + '${order.transferId}';
|
||||
|
|
Loading…
Reference in a new issue