Skip to content

Commit

Permalink
fix search bug
Browse files Browse the repository at this point in the history
add git trending
fix bug
update ui
tag 1.0.1
  • Loading branch information
cywd committed Jan 23, 2018
1 parent df07c1a commit 7654d58
Show file tree
Hide file tree
Showing 7 changed files with 149 additions and 25 deletions.
44 changes: 27 additions & 17 deletions FitHub/FitHub/Discovery/DiscoveryViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,19 @@ import UIKit

class DiscoveryViewController: BaseViewController, UISearchControllerDelegate, UISearchBarDelegate, UITableViewDataSource, UITableViewDelegate {

var items = [RepositoryModel]()

@IBOutlet weak var tableView: UITableView!
var searchController: UISearchController!
var searchResultController: SearchViewController!

override func viewDidLoad() {
super.viewDidLoad()

self.tableView.fit_registerCell(cell: RepositoriesTableViewCell.self)

searchResultController = SearchViewController.loadStoryboard()
searchResultController.nav = self.navigationController

searchController = UISearchController(searchResultsController: searchResultController)
searchController.searchResultsUpdater = searchResultController
Expand All @@ -27,9 +32,22 @@ class DiscoveryViewController: BaseViewController, UISearchControllerDelegate, U
searchController.searchBar.tintColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)

navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = true
navigationItem.hidesSearchBarWhenScrolling = false

definesPresentationContext = true

self.requestData()
}

fileprivate func requestData() {
NetworkManager.getTrendingRepository(success: { (items) in

self.items = items
self.tableView.reloadData()

}) { (_) in

}
}

override func didReceiveMemoryWarning() {
Expand All @@ -56,12 +74,12 @@ class DiscoveryViewController: BaseViewController, UISearchControllerDelegate, U
extension DiscoveryViewController {

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
return items.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
cell.textLabel?.text = "de"
let cell = tableView.fit_dequeueReusableCell(indexPath: indexPath) as RepositoriesTableViewCell
cell.model = items[indexPath.row]
return cell
}

Expand All @@ -72,20 +90,12 @@ extension DiscoveryViewController {
extension DiscoveryViewController {

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)

}

}


// MARK: - UISearchBarDelegate

