-
Notifications
You must be signed in to change notification settings - Fork 59
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
47b9a34
commit a4fb97e
Showing
538 changed files
with
29,488 additions
and
524 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
// | ||
// AppDelegate.swift | ||
// CategoriesHits | ||
// | ||
// Created by Vladislav Fitc on 19/11/2021. | ||
// | ||
|
||
import UIKit | ||
|
||
@main | ||
class AppDelegate: UIResponder, UIApplicationDelegate { | ||
|
||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { | ||
// Override point for customization after application launch. | ||
return true | ||
} | ||
|
||
// MARK: UISceneSession Lifecycle | ||
|
||
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { | ||
// Called when a new scene session is being created. | ||
// Use this method to select a configuration to create the new scene with. | ||
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) | ||
} | ||
|
||
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { | ||
// Called when the user discards a scene session. | ||
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. | ||
// Use this method to release any resources that were specific to the discarded scenes, as they will not return. | ||
} | ||
|
||
|
||
} | ||
|
11 changes: 11 additions & 0 deletions
11
Examples/CategoriesHits/Assets.xcassets/AccentColor.colorset/Contents.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
{ | ||
"colors" : [ | ||
{ | ||
"idiom" : "universal" | ||
} | ||
], | ||
"info" : { | ||
"author" : "xcode", | ||
"version" : 1 | ||
} | ||
} |
98 changes: 98 additions & 0 deletions
98
Examples/CategoriesHits/Assets.xcassets/AppIcon.appiconset/Contents.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
{ | ||
"images" : [ | ||
{ | ||
"idiom" : "iphone", | ||
"scale" : "2x", | ||
"size" : "20x20" | ||
}, | ||
{ | ||
"idiom" : "iphone", | ||
"scale" : "3x", | ||
"size" : "20x20" | ||
}, | ||
{ | ||
"idiom" : "iphone", | ||
"scale" : "2x", | ||
"size" : "29x29" | ||
}, | ||
{ | ||
"idiom" : "iphone", | ||
"scale" : "3x", | ||
"size" : "29x29" | ||
}, | ||
{ | ||
"idiom" : "iphone", | ||
"scale" : "2x", | ||
"size" : "40x40" | ||
}, | ||
{ | ||
"idiom" : "iphone", | ||
"scale" : "3x", | ||
"size" : "40x40" | ||
}, | ||
{ | ||
"idiom" : "iphone", | ||
"scale" : "2x", | ||
"size" : "60x60" | ||
}, | ||
{ | ||
"idiom" : "iphone", | ||
"scale" : "3x", | ||
"size" : "60x60" | ||
}, | ||
{ | ||
"idiom" : "ipad", | ||
"scale" : "1x", | ||
"size" : "20x20" | ||
}, | ||
{ | ||
"idiom" : "ipad", | ||
"scale" : "2x", | ||
"size" : "20x20" | ||
}, | ||
{ | ||
"idiom" : "ipad", | ||
"scale" : "1x", | ||
"size" : "29x29" | ||
}, | ||
{ | ||
"idiom" : "ipad", | ||
"scale" : "2x", | ||
"size" : "29x29" | ||
}, | ||
{ | ||
"idiom" : "ipad", | ||
"scale" : "1x", | ||
"size" : "40x40" | ||
}, | ||
{ | ||
"idiom" : "ipad", | ||
"scale" : "2x", | ||
"size" : "40x40" | ||
}, | ||
{ | ||
"idiom" : "ipad", | ||
"scale" : "1x", | ||
"size" : "76x76" | ||
}, | ||
{ | ||
"idiom" : "ipad", | ||
"scale" : "2x", | ||
"size" : "76x76" | ||
}, | ||
{ | ||
"idiom" : "ipad", | ||
"scale" : "2x", | ||
"size" : "83.5x83.5" | ||
}, | ||
{ | ||
"idiom" : "ios-marketing", | ||
"scale" : "1x", | ||
"size" : "1024x1024" | ||
} | ||
], | ||
"info" : { | ||
"author" : "xcode", | ||
"version" : 1 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"info" : { | ||
"author" : "xcode", | ||
"version" : 1 | ||
} | ||
} |
25 changes: 25 additions & 0 deletions
25
Examples/CategoriesHits/Base.lproj/LaunchScreen.storyboard
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> | ||
<dependencies> | ||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/> | ||
<capability name="Safe area layout guides" minToolsVersion="9.0"/> | ||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
</dependencies> | ||
<scenes> | ||
<!--View Controller--> | ||
<scene sceneID="EHf-IW-A2E"> | ||
<objects> | ||
<viewController id="01J-lp-oVM" sceneMemberID="viewController"> | ||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> | ||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | ||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> | ||
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> | ||
</view> | ||
</viewController> | ||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> | ||
</objects> | ||
<point key="canvasLocation" x="53" y="375"/> | ||
</scene> | ||
</scenes> | ||
</document> |
152 changes: 152 additions & 0 deletions
152
Examples/CategoriesHits/CategoriesHits.SearchResultsController.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,152 @@ | ||
// | ||
// SearchResultsController.swift | ||
// CategoriesHits | ||
// | ||
// Created by Vladislav Fitc on 19/11/2021. | ||
// | ||
|
||
import Foundation | ||
import InstantSearch | ||
import UIKit | ||
|
||
extension CategoriesHits { | ||
|
||
class SearchResultsController: UITableViewController { | ||
|
||
var didSelectSuggestion: ((String) -> Void)? | ||
|
||
enum Section: Int, CaseIterable { | ||
case categories | ||
case hits | ||
|
||
var title: String { | ||
switch self { | ||
case .categories: | ||
return "Categories" | ||
case .hits: | ||
return "Products" | ||
} | ||
} | ||
|
||
var cellReuseIdentifier: String { | ||
switch self { | ||
case .categories: | ||
return "categories" | ||
case .hits: | ||
return "hits" | ||
} | ||
} | ||
|
||
init?(section: Int) { | ||
self.init(rawValue: section) | ||
} | ||
|
||
init?(indexPath: IndexPath) { | ||
self.init(section: indexPath.section) | ||
} | ||
|
||
} | ||
|
||
weak var categoriesInteractor: FacetListInteractor? { | ||
didSet { | ||
oldValue?.onResultsUpdated.cancelSubscription(for: tableView) | ||
guard let interactor = categoriesInteractor else { return } | ||
interactor.onResultsUpdated.subscribe(with: tableView) { tableView, _ in | ||
tableView.reloadData() | ||
}.onQueue(.main) | ||
} | ||
} | ||
|
||
weak var hitsInteractor: HitsInteractor<Hit<Product>>? { | ||
didSet { | ||
oldValue?.onResultsUpdated.cancelSubscription(for: tableView) | ||
guard let interactor = hitsInteractor else { return } | ||
interactor.onResultsUpdated.subscribe(with: tableView) { tableView, _ in | ||
tableView.reloadData() | ||
}.onQueue(.main) | ||
} | ||
} | ||
|
||
override func viewDidLoad() { | ||
super.viewDidLoad() | ||
tableView.register(CategoryTableViewCell.self, forCellReuseIdentifier: Section.categories.cellReuseIdentifier) | ||
tableView.register(ProductTableViewCell.self, forCellReuseIdentifier: Section.hits.cellReuseIdentifier) | ||
} | ||
|
||
override func numberOfSections(in tableView: UITableView) -> Int { | ||
return Section.allCases.count | ||
} | ||
|
||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | ||
guard let section = Section(rawValue: section) else { return 0 } | ||
switch section { | ||
case .categories: | ||
return categoriesInteractor?.items.count ?? 0 | ||
case .hits: | ||
return hitsInteractor?.numberOfHits() ?? 0 | ||
} | ||
} | ||
|
||
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | ||
guard let section = Section(rawValue: indexPath.section) else { return UITableViewCell() } | ||
|
||
let cell: UITableViewCell | ||
|
||
switch section { | ||
case .categories: | ||
cell = tableView.dequeueReusableCell(withIdentifier: Section.categories.cellReuseIdentifier, for: indexPath) | ||
if | ||
let categoryCell = cell as? CategoryTableViewCell, | ||
let category = categoriesInteractor?.items[indexPath.row] { | ||
categoryCell.setup(with: category) | ||
} | ||
case .hits: | ||
cell = tableView.dequeueReusableCell(withIdentifier: Section.hits.cellReuseIdentifier, for: indexPath) | ||
if | ||
let productTableViewCell = cell as? ProductTableViewCell, | ||
let hit = hitsInteractor?.hit(atIndex: indexPath.row) { | ||
productTableViewCell.setup(with: hit) | ||
} | ||
} | ||
|
||
return cell | ||
} | ||
|
||
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { | ||
guard let section = Section(rawValue: section) else { return nil } | ||
switch section { | ||
case .categories where categoriesInteractor?.items.count ?? 0 == 0: | ||
return nil | ||
case .hits where hitsInteractor?.numberOfHits() ?? 0 == 0: | ||
return nil | ||
default: | ||
return section.title | ||
} | ||
} | ||
|
||
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | ||
guard let section = Section(indexPath: indexPath) else { return 0 } | ||
switch section { | ||
case .categories: | ||
return 44 | ||
case .hits: | ||
return 100 | ||
} | ||
} | ||
|
||
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | ||
guard let section = Section(rawValue: indexPath.section) else { return } | ||
switch section { | ||
case .hits: | ||
// Handle hit selection | ||
break | ||
|
||
case .categories: | ||
// Handle category selection | ||
break | ||
} | ||
} | ||
|
||
} | ||
|
||
} |
Oops, something went wrong.