180 lines
6.9 KiB
Swift
180 lines
6.9 KiB
Swift
//
|
|
// InheritanceController.swift
|
|
// Wallet
|
|
//
|
|
// Created by Igor on 11.03.2021.
|
|
// Copyright © 2021 AM. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class InheritanceController: UIViewController {
|
|
|
|
|
|
@IBOutlet private weak var myInheritanceEmptyView: UIView!
|
|
@IBOutlet private weak var myInheritanceContainer: UIView!
|
|
@IBOutlet private weak var segCtrl: UISegmentedControl!
|
|
@IBOutlet private weak var dateField: CommonViewField!
|
|
@IBOutlet private weak var periodField: CommonViewField!
|
|
@IBOutlet private weak var inheritorsStackView: UIStackView!
|
|
@IBOutlet private weak var waitingStackView: UIStackView!
|
|
@IBOutlet private weak var readyStackView: UIStackView!
|
|
@IBOutlet private weak var waitingEmptyView: UIView!
|
|
@IBOutlet private weak var loadingView: CommonViewEmptyContainer!
|
|
@IBOutlet weak var updateInheritanceDateLabel: CommonButtonAction!
|
|
@IBOutlet weak var editButton: CommonButtonAction!
|
|
|
|
private let service = Inheritance.Service()
|
|
private var balances: [Network.Model.Token] { Wallet.Service.Tokens.shared.balances.collection }
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
title = L10n.Inheritance.title
|
|
navigationItem.leftBarButtonItem = .pop(self)
|
|
segCtrl.removeAllSegments()
|
|
service.menus.enumerated().forEach({ segCtrl.insertSegment(withTitle: $0.element.inheritanceMenu, at: $0.offset, animated: false) })
|
|
segCtrl.selectedSegmentIndex = service.menus.lastIndex(of: service.menu) ?? 0
|
|
segCtrl
|
|
.subviews
|
|
.compactMap { ($0.subviews as? [UILabel]) }
|
|
.flatMap { $0 }
|
|
.forEach {
|
|
$0.adjustsFontSizeToFitWidth = true
|
|
$0.minimumScaleFactor = 0.4
|
|
}
|
|
service.didUpdate = { [weak self] err, bool in
|
|
Alert.error(err)
|
|
self?.reload(animated: true, isLoading: bool)
|
|
}
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
navigationController?.setNavigationBarHidden(false, animated: true)
|
|
Notification.subscribe(bag: bag, name: .didChangeAccount) { _ in self.service.fetch() }
|
|
service.fetch()
|
|
}
|
|
|
|
override func viewWillDisappear(_ animated: Bool) {
|
|
super.viewWillDisappear(animated)
|
|
bag.flush()
|
|
}
|
|
|
|
private func reload(animated: Bool, isLoading: Bool) {
|
|
|
|
if service.information.object != nil {
|
|
myInheritanceEmptyView.isHidden = true
|
|
myInheritanceContainer.isHidden = false
|
|
} else {
|
|
myInheritanceEmptyView.isHidden = false
|
|
myInheritanceContainer.isHidden = true
|
|
}
|
|
|
|
loadingView.isLoading = isLoading
|
|
self.updateInheritanceDateLabel.isHidden = true
|
|
guard !isLoading else { return }
|
|
editButton.isHidden = editButtonAppearance()
|
|
dateField.text = service.information.object?.startDate.string(date: .medium)
|
|
dateField.isHidden = dateField.text?.isEmpty ?? true
|
|
self.updateInheritanceDateLabel.isHidden = dateField.text?.isEmpty ?? true
|
|
if let value = service.information.object?.inactive_period {
|
|
periodField.text = "\(Int(value/(24*3600))) \(L10n.Inheritance.periodUnit)"
|
|
periodField.isHidden = false
|
|
} else {
|
|
periodField.text = nil
|
|
periodField.isHidden = true
|
|
}
|
|
|
|
inheritorsStackView.arrangedSubviews.forEach({ $0.removeFromSuperview() })
|
|
service.information.object?.inheritors.forEach({ inheritorsStackView.addArrangedSubview(InheritanceViewHeir(model: $0)) })
|
|
inheritorsStackView.superview?.isHidden = service.information.object?.inheritors.isEmpty ?? true
|
|
|
|
readyStackView.subviews.forEach({ $0.removeFromSuperview() })
|
|
service.records.ready.forEach { record in
|
|
readyStackView.addArrangedSubview(InheritanceViewReady(record: record) {
|
|
AccountViewAuthorize.showGetPrivateKey(in: self) {
|
|
Loader.show()
|
|
self.service.records.execute(username: record.ownerUsername, privateKey: $0) {
|
|
Loader.hide()
|
|
Alert.notify($0)
|
|
condition($0 == nil, true: { self.service.fetch() })
|
|
}
|
|
}
|
|
})
|
|
}
|
|
readyStackView.superview?.isHidden = service.records.ready.isEmpty
|
|
|
|
waitingStackView.subviews.forEach({ $0.removeFromSuperview() })
|
|
service.records.waiting.forEach({ waitingStackView.addArrangedSubview(InheritanceViewWaiting(record: $0)) })
|
|
waitingEmptyView.isHidden = !service.records.waiting.isEmpty
|
|
}
|
|
|
|
@IBAction func onChanged(_: AnyObject?) {
|
|
service.menu = service.menus[segCtrl.selectedSegmentIndex]
|
|
}
|
|
|
|
@IBAction func changeDate(_ sender: UIButton) {
|
|
guard let inactivePeriod = self.service.information.object?.inactive_period,
|
|
let date = Date().addDays(days: inactivePeriod/(24*3600))?.string(date: .medium)
|
|
else {
|
|
return
|
|
}
|
|
self.openChangeDatePopup(currentDate: date)
|
|
}
|
|
|
|
@IBAction func onEdit(_: AnyObject?) {
|
|
let ctrl = StoryboardScene.Inheritance.setup.instantiate()
|
|
ctrl.service = .init(object: service.information.object,
|
|
contract: service.menu)
|
|
navigationController?.pushViewController(ctrl, animated: true)
|
|
}
|
|
|
|
private func editButtonAppearance() -> Bool {
|
|
var avaliableMenus: [Network.Model.Contract] = []
|
|
balances.forEach { token in
|
|
if token.isSwapContract {
|
|
avaliableMenus.append(.swap)
|
|
}
|
|
if token.isCashContract {
|
|
avaliableMenus.append(.cash)
|
|
}
|
|
if token.isListContract {
|
|
avaliableMenus.append(.list)
|
|
}
|
|
}
|
|
return !avaliableMenus.contains(service.menus[segCtrl.selectedSegmentIndex])
|
|
}
|
|
}
|
|
|
|
extension InheritanceController {
|
|
fileprivate func openChangeDatePopup(currentDate: String) {
|
|
let views: [UIView] =
|
|
[
|
|
.field(
|
|
title: L10n.Inheritance.Update.Popup.New.Date.title,
|
|
text: currentDate,
|
|
textColor: Asset.textCoal.color
|
|
),
|
|
|
|
]
|
|
|
|
Popup.show(title: L10n.Inheritance.Update.Popup.title,
|
|
views: views,
|
|
submit: L10n.Common.Button.confirm,
|
|
cancel: L10n.Common.Button.cancel,
|
|
cancelStyle: .tertiary,
|
|
cancelSize: .small,
|
|
in: self)
|
|
{ ctrl in
|
|
AccountViewAuthorize.showGetPrivateKey(in: self) { [weak self] in
|
|
Loader.show()
|
|
self?.service.refresh(privateKey: $0) {
|
|
ctrl.dismiss(animated: true, completion: nil)
|
|
Loader.hide()
|
|
Alert.notify($0)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|