mvcgen 0.1.20 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -15
  3. data/lib/mvcgen/generator.rb +61 -1
  4. data/lib/mvcgen/version.rb +1 -1
  5. data/lib/templates/default/swift/Controllers/Login/ForgetPasswordVC.swift +32 -39
  6. data/lib/templates/default/swift/Controllers/Login/LoginVC.swift +21 -11
  7. data/lib/templates/default/swift/Controllers/Login/RegisterVC.swift +69 -59
  8. data/lib/templates/default/swift/Controllers/Notifications/Cells/NotificationCell.swift +28 -1
  9. data/lib/templates/default/swift/Controllers/Notifications/NotificationsVC.swift +17 -27
  10. data/lib/templates/default/swift/Controllers/OtherLogin/ForgetPasswordTVC.swift +9 -10
  11. data/lib/templates/default/swift/Controllers/OtherLogin/LoginTVC.swift +1 -1
  12. data/lib/templates/default/swift/Controllers/OtherLogin/OtherRegisterVC.swift +11 -10
  13. data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageVC.swift +22 -21
  14. data/lib/templates/default/swift/Controllers/OtherLogin/TermsAndConditionsVC.swift +8 -7
  15. data/lib/templates/default/swift/Controllers/Profile/AboutUsVC.swift +23 -11
  16. data/lib/templates/default/swift/Controllers/Profile/Cells/AboutUsImageCell.swift +21 -5
  17. data/lib/templates/default/swift/Controllers/Profile/Cells/DescriptionCell.swift +10 -0
  18. data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCell.swift +5 -0
  19. data/lib/templates/default/swift/Controllers/Profile/Cells/FavoriteCollectionCell.swift +2 -0
  20. data/lib/templates/default/swift/Controllers/Profile/Cells/ImagesCollectionViewCell.swift +12 -0
  21. data/lib/templates/default/swift/Controllers/Profile/ProfileContainerVC.swift +18 -14
  22. data/lib/templates/default/swift/Controllers/Profile/ProfileTVC.swift +65 -85
  23. data/lib/templates/default/swift/Controllers/Tutorial/TutorialVC.swift +12 -9
  24. data/lib/templates/default/swift/Extensions/Buttons.swift +0 -12
  25. data/lib/templates/default/swift/Extensions/{ArrayDuplicates.swift → Utils+Array.swift} +1 -1
  26. data/lib/templates/default/swift/Extensions/{Images.swift → Utils+Images.swift} +8 -7
  27. data/lib/templates/default/swift/Extensions/Utils+String.swift +34 -0
  28. data/lib/templates/default/swift/Extensions/Utils+UIButton.swift +21 -0
  29. data/lib/templates/default/swift/Extensions/{UIColorExtensions.swift → Utils+UIColor.swift} +1 -1
  30. data/lib/templates/default/swift/Extensions/{TableViewEmptyView.swift → Utils+UITableView.swift} +1 -2
  31. data/lib/templates/default/swift/Extensions/Utils+UITextField.swift +22 -0
  32. data/lib/templates/default/swift/Extensions/{GradientView.swift → Utils+UIView.swift} +82 -2
  33. data/lib/templates/default/swift/Extensions/{TapEffectExtension.swift → Utils+UIViewController.swift} +18 -1
  34. data/lib/templates/default/swift/Helper/Utils.swift +1 -1
  35. data/lib/templates/default/swift/UI/Storyboards/Home.storyboard +4 -4
  36. data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/EmptyTableLabelView.xib +1 -1
  37. metadata +11 -18
  38. data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/Contents.json +0 -21
  39. data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/icons8-beach-64.png +0 -0
  40. data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/Contents.json +0 -21
  41. data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/icons8-no-baggage-100.png +0 -0
  42. data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/Contents.json +0 -21
  43. data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/icons8-signpost-64.png +0 -0
  44. data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/Contents.json +0 -21
  45. data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/sunbed.png +0 -0
  46. data/lib/templates/default/swift/Extensions/HideKeyboard.swift +0 -22
  47. data/lib/templates/default/swift/Extensions/InnerShadowExtension.swift +0 -83
@@ -7,19 +7,24 @@
7
7
  //
8
8
 
9
9
  import UIKit
10
- import Kingfisher
11
10
 
