diff --git a/iOSBooks/iOSBooks.xcodeproj/project.pbxproj b/iOSBooks/iOSBooks.xcodeproj/project.pbxproj index ed6db10..7161d36 100644 --- a/iOSBooks/iOSBooks.xcodeproj/project.pbxproj +++ b/iOSBooks/iOSBooks.xcodeproj/project.pbxproj @@ -32,6 +32,11 @@ 74ADE9C52319730F006D2644 /* BooksCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74ADE9C42319730F006D2644 /* BooksCell.swift */; }; 74ADE9C7231973B5006D2644 /* BooksListViewController+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74ADE9C6231973B5006D2644 /* BooksListViewController+CollectionView.swift */; }; 74ADE9C9231981F5006D2644 /* BooksListViewController+View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74ADE9C8231981F5006D2644 /* BooksListViewController+View.swift */; }; + 74ADE9D023199C1F006D2644 /* BookDetail.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 74ADE9CF23199C1F006D2644 /* BookDetail.storyboard */; }; + 74ADE9D223199D97006D2644 /* BookDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74ADE9D123199D97006D2644 /* BookDetailViewController.swift */; }; + 74B9185223199E8F00ADDEA4 /* BookDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74B9185123199E8F00ADDEA4 /* BookDetailViewModel.swift */; }; + 74B9185423199F4500ADDEA4 /* BookDetailViewController+View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74B9185323199F4500ADDEA4 /* BookDetailViewController+View.swift */; }; + 74B918562319AE0300ADDEA4 /* BookDetailViewController+Safari.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74B918552319AE0300ADDEA4 /* BookDetailViewController+Safari.swift */; }; 768F74E39672B1F50C632913 /* Pods_iOSBooks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D2FDB2EC5907498F6A3C173 /* Pods_iOSBooks.framework */; }; /* End PBXBuildFile section */ @@ -79,6 +84,11 @@ 74ADE9C42319730F006D2644 /* BooksCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BooksCell.swift; sourceTree = ""; }; 74ADE9C6231973B5006D2644 /* BooksListViewController+CollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BooksListViewController+CollectionView.swift"; sourceTree = ""; }; 74ADE9C8231981F5006D2644 /* BooksListViewController+View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BooksListViewController+View.swift"; sourceTree = ""; }; + 74ADE9CF23199C1F006D2644 /* BookDetail.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = BookDetail.storyboard; sourceTree = ""; }; + 74ADE9D123199D97006D2644 /* BookDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookDetailViewController.swift; sourceTree = ""; }; + 74B9185123199E8F00ADDEA4 /* BookDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookDetailViewModel.swift; sourceTree = ""; }; + 74B9185323199F4500ADDEA4 /* BookDetailViewController+View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BookDetailViewController+View.swift"; sourceTree = ""; }; + 74B918552319AE0300ADDEA4 /* BookDetailViewController+Safari.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BookDetailViewController+Safari.swift"; sourceTree = ""; }; E6741F045EBC12BB315EE1CB /* Pods-iOSBooks.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iOSBooks.debug.xcconfig"; path = "Target Support Files/Pods-iOSBooks/Pods-iOSBooks.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -127,6 +137,7 @@ children = ( 74ADE9B5231969F0006D2644 /* Coordinators */, 7447D3762316F6C700E01BD3 /* BooksList */, + 74ADE9D323199E0F006D2644 /* BookDetail */, 7447D3712316F16E00E01BD3 /* Data */, 0E3964D72314BB470093738B /* AppDelegate.swift */, 0E3964DE2314BB4A0093738B /* Assets.xcassets */, @@ -259,6 +270,34 @@ path = Subviews; sourceTree = ""; }; + 74ADE9D323199E0F006D2644 /* BookDetail */ = { + isa = PBXGroup; + children = ( + 74B9184F23199E6D00ADDEA4 /* View */, + 74B9185023199E7700ADDEA4 /* ViewModel */, + ); + path = BookDetail; + sourceTree = ""; + }; + 74B9184F23199E6D00ADDEA4 /* View */ = { + isa = PBXGroup; + children = ( + 74ADE9CF23199C1F006D2644 /* BookDetail.storyboard */, + 74ADE9D123199D97006D2644 /* BookDetailViewController.swift */, + 74B9185323199F4500ADDEA4 /* BookDetailViewController+View.swift */, + 74B918552319AE0300ADDEA4 /* BookDetailViewController+Safari.swift */, + ); + path = View; + sourceTree = ""; + }; + 74B9185023199E7700ADDEA4 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 74B9185123199E8F00ADDEA4 /* BookDetailViewModel.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; E4186846F20EA500EF61D605 /* Pods */ = { isa = PBXGroup; children = ( @@ -357,6 +396,7 @@ files = ( 0E3964E22314BB4A0093738B /* LaunchScreen.storyboard in Resources */, 7447D37E2316F72A00E01BD3 /* BooksList.storyboard in Resources */, + 74ADE9D023199C1F006D2644 /* BookDetail.storyboard in Resources */, 0E3964DF2314BB4A0093738B /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -460,6 +500,7 @@ 74ADE9C223196E99006D2644 /* Identifiable.swift in Sources */, 7447D36C2316F12800E01BD3 /* Item.swift in Sources */, 7447D3682316E57500E01BD3 /* Book.swift in Sources */, + 74B9185423199F4500ADDEA4 /* BookDetailViewController+View.swift in Sources */, 74ADE9BE23196CE3006D2644 /* AppCoordinatorDependencyInjector.swift in Sources */, 7447D3702316F14D00E01BD3 /* SalesInfo.swift in Sources */, 7447D37A2316F71200E01BD3 /* BooksListViewModel.swift in Sources */, @@ -467,12 +508,15 @@ 7447D37C2316F71D00E01BD3 /* BooksListViewController.swift in Sources */, 74ADE9C7231973B5006D2644 /* BooksListViewController+CollectionView.swift in Sources */, 74ADE9C52319730F006D2644 /* BooksCell.swift in Sources */, + 74ADE9D223199D97006D2644 /* BookDetailViewController.swift in Sources */, 74ADE9B823196A7A006D2644 /* AppCoordinator.swift in Sources */, + 74B918562319AE0300ADDEA4 /* BookDetailViewController+Safari.swift in Sources */, 0E3964D82314BB470093738B /* AppDelegate.swift in Sources */, 74ADE9C023196E44006D2644 /* UIViewController+QuickInstance.swift in Sources */, 7447D3602316CB1200E01BD3 /* Reachability.swift in Sources */, 7447D35E2316C91700E01BD3 /* APIClient.swift in Sources */, 7447D3642316E02500E01BD3 /* Endpoint.swift in Sources */, + 74B9185223199E8F00ADDEA4 /* BookDetailViewModel.swift in Sources */, 7447D36A2316F11800E01BD3 /* BooksList.swift in Sources */, 7447D3662316E3C100E01BD3 /* BooksClient.swift in Sources */, 7447D3622316DECA00E01BD3 /* BooksAPI.swift in Sources */, diff --git a/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/Contents.json b/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/Contents.json new file mode 100644 index 0000000..b7b948c --- /dev/null +++ b/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "back_arrow.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "back_arrow@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "back_arrow@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/back_arrow.png b/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/back_arrow.png new file mode 100644 index 0000000..6575439 Binary files /dev/null and b/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/back_arrow.png differ diff --git a/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/back_arrow@2x.png b/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/back_arrow@2x.png new file mode 100644 index 0000000..11c6c4c Binary files /dev/null and b/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/back_arrow@2x.png differ diff --git a/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/back_arrow@3x.png b/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/back_arrow@3x.png new file mode 100644 index 0000000..1ce9897 Binary files /dev/null and b/iOSBooks/iOSBooks/Assets.xcassets/back_arrow.imageset/back_arrow@3x.png differ diff --git a/iOSBooks/iOSBooks/BookDetail/View/BookDetail.storyboard b/iOSBooks/iOSBooks/BookDetail/View/BookDetail.storyboard new file mode 100644 index 0000000..c032e64 --- /dev/null +++ b/iOSBooks/iOSBooks/BookDetail/View/BookDetail.storyboard @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSBooks/iOSBooks/BookDetail/View/BookDetailViewController+Safari.swift b/iOSBooks/iOSBooks/BookDetail/View/BookDetailViewController+Safari.swift new file mode 100644 index 0000000..cfaad1a --- /dev/null +++ b/iOSBooks/iOSBooks/BookDetail/View/BookDetailViewController+Safari.swift @@ -0,0 +1,16 @@ +// +// BookDetailViewController+Safari.swift +// iOSBooks +// +// Created by Guilherme Antunes Ferreira on 30/08/19. +// Copyright © 2019 Guilherme Antunes. All rights reserved. +// + +import UIKit + +extension BookDetailViewController { + @objc func openBuyLink() { + guard let buyLink = viewModel?.getBookBuyLinkURL() else { return } + UIApplication.shared.open(buyLink, options: [:], completionHandler: nil) + } +} diff --git a/iOSBooks/iOSBooks/BookDetail/View/BookDetailViewController+View.swift b/iOSBooks/iOSBooks/BookDetail/View/BookDetailViewController+View.swift new file mode 100644 index 0000000..ca0703d --- /dev/null +++ b/iOSBooks/iOSBooks/BookDetail/View/BookDetailViewController+View.swift @@ -0,0 +1,37 @@ +// +// BookDetailViewController+View.swift +// iOSBooks +// +// Created by Guilherme Antunes Ferreira on 30/08/19. +// Copyright © 2019 Guilherme Antunes. All rights reserved. +// + +import Kingfisher +import UIKit + +protocol BookDetailViewControllerPresentable: class { + +} + +extension BookDetailViewController: BookDetailViewControllerPresentable { + + func configureTap() { + let tap = UITapGestureRecognizer(target: self, action: #selector(openBuyLink)) + buyLinkLabel?.addGestureRecognizer(tap) + } + + func setupView() { + title = viewModel?.getScreenTitle() + bookImageView?.kf.setImage(with: viewModel?.getBookImageLink()) + bookTitleLabel?.text = viewModel?.getBookTitle() + bookAuthorsLabel?.text = viewModel?.getBookAuthors() + buyLinkLabel?.text = viewModel?.getBookBuyLink() + descriptionTextView?.text = viewModel?.getBookDescription() + } + + func setupNavigation() { + navigationController?.navigationBar.prefersLargeTitles = false + setBackButton(#selector(dismissScreen)) + } + +} diff --git a/iOSBooks/iOSBooks/BookDetail/View/BookDetailViewController.swift b/iOSBooks/iOSBooks/BookDetail/View/BookDetailViewController.swift new file mode 100644 index 0000000..93da8ac --- /dev/null +++ b/iOSBooks/iOSBooks/BookDetail/View/BookDetailViewController.swift @@ -0,0 +1,39 @@ +// +// BookDetailViewController.swift +// iOSBooks +// +// Created by Guilherme Antunes Ferreira on 30/08/19. +// Copyright © 2019 Guilherme Antunes. All rights reserved. +// + +import UIKit + +class BookDetailViewController: UIViewController { + + // MARK: - Outlets + @IBOutlet weak var bookImageView: UIImageView? + @IBOutlet weak var bookTitleLabel: UILabel? + @IBOutlet weak var bookAuthorsLabel: UILabel? + @IBOutlet weak var buyLinkLabel: UILabel? + @IBOutlet weak var descriptionTextView: UITextView? + + // MARK: - Properties + var viewModel: BookDetailViewModelProtocol? + + // MARK: - View Life Cycle + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + setupView() + setupNavigation() + configureTap() + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + descriptionTextView?.scrollRangeToVisible(NSRange(location:0, length:0)) + } + + @objc func dismissScreen() { + viewModel?.presentPreviousStep() + } +} diff --git a/iOSBooks/iOSBooks/BookDetail/ViewModel/BookDetailViewModel.swift b/iOSBooks/iOSBooks/BookDetail/ViewModel/BookDetailViewModel.swift new file mode 100644 index 0000000..712e942 --- /dev/null +++ b/iOSBooks/iOSBooks/BookDetail/ViewModel/BookDetailViewModel.swift @@ -0,0 +1,75 @@ +// +// BookDetailViewModel.swift +// iOSBooks +// +// Created by Guilherme Antunes Ferreira on 30/08/19. +// Copyright © 2019 Guilherme Antunes. All rights reserved. +// + +import Foundation + +protocol BookDetailViewModelProtocol { + func getBookTitle() -> String + func getBookAuthors() -> String + func getBookBuyLink() -> String + func getBookDescription() -> String + func getBookImageLink() -> URL? + func presentPreviousStep() + func getScreenTitle() -> String? + func getBookBuyLinkURL() -> URL? +} + +class BookDetailViewModel: BookDetailViewModelProtocol { + + // MARK: - Properties + var selectedBook: Item? + weak var view: BookDetailViewControllerPresentable? + var coordinator: AppCoordinatorProtocol? + + // MARK: - ViewModel Protocol Methods + func getBookTitle() -> String { + guard let bookTitle = selectedBook?.book?.title else { return "Título indisponível" } + var title = "Título: " + title.append(bookTitle) + return title + } + + func getBookAuthors() -> String { + guard let bookAuthor = selectedBook?.book?.authors?.first else { return "Autores não disponíveis" } + var author = "Autor: " + author.append(bookAuthor) + return author + } + + func getBookBuyLink() -> String { + return selectedBook?.salesInfo?.buyLink ?? "Link de compra não disponível" + } + + func getBookDescription() -> String { + return selectedBook?.book?.description ?? "Sem descrição disponível" + } + + func getBookImageLink() -> URL? { + if let bookURLString = selectedBook?.book?.imageLinks?.thumbnail { + return URL(string: bookURLString) + } + + return nil + } + + func getScreenTitle() -> String? { + return selectedBook?.book?.title + } + + func presentPreviousStep() { + coordinator?.presentPreviousStep() + } + + func getBookBuyLinkURL() -> URL? { + if let urlString = selectedBook?.salesInfo?.buyLink { + return URL(string: urlString) + } + + return nil + } +} diff --git a/iOSBooks/iOSBooks/BooksList/View/BooksList.storyboard b/iOSBooks/iOSBooks/BooksList/View/BooksList.storyboard index 511c79e..14bcfd6 100644 --- a/iOSBooks/iOSBooks/BooksList/View/BooksList.storyboard +++ b/iOSBooks/iOSBooks/BooksList/View/BooksList.storyboard @@ -70,4 +70,5 @@ + diff --git a/iOSBooks/iOSBooks/BooksList/View/BooksListViewController+CollectionView.swift b/iOSBooks/iOSBooks/BooksList/View/BooksListViewController+CollectionView.swift index 7ac7c72..e5fd44c 100644 --- a/iOSBooks/iOSBooks/BooksList/View/BooksListViewController+CollectionView.swift +++ b/iOSBooks/iOSBooks/BooksList/View/BooksListViewController+CollectionView.swift @@ -20,4 +20,8 @@ extension BooksListViewController: UICollectionViewDataSource, UICollectionViewD func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { return viewModel?.cellForItem(inCollectionView: collectionView, atIndexPath: indexPath) ?? UICollectionViewCell() } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + viewModel?.selectBook(atIndexPath: indexPath) + } } diff --git a/iOSBooks/iOSBooks/BooksList/View/BooksListViewController+View.swift b/iOSBooks/iOSBooks/BooksList/View/BooksListViewController+View.swift index e2ccd98..75e57a0 100644 --- a/iOSBooks/iOSBooks/BooksList/View/BooksListViewController+View.swift +++ b/iOSBooks/iOSBooks/BooksList/View/BooksListViewController+View.swift @@ -8,7 +8,7 @@ import UIKit -protocol BooksListViewControllerPresentable { +protocol BooksListViewControllerPresentable: class { func reloadView() func presentError(message: String) } @@ -27,4 +27,8 @@ extension BooksListViewController: BooksListViewControllerPresentable { booksCollectionView?.dataSource = self booksCollectionView?.delegate = self } + + func setupNavigationBar() { + navigationController?.navigationBar.prefersLargeTitles = true + } } diff --git a/iOSBooks/iOSBooks/BooksList/View/BooksListViewController.swift b/iOSBooks/iOSBooks/BooksList/View/BooksListViewController.swift index 7661e23..e3a99da 100644 --- a/iOSBooks/iOSBooks/BooksList/View/BooksListViewController.swift +++ b/iOSBooks/iOSBooks/BooksList/View/BooksListViewController.swift @@ -19,4 +19,9 @@ class BooksListViewController: UIViewController { setupCollectionView() viewModel?.loadBooks() } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + setupNavigationBar() + } } diff --git a/iOSBooks/iOSBooks/BooksList/View/Subviews/BooksCell.swift b/iOSBooks/iOSBooks/BooksList/View/Subviews/BooksCell.swift index da5e82c..515a938 100644 --- a/iOSBooks/iOSBooks/BooksList/View/Subviews/BooksCell.swift +++ b/iOSBooks/iOSBooks/BooksList/View/Subviews/BooksCell.swift @@ -13,7 +13,7 @@ class BooksCell: UICollectionViewCell { @IBOutlet weak var bookImageView: UIImageView? func setup(withBook book: Book?) { - if let book = book, let bookURLString = book.imageLinks?.thumbnail, let url = URL(string: bookURLString) { + if let book = book, let bookURLString = book.imageLinks?.smallThumbnail, let url = URL(string: bookURLString) { bookImageView?.kf.setImage(with: url) } } diff --git a/iOSBooks/iOSBooks/BooksList/ViewModel/BooksListViewModel.swift b/iOSBooks/iOSBooks/BooksList/ViewModel/BooksListViewModel.swift index d913009..81dfa05 100644 --- a/iOSBooks/iOSBooks/BooksList/ViewModel/BooksListViewModel.swift +++ b/iOSBooks/iOSBooks/BooksList/ViewModel/BooksListViewModel.swift @@ -10,6 +10,8 @@ import UIKit protocol BooksListViewModelProtocol { func loadBooks() + func selectBook(atIndexPath indexPath: IndexPath) + func presentPreviousStep() func numberOfSections() -> Int func numberOfItemsInSection() -> Int func cellForItem(inCollectionView collectionView: UICollectionView, atIndexPath indexPath: IndexPath) -> UICollectionViewCell @@ -20,7 +22,9 @@ class BooksListViewModel: BooksListViewModelProtocol { var items: [Item] = [] var service = BooksClient() var startingIndex = 0 - var view: BooksListViewControllerPresentable? + weak var view: BooksListViewControllerPresentable? + var selectedBook: Item? + var coordinator: AppCoordinatorProtocol? func numberOfSections() -> Int { return 1 @@ -54,4 +58,14 @@ class BooksListViewModel: BooksListViewModelProtocol { } } + + func selectBook(atIndexPath indexPath: IndexPath) { + selectedBook = nil + selectedBook = items[indexPath.item] + coordinator?.presentNextStep() + } + + func presentPreviousStep() { + coordinator?.presentPreviousStep() + } } diff --git a/iOSBooks/iOSBooks/Coordinators/AppCoordinator/AppCoordinator.swift b/iOSBooks/iOSBooks/Coordinators/AppCoordinator/AppCoordinator.swift index f0129ef..eb21a1e 100644 --- a/iOSBooks/iOSBooks/Coordinators/AppCoordinator/AppCoordinator.swift +++ b/iOSBooks/iOSBooks/Coordinators/AppCoordinator/AppCoordinator.swift @@ -8,10 +8,21 @@ import UIKit -class AppCoordinator { +protocol AppCoordinatorProtocol: class { + func presentNextStep() + func presentPreviousStep() +} + +enum RoutingState { + case list + case detail +} + +class AppCoordinator: AppCoordinatorProtocol { lazy var injector = AppCoordinatorDependencyInjector() var window: UIWindow + var state: RoutingState = .list init(window: UIWindow) { self.window = window @@ -25,5 +36,28 @@ class AppCoordinator { func setupNavigationController() { injector.navigationController.viewControllers.append(injector.booksListViewController) + injector.booksListViewModel.coordinator = self + } + + func presentNextStep() { + switch state { + case .list: + injector.injectNewBook() + injector.bookDetailViewModel.coordinator = self + state = .detail + injector.navigationController.pushViewController(injector.bookDetailViewController, animated: true) + case.detail: + print("Nenhuma tela para frente neste fluxo") + } + } + + func presentPreviousStep() { + switch state { + case .list: + print("Nenhuma tela para trás neste fluxo") + case.detail: + state = .list + injector.navigationController.popViewController(animated: true) + } } } diff --git a/iOSBooks/iOSBooks/Coordinators/AppCoordinator/AppCoordinatorDependencyInjector.swift b/iOSBooks/iOSBooks/Coordinators/AppCoordinator/AppCoordinatorDependencyInjector.swift index 4ed7ff9..cd5e575 100644 --- a/iOSBooks/iOSBooks/Coordinators/AppCoordinator/AppCoordinatorDependencyInjector.swift +++ b/iOSBooks/iOSBooks/Coordinators/AppCoordinator/AppCoordinatorDependencyInjector.swift @@ -13,6 +13,7 @@ class AppCoordinatorDependencyInjector { let navigation = UINavigationController() navigation.navigationBar.prefersLargeTitles = true navigation.navigationBar.barStyle = .black + navigation.navigationBar.tintColor = .white return navigation }() @@ -26,4 +27,21 @@ class AppCoordinatorDependencyInjector { lazy var booksListViewModel: BooksListViewModel = { return BooksListViewModel() }() + + lazy var bookDetailViewController: BookDetailViewController = { + let controller: BookDetailViewController = BookDetailViewController.instantiate() + bookDetailViewModel.view = controller + controller.viewModel = bookDetailViewModel + return controller + }() + + lazy var bookDetailViewModel: BookDetailViewModel = { + let viewModel = BookDetailViewModel() + viewModel.selectedBook = booksListViewModel.selectedBook + return viewModel + }() + + func injectNewBook() { + bookDetailViewModel.selectedBook = booksListViewModel.selectedBook + } } diff --git a/iOSBooks/iOSBooks/UIViewController+QuickInstance.swift b/iOSBooks/iOSBooks/UIViewController+QuickInstance.swift index 3ccb0ed..dd6e636 100644 --- a/iOSBooks/iOSBooks/UIViewController+QuickInstance.swift +++ b/iOSBooks/iOSBooks/UIViewController+QuickInstance.swift @@ -27,10 +27,10 @@ extension UIViewController { extension UIViewController { func setBackButton(_ backFunction: Selector) { -// navigationItem.hidesBackButton = true -// let newBackButton = UIBarButtonItem(image: UIImage(named: "back_arrow"), style: .plain, target: self, action: backFunction) -// newBackButton.title = "Voltar" -// navigationItem.leftBarButtonItem = newBackButton + navigationItem.hidesBackButton = true + let newBackButton = UIBarButtonItem(image: UIImage(named: "back_arrow"), style: .plain, target: self, action: backFunction) + newBackButton.title = "Voltar" + navigationItem.leftBarButtonItem = newBackButton } }