mvcgen 0.1.14 → 0.1.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (191) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mvcgen/filemanager.rb +1 -1
  3. data/lib/mvcgen/generator.rb +36 -33
  4. data/lib/mvcgen/version.rb +1 -1
  5. data/lib/templates/default/mvcspec.yml +1 -1
  6. data/lib/templates/default/podfile/Podfile +73 -0
  7. data/lib/templates/default/swift/AppDelegate.swift +181 -0
  8. data/lib/templates/default/swift/Assets.xcassets/AppIcon.appiconset/Contents.json +133 -0
  9. data/lib/templates/default/swift/Assets.xcassets/Back.imageset/Contents.json +21 -0
  10. data/lib/templates/default/swift/Assets.xcassets/Back.imageset/icons8-back-filled-100-2.png +0 -0
  11. data/lib/templates/default/swift/Assets.xcassets/Contents.json +6 -0
  12. data/lib/templates/default/swift/Assets.xcassets/Down.imageset/Contents.json +21 -0
  13. data/lib/templates/default/swift/Assets.xcassets/Down.imageset/icons8-expand-arrow-filled-100.png +0 -0
  14. data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/Contents.json +21 -0
  15. data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/icons8-forward-filled-100.png +0 -0
  16. data/lib/templates/default/swift/Assets.xcassets/Key.imageset/Contents.json +1 -0
  17. data/lib/templates/default/swift/Assets.xcassets/Key.imageset/universal_Key.pdf +0 -0
  18. data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/Contents.json +1 -0
  19. data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/universal_Shopping-cart.pdf +0 -0
  20. data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/Contents.json +21 -0
  21. data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/icons8-Checkmark-96 (1).png +0 -0
  22. data/lib/templates/default/swift/Assets.xcassets/Up.imageset/Contents.json +22 -0
  23. data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-100.png +0 -0
  24. data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-50.png +0 -0
  25. data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/Contents.json +21 -0
  26. data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/icons8-uruguay-40.png +0 -0
  27. data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/Contents.json +1 -0
  28. data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/universal_Wallet.pdf +0 -0
  29. data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Contents.json +12 -0
  30. data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Icons_NotATour_Welcome_001.pdf +0 -0
  31. data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Contents.json +12 -0
  32. data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Icons_NotATour_Welcome_002.pdf +0 -0
  33. data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Contents.json +12 -0
  34. data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Icons_NotATour_Welcome_003.pdf +0 -0
  35. data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Contents.json +12 -0
  36. data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Icons_NotATour_Welcome_004.pdf +0 -0
  37. data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/Contents.json +21 -0
  38. data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/icons8-beach-64.png +0 -0
  39. data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/Contents.json +21 -0
  40. data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/icons8-no-baggage-100.png +0 -0
  41. data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/Contents.json +21 -0
  42. data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/icons8-signpost-64.png +0 -0
  43. data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/Contents.json +21 -0
  44. data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/sunbed.png +0 -0
  45. data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/Contents.json +21 -0
  46. data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/arrow.pdf +0 -0
  47. data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/Contents.json +22 -0
  48. data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage.png +0 -0
  49. data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage@2x.png +0 -0
  50. data/lib/templates/default/swift/Assets.xcassets/burger.imageset/Contents.json +21 -0
  51. data/lib/templates/default/swift/Assets.xcassets/burger.imageset/burger.pdf +0 -0
  52. data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/Contents.json +12 -0
  53. data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/icons8-calendar.pdf +70 -0
  54. data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/Contents.json +12 -0
  55. data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/calendar.pdf +0 -0
  56. data/lib/templates/default/swift/Assets.xcassets/dots.imageset/Contents.json +24 -0
  57. data/lib/templates/default/swift/Assets.xcassets/dots.imageset/dots.pdf +0 -0
  58. data/lib/templates/default/swift/Assets.xcassets/edit.imageset/Contents.json +12 -0
  59. data/lib/templates/default/swift/Assets.xcassets/edit.imageset/edit.pdf +0 -0
  60. data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/Contents.json +12 -0
  61. data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/empty state loging.pdf +0 -0
  62. data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/Contents.json +12 -0
  63. data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/icons8-envelope.pdf +70 -0
  64. data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/Contents.json +22 -0
  65. data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-100.png +0 -0
  66. data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-50.png +0 -0
  67. data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/Contents.json +24 -0
  68. data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/icons8-facebook-f.pdf +68 -0
  69. data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/Contents.json +12 -0
  70. data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/icons8-adjust (3).pdf +0 -0
  71. data/lib/templates/default/swift/Assets.xcassets/filter.imageset/Contents.json +15 -0
  72. data/lib/templates/default/swift/Assets.xcassets/filter.imageset/filter.pdf +0 -0
  73. data/lib/templates/default/swift/Assets.xcassets/food.imageset/Contents.json +21 -0
  74. data/lib/templates/default/swift/Assets.xcassets/food.imageset/food.png +0 -0
  75. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/Contents.json +23 -0
  76. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1.png +0 -0
  77. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@2x.png +0 -0
  78. data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@3x.png +0 -0
  79. data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/Contents.json +12 -0
  80. data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/favortio activo.pdf +0 -0
  81. data/lib/templates/default/swift/Assets.xcassets/heart.imageset/Contents.json +12 -0
  82. data/lib/templates/default/swift/Assets.xcassets/heart.imageset/favorito inactivo.pdf +0 -0
  83. data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/Contents.json +12 -0
  84. data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/icons8-delete (3).pdf +69 -0
  85. data/lib/templates/default/swift/Assets.xcassets/lock.imageset/Contents.json +12 -0
  86. data/lib/templates/default/swift/Assets.xcassets/lock.imageset/icons8-lock.pdf +69 -0
  87. data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/Contents.json +12 -0
  88. data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/man-avatar.pdf +1149 -1
  89. data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/Contents.json +21 -0
  90. data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/icons8-filled-circle-filled-100.png +0 -0
  91. data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/Contents.json +21 -0
  92. data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/page-1@2x.png +0 -0
  93. data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/Contents.json +12 -0
  94. data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/notificaciones.pdf +0 -0
  95. data/lib/templates/default/swift/Assets.xcassets/notification.imageset/Contents.json +21 -0
  96. data/lib/templates/default/swift/Assets.xcassets/notification.imageset/icons8-notification-100.png +0 -0
  97. data/lib/templates/default/swift/Assets.xcassets/other.imageset/Contents.json +21 -0
  98. data/lib/templates/default/swift/Assets.xcassets/other.imageset/other.png +0 -0
  99. data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/Contents.json +21 -0
  100. data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/page-1@2x.png +0 -0
  101. data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/Contents.json +21 -0
  102. data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/page-1@2x.png +0 -0
  103. data/lib/templates/default/swift/Assets.xcassets/photo.imageset/Contents.json +24 -0
  104. data/lib/templates/default/swift/Assets.xcassets/photo.imageset/photo.pdf +0 -0
  105. data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/Contents.json +21 -0
  106. data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/icons8-plus-math-26.png +0 -0
  107. data/lib/templates/default/swift/Assets.xcassets/plus.imageset/+.pdf +0 -0
  108. data/lib/templates/default/swift/Assets.xcassets/plus.imageset/Contents.json +12 -0
  109. data/lib/templates/default/swift/Assets.xcassets/register.imageset/Contents.json +12 -0
  110. data/lib/templates/default/swift/Assets.xcassets/register.imageset/registro.pdf +0 -0
  111. data/lib/templates/default/swift/Assets.xcassets/search.imageset/Contents.json +15 -0
  112. data/lib/templates/default/swift/Assets.xcassets/search.imageset/search.pdf +0 -0
  113. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/Contents.json +23 -0
  114. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-100.png +0 -0
  115. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-50.png +0 -0
  116. data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-500.png +0 -0
  117. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/Contents.json +23 -0
  118. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape.png +0 -0
  119. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@2x.png +0 -0
  120. data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@3x.png +0 -0
  121. data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/Contents.json +21 -0
  122. data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/icons8-signpost-50.png +0 -0
  123. data/lib/templates/default/swift/Assets.xcassets/stars.imageset/Contents.json +24 -0
  124. data/lib/templates/default/swift/Assets.xcassets/stars.imageset/stars.pdf +0 -0
  125. data/lib/templates/default/swift/Assets.xcassets/terms.imageset/Contents.json +12 -0
  126. data/lib/templates/default/swift/Assets.xcassets/terms.imageset/terminos y condiciones.pdf +0 -0
  127. data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/Contents.json +12 -0
  128. data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/tickets.pdf +0 -0
  129. data/lib/templates/default/swift/Assets.xcassets/user.imageset/Contents.json +22 -0
  130. data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-100.png +0 -0
  131. data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-50.png +0 -0
  132. data/lib/templates/default/swift/Assets.xcassets/visa.imageset/Contents.json +21 -0
  133. data/lib/templates/default/swift/Assets.xcassets/visa.imageset/visa.png +0 -0
  134. data/lib/templates/default/swift/Config/Config.swift +1 -1
  135. data/lib/templates/default/swift/Controllers/Login/ForgetPasswordVC.swift +125 -0
  136. data/lib/templates/default/swift/Controllers/Login/LoginVC.swift +244 -0
  137. data/lib/templates/default/swift/Controllers/Login/RegisterVC.swift +213 -0
  138. data/lib/templates/default/swift/Controllers/Notifications/Cells/NotificationCell.swift +51 -0
  139. data/lib/templates/default/swift/Controllers/Notifications/NotificationsVC.swift +164 -0
  140. data/lib/templates/default/swift/Controllers/OtherLogin/ForgetPasswordTVC.swift +98 -0
  141. data/lib/templates/default/swift/Controllers/OtherLogin/LoginTVC.swift +245 -0
  142. data/lib/templates/default/swift/Controllers/OtherLogin/OtherRegisterVC.swift +299 -0
  143. data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageCell.swift +17 -0
  144. data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageVC.swift +116 -0
  145. data/lib/templates/default/swift/Controllers/OtherLogin/TermsAndConditionsVC.swift +76 -0
  146. data/lib/templates/default/swift/Controllers/Profile/AboutUsVC.swift +93 -0
  147. data/lib/templates/default/swift/Controllers/Profile/Cells/AboutUsImageCell.swift +66 -0
  148. data/lib/templates/default/swift/Controllers/Profile/Cells/DescriptionCell.swift +16 -0
  149. data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCell.swift +35 -0
  150. data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCellView.xib +84 -0
  151. data/lib/templates/default/swift/Controllers/Profile/Cells/FavoriteCollectionCell.swift +24 -0
  152. data/lib/templates/default/swift/Controllers/Profile/Cells/ImagesCollectionViewCell.swift +15 -0
  153. data/lib/templates/default/swift/Controllers/Profile/ProfileContainerVC.swift +72 -0
  154. data/lib/templates/default/swift/Controllers/Profile/ProfileTVC.swift +581 -0
  155. data/lib/templates/default/swift/Controllers/Tutorial/TutorialVC.swift +121 -0
  156. data/lib/templates/default/swift/Extensions/ArrayDuplicates.swift +35 -0
  157. data/lib/templates/default/swift/Extensions/Buttons.swift +1 -1
  158. data/lib/templates/default/swift/Extensions/CustomCamera.swift +65 -0
  159. data/lib/templates/default/swift/Extensions/GradientView.swift +121 -0
  160. data/lib/templates/default/swift/Extensions/HideKeyboard.swift +22 -0
  161. data/lib/templates/default/swift/Extensions/Images.swift +82 -0
  162. data/lib/templates/default/swift/Extensions/InnerShadowExtension.swift +83 -0
  163. data/lib/templates/default/swift/Extensions/TableViewEmptyView.swift +30 -0
  164. data/lib/templates/default/swift/Extensions/TapEffectExtension.swift +48 -0
  165. data/lib/templates/default/swift/Extensions/{ColorHex.swift → UIColorExtensions.swift} +2 -2
  166. data/lib/templates/default/swift/Extensions/UnderlinedTextView.swift +61 -0
  167. data/lib/templates/default/swift/Extensions/UnderlinedWithIconTextField.swift +55 -0
  168. data/lib/templates/default/swift/Helper/APIHelper.swift +4 -4
  169. data/lib/templates/default/swift/Helper/APIManager.swift +81 -14
  170. data/lib/templates/default/swift/Helper/APIRequestBody.swift +1 -1
  171. data/lib/templates/default/swift/Helper/AWSManager.swift +1 -1
  172. data/lib/templates/default/swift/Helper/FilesManager.swift +1 -1
  173. data/lib/templates/default/swift/Helper/S3Manager.swift +1 -1
  174. data/lib/templates/default/swift/Helper/Utils.swift +3 -1
  175. data/lib/templates/default/swift/Info.plist +53 -0
  176. data/lib/templates/default/swift/Models/Country.swift +28 -0
  177. data/lib/templates/default/swift/Models/Managers/UserManager.swift +1 -1
  178. data/lib/templates/default/swift/Models/Notif.swift +71 -0
  179. data/lib/templates/default/swift/Models/Responses/BaseResponse.swift +1 -1
  180. data/lib/templates/default/swift/Models/Responses/NotificationResponse.swift +24 -0
  181. data/lib/templates/default/swift/Models/Responses/UserResponse.swift +1 -1
  182. data/lib/templates/default/swift/Models/Responses/UserSingupResponse.swift +1 -1
  183. data/lib/templates/default/swift/Models/User.swift +2 -2
  184. data/lib/templates/default/swift/UI/Storyboards/Home.storyboard +2113 -0
  185. data/lib/templates/default/swift/UI/Storyboards/Login.storyboard +814 -0
  186. data/lib/templates/default/swift/UI/Storyboards/OtherLogin.storyboard +1031 -0
  187. data/lib/templates/default/swift/UI/Views/EmptyTableView/EmptyTableLabelView.swift +18 -0
  188. data/lib/templates/default/swift/UI/Views/EmptyTableView/NoNotificationView.swift +16 -0
  189. data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/EmptyTableLabelView.xib +72 -0
  190. data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/NoNotificationsView.xib +61 -0
  191. metadata +176 -4
