mvcgen 0.1.14 → 0.1.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (191) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mvcgen/filemanager.rb +1 -1
  3. data/lib/mvcgen/generator.rb +36 -33
  4. data/lib/mvcgen/version.rb +1 -1
  5. data/lib/templates/default/mvcspec.yml +1 -1
  6. data/lib/templates/default/podfile/Podfile +73 -0
  7. data/lib/templates/default/swift/AppDelegate.swift +181 -0
  8. data/lib/templates/default/swift/Assets.xcassets/AppIcon.appiconset/Contents.json +133 -0
  9. data/lib/templates/default/swift/Assets.xcassets/Back.imageset/Contents.json +21 -0
  10. data/lib/templates/default/swift/Assets.xcassets/Back.imageset/icons8-back-filled-100-2.png +0 -0
  11. data/lib/templates/default/swift/Assets.xcassets/Contents.json +6 -0
  12. data/lib/templates/default/swift/Assets.xcassets/Down.imageset/Contents.json +21 -0
  13. data/lib/templates/default/swift/Assets.xcassets/Down.imageset/icons8-expand-arrow-filled-100.png +0 -0
  14. data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/Contents.json +21 -0
  15. data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/icons8-forward-filled-100.png +0 -0
  16. data/lib/templates/default/swift/Assets.xcassets/Key.imageset/Contents.json +1 -0
  17. data/lib/templates/default/swift/Assets.xcassets/Key.imageset/universal_Key.pdf +0 -0
  18. data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/Contents.json +1 -0
  19. data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/universal_Shopping-cart.pdf +0 -0
  20. data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/Contents.json +21 -0
  21. data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/icons8-Checkmark-96 (1).png +0 -0
  22. data/lib/templates/default/swift/Assets.xcassets/Up.imageset/Contents.json +22 -0
  23. data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-100.png +0 -0
  24. data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-50.png +0 -0
  25. data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/Contents.json +21 -0
  26. data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/icons8-uruguay-40.png +0 -0
  27. data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/Contents.json +1 -0
  28. data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/universal_Wallet.pdf +0 -0
  29. data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Contents.json +12 -0
  30. data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Icons_NotATour_Welcome_001.pdf +0 -0
  31. data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Contents.json +12 -0
  32. data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Icons_NotATour_Welcome_002.pdf +0 -0
  33. data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Contents.json +12 -0
  34. data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Icons_NotATour_Welcome_003.pdf +0 -0
  35. data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Contents.json +12 -0
  36. data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Icons_NotATour_Welcome_004.pdf +0 -0
  37. data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/Contents.json +21 -0
  38. data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/icons8-beach-64.png +0 -0
  39. data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/Contents.json +21 -0
  40. data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/icons8-no-baggage-100.png +0 -0
  41. data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/Contents.json +21 -0
  42. data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/icons8-signpost-64.png +0 -0
  43. data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/Contents.json +21 -0
  44. data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/sunbed.png +0 -0
  45. data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/Contents.json +21 -0
  46. data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/arrow.pdf +0 -0
  47. data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/Contents.json +22 -0
  48. data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage.png +0 -0
  49. data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage@2x.png +0 -0
  50. data/lib/templates/default/swift/Assets.xcassets/burger.imageset/Contents.json +21 -0
  51. data/lib/templates/default/swift/Assets.xcassets/burger.imageset/burger.pdf +0 -0
  52. data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/Contents.json +12 -0
  53. data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/icons8-calendar.pdf +70 -0
  54. data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/Contents.json +12 -0
  55. data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/calendar.pdf +0 -0
  56. data/lib/templates/default/swift/Assets.xcassets/dots.imageset/Contents.json +24 -0
  57. data/lib/templates/default/swift/Assets.xcassets/dots.imageset/dots.pdf +0 -0
  58. data/lib/templates/default/swift/Assets.xcassets/edit.imageset/Contents.json +12 -0
  59. data/lib/templates/default/swift/Assets.xcassets/edit.imageset/edit.pdf +0 -0
  60. data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/Contents.json +12 -0
  61. data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/empty state loging.pdf +0 -0
  62. data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/Contents.json +12 -0
  63. data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/icons8-envelope.pdf +70 -0
  64. data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/Contents.json +22 -0
  65. data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-100.png +0 -0
  66. data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-50.png +0 -0
  67. data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/Contents.json +24 -0
  68. data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/icons8-facebook-f.pdf +68 -0
  69. data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/Contents.json +12 -0
  70. data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/icons8-adjust (3).pdf +0 -0
  71. data/lib/templates/default/swift/Assets.xcassets/filter.imageset/Contents.json +15 -0
  72. data/lib/templates/default/swift/Assets.xcassets/filter.imageset/filter.pdf +0 -0
  73. data/lib/templates/default/swift/Assets.xcassets/food.imageset/Contents.json +21 -0
  74. data/lib/templates/default/swift/Assets.xcassets/food.imageset/food.png +0 -0
  75. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/Contents.json +23 -0
  76. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1.png +0 -0
  77. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@2x.png +0 -0
  78. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@3x.png +0 -0
  79. data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/Contents.json +12 -0
  80. data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/favortio activo.pdf +0 -0
  81. data/lib/templates/default/swift/Assets.xcassets/heart.imageset/Contents.json +12 -0
  82. data/lib/templates/default/swift/Assets.xcassets/heart.imageset/favorito inactivo.pdf +0 -0
  83. data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/Contents.json +12 -0
  84. data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/icons8-delete (3).pdf +69 -0
  85. data/lib/templates/default/swift/Assets.xcassets/lock.imageset/Contents.json +12 -0
  86. data/lib/templates/default/swift/Assets.xcassets/lock.imageset/icons8-lock.pdf +69 -0
  87. data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/Contents.json +12 -0
  88. data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/man-avatar.pdf +1149 -1
  89. data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/Contents.json +21 -0
  90. data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/icons8-filled-circle-filled-100.png +0 -0
  91. data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/Contents.json +21 -0
  92. data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/page-1@2x.png +0 -0
  93. data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/Contents.json +12 -0
  94. data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/notificaciones.pdf +0 -0
  95. data/lib/templates/default/swift/Assets.xcassets/notification.imageset/Contents.json +21 -0
  96. data/lib/templates/default/swift/Assets.xcassets/notification.imageset/icons8-notification-100.png +0 -0
  97. data/lib/templates/default/swift/Assets.xcassets/other.imageset/Contents.json +21 -0
  98. data/lib/templates/default/swift/Assets.xcassets/other.imageset/other.png +0 -0
  99. data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/Contents.json +21 -0
  100. data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/page-1@2x.png +0 -0
  101. data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/Contents.json +21 -0
  102. data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/page-1@2x.png +0 -0
  103. data/lib/templates/default/swift/Assets.xcassets/photo.imageset/Contents.json +24 -0
  104. data/lib/templates/default/swift/Assets.xcassets/photo.imageset/photo.pdf +0 -0
  105. data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/Contents.json +21 -0
  106. data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/icons8-plus-math-26.png +0 -0
  107. data/lib/templates/default/swift/Assets.xcassets/plus.imageset/+.pdf +0 -0
  108. data/lib/templates/default/swift/Assets.xcassets/plus.imageset/Contents.json +12 -0
  109. data/lib/templates/default/swift/Assets.xcassets/register.imageset/Contents.json +12 -0
  110. data/lib/templates/default/swift/Assets.xcassets/register.imageset/registro.pdf +0 -0
  111. data/lib/templates/default/swift/Assets.xcassets/search.imageset/Contents.json +15 -0
  112. data/lib/templates/default/swift/Assets.xcassets/search.imageset/search.pdf +0 -0
  113. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/Contents.json +23 -0
  114. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-100.png +0 -0
  115. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-50.png +0 -0
  116. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-500.png +0 -0
  117. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/Contents.json +23 -0
  118. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape.png +0 -0
  119. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@2x.png +0 -0
  120. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@3x.png +0 -0
  121. data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/Contents.json +21 -0
  122. data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/icons8-signpost-50.png +0 -0
  123. data/lib/templates/default/swift/Assets.xcassets/stars.imageset/Contents.json +24 -0
  124. data/lib/templates/default/swift/Assets.xcassets/stars.imageset/stars.pdf +0 -0
  125. data/lib/templates/default/swift/Assets.xcassets/terms.imageset/Contents.json +12 -0
  126. data/lib/templates/default/swift/Assets.xcassets/terms.imageset/terminos y condiciones.pdf +0 -0
  127. data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/Contents.json +12 -0
  128. data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/tickets.pdf +0 -0
  129. data/lib/templates/default/swift/Assets.xcassets/user.imageset/Contents.json +22 -0
  130. data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-100.png +0 -0
  131. data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-50.png +0 -0
  132. data/lib/templates/default/swift/Assets.xcassets/visa.imageset/Contents.json +21 -0
  133. data/lib/templates/default/swift/Assets.xcassets/visa.imageset/visa.png +0 -0
  134. data/lib/templates/default/swift/Config/Config.swift +1 -1
  135. data/lib/templates/default/swift/Controllers/Login/ForgetPasswordVC.swift +125 -0
  136. data/lib/templates/default/swift/Controllers/Login/LoginVC.swift +244 -0
  137. data/lib/templates/default/swift/Controllers/Login/RegisterVC.swift +213 -0
  138. data/lib/templates/default/swift/Controllers/Notifications/Cells/NotificationCell.swift +51 -0
  139. data/lib/templates/default/swift/Controllers/Notifications/NotificationsVC.swift +164 -0
  140. data/lib/templates/default/swift/Controllers/OtherLogin/ForgetPasswordTVC.swift +98 -0
  141. data/lib/templates/default/swift/Controllers/OtherLogin/LoginTVC.swift +245 -0
  142. data/lib/templates/default/swift/Controllers/OtherLogin/OtherRegisterVC.swift +299 -0
  143. data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageCell.swift +17 -0
  144. data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageVC.swift +116 -0
  145. data/lib/templates/default/swift/Controllers/OtherLogin/TermsAndConditionsVC.swift +76 -0
  146. data/lib/templates/default/swift/Controllers/Profile/AboutUsVC.swift +93 -0
  147. data/lib/templates/default/swift/Controllers/Profile/Cells/AboutUsImageCell.swift +66 -0
  148. data/lib/templates/default/swift/Controllers/Profile/Cells/DescriptionCell.swift +16 -0
  149. data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCell.swift +35 -0
  150. data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCellView.xib +84 -0
  151. data/lib/templates/default/swift/Controllers/Profile/Cells/FavoriteCollectionCell.swift +24 -0
  152. data/lib/templates/default/swift/Controllers/Profile/Cells/ImagesCollectionViewCell.swift +15 -0
  153. data/lib/templates/default/swift/Controllers/Profile/ProfileContainerVC.swift +72 -0
  154. data/lib/templates/default/swift/Controllers/Profile/ProfileTVC.swift +581 -0
  155. data/lib/templates/default/swift/Controllers/Tutorial/TutorialVC.swift +121 -0
  156. data/lib/templates/default/swift/Extensions/ArrayDuplicates.swift +35 -0
  157. data/lib/templates/default/swift/Extensions/Buttons.swift +1 -1
  158. data/lib/templates/default/swift/Extensions/CustomCamera.swift +65 -0
  159. data/lib/templates/default/swift/Extensions/GradientView.swift +121 -0
  160. data/lib/templates/default/swift/Extensions/HideKeyboard.swift +22 -0
  161. data/lib/templates/default/swift/Extensions/Images.swift +82 -0
  162. data/lib/templates/default/swift/Extensions/InnerShadowExtension.swift +83 -0
  163. data/lib/templates/default/swift/Extensions/TableViewEmptyView.swift +30 -0
  164. data/lib/templates/default/swift/Extensions/TapEffectExtension.swift +48 -0
  165. data/lib/templates/default/swift/Extensions/{ColorHex.swift → UIColorExtensions.swift} +2 -2
  166. data/lib/templates/default/swift/Extensions/UnderlinedTextView.swift +61 -0
  167. data/lib/templates/default/swift/Extensions/UnderlinedWithIconTextField.swift +55 -0
  168. data/lib/templates/default/swift/Helper/APIHelper.swift +4 -4
  169. data/lib/templates/default/swift/Helper/APIManager.swift +81 -14
  170. data/lib/templates/default/swift/Helper/APIRequestBody.swift +1 -1
  171. data/lib/templates/default/swift/Helper/AWSManager.swift +1 -1
  172. data/lib/templates/default/swift/Helper/FilesManager.swift +1 -1
  173. data/lib/templates/default/swift/Helper/S3Manager.swift +1 -1
  174. data/lib/templates/default/swift/Helper/Utils.swift +3 -1
  175. data/lib/templates/default/swift/Info.plist +53 -0
  176. data/lib/templates/default/swift/Models/Country.swift +28 -0
  177. data/lib/templates/default/swift/Models/Managers/UserManager.swift +1 -1
  178. data/lib/templates/default/swift/Models/Notif.swift +71 -0
  179. data/lib/templates/default/swift/Models/Responses/BaseResponse.swift +1 -1
  180. data/lib/templates/default/swift/Models/Responses/NotificationResponse.swift +24 -0
  181. data/lib/templates/default/swift/Models/Responses/UserResponse.swift +1 -1
  182. data/lib/templates/default/swift/Models/Responses/UserSingupResponse.swift +1 -1
  183. data/lib/templates/default/swift/Models/User.swift +2 -2
  184. data/lib/templates/default/swift/UI/Storyboards/Home.storyboard +2113 -0
  185. data/lib/templates/default/swift/UI/Storyboards/Login.storyboard +814 -0
  186. data/lib/templates/default/swift/UI/Storyboards/OtherLogin.storyboard +1031 -0
  187. data/lib/templates/default/swift/UI/Views/EmptyTableView/EmptyTableLabelView.swift +18 -0
  188. data/lib/templates/default/swift/UI/Views/EmptyTableView/NoNotificationView.swift +16 -0
  189. data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/EmptyTableLabelView.xib +72 -0
  190. data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/NoNotificationsView.xib +61 -0
  191. metadata +176 -4
