From 52cd08e8f7a004186c47804ba10f0b7366bcc704 Mon Sep 17 00:00:00 2001 From: PaulNguyen Date: Sat, 19 Nov 2022 19:04:54 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20category=20field=20icon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scences/AddExpense/AddExpenseField.swift | 21 ++++++++++++--- .../Scences/AddExpense/AddExpenseForm.swift | 26 +++++++++++++++---- .../AddExpense/AddExpenseViewController.swift | 2 +- GoMoney/Service/DataService.swift | 1 + 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/GoMoney/Scences/AddExpense/AddExpenseField.swift b/GoMoney/Scences/AddExpense/AddExpenseField.swift index 23676aa..2057ebc 100644 --- a/GoMoney/Scences/AddExpense/AddExpenseField.swift +++ b/GoMoney/Scences/AddExpense/AddExpenseField.swift @@ -1,6 +1,12 @@ import UIKit class AddExpenseField: UIView { + var placeHolder: String? { + didSet { + inputField.placeholder = placeHolder + } + } + var text: String? { didSet { inputField.text = text @@ -9,19 +15,28 @@ class AddExpenseField: UIView { lazy var label = GMLabel { $0.textColor = .darkGray + $0.font = .nova(20) } lazy var inputField: ExpenseTextField = .build { $0.tintColor = .clear + $0.font = .nova(20) + + let attributes = [ + NSAttributedString.Key.font: UIFont.nova(16), + ] + + $0.attributedPlaceholder = NSAttributedString(string: self.placeHolder ?? "", attributes: attributes) } private(set) var name: String = "" private(set) var defaultValue: String = "" - init(name: String, defaultValue: String = "", makeInputView: ((ExpenseTextField) -> Void)? = nil) { + init(name: String, defaultValue: String = "", placeHolder: String = "", makeInputView: ((ExpenseTextField) -> Void)? = nil) { super.init(frame: .zero) self.name = name + self.placeHolder = placeHolder self.defaultValue = defaultValue setView() makeInputView?(inputField) @@ -39,13 +54,13 @@ class AddExpenseField: UIView { label.text = name inputField.text = defaultValue - heightAnchor.constraint(equalToConstant: 40).isActive = true + heightAnchor.constraint(equalToConstant: 56).isActive = true label.anchor( top: topAnchor, left: leftAnchor) label.centerYToView(self) - label.widthAnchor.constraint(equalTo: widthAnchor, multiplier: 0.2).isActive = true + label.widthAnchor.constraint(equalTo: widthAnchor, multiplier: 0.3).isActive = true inputField.anchor( top: label.topAnchor, diff --git a/GoMoney/Scences/AddExpense/AddExpenseForm.swift b/GoMoney/Scences/AddExpense/AddExpenseForm.swift index 00c6fa4..f0563f9 100644 --- a/GoMoney/Scences/AddExpense/AddExpenseForm.swift +++ b/GoMoney/Scences/AddExpense/AddExpenseForm.swift @@ -2,7 +2,11 @@ import UIKit class AddExpenseForm: UIView { private(set) var curDate = Date() - private(set) var curTag: TransactionTag? + private(set) var curTag: TransactionTag? { + didSet { + fillTag() + } + } lazy var dateField = { let field = AddExpenseField( @@ -23,7 +27,7 @@ class AddExpenseForm: UIView { return field }() - lazy var categoryField = AddExpenseField(name: "Category") + lazy var categoryField = AddExpenseField(name: "Category", placeHolder: "Enter Category") private func setCategoryField() { let field = categoryField.inputField @@ -32,7 +36,6 @@ class AddExpenseForm: UIView { type: transType, didSelect: { [weak field, weak self] tag in self?.curTag = tag - field?.text = tag.name field?.resignFirstResponder() } ) @@ -66,7 +69,7 @@ class AddExpenseForm: UIView { } lazy var amountField = { - let field = AddExpenseField(name: "Amount") { textField in + let field = AddExpenseField(name: "Amount", placeHolder: "Enter Amount") { textField in // TODO: Custom Keyboard InputView, use default keyboard temporarily. textField.keyboardType = .numberPad textField.inputAccessoryView = AccessoryView("Select Amount", doneTapped: { [weak textField] in @@ -77,7 +80,7 @@ class AddExpenseForm: UIView { }() lazy var noteField = { - let field = AddExpenseField(name: "Note") { textField in + let field = AddExpenseField(name: "Note", placeHolder: "Enter Note") { textField in textField.inputAccessoryView = AccessoryView("Note", doneTapped: { [weak textField] in textField?.resignFirstResponder() }) @@ -198,6 +201,19 @@ class AddExpenseForm: UIView { } controller?.present(newTagVC, animated: true) } + + private func fillTag() { + if let tag = curTag { + let field = categoryField.inputField + field.text = tag.name + let img = GMExpenseIcon() + img.loadIcon(src: tag.icon) + img.backgroundColor = K.Color.background + img.anchor(width: 42, height: 42) + field.rightView = img + field.rightViewMode = .always + } + } } extension AddExpenseForm { diff --git a/GoMoney/Scences/AddExpense/AddExpenseViewController.swift b/GoMoney/Scences/AddExpense/AddExpenseViewController.swift index a259f26..297cc92 100644 --- a/GoMoney/Scences/AddExpense/AddExpenseViewController.swift +++ b/GoMoney/Scences/AddExpense/AddExpenseViewController.swift @@ -95,7 +95,7 @@ class AddExpenseViewController: GMMainViewController { top: addExpenseForm.bottomAnchor, left: addExpenseForm.leftAnchor, right: addExpenseForm.rightAnchor, - paddingTop: 24) + paddingTop: 32) saveButton.anchor( right: view.rightAnchor, diff --git a/GoMoney/Service/DataService.swift b/GoMoney/Service/DataService.swift index c810c46..395bec6 100644 --- a/GoMoney/Service/DataService.swift +++ b/GoMoney/Service/DataService.swift @@ -127,6 +127,7 @@ class DataService { func updateExpense(oldTrans: Expense, newTrans: Expense, completion: ((Error?) -> Void)? = nil) { do { try realm.write { + oldTrans.type = newTrans.type oldTrans.amount = newTrans.amount oldTrans.tag = newTrans.tag oldTrans.note = newTrans.note