mvcgen 0.1.14 → 0.1.18

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 (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
+ }