12
11
  class AboutUsImageCell: UITableViewCell {
13
12
 
13
+ // MARK: - Outlets
14
+
14
15
  @IBOutlet weak var collectionView: UICollectionView!
15
16
  @IBOutlet weak var pageControl: UIPageControl!
17
+
18
+ // MARK: - Properties
19
+
16
20
  var pictures : [Pic] = []
17
-
18
21
  var thisWidth:CGFloat = 0
19
-
22
+
23
+ // MARK: - Life cycle
20
24
 
21
25
  override func awakeFromNib() {
22
26
  super.awakeFromNib()
27
+
23
28
  self.collectionView.dataSource = self
24
29
  self.collectionView.delegate = self
25
30
 
@@ -35,31 +40,42 @@ class AboutUsImageCell: UITableViewCell {
35
40
  }
36
41
 
37
42
  }
43
+
44
+ // MARK: - UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout
45
+
38
46
  extension AboutUsImageCell : UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout{
47
+
39
48
  func numberOfSections(in collectionView: UICollectionView) -> Int {
49
+
40
50
  return self.pictures.count
41
51
  }
42
52
 
43
53
  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
54
+
44
55
  return 1
45
56
  }
46
57
 
47
58
  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
48
59
 
49
60
  let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imagesCollectionViewCell", for: indexPath) as! ImagesCollectionViewCell
61
+
50
62
  let picture = pictures[indexPath.section]
51
- cell.imageOutlet.kf.indicatorType = .activity
52
- cell.imageOutlet.kf.setImage(with: URL(string : picture.url))
63
+
64
+ cell.configure(with: picture)
65
+
53
66
  return cell
54
67
 
55
68
  }
56
69
 
57
70
  func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
71
+
58
72
  self.pageControl.currentPage = indexPath.section
59
73
  }
60
74
 
61
75
  func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
76
+
62
77
  thisWidth = self.collectionView.frame.width
78
+
63
79
  return CGSize(width: thisWidth, height: self.collectionView.frame.height)
64
80
  }
65
81
 
@@ -7,10 +7,20 @@
7
7
  //
8
8
 
9
9
  import UIKit
10
+ import Kingfisher
10
11
 
11
12
  class DescriptionCell: UITableViewCell {
12
13
 
14
+ // MARK: - Outlets
15
+
13
16
  @IBOutlet weak var descriptionTextView: UITextView!
17
+
18
+ func configure(with userHistory: UserHistory) {
19
+
20
+ self.destinationLabel.text = userHistory.name.capitalized
21
+ self.destinationBackgroundImage.kf.indicatorType = .activity
22
+ self.destinationBackgroundImage.kf.setImage(with: URL(string: history.thumbnailUrl), options: [.transition(.fade(0.2))])
23
+ }
14
24
 
15
25
  }
16
26
 
@@ -10,6 +10,8 @@ import UIKit
10
10
 
