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