mvcgen 0.1.14 → 0.1.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mvcgen/filemanager.rb +1 -1
- data/lib/mvcgen/generator.rb +36 -33
- data/lib/mvcgen/version.rb +1 -1
- data/lib/templates/default/mvcspec.yml +1 -1
- data/lib/templates/default/podfile/Podfile +73 -0
- data/lib/templates/default/swift/AppDelegate.swift +181 -0
- data/lib/templates/default/swift/Assets.xcassets/AppIcon.appiconset/Contents.json +133 -0
- data/lib/templates/default/swift/Assets.xcassets/Back.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Back.imageset/icons8-back-filled-100-2.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Contents.json +6 -0
- data/lib/templates/default/swift/Assets.xcassets/Down.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Down.imageset/icons8-expand-arrow-filled-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/icons8-forward-filled-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Key.imageset/Contents.json +1 -0
- data/lib/templates/default/swift/Assets.xcassets/Key.imageset/universal_Key.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/Contents.json +1 -0
- data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/universal_Shopping-cart.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/icons8-Checkmark-96 (1).png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Up.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/icons8-uruguay-40.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/Contents.json +1 -0
- data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/universal_Wallet.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Icons_NotATour_Welcome_001.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Icons_NotATour_Welcome_002.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Icons_NotATour_Welcome_003.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Icons_NotATour_Welcome_004.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/icons8-beach-64.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/icons8-no-baggage-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/icons8-signpost-64.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/sunbed.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/arrow.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/burger.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/burger.imageset/burger.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/icons8-calendar.pdf +70 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/calendar.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/dots.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/dots.imageset/dots.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/edit.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/edit.imageset/edit.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/empty state loging.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/icons8-envelope.pdf +70 -0
- data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/icons8-facebook-f.pdf +68 -0
- data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/icons8-adjust (3).pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/filter.imageset/Contents.json +15 -0
- data/lib/templates/default/swift/Assets.xcassets/filter.imageset/filter.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/food.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/food.imageset/food.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/Contents.json +23 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@3x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/favortio activo.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/heart.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/heart.imageset/favorito inactivo.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/icons8-delete (3).pdf +69 -0
- data/lib/templates/default/swift/Assets.xcassets/lock.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/lock.imageset/icons8-lock.pdf +69 -0
- data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/man-avatar.pdf +1149 -1
- data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/icons8-filled-circle-filled-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/notificaciones.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/notification.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/notification.imageset/icons8-notification-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/other.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/other.imageset/other.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/photo.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/photo.imageset/photo.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/icons8-plus-math-26.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/plus.imageset/+.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/plus.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/register.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/register.imageset/registro.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/search.imageset/Contents.json +15 -0
- data/lib/templates/default/swift/Assets.xcassets/search.imageset/search.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/Contents.json +23 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-500.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/Contents.json +23 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@3x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/icons8-signpost-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/stars.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/stars.imageset/stars.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/terms.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/terms.imageset/terminos y condiciones.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/tickets.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/user.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/visa.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/visa.imageset/visa.png +0 -0
- data/lib/templates/default/swift/Config/Config.swift +1 -1
- data/lib/templates/default/swift/Controllers/Login/ForgetPasswordVC.swift +125 -0
- data/lib/templates/default/swift/Controllers/Login/LoginVC.swift +244 -0
- data/lib/templates/default/swift/Controllers/Login/RegisterVC.swift +213 -0
- data/lib/templates/default/swift/Controllers/Notifications/Cells/NotificationCell.swift +51 -0
- data/lib/templates/default/swift/Controllers/Notifications/NotificationsVC.swift +164 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/ForgetPasswordTVC.swift +98 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/LoginTVC.swift +245 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/OtherRegisterVC.swift +299 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageCell.swift +17 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageVC.swift +116 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/TermsAndConditionsVC.swift +76 -0
- data/lib/templates/default/swift/Controllers/Profile/AboutUsVC.swift +93 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/AboutUsImageCell.swift +66 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/DescriptionCell.swift +16 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCell.swift +35 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCellView.xib +84 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/FavoriteCollectionCell.swift +24 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/ImagesCollectionViewCell.swift +15 -0
- data/lib/templates/default/swift/Controllers/Profile/ProfileContainerVC.swift +72 -0
- data/lib/templates/default/swift/Controllers/Profile/ProfileTVC.swift +581 -0
- data/lib/templates/default/swift/Controllers/Tutorial/TutorialVC.swift +121 -0
- data/lib/templates/default/swift/Extensions/ArrayDuplicates.swift +35 -0
- data/lib/templates/default/swift/Extensions/Buttons.swift +1 -1
- data/lib/templates/default/swift/Extensions/CustomCamera.swift +65 -0
- data/lib/templates/default/swift/Extensions/GradientView.swift +121 -0
- data/lib/templates/default/swift/Extensions/HideKeyboard.swift +22 -0
- data/lib/templates/default/swift/Extensions/Images.swift +82 -0
- data/lib/templates/default/swift/Extensions/InnerShadowExtension.swift +83 -0
- data/lib/templates/default/swift/Extensions/TableViewEmptyView.swift +30 -0
- data/lib/templates/default/swift/Extensions/TapEffectExtension.swift +48 -0
- data/lib/templates/default/swift/Extensions/{ColorHex.swift → UIColorExtensions.swift} +2 -2
- data/lib/templates/default/swift/Extensions/UnderlinedTextView.swift +61 -0
- data/lib/templates/default/swift/Extensions/UnderlinedWithIconTextField.swift +55 -0
- data/lib/templates/default/swift/Helper/APIHelper.swift +4 -4
- data/lib/templates/default/swift/Helper/APIManager.swift +81 -14
- data/lib/templates/default/swift/Helper/APIRequestBody.swift +1 -1
- data/lib/templates/default/swift/Helper/AWSManager.swift +1 -1
- data/lib/templates/default/swift/Helper/FilesManager.swift +1 -1
- data/lib/templates/default/swift/Helper/S3Manager.swift +1 -1
- data/lib/templates/default/swift/Helper/Utils.swift +3 -1
- data/lib/templates/default/swift/Info.plist +53 -0
- data/lib/templates/default/swift/Models/Country.swift +28 -0
- data/lib/templates/default/swift/Models/Managers/UserManager.swift +1 -1
- data/lib/templates/default/swift/Models/Notif.swift +71 -0
- data/lib/templates/default/swift/Models/Responses/BaseResponse.swift +1 -1
- data/lib/templates/default/swift/Models/Responses/NotificationResponse.swift +24 -0
- data/lib/templates/default/swift/Models/Responses/UserResponse.swift +1 -1
- data/lib/templates/default/swift/Models/Responses/UserSingupResponse.swift +1 -1
- data/lib/templates/default/swift/Models/User.swift +2 -2
- data/lib/templates/default/swift/UI/Storyboards/Home.storyboard +2113 -0
- data/lib/templates/default/swift/UI/Storyboards/Login.storyboard +814 -0
- data/lib/templates/default/swift/UI/Storyboards/OtherLogin.storyboard +1031 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/EmptyTableLabelView.swift +18 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/NoNotificationView.swift +16 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/EmptyTableLabelView.xib +72 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/NoNotificationsView.xib +61 -0
- 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
|
+
}
|