extension DiscoveryViewController {
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()



let vc = RepositoryViewController.loadStoryboard()
vc.userName = self.items[indexPath.row].owner!.login!
vc.repositoryName = self.items[indexPath.row].name!
self.navigationController?.pushViewController(vc, animated: true)
}

}
Expand Down
47 changes: 43 additions & 4 deletions FitHub/FitHub/Discovery/SearchViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ enum SearchType: String {

class SearchViewController: UITableViewController, UISearchBarDelegate, StoryboardLoadable {

var nav: UINavigationController?

var text: String = ""

var type: SearchType!
Expand All @@ -35,6 +37,13 @@ class SearchViewController: UITableViewController, UISearchBarDelegate, Storyboa
tableView.fit_registerCell(cell: UserTableViewCell.self)
tableView.fit_registerCell(cell: RepositoriesTableViewCell.self)
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)

self.users.removeAll()
self.repos.removeAll()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
Expand Down Expand Up @@ -84,8 +93,8 @@ extension SearchViewController {
extension SearchViewController {

func searchRepos(name: String) {
NetworkManager.searchUser(name: name, success: { (items) in
self.users = items
NetworkManager.searchRepos(name: name, success: { (items) in
self.repos = items

self.tableView.reloadData()
}) { (_) in
Expand Down Expand Up @@ -147,13 +156,17 @@ extension SearchViewController {
let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") as! SearchSectionHeaderView
header.type = type
header.reposBlock = {
self.searchRepos(name: self.text)
self.repos.removeAll()
self.type = .repositories
self.tableView.reloadData()
self.searchRepos(name: self.text)
}

header.usersBlock = {
self.searchUsers(name: self.text)
self.users.removeAll()
self.type = .users
self.tableView.reloadData()
self.searchUsers(name: self.text)
}
return header
}
Expand All @@ -172,4 +185,30 @@ extension SearchViewController {
return 0
}
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
switch type {
case .repositories:
let vc = RepositoryViewController.loadStoryboard()
vc.userName = self.repos[indexPath.row].owner!.login!
vc.repositoryName = self.repos[indexPath.row].name!
self.nav?.pushViewController(vc, animated: true)
case .users:

let model = self.users[indexPath.row]
if model.type == "User" {
let vc = UserDetailViewController.loadStoryboard()
vc.name = model.login!
self.nav?.pushViewController(vc, animated: true)
} else {
let vc = OrgViewController.loadStoryboard()
vc.name = model.login!
self.nav?.pushViewController(vc, animated: true)
}

default:
break
}
}
}
2 changes: 1 addition & 1 deletion FitHub/FitHub/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<string>1.0.1</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
Expand Down
21 changes: 20 additions & 1 deletion FitHub/FitHub/Main/Base.lproj/Main.storyboard
Original file line number Diff line number Diff line change
Expand Up @@ -263,16 +263,35 @@
<view key="view" contentMode="scaleToFill" id="CdQ-J6-oNy">
<rect key="frame" x="0.0" y="0.0" width="375" height="554"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="5Xq-j1-1Xd">
<rect key="frame" x="0.0" y="0.0" width="375" height="554"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<connections>
<outlet property="dataSource" destination="TQ5-fz-OaR" id="nbi-LZ-gZQ"/>
<outlet property="delegate" destination="TQ5-fz-OaR" id="sUQ-au-HmQ"/>
</connections>
</tableView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="ha8-U5-kAx" firstAttribute="trailing" secondItem="5Xq-j1-1Xd" secondAttribute="trailing" id="TEo-AM-e4A"/>
<constraint firstItem="ha8-U5-kAx" firstAttribute="bottom" secondItem="5Xq-j1-1Xd" secondAttribute="bottom" id="gWh-rk-HTr"/>
<constraint firstItem="5Xq-j1-1Xd" firstAttribute="top" secondItem="ha8-U5-kAx" secondAttribute="top" id="kTF-DR-eAi"/>
<constraint firstItem="5Xq-j1-1Xd" firstAttribute="leading" secondItem="ha8-U5-kAx" secondAttribute="leading" id="naq-Hp-LpZ"/>
</constraints>
<viewLayoutGuide key="safeArea" id="ha8-U5-kAx"/>
</view>
<navigationItem key="navigationItem" title="Discovery" leftItemsSupplementBackButton="YES" id="N0Z-bU-yXl">
<barButtonItem key="backBarButtonItem" title=" " id="5MN-Pf-hzY"/>
</navigationItem>
<connections>
<outlet property="tableView" destination="5Xq-j1-1Xd" id="ycp-qS-USl"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="cnX-ge-sjZ" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="114" y="606"/>
<point key="canvasLocation" x="129" y="605"/>
</scene>
</scenes>
<resources>
Expand Down
2 changes: 1 addition & 1 deletion FitHub/FitHub/Org/OrgsViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import UIKit
import FitRefresh

class OrgsViewController: BaseViewController {
class OrgsViewController: BaseViewController, StoryboardLoadable {

var url: String = ""

Expand Down
2 changes: 1 addition & 1 deletion FitHub/FitHub/Repository/RepositoriesTableViewCell.xib
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@
<outlet property="starButton" destination="9Nt-rs-TVW" id="Upy-RX-dsf"/>
<outlet property="typeImageView" destination="hwp-HD-8hf" id="jK2-od-dns"/>
</connections>
<point key="canvasLocation" x="1596" y="-205"/>
<point key="canvasLocation" x="1588" y="-225"/>
</tableViewCell>
</objects>
<resources>
Expand Down
56 changes: 56 additions & 0 deletions FitHub/FitHub/Tool/NetworkManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ protocol NetworkManagerProtocol {
static func loadOrgs(withUrl urlStr: String, page: Int, success: @escaping (_ items: [OrgModel]) -> (), failure: @escaping (Error) -> ())

static func searchUser(name: String, success: @escaping (_ items: [UserModel]) -> (), failure: @escaping (Error) -> ())
static func searchRepos(name: String, success: @escaping (_ items: [RepositoryModel]) -> (), failure: @escaping (Error) -> ())

static func getTrendingRepository(success: @escaping (_ items: [RepositoryModel]) -> (), failure: @escaping (Error) -> ())

/// <#Description#>
///
Expand Down Expand Up @@ -151,6 +154,59 @@ class NetworkManager: NetworkManagerProtocol {
}
}

static func searchRepos(name: String, success: @escaping (_ items: [RepositoryModel]) -> (), failure: @escaping (Error) -> ()) {

let url = "https://api.github.com/search/repositories?q=\(name)"
let header = self.getHeader()
Alamofire.request(url, method: .get, headers:header).responseJSON { (response) in
switch response.result {
case .success(let value):
let json = JSON(value)

let total_count = json["total_count"].int

if let items = json["items"].arrayObject {

var models = [RepositoryModel]()
for dict in items {
models.append(RepositoryModel(dict: dict as! [String : AnyObject]))
}
success(models)
}
break
case .failure(let error):
failure(error)
break
}
}
}

static func getTrendingRepository(success: @escaping (_ items: [RepositoryModel]) -> (), failure: @escaping (Error) -> ()) {

let url = "https://raw.githubusercontent.com/cywd/cywd.github.io/master/json/treding.json"
let header = self.getHeader()
Alamofire.request(url, method: .get, headers:header).responseJSON { (response) in
switch response.result {
case .success(let value):
let json = JSON(value)

if let items = json.arrayObject {

var models = [RepositoryModel]()
for dict in items {
models.append(RepositoryModel(dict: dict as! [String : AnyObject]))
}
success(models)
}
break
case .failure(let error):
failure(error)
break
}
}

}

static func loadCommonUsers(withUrl urlStr: String, page: Int, success: @escaping (_ items: [UserModel]) -> (), failure: @escaping (Error) -> ()) {

let url = "\(urlStr)?page=\(page)"
Expand Down

0 comments on commit 7654d58

Please sign in to comment.