11
11
  class DestinationCell: UICollectionViewCell {
12
12
 
13
+ // MARK: - Outlets
14
+
13
15
  @IBOutlet weak var destinationBackgroundImage: UIImageView!
14
16
 
15
17
  @IBOutlet weak var destinationLabel: UILabel!
@@ -18,8 +20,11 @@ class DestinationCell: UICollectionViewCell {
18
20
 
19
21
  @IBOutlet weak var tickImage: UIImageView!
20
22
 
23
+ // MARK: - Life cycle
24
+
21
25
  override func awakeFromNib() {
22
26
  super.awakeFromNib()
27
+
23
28
  // Initialization code
24
29
  self.blueGradientView.applyGradient(withColours: [Colors.firstGradientColor, UIColor.clear], alpha: 0.8, angle: 90)
25
30
  }
@@ -10,6 +10,8 @@ import UIKit
10
10
 
11
11
  class FavoriteCollectionCell: UICollectionViewCell {
12
12
 
13
+ // MARK: - Outlets
14
+
13
15
  @IBOutlet weak var favoriteBackgroundView: UIView! {
14
16
  didSet {
15
17
  favoriteBackgroundView.layer.cornerRadius = favoriteBackgroundView.frame.size.height/2
@@ -7,9 +7,21 @@
7
7
  //
8
8
 
9
9
  import UIKit
10
+ import Kingfisher
10
11
 
11
12
  class ImagesCollectionViewCell: UICollectionViewCell {
13
+
14
+ // MARK: - Outlets
15
+
12
16
  @IBOutlet weak var imageOutlet: UIImageView!
17
+
18
+ // MARK: - Life cycle
19
+
20
+ func configure(with picture: Pic) {
21
+
22
+ self.imageOutlet.kf.indicatorType = .activity
23
+ self.imageOutlet.kf.setImage(with: URL(string : picture.url))
24
+ }
13
25
 
14
26
  }
15
27
 
@@ -10,12 +10,22 @@ import UIKit
10
10
 
11
11
  class ProfileContainerVC: UIViewController {
12
12
 
13
+ // MARK: - Outlets
14
+
13
15
  @IBOutlet weak var gradientView: UIView!
14
16
 
15
17
  @IBOutlet weak var containerView: UIView!
18
+
19
+ // MARK: - Properties
16
20
 
17
- let homeStoryboard = UIStoryboard(name: "Home", bundle: Bundle.main)
21
+ private static let homeStoryboard = UIStoryboard(name: "Home", bundle: Bundle.main)
22
+
23
+ private lazy var profileTVC: ProfileTVC = {
24
+ return self.homeStoryboard.instantiateViewController(withIdentifier: "ProfileTVC") as! ProfileTVC
25
+ }()
18
26
 
27
+ // MARK: - Life cycle
28
+
19
29
  override func viewDidLoad() {
20
30
  super.viewDidLoad()
21
31
 
@@ -23,31 +33,24 @@ class ProfileContainerVC: UIViewController {
23
33
 
24
34
  self.add(asChildViewController: self.profileTVC)
25
35
  }
36
+
26
37
  override func viewDidLayoutSubviews() {
27
38
  super.viewDidLayoutSubviews()
28
-
29
- // self.gradientView.backgroundColor = ColorConstants.backgroundColor
30
-
39
+
31
40
  self.gradientView.applyGradient(withColours: [Colors.firstGradientColor, Colors.thirdGradientColor], locations: [0, 0.5])
32
-
33
41
  }
42
+
43
+ // MARK: - Private
34
44
 
35
- func setupNavigationBar() {
45
+ private func setupNavigationBar() {
46
+
36
47
  self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
37
48
  self.navigationController?.navigationBar.shadowImage = UIImage()
38
49
  self.navigationController?.navigationBar.isTranslucent = true
39
50
  self.navigationController?.view.backgroundColor = UIColor.clear
40
-
41
51
  }
42
52
 
43
- private lazy var profileTVC: ProfileTVC = {
44
-
45
- return self.homeStoryboard.instantiateViewController(withIdentifier: "ProfileTVC") as! ProfileTVC
46
-
47
- }()
48
-
49
53
  private func add(asChildViewController viewController: UIViewController) {
50
- addChildViewController(viewController)
51
54
 
52
55
  containerView.addSubview(viewController.view)
53
56
 
@@ -60,6 +63,7 @@ class ProfileContainerVC: UIViewController {
60
63
  }
61
64
 
62
65
  private func remove(asChildViewController viewController: UIViewController) {
66
+
63
67
  // Notify Child View Controller
64
68
  viewController.willMove(toParentViewController: nil)
65
69
 
@@ -25,7 +25,6 @@ struct UserHistory{
25
25
 
26
26
  class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadProtocol, UITextViewDelegate {
27
27
 
28
-
29
28
  // MARK: - Outlets
30
29
 
31
30
  @IBOutlet weak var editProfileImageButton: UIButton! {
@@ -117,19 +116,14 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
117
116
 
118
117
  // MARK: - Properties
119
118
 
120
- let homeStoryboard = UIStoryboard(name: "Home", bundle: Bundle.main)
119
+ private static let homeStoryboard = UIStoryboard(name: "Home", bundle: Bundle.main)
121
120
 
122
121
  var profileImageChanged: Bool = false
123
122
 
124
123
  var favorites: [Favorite] = []{
125
124
  didSet{
126
- if self.favorites.count > 0{
127
- self.noFavoritesView.isHidden = true
128
- self.favoritesCollectionView.isHidden = false
129
- } else {
130
- self.noFavoritesView.isHidden = false
131
- self.favoritesCollectionView.isHidden = true
132
- }
125
+ self.noFavoritesView.isHidden = self.favorites.count > 0 ? true : false
126
+ self.favoritesCollectionView.isHidden = self.favorites.count > 0 ? false : true
133
127
  }
134
128
  }
135
129
 
@@ -137,13 +131,8 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
137
131
 
138
132
  var userHistory: [UserHistory] = []{
139
133
  didSet{
140
- if self.userHistory.count > 0{
141
- self.noTravelsView.isHidden = true
142
- self.historyTripsCollectionView.isHidden = false
143
- } else {
144
- self.noTravelsView.isHidden = false
145
- self.historyTripsCollectionView.isHidden = true
146
- }
134
+ self.noTravelsView.isHidden = self.userHistory.count > 0 ? true : false
135
+ self.historyTripsCollectionView.isHidden = self.userHistory.count > 0 ? false : true
147
136
  }
148
137
  }
149
138
 
@@ -155,19 +144,19 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
155
144
 
156
145
  var newNotifications = false{
157
146
  didSet{
158
- if newNotifications{
159
- self.notificationBadgeView.isHidden = false
160
- } else {
161
- self.notificationBadgeView.isHidden = true
162
- }
147
+ self.notificationBadgeView.isHidden = !newNotifications
163
148
  }
164
149
  }
165
150
 
166
151
  var notifications = [Notif]()
167
152
 
153
+ // MARK: - Life cycle
154
+
168
155
  override func viewDidLoad() {
169
156
  super.viewDidLoad()
157
+
170
158
  self.fetchData()
159
+
171
160
  self.setupViews()
172
161
 
173
162
  if #available(iOS 11.0, *) {
@@ -183,23 +172,30 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
183
172
  hideKeyboardWhenTappedAround()
184
173
 
185
174
  NotificationCenter.default.addObserver(self, selector: #selector(handleFavoritesUpdated(_:)), name: Notification.Name("FavoritesUpdated"), object: nil)
186
-
187
-
188
175
  }
189
176
 
190
177
 
191
178
  override func viewWillAppear(_ animated: Bool) {
192
179
  super.viewWillAppear(true)
193
- //self.updateFavourites()
180
+
194
181
  self.navigationController?.navigationBar.isHidden = false
195
182
  self.navigationItem.hidesBackButton = true
196
183
 
197
184
  setNotificationBadge()
185
+ }
186
+
187
+ override func viewDidLayoutSubviews() {
188
+ super.viewDidLayoutSubviews()
198
189
 
190
+ self.aboutMeTextView.layoutIfNeeded()
191
+ self.aboutMeTextView.changeBorderColor(newColor: UIColor.white)
199
192
  }
200
193
 
201
- func setNotificationBadge(){
202
- // TODO: enable when done
194
+ // MARK: - Private
195
+
196
+ private func setNotificationBadge(){
197
+
198
+ // TODO: Enable when done
203
199
  // APIManager.sharedInstance.getNotifications(){
204
200
  // result, notifications in
205
201
  // self.notifications = notifications.sorted(by: {$0.createdDate.compare($1.createdDate) == .orderedDescending})
@@ -217,8 +213,10 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
217
213
  // }
218
214
  }
219
215
 
220
-
221
- func fetchData() {
216
+ private func fetchData() {
217
+
218
+ // TODO: change for local or remote user data
219
+
222
220
  self.profileImageLoading.startAnimating()
223
221
 
224
222
  self.emailTextField.text = "John"
@@ -228,19 +226,20 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
228
226
  self.phoneCountry = "Uruguay"
229
227
  self.phonePrefix.text = "+598"
230
228
 
231
- self.aboutMeTextView.text = NSLocalizedString("Add something about yourself!", comment: "")
229
+ self.aboutMeTextView.text = "Add something about yourself!"
232
230
  self.aboutMeTextView.textColor = UIColor.lightGray
233
231
 
234
232
  self.profileImageLoading.stopAnimating()
233
+
235
234
  self.editProfileImageView.image = Asset.userTestPhoto.image
236
235
 
237
- // TODO: Add favorites and history
236
+ // TODO: Add favorites and history or something like that if needed
238
237
 
239
238
  }
240
239
 
241
- func setupViews() {
240
+ private func setupViews() {
242
241
 
243
- self.notificationImage.image = UIImage(named: "notification")
242
+ self.notificationImage.image = Asset.notification.image
244
243
 
245
244
  self.logoutButton.layoutIfNeeded()
246
245
  self.logoutButton.layer.cornerRadius = self.logoutButton.frame.height/7
@@ -271,21 +270,16 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
271
270
  historyTripsCollectionView.dataSource = self
272
271
  historyTripsCollectionView.isMultipleTouchEnabled = false
273
272
  historyTripsCollectionView.allowsSelection = false
273
+
274
274
  let destNib = UINib(nibName: "DestinationCellView", bundle: nil)
275
275
  historyTripsCollectionView.register(destNib, forCellWithReuseIdentifier: "DestinationCellView")
276
276
 
277
277
  }
278
278
 
279
- override func viewDidLayoutSubviews() {
280
- super.viewDidLayoutSubviews()
281
-
282
- self.aboutMeTextView.layoutIfNeeded()
283
- self.aboutMeTextView.changeBorderColor(newColor: UIColor.white)
284
- }
285
-
286
279
  // MARK: - TextViewDelegate
287
280
 
288
281
  func textViewDidBeginEditing(_ textView: UITextView) {
282
+
289
283
  if textView.textColor == UIColor.lightGray {
290
284
  textView.text = nil
291
285
  textView.textColor = UIColor.white
@@ -293,8 +287,9 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
293
287
  }
294
288
 
295
289
  func textViewDidEndEditing(_ textView: UITextView) {
290
+
296
291
  if textView.text.isEmpty {
297
- textView.text = NSLocalizedString("Add something about yourself!", comment: "")
292
+ textView.text = "Add something about yourself!"
298
293
  textView.textColor = UIColor.lightGray
299
294
  }
300
295
  }
@@ -321,22 +316,24 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
321
316
  }
322
317
 
323
318
  override var prefersStatusBarHidden: Bool {
319
+
324
320
  return navigationController?.isNavigationBarHidden ?? false
325
321
  }
326
322
 
327
323
  // MARK: - Actions
328
324
 
329
- // function which is triggered when handleTap is called
325
+ /// Function which is triggered when handleTap is called
330
326
  @objc func handleNotificationTap(_ sender: UITapGestureRecognizer) {
331
- self.animateViewBounceAndZoom(viewToAnimate: self.notificationButton)
327
+
332
328
  guard let vc = self.homeStoryboard.instantiateViewController(withIdentifier: "NotificationsVC") as? NotificationsVC else { return }
329
+ self.animateViewBounceAndZoom(viewToAnimate: self.notificationButton)
333
330
  vc.delegate = self
334
331
  vc.notifications = self.notifications
335
332
  self.navigationController?.pushViewController(vc, animated: true)
336
333
  }
337
334
 
338
335
  func setAsRead(value: Bool) {
339
- // TODO: enable when done
336
+ // TODO: Enable when done
340
337
  // if value {
341
338
  // APIManager.sharedInstance.readNotifications(){
342
339
  // result in
@@ -361,7 +358,6 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
361
358
 
362
359
  self.profileImageChanged = true
363
360
  self.editProfileImageView.image = image
364
-
365
361
  })
366
362
  }
367
363
  }
@@ -369,9 +365,9 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
369
365
  }
370
366
 
371
367
  @IBAction func saveDataTapped(_ sender: UIButton) {
368
+
372
369
  if self.validateData(){
373
370
  // TODO
374
-
375
371
  }
376
372
  }
377
373
 
@@ -420,42 +416,25 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
420
416
  //
421
417
  // }
422
418
  // }
423
-
424
- func isValidEmail(_ testStr:String) -> Bool {
425
- let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
426
- let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
427
- return emailTest.evaluate(with: testStr)
428
- }
429
-
430
- func isValidName(_ testStr:String) -> Bool {
431
- let nameRegEx = "[A-Za-z\\s]+"
432
- let nameTest = NSPredicate(format:"SELF MATCHES %@", nameRegEx)
433
- return nameTest.evaluate(with: testStr)
434
- }
435
-
436
- func isValidPhone(_ testStr:String) -> Bool {
437
- let phoneRegEx = "[0-9]*"
438
- let phoneTest = NSPredicate(format:"SELF MATCHES %@", phoneRegEx)
439
- return phoneTest.evaluate(with: testStr)
440
- }
441
-
419
+
442
420
  func validateData() -> Bool{
443
- if let name = self.nameTextField.text, let lastname = self.lastnameTextField.text, let phone = self.phoneTextField.text {
444
- if !isValidName(name){
445
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Invalid name", comment: ""), and: "")
446
- return false
447
- } else if !isValidName(lastname){
448
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Invalid lastname", comment: ""), and: "")
449
- return false
450
- } else if !isValidPhone(phone.trimmingCharacters(in: .whitespacesAndNewlines)) {
451
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Invalid phone number", comment: ""), and: "")
452
- return false
453
- }
421
+ if !self.nameTextField.isName(){
422
+ APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Invalid name", comment: ""), and: "")
423
+ return false
424
+ }
425
+ if !self.lastnameTextField.isName(){
426
+ APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Invalid lastname", comment: ""), and: "")
427
+ return false
428
+ }
429
+ if !self.phoneTextField.isPhone() {
430
+ APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Invalid phone number", comment: ""), and: "")
431
+ return false
454
432
  }
455
433
  return true
456
434
  }
457
435
 
458
436
  @IBAction func selectCountryTapped(_ sender: UIButton) {
437
+
459
438
  if self.countries.isEmpty {
460
439
  // TODO: Set countries
461
440
  } else {
@@ -464,6 +443,7 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
464
443
  }
465
444
 
466
445
  func addActionSheetPicker(_ sender: UIButton){
446
+
467
447
  let prevCountryValue = self.phonePrefix.text
468
448
  let prevPhoneCountryValue = self.phoneCountry
469
449
  let acp = ActionSheetStringPicker(title: "", rows: self.countries.map{$0.name}, initialSelection: 0, doneBlock: {
@@ -495,13 +475,13 @@ class ProfileTVC: UITableViewController, UITextFieldDelegate, NotificationReadPr
495
475
  }
496
476
 
497
477
  @IBAction func aboutUsTapped(_ sender: UIButton) {
478
+
498
479
  guard let vc = self.homeStoryboard.instantiateViewController(withIdentifier: "AboutUsVC") as? AboutUsVC else { return }
499
480
  self.navigationController?.pushViewController(vc, animated: true)
500
481
  }
501
482
 
502
483
  @objc func handleFavoritesUpdated(_ notification: Foundation.Notification) {
503
484
  //TODO: Get favorites again
504
-
505
485
  }
506
486
 
507
487
  }
@@ -539,36 +519,36 @@ extension ProfileTVC: UICollectionViewDelegate, UICollectionViewDataSource, UICo
539
519
  let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "FavoriteCollectionCell", for: indexPath) as! FavoriteCollectionCell
540
520
 
541
521
  let favorite = favorites[indexPath.row]
522
+
542
523
  cell.destinationLabel.text = favorite.name
543
524
  cell.removeButton.addTarget(self, action: #selector(handleRemoveButton(_:)), for: .touchUpInside)
525
+
544
526
  return cell
545
-
546
527
  } else {
528
+
547
529
  let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "DestinationCellView", for: indexPath) as! DestinationCell
548
530
 
549
531
  let history = userHistory[indexPath.row]
550
- cell.destinationLabel.text = history.name.capitalized
551
- cell.destinationBackgroundImage.kf.indicatorType = .activity
552
- cell.destinationBackgroundImage.kf.setImage(with: URL(string: history.thumbnailUrl), options: [.transition(.fade(0.2))])
553
- // for dest in travelGroup.destinations {
554
- // cell.cityLabel.text = "\(cell.cityLabel.text!)\(travelGroup.destinations[0].destination?.city ?? ""), "
555
- // }
556
- // cell.cityLabel.text?.removeLast(2)
532
+
533
+ cell.configure(with: userHistory)
534
+
557
535
  return cell
558
536
  }
559
537
  }
560
538
 
561
539
  @objc func handleRemoveButton(_ sender: UIButton) {
540
+
562
541
  let touchPoint = sender.convert(CGPoint.zero, to: self.favoritesCollectionView)
563
542
  if let clickedIndexPath = self.favoritesCollectionView.indexPathForItem(at: touchPoint) {
564
543
  self.noMoreFavorites.append(favorites[clickedIndexPath.row])
565
544
  let removeDest = self.favorites.remove(at: clickedIndexPath.row)
566
545
  self.noMoreFavorites.append(removeDest)
567
546
  self.favoritesCollectionView.deleteItems(at: [clickedIndexPath])
568
- }
547
+ }
569
548
  }
570
549
 
571
550
  func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
551
+
572
552
  if collectionView == favoritesCollectionView {
573
553
  let size = (favorites[indexPath.row].name as NSString).size(withAttributes: [NSAttributedStringKey.font : UIFont.systemFont(ofSize: 16.0)])
574
554
  return CGSize(width: size.width + 65, height: 40)