@@ -0,0 +1,83 @@
1
+ //
2
+ // InnerShadowExtension.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
+ extension UIView {
12
+ // different inner shadow styles
13
+ public enum innerShadowSide
14
+ {
15
+ case all, left, right, top, bottom, topAndLeft, topAndRight, bottomAndLeft, bottomAndRight, exceptLeft, exceptRight, exceptTop, exceptBottom
16
+ }
17
+
18
+ // define function to add inner shadow
19
+ public func addInnerShadow(onSide: innerShadowSide, shadowColor: UIColor, shadowSize: CGFloat, cornerRadius: CGFloat = 0.0, shadowOpacity: Float)
20
+ {
21
+ // define and set a shaow layer
22
+ let shadowLayer = CAShapeLayer()
23
+ shadowLayer.frame = bounds
24
+ shadowLayer.shadowColor = shadowColor.cgColor
25
+ shadowLayer.shadowOffset = CGSize(width: 0.0, height: 0.0)
26
+ shadowLayer.shadowOpacity = shadowOpacity
27
+ shadowLayer.shadowRadius = shadowSize
28
+ shadowLayer.fillRule = kCAFillRuleEvenOdd
29
+
30
+ // define shadow path
31
+ let shadowPath = CGMutablePath()
32
+
33
+ // define outer rectangle to restrict drawing area
34
+ let insetRect = bounds.insetBy(dx: -shadowSize * 2.0, dy: -shadowSize * 2.0)
35
+
36
+ // define inner rectangle for mask
37
+ let innerFrame: CGRect = { () -> CGRect in
38
+ switch onSide
39
+ {
40
+ case .all:
41
+ return CGRect(x: 0.0, y: 0.0, width: frame.size.width, height: frame.size.height)
42
+ case .left:
43
+ return CGRect(x: 0.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 4.0)
44
+ case .right:
45
+ return CGRect(x: -shadowSize * 2.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 4.0)
46
+ case .top:
47
+ return CGRect(x: -shadowSize * 2.0, y: 0.0, width: frame.size.width + shadowSize * 4.0, height: frame.size.height + shadowSize * 2.0)
48
+ case.bottom:
49
+ return CGRect(x: -shadowSize * 2.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 4.0, height: frame.size.height + shadowSize * 2.0)
50
+ case .topAndLeft:
51
+ return CGRect(x: 0.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
52
+ case .topAndRight:
53
+ return CGRect(x: -shadowSize * 2.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
54
+ case .bottomAndLeft:
55
+ return CGRect(x: 0.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
56
+ case .bottomAndRight:
57
+ return CGRect(x: -shadowSize * 2.0, y: -shadowSize * 2.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height + shadowSize * 2.0)
58
+ case .exceptLeft:
59
+ return CGRect(x: -shadowSize * 2.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height)
60
+ case .exceptRight:
61
+ return CGRect(x: 0.0, y: 0.0, width: frame.size.width + shadowSize * 2.0, height: frame.size.height)
62
+ case .exceptTop:
63
+ return CGRect(x: 0.0, y: -shadowSize * 2.0, width: frame.size.width, height: frame.size.height + shadowSize * 2.0)
64
+ case .exceptBottom:
65
+ return CGRect(x: 0.0, y: 0.0, width: frame.size.width, height: frame.size.height + shadowSize * 2.0)
66
+ }
67
+ }()
68
+
69
+ // add outer and inner rectangle to shadow path
70
+ shadowPath.addRect(insetRect)
71
+ shadowPath.addRect(innerFrame)
72
+
73
+ // set shadow path as show layer's
74
+ shadowLayer.path = shadowPath
75
+
76
+ // add shadow layer as a sublayer
77
+ layer.addSublayer(shadowLayer)
78
+
79
+ // hide outside drawing area
80
+ clipsToBounds = true
81
+ }
82
+ }
83
+
@@ -0,0 +1,30 @@
1
+ //
2
+ // TableViewEmptyView.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
+
12
+ extension UITableView {
13
+
14
+ func setEmptyTableLabelView(message: String, emptyIcon: String) {
15
+
16
+ let emptyTableLabelViewNib = UINib(nibName: "EmptyTableLabelView", bundle: nil)
17
+ let emptyTableLabelView = emptyTableLabelViewNib.instantiate(withOwner: nil, options: nil)[0] as! EmptyTableLabelView
18
+ emptyTableLabelView.label.text = message
19
+ emptyTableLabelView.iconImageView.image = UIImage(named: emptyIcon)
20
+ emptyTableLabelView.tag = 100
21
+ self.backgroundView = emptyTableLabelView
22
+
23
+ }
24
+
25
+ func hideEmptyTableLabelView(){
26
+ if let viewWithTag = self.viewWithTag(100) {
27
+ viewWithTag.isHidden = true
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,48 @@
1
+ //
2
+ // TapEffectExtension.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
+ extension UIViewController {
12
+
13
+ func setUnselectedColors(backgroundView: UIView, label: UILabel) {
14
+ backgroundView.backgroundColor = UIColor.white
15
+ label.textColor = UIColor.black
16
+ }
17
+
18
+ func setSelectedColors(backgroundView: UIView, label: UILabel) {
19
+ backgroundView.backgroundColor = Colors.firstGradientColor
20
+ label.textColor = UIColor.white
21
+ }
22
+
23
+ func animateViewBounceAndZoom(viewToAnimate: UIView) {
24
+
25
+ scaleView(by: 0.8, viewToTransform: viewToAnimate)
26
+
27
+ UIView.animate(withDuration: 0.3/2, animations: {
28
+ self.scaleView(by: 1.1, viewToTransform: viewToAnimate)
29
+ }, completion: { finished in
30
+ UIView.animate(withDuration: 0.5/2, animations: {
31
+ self.resetViewScale(viewToTransform: viewToAnimate)
32
+ }, completion: { finished in
33
+ UIView.animate(withDuration: 0.3/2, animations: {
34
+ self.scaleView(by: 1.0, viewToTransform: viewToAnimate)
35
+ })
36
+ })
37
+ })
38
+ }
39
+
40
+ func scaleView(by scale: CGFloat, viewToTransform: UIView) {
41
+
42
+ viewToTransform.transform = CGAffineTransform.identity.scaledBy(x: scale, y: scale)
43
+ }
44
+
45
+ func resetViewScale(viewToTransform: UIView) {
46
+ viewToTransform.transform = CGAffineTransform.identity
47
+ }
48
+ }
@@ -1,9 +1,9 @@
1
1
  //
2
- // ColorHex.swift
2
+ // UIColorExtensions.swift
3
3
  // MVCGEN
4
4
  //
5
5
  // Created by Daniel Martinez on 23/7/18.
6
- // Copyright © 2018 DanielMartinez. All rights reserved.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
7
  //
8
8
 
9
9
  import UIKit
@@ -0,0 +1,61 @@
1
+ //
2
+ // UnderlinedTextView.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 UnderlinedTextView: UITextView {
12
+
13
+ var border: UIView!
14
+ var originalBorderFrame: CGRect!
15
+ var originalInsetBottom: CGFloat = 0.0
16
+
17
+ override init(frame: CGRect, textContainer: NSTextContainer?) {
18
+ super.init(frame: frame, textContainer: textContainer)
19
+ self.border = UIView()
20
+ self.originalBorderFrame = CGRect(origin: CGPoint(x: 0, y: frame.height - 1.5), size: CGSize(width: frame.width, height: 1.5))
21
+ addBottomBorderWithColor(color: UIColor.lightGray, width: 1.5)
22
+ }
23
+
24
+ required init?(coder aDecoder: NSCoder) {
25
+
26
+ super.init(coder: aDecoder)
27
+ self.border = UIView()
28
+ self.originalBorderFrame = CGRect(origin: CGPoint(x: 0, y: frame.height - 1.5), size: CGSize(width: frame.width, height: 1.5))
29
+ self.addObserver(self, forKeyPath: "contentOffset", options: .new, context: nil)
30
+ addBottomBorderWithColor(color: UIColor.lightGray, width: 1.5)
31
+ }
32
+
33
+ deinit {
34
+ removeObserver(self, forKeyPath: "contentOffset")
35
+ }
36
+
37
+ override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
38
+ if keyPath == "contentOffset" {
39
+ border.frame = originalBorderFrame.offsetBy(dx: 0, dy: contentOffset.y)
40
+
41
+ }
42
+ }
43
+
44
+ func addBottomBorderWithColor(color: UIColor, width: CGFloat) {
45
+ border.backgroundColor = color
46
+
47
+ border.frame = CGRect(origin: CGPoint(x: 0, y: frame.height+contentOffset.y-width), size: CGSize(width: self.frame.width, height: width))
48
+ originalBorderFrame = CGRect(origin: CGPoint(x: 0, y: frame.height-width), size: CGSize(width: self.frame.width, height: width))
49
+ textContainerInset.bottom = originalInsetBottom + width
50
+ self.textInputView.addSubview(border)
51
+ }
52
+
53
+ func changeBorderColor(newColor: UIColor) {
54
+ border.removeFromSuperview()
55
+
56
+ addBottomBorderWithColor(color: newColor, width: 1.5)
57
+ //border.backgroundColor = newColor
58
+ self.originalBorderFrame = CGRect(origin: CGPoint(x: 0, y: frame.height - 1.0), size: CGSize(width: frame.width, height: 1.0))
59
+ // self.textInputView.addSubview(border)
60
+ }
61
+ }
@@ -0,0 +1,55 @@
1
+ //
2
+ // UITextFieldExtension.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 UnderlinedWithIconTextField: UITextField {
12
+
13
+ var border = CALayer()
14
+
15
+ let padding = UIEdgeInsets(top: 0, left: 40, bottom: 0, right: 0)
16
+
17
+ func underlined(color: UIColor, width: CGFloat){
18
+
19
+ let newBorder = CALayer()
20
+ if let contains = self.layer.sublayers?.contains(border) {
21
+ if contains {
22
+ self.layer.replaceSublayer(border, with: newBorder)
23
+ }
24
+ }
25
+
26
+ newBorder.borderColor = color.cgColor
27
+ // TODO: check isnt trailling same width
28
+ newBorder.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width , height: width)
29
+ newBorder.borderWidth = width
30
+ self.layer.addSublayer(newBorder)
31
+ border = newBorder
32
+ self.layer.masksToBounds = true
33
+ }
34
+
35
+ func addLeftIcon(_ named: String) {
36
+ let image = UIImage(named: named)
37
+ let imageView = UIImageView()
38
+
39
+ var iconOriginalWidth = image!.size.width
40
+ if iconOriginalWidth > 15 {
41
+ iconOriginalWidth = 15
42
+ }
43
+ imageView.frame = CGRect(x: 0, y: 0, width: iconOriginalWidth + 30, height: image!.size.height)
44
+ imageView.image = image
45
+ imageView.contentMode = .scaleAspectFit
46
+
47
+ let leftView = UIView.init(frame: CGRect(x: 0, y: 0, width: iconOriginalWidth+30, height: image!.size.height))
48
+ leftView.addSubview(imageView)
49
+ imageView.bounds = imageView.frame.insetBy(dx: 15.0, dy: 0.0);
50
+
51
+ self.leftView = leftView
52
+ self.leftViewMode = UITextFieldViewMode.always
53
+
54
+ }
55
+ }
@@ -3,7 +3,7 @@
3
3
  // MVCGEN
4
4
  //
5
5
  // Created by Daniel Martinez on 23/7/18.
6
- // Copyright © 2018 DanielMartinez. All rights reserved.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
7
  //
8
8
 
9
9
  import Alamofire
@@ -23,7 +23,7 @@ class APIHelper {
23
23
  lazy var errorBanner = NotificationBanner(title: "", subtitle: "", style: .danger)
24
24
 
25
25
  func getHeaders() -> [String : String]? {
26
- if let userId = UserDefaults.standard.value(forKey: Constants.userId) as? String, let token = UserDefaults.standard.value(forKey: Constants.userAuthTokenKey) as? String {
26
+ if let userId = UserDefaults.standard.value(forKey: UserDefaultsConstants.savedUserKey) as? String, let token = UserDefaults.standard.value(forKey: UserDefaultsConstants.userAuthTokenKey) as? String {
27
27
  // Token stored in UserDefaults.
28
28
  var userAuthB64 = "Basic "
29
29
  let userAuth = "\(userId):\(token)"
@@ -63,8 +63,8 @@ class APIHelper {
63
63
  case 300..<400:
64
64
  // Bad auth error
65
65
  print("error is \(error)")
66
- // let appDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate
67
- // appDelegate.logout()
66
+ let appDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate
67
+ appDelegate.logout()
68
68
  case 801:
69
69
  break
70
70
  default:
@@ -3,7 +3,7 @@
3
3
  // MVCGEN
4
4
  //
5
5
  // Created by Daniel Martinez on 23/7/18.
6
- // Copyright © 2018 DanielMartinez. All rights reserved.
6
+ // Copyright © 2018 Houlak. All rights reserved.
7
7
  //
8
8
 
9
9
  import Alamofire
@@ -43,13 +43,14 @@ class APIManager {
43
43
  break
44
44
  case false:
45
45
  let errorCode = responseValue.errorCode
46
- APIHelper.sharedInstance.wsResponse(onError: errorCode, andMessage: responseValue.message)
46
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
47
+ APIHelper.sharedInstance.wsResponse(onError: errorCode)
47
48
  completion(.failure)
48
49
  break
49
50
  }
50
51
  }
51
52
  case .failure(_):
52
- APIHelper.sharedInstance.showErrorMessage(with: errorMsg, and: "")
53
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
53
54
  completion(.failure)
54
55
  break
55
56
  }
@@ -87,8 +88,8 @@ class APIManager {
87
88
  // break
88
89
  // case false:
89
90
  // let errorCode = responseValue.errorCode
90
- // APIHelper.sharedInstance.wsResponse(onError: errorCode, andMessage: responseValue.message)
91
- // completion(.failure)
91
+ // APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
92
+ // APIHelper.sharedInstance.wsResponse(onError: errorCode)
92
93
  // break
93
94
  // }
94
95
  // }
@@ -96,7 +97,7 @@ class APIManager {
96
97
 
97
98
  // }
98
99
  // case .failure(_):
99
- // APIHelper.sharedInstance.showErrorMessage(with: errorMsg, and: "")
100
+ // APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
100
101
  // completion(.failure)
101
102
  // break
102
103
  // }
@@ -124,13 +125,14 @@ class APIManager {
124
125
  break
125
126
  case false:
126
127
  let errorCode = responseValue.errorCode
127
- APIHelper.sharedInstance.wsResponse(onError: errorCode, andMessage: responseValue.message)
128
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
129
+ APIHelper.sharedInstance.wsResponse(onError: errorCode)
128
130
  completion(.failure)
129
131
  break
130
132
  }
131
133
  }
132
134
  case .failure(_):
133
- APIHelper.sharedInstance.showErrorMessage(with: errorMsg, and: "")
135
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
134
136
  completion(.failure)
135
137
  break
136
138
  }
@@ -150,13 +152,14 @@ class APIManager {
150
152
  break
151
153
  case false:
152
154
  let errorCode = baseResponse.errorCode
153
- APIHelper.sharedInstance.wsResponse(onError: errorCode, andMessage: baseResponse.message)
155
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
156
+ APIHelper.sharedInstance.wsResponse(onError: errorCode)
154
157
  completion(.failure)
155
158
  break
156
159
  }
157
160
  }
158
161
  case .failure(_):
159
- APIHelper.sharedInstance.showErrorMessage(with: errorMsg, and: "")
162
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
160
163
  completion(.failure)
161
164
  break
162
165
  }
@@ -176,13 +179,14 @@ class APIManager {
176
179
  break
177
180
  case false:
178
181
  let errorCode = baseResponse.errorCode
179
- APIHelper.sharedInstance.wsResponse(onError: errorCode, andMessage: baseResponse.message)
182
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
183
+ APIHelper.sharedInstance.wsResponse(onError: errorCode)
180
184
  completion(.failure,nil)
181
185
  break
182
186
  }
183
187
  }
184
188
  case .failure(_):
185
- APIHelper.sharedInstance.showErrorMessage(with: errorMsg, comment: ""), and: "")
189
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
186
190
  completion(.failure,nil)
187
191
  break
188
192
  }
@@ -202,16 +206,79 @@ class APIManager {
202
206
  break
203
207
  case false:
204
208
  let errorCode = baseResponse.errorCode
205
- APIHelper.sharedInstance.wsResponse(onError: errorCode, andMessage: baseResponse.message)
209
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
210
+ APIHelper.sharedInstance.wsResponse(onError: errorCode)
206
211
  completion(.failure)
207
212
  break
208
213
  }
209
214
  }
210
215
  case .failure(_):
211
- APIHelper.sharedInstance.showErrorMessage(with: NSLocalizedString("Error connecting to services. Please try again", comment: ""), and: "")
216
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
212
217
  completion(.failure)
213
218
  break
214
219
  }
215
220
  }
216
221
  }
222
+
223
+ // MARK: Notifications
224
+
225
+ func getNotifications(completion: @escaping(VoidResult, [Notif]) -> Void){
226
+ Alamofire.request(APIHelper.sharedInstance.servicesURL + Endpoints.getNotifications, method: .get, parameters: nil,
227
+ encoding: JSONEncoding.default,
228
+ headers: APIHelper.sharedInstance.getHeaders()).responseObject { (response: DataResponse<NotificationResponse>) in
229
+ switch response.result {
230
+ case .success(_):
231
+
232
+ if let notificationResponse = response.result.value {
233
+ switch notificationResponse.result {
234
+ case true:
235
+ completion(.success, notificationResponse.data ?? [])
236
+ case false:
237
+ let errorCode = notificationResponse.errorCode
238
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
239
+ APIHelper.sharedInstance.wsResponse(onError: errorCode)
240
+ completion(.failure, [])
241
+ }
242
+ }
243
+ break
244
+ case .failure(_):
245
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
246
+ completion(.failure, [])
247
+ break
248
+ }
249
+ }
250
+ }
251
+
252
+ func readNotifications(completion: @escaping(VoidResult) -> Void){
253
+
254
+ var parms: [String : Any] = [:]
255
+
256
+ // TODO check utc
257
+ parms["date"] = Date().string(custom: "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
258
+
259
+ Alamofire.request(APIHelper.sharedInstance.servicesURL + Endpoints.readNotifications, method: .post, parameters: parms,
260
+ encoding: JSONEncoding.default,
261
+ headers: APIHelper.sharedInstance.getHeaders()).responseObject { (response: DataResponse<BaseResponse>) in
262
+ switch response.result {
263
+ case .success(_):
264
+
265
+ if let baseResponse = response.result.value {
266
+ switch baseResponse.result {
267
+ case true:
268
+ completion(.success)
269
+ case false:
270
+ let errorCode = baseResponse.errorCode
271
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
272
+ APIHelper.sharedInstance.wsResponse(onError: errorCode)
273
+ completion(.failure)
274
+ }
275
+ }
276
+ break
277
+ case .failure(_):
278
+ APIHelper.sharedInstance.showErrorMessage(with: self.errorMsg, and: "")
279
+ completion(.failure)
280
+ break
281
+ }
282
+ }
283
+ }
217
284
  }