@@ -0,0 +1,299 @@
1
+ //
2
+ // OtherRegisterVC.swift
3
+ // MVCGEN
4
+ //
5
+ // Created by Daniel Martinez on 23/7/18.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
+ //
8
+
9
+ import UIKit
10
+ import TextFieldEffects
11
+ import ActionSheetPicker_3_0
12
+
13
+ class OtherRegisterVC: UITableViewController, UITextFieldDelegate {
14
+
15
+ // MARK: - Outlets
16
+
17
+ @IBOutlet var gradientView: UITableView!
18
+ @IBOutlet weak var emailTextField: UnderlinedWithIconTextField!
19
+ @IBOutlet weak var nameTextField: UnderlinedWithIconTextField!
20
+ @IBOutlet weak var lastnameTextField: UnderlinedWithIconTextField!
21
+ @IBOutlet weak var passwordTextField: UnderlinedWithIconTextField!
22
+ @IBOutlet weak var birthdateTextField: UnderlinedWithIconTextField!
23
+
24
+ @IBOutlet weak var cellphoneTextField: UnderlinedWithIconTextField!
25
+
26
+
27
+ @IBOutlet weak var acceptTermsAndConditionsButton: UIButton!{
28
+ didSet {
29
+ acceptTermsAndConditionsButton.layer.masksToBounds = true
30
+ acceptTermsAndConditionsButton.layer.cornerRadius = 5
31
+ }
32
+ }
33
+
34
+ @IBOutlet weak var termsAndConditionsButton: UIButton!
35
+ @IBOutlet weak var registerButton: LoadingButton!
36
+
37
+ @IBOutlet weak var phonePrefix: UILabel!
38
+ @IBOutlet weak var phoneFlagImage: UIImageView!
39
+ @IBOutlet weak var phoneFlagLabel: UILabel!
40
+
41
+ // MARK: - Properties
42
+ var termsAndConditionsAccepted = false
43
+ var phoneCountry = "Uruguay" // ArrayConstants.countries[0]
44
+ var dateFormate = Bool()
45
+
46
+ var countries = [Country]()
47
+
48
+ override func viewDidLoad() {
49
+ super.viewDidLoad()
50
+
51
+ setupViews()
52
+
53
+ hideKeyboardWhenTappedAround()
54
+
55
+ // fetchCountries()
56
+ }
57
+
58
+ func setupViews() {
59
+ self.registerButton.layoutIfNeeded()
60
+ self.registerButton.layer.cornerRadius = self.registerButton.frame.height/7
61
+ self.registerButton.layer.masksToBounds = true
62
+ self.registerButton.activityIndicatorColor = ColorConstants.fromGradient
63
+
64
+ emailTextField.underlined(color: UIColor.white, width: 1.0)
65
+ nameTextField.underlined(color: UIColor.white, width: 1.0)
66
+ lastnameTextField.underlined(color: UIColor.white, width: 1.0)
67
+ passwordTextField.underlined(color: UIColor.white, width: 1.0)
68
+ cellphoneTextField.underlined(color: UIColor.white, width: 1.0)
69
+
70
+ if let firstCountry = self.countries.first {
71
+ self.phoneFlagLabel.text = firstCountry.flag
72
+ self.phoneCountry = firstCountry.name
73
+ self.phonePrefix.text = firstCountry.dial_code
74
+ } else {
75
+ self.phoneFlagLabel.text = "🇺🇾"
76
+ self.phoneCountry = "Uruguay"
77
+ self.phonePrefix.text = "+598"
78
+ }
79
+
80
+ self.emailTextField.delegate = self
81
+ self.nameTextField.delegate = self
82
+ self.lastnameTextField.delegate = self
83
+ self.passwordTextField.delegate = self
84
+ self.cellphoneTextField.delegate = self
85
+ }
86
+
87
+ func fetchCountries(){
88
+ RemoteUserRepository.sharedInstance.getCountries() {
89
+ result, countries in
90
+ if result == .success {
91
+ self.countries = countries
92
+ }
93
+ }
94
+ }
95
+
96
+ override func viewDidLayoutSubviews() {
97
+ super.viewDidLayoutSubviews()
98
+ self.gradientView.applyGradient(withColours: [ColorConstants.fromGradient, ColorConstants.fromGradient, ColorConstants.toGradient], locations: [0, 0.2, 0.98])
99
+ }
100
+
101
+ func textFieldShouldReturn(_ textField: UITextField) -> Bool {
102
+
103
+ let nextTage = textField.tag+1
104
+
105
+ // Try to find next responder
106
+ guard let nextResponder = textField.superview?.superview?.superview?.viewWithTag(nextTage) as UIResponder? else{
107
+ textField.resignFirstResponder()
108
+ return false
109
+ }
110
+
111
+ nextResponder.becomeFirstResponder()
112
+
113
+ return false
114
+ }
115
+
116
+ // func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
117
+ // //Format Date of Birth dd-MM-yyyy
118
+ //
119
+ // //initially identify your textfield
120
+ // if textField == birthdateTextField {
121
+ //
122
+ // // check the chars length dd -->2 at the same time calculate the dd-MM --> 5
123
+ // if (birthdateTextField?.text?.count == 2) || (birthdateTextField?.text?.count == 5) {
124
+ // //Handle backspace being pressed
125
+ // if !(string == "") {
126
+ // // append the text
127
+ // birthdateTextField?.text = (birthdateTextField?.text)! + "-"
128
+ // }
129
+ // }
130
+ // // check the condition not exceed 9 chars
131
+ // return !(textField.text!.count > 9 && (string.count ) > range.length)
132
+ // }
133
+ // else {
134
+ // return true
135
+ // }
136
+ // }
137
+
138
+ @IBAction func acceptTermsTapped(_ sender: UIButton) {
139
+ if !termsAndConditionsAccepted {
140
+ sender.setImage(UIImage(named: "Tick"), for: .normal)
141
+ sender.bringSubview(toFront: sender.imageView!)
142
+ termsAndConditionsAccepted = true
143
+ //registerButton.isEnabled = true
144
+ } else {
145
+ sender.setImage(nil, for: .normal)
146
+ termsAndConditionsAccepted = false
147
+ //registerButton.isEnabled = false
148
+ }
149
+ }
150
+
151
+ @IBAction func termsAndConditionsTapped(_ sender: UIButton) {
152
+ // TODO: View url
153
+ if let url = URL(string: "http://notatourapp.com/terms-and-conditions") {
154
+ UIApplication.shared.open(url, options: [:], completionHandler: nil)
155
+ }
156
+ }
157
+
158
+ // @IBAction func registerTapped(_ sender: UIButton) {
159
+ // if self.validateFields() {
160
+ //
161
+ //// let dateFormatter = DateFormatter()
162
+ //// dateFormatter.dateFormat = "dd/MM/yyyy"
163
+ //// let birthdate = dateFormatter.date(from: birthdateTextField.text ?? "")
164
+ //
165
+ // // birthday: (birthdate?.timeIntervalSince1970)!
166
+ // UserRepository.sharedInstance.signup(
167
+ // email: self.emailTextField.text ?? "",
168
+ // password: self.passwordTextField.text ?? "",
169
+ // name: self.nameTextField.text ?? "",
170
+ // lastname: self.lastnameTextField.text ?? ""
171
+ // ) { result, message in
172
+ //
173
+ // if result == .success {
174
+ // self.performSegue(withIdentifier: "ShowHome", sender: self)
175
+ // } else {
176
+ // if let msg = message {
177
+ // APIHelper.sharedInstance.showErrorMessage(with: msg, and: "")
178
+ // } else {
179
+ // APIHelper.sharedInstance.showErrorMessage(with: "Error de conexión con servicios.", and: "Por favor vuelva a intentarlo.")
180
+ // }
181
+ // }
182
+ // }
183
+ // }
184
+ // }
185
+
186
+ @IBAction func continueTapped(_ sender: UIButton) {
187
+ if self.validateFields() {
188
+ var signupInfo: [String : Any] = [:]
189
+
190
+ signupInfo["firstname"] = self.nameTextField.text ?? ""
191
+ signupInfo["lastname"] = self.lastnameTextField.text ?? ""
192
+ signupInfo["email"] = self.emailTextField.text ?? ""
193
+ signupInfo["password"] = self.passwordTextField.text
194
+
195
+ if let _ = self.phonePrefix.text, let cellPhone = self.cellphoneTextField.text{
196
+ if cellPhone != "" {
197
+ signupInfo["phoneCountry"] = self.phoneCountry
198
+ signupInfo["phone"] = cellPhone
199
+ }
200
+ else{
201
+ signupInfo["phoneCountry"] = ""
202
+ signupInfo["phone"] = ""
203
+ }
204
+ }
205
+
206
+ self.performSegue(withIdentifier: "SelectLanguage", sender: signupInfo)
207
+ }
208
+
209
+ }
210
+
211
+ override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
212
+ if segue.identifier == "SelectLanguage"{
213
+ if let signupContainer = segue.destination as? SelectLanguageVC{
214
+ signupContainer.signupInfo = sender as? [String : String]
215
+ }
216
+ }
217
+ }
218
+
219
+ private func isValidEmail(_ testStr:String) -> Bool {
220
+ let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
221
+ let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
222
+ return emailTest.evaluate(with: testStr)
223
+ }
224
+
225
+ private func isValidName(_ testStr:String) -> Bool {
226
+ let nameRegEx = "[A-Za-z\\s]+"
227
+ let nameTest = NSPredicate(format:"SELF MATCHES %@", nameRegEx)
228
+ return nameTest.evaluate(with: testStr)
229
+ }
230
+
231
+ private func isValidPhone(_ testStr:String) -> Bool {
232
+ let phoneRegEx = "[0-9]*"
233
+ let phoneTest = NSPredicate(format:"SELF MATCHES %@", phoneRegEx)
234
+ return phoneTest.evaluate(with: testStr)
235
+ }
236
+
237
+ private func validateFields() -> Bool{
238
+ if let name = self.nameTextField.text {
239
+ if !isValidName(name){
240
+ APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Check the entered data", comment: ""), and: "")
241
+ return false
242
+ }
243
+ }
244
+ if let lastname = self.lastnameTextField.text {
245
+ if !isValidName(lastname){
246
+ APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Check the entered data", comment: ""), and: "")
247
+ return false
248
+ }
249
+ }
250
+ if let phone = self.cellphoneTextField.text{
251
+ if !isValidPhone(phone.trimmingCharacters(in: .whitespacesAndNewlines)) {
252
+ APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Invalid phone number", comment: ""), and: "")
253
+ return false
254
+ }
255
+ }
256
+ if let email = self.emailTextField.text{
257
+ if !isValidEmail(email.trimmingCharacters(in: .whitespacesAndNewlines)) {
258
+ APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Invalid email", comment: ""), and: "")
259
+ return false
260
+ }
261
+ }
262
+ if !termsAndConditionsAccepted{
263
+ APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Check the entered data", comment: ""), and: NSLocalizedString("You have to accept terms & conditions", comment: ""))
264
+ return false
265
+ }
266
+ return true
267
+ }
268
+
269
+ @IBAction func selectCountryTapped(_ sender: UIButton) {
270
+ let prevCountryValue = self.phonePrefix.text
271
+ let prevPhoneCountryValue = self.phoneCountry
272
+ let acp = ActionSheetStringPicker(title: "", rows: self.countries.map{$0.name}, initialSelection: 0, doneBlock: {
273
+ picker, values, indexes in
274
+
275
+ self.phonePrefix.text = self.countries[values].dial_code
276
+ self.phoneCountry = self.countries[values].name
277
+ self.phoneFlagLabel.text = self.countries[values].flag // UIImage(named: self.countries[values].name)
278
+
279
+ return
280
+ }, cancel: {
281
+ ActionStringCancelBlock in
282
+
283
+ self.phonePrefix.text = prevCountryValue
284
+ self.phoneCountry = prevPhoneCountryValue
285
+
286
+ return
287
+ }, origin: sender)
288
+
289
+ acp?.setTextColor(ColorConstants.fromGradient)
290
+ acp?.pickerBackgroundColor = UIColor.white
291
+ acp?.toolbarBackgroundColor = UIColor.white
292
+ acp?.toolbarButtonsColor = ColorConstants.fromGradient
293
+ acp?.show()
294
+ }
295
+
296
+ @IBAction func cancelRegisterTapped(_ sender: UIButton) {
297
+ dismiss(animated: true, completion: nil)
298
+ }
299
+ }
@@ -0,0 +1,17 @@
1
+ //
2
+ // SelectLanguageCell.swift
3
+ // MVCGEN
4
+ //
5
+ // Created by Daniel Martinez on 23/7/18.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
+ //
8
+
9
+ import UIKit
10
+
11
+ class SelectLanguageCell: UITableViewCell{
12
+
13
+ @IBOutlet weak var languageLabel: UILabel!
14
+
15
+ @IBOutlet weak var laguangeSelectedImage: UIImageView!
16
+
17
+ }
@@ -0,0 +1,116 @@
1
+ //
2
+ // SelectLanguageVC.swift
3
+ // MVCGEN
4
+ //
5
+ // Created by Daniel Martinez on 23/7/18.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
+ //
8
+
9
+ import UIKit
10
+
11
+ class SelectLanguageVC: UITableViewController {
12
+
13
+ // MARK: - Outlets
14
+
15
+ @IBOutlet weak var registerButton: LoadingButton!{
16
+ didSet{
17
+ self.registerButton.layoutIfNeeded()
18
+ self.registerButton.layer.cornerRadius = self.registerButton.frame.height/2
19
+ self.registerButton.layer.masksToBounds = true
20
+ }
21
+ }
22
+
23
+ @IBOutlet var gradientView: UITableView!
24
+
25
+ // MARK: - Properties
26
+
27
+ var signupInfo: [String:String]!
28
+ var languagesShort = ["SP", "EN", "PT", "ZH", "FR"]
29
+ var languagesFull = ["Spanish", "English", "Portuguese", "Chinese", "French"]
30
+ var selected = [IndexPath]()
31
+ var selectedLanguages = [String]()
32
+ var fromFacebook = false
33
+
34
+ override func viewDidLoad() {
35
+ super.viewDidLoad()
36
+
37
+ self.gradientView.delegate = self
38
+ self.gradientView.dataSource = self
39
+ }
40
+
41
+ override func viewDidLayoutSubviews() {
42
+ super.viewDidLayoutSubviews()
43
+
44
+ self.gradientView.applyGradient(withColours: [ColorConstants.fromGradient, ColorConstants.fromGradient, ColorConstants.toGradient], locations: [0, 0.2, 0.98])
45
+ }
46
+
47
+ @IBAction func registerTapped(_ sender: UIButton) {
48
+ if selectedLanguages.count > 0 {
49
+ if let email = self.signupInfo["email"], let firstname = self.signupInfo["firstname"], let lastname = self.signupInfo["lastname"], let phoneCountry = self.signupInfo["phoneCountry"], let phone = self.signupInfo["phone"], let password = self.signupInfo["password"]{
50
+ UserRepository.sharedInstance.signup(
51
+ email: email,
52
+ password: password,
53
+ name: firstname,
54
+ lastname: lastname,
55
+ phoneCountry: phoneCountry,
56
+ phone: phone,
57
+ languages: selectedLanguages
58
+ ) { result, message in
59
+
60
+ if result == .success {
61
+ self.performSegue(withIdentifier: "ShowHome", sender: self)
62
+ } else {
63
+ if let msg = message {
64
+ APIHelper.sharedInstance.showErrorMessage(with: msg, and: "")
65
+ } else {
66
+ APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Connection error with services.", comment: ""), and: "")
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ else{
73
+ APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Please select at least one language", comment: "") , and: "")
74
+ }
75
+
76
+ }
77
+
78
+ @IBAction func cancelRegisterTapped(_ sender: UIButton) {
79
+ self.presentingViewController?.dismiss(animated: false, completion: nil)
80
+ self.presentingViewController?.dismiss(animated: true, completion: nil)
81
+ }
82
+
83
+ func numberOfSectionsInTableView(tableView: UITableView) -> Int {
84
+ return 1
85
+ }
86
+
87
+ override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
88
+ return languagesShort.count
89
+ }
90
+
91
+ override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
92
+ let cell = tableView.dequeueReusableCell(withIdentifier: "SelectLanguageCell", for: indexPath) as! SelectLanguageCell
93
+ cell.laguangeSelectedImage.image = nil
94
+ if self.selected.contains(indexPath){
95
+ cell.laguangeSelectedImage.image = UIImage(named: "Tick")
96
+ }
97
+ cell.languageLabel.text = languagesFull[indexPath.row]
98
+ return cell
99
+ }
100
+
101
+ override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
102
+ guard let cell = tableView.cellForRow(at: indexPath) as? SelectLanguageCell else { return }
103
+ cell.laguangeSelectedImage.image = UIImage(named: "Tick")
104
+ self.selected.append(indexPath)
105
+ self.selectedLanguages.append(languagesShort[indexPath.row])
106
+ }
107
+
108
+ override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
109
+ guard let cell = tableView.cellForRow(at: indexPath) as? SelectLanguageCell else { return }
110
+ cell.laguangeSelectedImage.image = nil
111
+ self.selected = self.selected.filter{ $0 != indexPath }
112
+ if let index = selectedLanguages.index(of: self.languagesShort[indexPath.row]) {
113
+ selectedLanguages.remove(at: index)
114
+ }
115
+ }
116
+ }
@@ -0,0 +1,76 @@
1
+ //
2
+ // TermsAndConditionsVC.swift
3
+ // MVCGEN
4
+ //
5
+ // Created by Daniel Martinez on 23/7/18.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
+ //
8
+
9
+ import UIKit
10
+
11
+ class TermsAndConditionsVC: UIViewController {
12
+
13
+ @IBOutlet weak var registerButtonOutlet: LoadingButton!{
14
+ didSet{
15
+ self.registerButtonOutlet.layer.cornerRadius = self.registerButtonOutlet.frame.height/7
16
+ self.registerButtonOutlet.layer.masksToBounds = true
17
+ self.registerButtonOutlet.activityIndicatorColor = ColorConstants.fromGradient
18
+ }
19
+ }
20
+ @IBOutlet weak var termsAndConditions: UIButton!{
21
+ didSet {
22
+ self.termsAndConditions.layer.masksToBounds = true
23
+ self.termsAndConditions.layer.cornerRadius = 5
24
+ }
25
+ }
26
+
27
+ var acceptTermsAndConditions : Bool = false
28
+
29
+ override func viewDidLoad() {
30
+ super.viewDidLoad()
31
+ self.view.applyGradient(withColours: [ColorConstants.fromGradient, ColorConstants.fromGradient, ColorConstants.toGradient], locations: [0, 0.2, 0.98])
32
+ // Do any additional setup after loading the view.
33
+ }
34
+
35
+ override func didReceiveMemoryWarning() {
36
+ super.didReceiveMemoryWarning()
37
+ // Dispose of any resources that can be recreated.
38
+ }
39
+
40
+ @IBAction func acceptTermsTapped(_ sender: UIButton) {
41
+ if !acceptTermsAndConditions {
42
+ sender.setImage(UIImage(named: "Tick"), for: .normal)
43
+ sender.bringSubview(toFront: sender.imageView!)
44
+ self.acceptTermsAndConditions = true
45
+ //registerButton.isEnabled = true
46
+ } else {
47
+ sender.setImage(nil, for: .normal)
48
+ self.acceptTermsAndConditions = false
49
+ //registerButton.isEnabled = false
50
+ }
51
+ }
52
+
53
+ @IBAction func viewTermsAndConditions(_ sender: Any) {
54
+ // TODO: View url
55
+ if let url = URL(string: "http://notatourapp.com/terms-and-conditions") {
56
+ UIApplication.shared.open(url, options: [:], completionHandler: nil)
57
+ }
58
+ }
59
+
60
+ @IBAction func registerTapped(_ sender: Any) {
61
+ if self.acceptTermsAndConditions{
62
+ UserRepository.sharedInstance.acceptTermsAndConditions(){ result in
63
+ if result == .success{
64
+ self.performSegue(withIdentifier: "registerToHome", sender: self)
65
+ }
66
+ }
67
+ } else {
68
+ APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("You have to accept terms & conditions", comment: ""), and: "")
69
+ }
70
+ }
71
+
72
+ @IBAction func alreadyHaveAnAccountTapped(_ sender: Any) {
73
+ dismiss(animated: true, completion: nil)
74
+ }
75
+
76
+ }