Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import UIKit
- import PrimeSDK
- protocol HomewViewProtocol: ModalRouterSourceProtocol, FiltersDelegate {
- func set(
- viewName: String,
- configurationService: ConfigurationLoadingService,
- manager: PrimeSDKManager
- )
- }
- final class HomeViewController: UIViewController {
- private lazy var headerView = HomeHeaderView()
- private var internalPresenter: HomePresenterProtocol?
- private var selectedCityID: String?
- var presenter: HomePresenterProtocol? {
- return internalPresenter
- }
- var listName: String?
- var manager: PrimeSDKManager?
- override func viewDidLoad() {
- super.viewDidLoad()
- setupHeader()
- presenter?.refresh()
- }
- override func viewWillAppear(_ animated: Bool) {
- super.viewWillAppear(animated)
- navigationController?.setNavigationBarHidden(true, animated: true)
- }
- override func viewWillDisappear(_ animated: Bool) {
- super.viewWillDisappear(animated)
- navigationController?.setNavigationBarHidden(false, animated: true)
- }
- private func setupHeader() {
- view.addSubview(headerView)
- headerView.snp.makeConstraints { make in
- make.top.equalTo(topLayoutGuide.snp.bottom)
- make.leading.trailing.equalToSuperview()
- }
- headerView.onCityViewTap = { [weak self] in
- self?.presenter?.changeCity()
- }
- }
- func setPresenter(_ presenter: HomePresenterProtocol) {
- self.internalPresenter = presenter
- }
- }
- extension HomeViewController: HomewViewProtocol {
- func set(
- viewName: String,
- configurationService: ConfigurationLoadingService,
- manager: PrimeSDKManager
- ) {
- switch viewName {
- case "home-vertical-container":
- self.listName = viewName
- self.manager = manager
- let homeController = ConfigurationLoadingViewController(
- viewName: viewName,
- configurationService: configurationService,
- sdkManager: manager
- )
- self.addChild(homeController)
- self.view.addSubview(homeController.view)
- homeController.view.snp.makeConstraints { make in
- make.leading.bottom.trailing.equalToSuperview()
- make.top.equalTo(headerView.snp.bottom)
- }
- case "change-city":
- let searchController = ConfigurationLoadingViewController(
- viewName: viewName,
- configurationService: configurationService,
- sdkManager: manager
- )
- present(module: searchController)
- default:
- break
- }
- }
- }
- extension HomeViewController: PrimeSDKChangeCityDelegate {
- func cityChanged(toCity withID: String, title: String) {
- selectedCityID = withID
- headerView.changeCity(title)
- }
- func getSelectedCityID() -> String? {
- return selectedCityID
- }
- func getDefaultCityID() -> String? {
- return "1"
- }
- }
- extension HomeViewController: PrimeSDKListDelegate {
- func getListHeader(
- for name: String,
- collectionView: UICollectionView,
- indexPath: IndexPath
- ) -> UICollectionReusableView? {
- let view: FiltersView = collectionView
- .dequeueReusableSupplementaryView(
- ofKind: UICollectionView.elementKindSectionHeader,
- for: indexPath
- )
- view.setupSelection(
- presenter?.isAdavancedFilterSelected ?? false,
- presenter?.isSoonSelected ?? false
- )
- view.setupSelection(false, false)
- view.selectFilter = { [weak self] index in
- self?.presenter?.selectFilterType(at: index)
- }
- return view
- }
- func getHeaderHeight(for name: String) -> CGFloat? {
- return 47
- }
- func registerHeaderView(for name: String, in collectionView: UICollectionView) {
- collectionView.register(
- viewClass: FiltersView.self,
- forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader
- )
- }
- }
- extension HomeViewController: FiltersDelegate {
- func setup(with filter: AdvancedFilterSelectedItems?) {
- guard let listName = listName else {
- return
- }
- presenter?.setup(with: filter)
- manager?.reloadCollectionData(for: listName)
- }
- }
- import Foundation
- import PrimeSDK
- protocol HomePresenterProtocol {
- var isAdavancedFilterSelected: Bool { get }
- var isSoonSelected: Bool { get }
- func refresh()
- func changeCity()
- func selectFilterType(at index: Int)
- func setup(with filter: AdvancedFilterSelectedItems?)
- }
- final class HomePresenter {
- weak var view: HomewViewProtocol?
- private var sdkManager: PrimeSDKManager
- var listName: String
- private var selectedFilter: AdvancedFilterSelectedItems?
- var isSoonSelected = false
- var isAdavancedFilterSelected: Bool {
- guard let filter = selectedFilter else {
- return false
- }
- return !filter.isEmpty
- }
- init(
- view: HomewViewProtocol,
- sdkManager: PrimeSDKManager,
- listName: String
- ) {
- self.view = view
- self.sdkManager = sdkManager
- self.listName = listName
- }
- }
- extension HomePresenter: HomePresenterProtocol {
- func refresh() {
- let configurationService = PrimeSDKConfigService.shared.configurationLoadingService
- DataStorage.shared.set(
- value: "https://api.kinohod.ru/api/restful/v1/movies",
- for: "movies_url"
- )
- view?.set(
- viewName: listName,
- configurationService: configurationService,
- manager: sdkManager
- )
- }
- func changeCity() {
- let configurationService = PrimeSDKConfigService.shared.configurationLoadingService
- view?.set(
- viewName: "change-city",
- configurationService: configurationService,
- manager: sdkManager
- )
- }
- func selectFilterType(at index: Int) {
- guard let view = view else {
- return
- }
- switch index {
- case 0:
- let assembly = AdvancedFilterAssembly(
- delegate: view,
- filter: selectedFilter
- )
- let router = ModalRouter(source: view, destination: assembly.buildModule())
- router.route()
- case 2:
- isSoonSelected.toggle()
- DataStorage.shared.set(
- value: isSoonSelected
- ? "https://api.kinohod.ru/api/restful/v1/movies/soon"
- : "https://api.kinohod.ru/api/restful/v1/movies",
- for: "movies_url"
- )
- sdkManager.reloadList(for: listName, showingIndicator: true)
- default:
- break
- }
- }
- func setup(with filter: AdvancedFilterSelectedItems?) {
- guard let filter = filter else {
- return
- }
- self.selectedFilter = filter
- if !filter.genres.isEmpty {
- let paramsString = "[\(filter.genres.map { String($0) }.joined(separator: ","))]"
- DataStorage.shared.set(value: paramsString, for: "genre")
- } else {
- DataStorage.shared.set(value: nil, for: "genre")
- }
- DataStorage.shared.set(value: filter.halls, for: "hall")
- DataStorage.shared.set(value: filter.formats, for: "format")
- sdkManager.reloadList(for: listName, showingIndicator: true)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement