Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.67 KB | None | 0 0
  1. import UIKit
  2. import PrimeSDK
  3.  
  4. protocol HomewViewProtocol: ModalRouterSourceProtocol, FiltersDelegate {
  5. func set(
  6. viewName: String,
  7. configurationService: ConfigurationLoadingService,
  8. manager: PrimeSDKManager
  9. )
  10. }
  11.  
  12. final class HomeViewController: UIViewController {
  13. private lazy var headerView = HomeHeaderView()
  14. private var internalPresenter: HomePresenterProtocol?
  15.  
  16. private var selectedCityID: String?
  17.  
  18. var presenter: HomePresenterProtocol? {
  19. return internalPresenter
  20. }
  21.  
  22. var listName: String?
  23.  
  24. var manager: PrimeSDKManager?
  25.  
  26. override func viewDidLoad() {
  27. super.viewDidLoad()
  28.  
  29. setupHeader()
  30.  
  31. presenter?.refresh()
  32. }
  33.  
  34. override func viewWillAppear(_ animated: Bool) {
  35. super.viewWillAppear(animated)
  36.  
  37. navigationController?.setNavigationBarHidden(true, animated: true)
  38. }
  39.  
  40. override func viewWillDisappear(_ animated: Bool) {
  41. super.viewWillDisappear(animated)
  42.  
  43. navigationController?.setNavigationBarHidden(false, animated: true)
  44. }
  45.  
  46. private func setupHeader() {
  47. view.addSubview(headerView)
  48. headerView.snp.makeConstraints { make in
  49. make.top.equalTo(topLayoutGuide.snp.bottom)
  50. make.leading.trailing.equalToSuperview()
  51. }
  52.  
  53. headerView.onCityViewTap = { [weak self] in
  54. self?.presenter?.changeCity()
  55. }
  56. }
  57.  
  58. func setPresenter(_ presenter: HomePresenterProtocol) {
  59. self.internalPresenter = presenter
  60. }
  61. }
  62.  
  63. extension HomeViewController: HomewViewProtocol {
  64. func set(
  65. viewName: String,
  66. configurationService: ConfigurationLoadingService,
  67. manager: PrimeSDKManager
  68. ) {
  69. switch viewName {
  70. case "home-vertical-container":
  71. self.listName = viewName
  72. self.manager = manager
  73. let homeController = ConfigurationLoadingViewController(
  74. viewName: viewName,
  75. configurationService: configurationService,
  76. sdkManager: manager
  77. )
  78. self.addChild(homeController)
  79. self.view.addSubview(homeController.view)
  80. homeController.view.snp.makeConstraints { make in
  81. make.leading.bottom.trailing.equalToSuperview()
  82. make.top.equalTo(headerView.snp.bottom)
  83. }
  84. case "change-city":
  85. let searchController = ConfigurationLoadingViewController(
  86. viewName: viewName,
  87. configurationService: configurationService,
  88. sdkManager: manager
  89. )
  90. present(module: searchController)
  91. default:
  92. break
  93. }
  94. }
  95. }
  96.  
  97. extension HomeViewController: PrimeSDKChangeCityDelegate {
  98. func cityChanged(toCity withID: String, title: String) {
  99. selectedCityID = withID
  100. headerView.changeCity(title)
  101. }
  102.  
  103. func getSelectedCityID() -> String? {
  104. return selectedCityID
  105. }
  106.  
  107. func getDefaultCityID() -> String? {
  108. return "1"
  109. }
  110. }
  111.  
  112. extension HomeViewController: PrimeSDKListDelegate {
  113. func getListHeader(
  114. for name: String,
  115. collectionView: UICollectionView,
  116. indexPath: IndexPath
  117. ) -> UICollectionReusableView? {
  118. let view: FiltersView = collectionView
  119. .dequeueReusableSupplementaryView(
  120. ofKind: UICollectionView.elementKindSectionHeader,
  121. for: indexPath
  122. )
  123. view.setupSelection(
  124. presenter?.isAdavancedFilterSelected ?? false,
  125. presenter?.isSoonSelected ?? false
  126. )
  127. view.setupSelection(false, false)
  128. view.selectFilter = { [weak self] index in
  129. self?.presenter?.selectFilterType(at: index)
  130. }
  131.  
  132. return view
  133. }
  134.  
  135. func getHeaderHeight(for name: String) -> CGFloat? {
  136. return 47
  137. }
  138.  
  139. func registerHeaderView(for name: String, in collectionView: UICollectionView) {
  140. collectionView.register(
  141. viewClass: FiltersView.self,
  142. forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader
  143. )
  144. }
  145. }
  146.  
  147. extension HomeViewController: FiltersDelegate {
  148. func setup(with filter: AdvancedFilterSelectedItems?) {
  149. guard let listName = listName else {
  150. return
  151. }
  152.  
  153. presenter?.setup(with: filter)
  154. manager?.reloadCollectionData(for: listName)
  155. }
  156. }
  157.  
  158.  
  159.  
  160. import Foundation
  161. import PrimeSDK
  162.  
  163. protocol HomePresenterProtocol {
  164. var isAdavancedFilterSelected: Bool { get }
  165. var isSoonSelected: Bool { get }
  166. func refresh()
  167. func changeCity()
  168. func selectFilterType(at index: Int)
  169. func setup(with filter: AdvancedFilterSelectedItems?)
  170. }
  171.  
  172. final class HomePresenter {
  173. weak var view: HomewViewProtocol?
  174.  
  175. private var sdkManager: PrimeSDKManager
  176. var listName: String
  177.  
  178. private var selectedFilter: AdvancedFilterSelectedItems?
  179.  
  180. var isSoonSelected = false
  181. var isAdavancedFilterSelected: Bool {
  182. guard let filter = selectedFilter else {
  183. return false
  184. }
  185.  
  186. return !filter.isEmpty
  187. }
  188.  
  189. init(
  190. view: HomewViewProtocol,
  191. sdkManager: PrimeSDKManager,
  192. listName: String
  193. ) {
  194. self.view = view
  195. self.sdkManager = sdkManager
  196. self.listName = listName
  197. }
  198. }
  199.  
  200. extension HomePresenter: HomePresenterProtocol {
  201. func refresh() {
  202. let configurationService = PrimeSDKConfigService.shared.configurationLoadingService
  203. DataStorage.shared.set(
  204. value: "https://api.kinohod.ru/api/restful/v1/movies",
  205. for: "movies_url"
  206. )
  207.  
  208. view?.set(
  209. viewName: listName,
  210. configurationService: configurationService,
  211. manager: sdkManager
  212. )
  213. }
  214.  
  215. func changeCity() {
  216. let configurationService = PrimeSDKConfigService.shared.configurationLoadingService
  217.  
  218. view?.set(
  219. viewName: "change-city",
  220. configurationService: configurationService,
  221. manager: sdkManager
  222. )
  223. }
  224.  
  225. func selectFilterType(at index: Int) {
  226. guard let view = view else {
  227. return
  228. }
  229.  
  230. switch index {
  231. case 0:
  232. let assembly = AdvancedFilterAssembly(
  233. delegate: view,
  234. filter: selectedFilter
  235. )
  236. let router = ModalRouter(source: view, destination: assembly.buildModule())
  237. router.route()
  238. case 2:
  239. isSoonSelected.toggle()
  240. DataStorage.shared.set(
  241. value: isSoonSelected
  242. ? "https://api.kinohod.ru/api/restful/v1/movies/soon"
  243. : "https://api.kinohod.ru/api/restful/v1/movies",
  244. for: "movies_url"
  245. )
  246. sdkManager.reloadList(for: listName, showingIndicator: true)
  247. default:
  248. break
  249. }
  250. }
  251.  
  252. func setup(with filter: AdvancedFilterSelectedItems?) {
  253. guard let filter = filter else {
  254. return
  255. }
  256.  
  257. self.selectedFilter = filter
  258. if !filter.genres.isEmpty {
  259. let paramsString = "[\(filter.genres.map { String($0) }.joined(separator: ","))]"
  260. DataStorage.shared.set(value: paramsString, for: "genre")
  261. } else {
  262. DataStorage.shared.set(value: nil, for: "genre")
  263. }
  264. DataStorage.shared.set(value: filter.halls, for: "hall")
  265. DataStorage.shared.set(value: filter.formats, for: "format")
  266.  
  267. sdkManager.reloadList(for: listName, showingIndicator: true)
  268. }
  269. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement