Skip to content

Commit a321c41

Browse files
refactor: Separate the InstantSearchSwiftUI product (#193)
* make a separate InstantSearchSwiftUI product * update project structure in the readme file
1 parent be77006 commit a321c41

29 files changed

+109
-53
lines changed

InstantSearch.podspec

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Pod::Spec.new do |s|
99
s.author = { "Algolia" => "contact@algolia.com" }
1010
s.source = { :git => 'https://github.com/algolia/instantsearch-ios.git', :tag => s.version }
1111

12-
s.swift_version = "5.1"
12+
s.swift_version = "5.2"
1313

1414
s.default_subspec = 'UI'
1515

@@ -24,7 +24,6 @@ Pod::Spec.new do |s|
2424

2525
s.subspec "Core" do |ss|
2626
ss.source_files = 'Sources/InstantSearchCore/**/*.{swift}'
27-
ss.exclude_files = 'Sources/InstantSearchCore/SwiftUI/**/*.{swift}'
2827
ss.dependency 'AlgoliaSearchClient', '~> 8.10'
2928
ss.dependency 'InstantSearch/Insights'
3029
ss.ios.deployment_target = '9.0'
@@ -36,7 +35,6 @@ Pod::Spec.new do |s|
3635

3736
s.subspec "UI" do |ss|
3837
ss.source_files = 'Sources/InstantSearch/**/*.{swift}'
39-
ss.exclude_files = 'Sources/InstantSearch/SwiftUI/**/*.{swift}'
4038
ss.dependency 'InstantSearch/Core'
4139
ss.ios.deployment_target = '9.0'
4240
ss.osx.deployment_target = '10.10'
@@ -46,7 +44,7 @@ Pod::Spec.new do |s|
4644
end
4745

4846
s.subspec "SwiftUI" do |ss|
49-
ss.source_files = 'Sources/InstantSearchCore/SwiftUI/**/*.{swift}', 'Sources/InstantSearch/SwiftUI/**/*.{swift}'
47+
ss.source_files = 'Sources/InstantSearchSwiftUI/**/*.{swift}'
5048
ss.dependency 'InstantSearch/Core'
5149
ss.ios.deployment_target = '13.0'
5250
ss.osx.deployment_target = '10.15'

Package.swift

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,40 @@ let package = Package(
2020
targets: ["InstantSearchCore"]),
2121
.library(
2222
name: "InstantSearchInsights",
23-
targets: ["InstantSearchInsights"])
23+
targets: ["InstantSearchInsights"]),
24+
.library(
25+
name: "InstantSearchSwiftUI",
26+
targets: ["InstantSearchSwiftUI"])
2427
],
2528
dependencies: [
26-
.package(name: "AlgoliaSearchClient", url: "https://github.com/algolia/algoliasearch-client-swift", from: "8.10.0")
29+
.package(name: "AlgoliaSearchClient",
30+
url: "https://github.com/algolia/algoliasearch-client-swift", from: "8.10.0")
2731
],
2832
targets: [
2933
.target(
3034
name: "InstantSearchInsights",
3135
dependencies: ["AlgoliaSearchClient"]),
32-
.target(
33-
name: "InstantSearchCore",
34-
dependencies: ["AlgoliaSearchClient", "InstantSearchInsights"]),
35-
.target(
36-
name: "InstantSearch",
37-
dependencies: ["InstantSearchCore"]),
3836
.testTarget(
3937
name: "InstantSearchInsightsTests",
4038
dependencies: ["InstantSearchInsights", "AlgoliaSearchClient"]),
39+
.target(
40+
name: "InstantSearchCore",
41+
dependencies: ["AlgoliaSearchClient", "InstantSearchInsights"]),
4142
.testTarget(
4243
name: "InstantSearchCoreTests",
4344
dependencies: ["InstantSearchCore", "AlgoliaSearchClient", "InstantSearchInsights"]),
45+
.target(
46+
name: "InstantSearch",
47+
dependencies: ["InstantSearchCore"]),
4448
.testTarget(
4549
name: "InstantSearchTests",
46-
dependencies: ["InstantSearch"])
50+
dependencies: ["InstantSearch"]),
51+
.target(
52+
name: "InstantSearchSwiftUI",
53+
dependencies: ["InstantSearchCore"]),
54+
.testTarget(
55+
name: "InstantSearchSwiftUITests",
56+
dependencies: ["InstantSearchSwiftUI"])
57+
4758
]
4859
)

Readme.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ InstantSearch family: **InstantSearch iOS** | [InstantSearch Android][instantsea
1717

1818
**InstantSearch iOS** consists of three products
1919
- *InstantSearch Insights* – library that allows developers to capture search-related events
20-
- *InstantSearch Core* – the business logic modules of InstantSearch without provided UIKit controllers
21-
- *InstantSearch* – the complete InstantSearch toolset including UIKit and SwiftUI components
20+
- *InstantSearch Core* – the business logic modules of InstantSearch
21+
- *InstantSearch* – the complete InstantSearch toolset including UIKit components
22+
- *InstantSearch SwiftUI* – the set of SwiftUI data models and views to use on top of Core components
2223

2324
## Demo
2425

Sources/InstantSearchCore/Hits/HitsInteractor.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public class HitsInteractor<Record: Codable>: AnyHitsInteractor {
8282

8383
public func hit(atIndex index: Int) -> Record? {
8484
guard let hitsPageMap = paginator.pageMap else { return nil }
85-
notifyForInfiniteScrolling(rowNumber: index)
85+
notifyDidPresentRow(atIndex: index)
8686
return hitsPageMap[index]
8787
}
8888

@@ -111,12 +111,12 @@ public class HitsInteractor<Record: Codable>: AnyHitsInteractor {
111111
return pageMap.loadedPages.flatMap { $0.items }.compactMap(toRaw)
112112
}
113113

114-
internal func notifyForInfiniteScrolling(rowNumber: Int) {
114+
public func notifyDidPresentRow(atIndex rowIndex: Int) {
115115
guard
116116
case .on(let pageLoadOffset) = settings.infiniteScrolling,
117117
let hitsPageMap = paginator.pageMap else { return }
118118

119-
infiniteScrollingController.calculatePagesAndLoad(currentRow: rowNumber, offset: pageLoadOffset, pageMap: hitsPageMap)
119+
infiniteScrollingController.calculatePagesAndLoad(currentRow: rowIndex, offset: pageLoadOffset, pageMap: hitsPageMap)
120120
}
121121

122122
}

Sources/InstantSearchCore/SwiftUI/CurrentFiltersObservableController.swift renamed to Sources/InstantSearchSwiftUI/DataModel/CurrentFiltersObservableController.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
// Created by Vladislav Fitc on 29/03/2021.
66
//
77

8-
import Foundation
8+
#if !InstantSearchCocoaPods
9+
import InstantSearchCore
10+
#endif
911
#if canImport(Combine) && canImport(SwiftUI) && (arch(arm64) || arch(x86_64))
1012
import Combine
1113
import SwiftUI

Sources/InstantSearchCore/SwiftUI/DynamicFacetListObservableController.swift renamed to Sources/InstantSearchSwiftUI/DataModel/DynamicFacetListObservableController.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
// Created by Vladislav Fitc on 15/06/2021.
66
//
77

8-
import Foundation
8+
#if !InstantSearchCocoaPods
9+
import InstantSearchCore
10+
#endif
911
#if canImport(Combine) && canImport(SwiftUI) && (arch(arm64) || arch(x86_64))
1012
import Combine
1113
import SwiftUI

Sources/InstantSearchCore/SwiftUI/FacetListObservableController.swift renamed to Sources/InstantSearchSwiftUI/DataModel/FacetListObservableController.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
// Created by Vladislav Fitc on 29/03/2021.
66
//
77

8-
import Foundation
8+
#if !InstantSearchCocoaPods
9+
import InstantSearchCore
10+
#endif
911
#if canImport(Combine) && canImport(SwiftUI) && (arch(arm64) || arch(x86_64))
1012
import Combine
1113
import SwiftUI

Sources/InstantSearchCore/SwiftUI/FilterClearObservableController.swift renamed to Sources/InstantSearchSwiftUI/DataModel/FilterClearObservableController.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
// Created by Vladislav Fitc on 29/03/2021.
66
//
77

8-
import Foundation
8+
#if !InstantSearchCocoaPods
9+
import InstantSearchCore
10+
#endif
911
#if canImport(Combine) && canImport(SwiftUI) && (arch(arm64) || arch(x86_64))
1012
import Combine
1113
import SwiftUI

Sources/InstantSearchCore/SwiftUI/FilterListObservableController.swift renamed to Sources/InstantSearchSwiftUI/DataModel/FilterListObservableController.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
// Created by Vladislav Fitc on 10/06/2021.
66
//
77

8-
import Foundation
8+
#if !InstantSearchCocoaPods
9+
import InstantSearchCore
10+
#endif
911
#if canImport(Combine) && canImport(SwiftUI) && (arch(arm64) || arch(x86_64))
1012
import Combine
1113
import SwiftUI

Sources/InstantSearchCore/SwiftUI/FilterToggleObservableController.swift renamed to Sources/InstantSearchSwiftUI/DataModel/FilterToggleObservableController.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
//
22
// FilterToggleObservableController.swift
3-
// DemoEcommerce
3+
//
44
//
55
// Created by Vladislav Fitc on 11/04/2021.
66
//
77

8-
import Foundation
8+
#if !InstantSearchCocoaPods
9+
import InstantSearchCore
10+
#endif
911
#if canImport(Combine) && canImport(SwiftUI) && (arch(arm64) || arch(x86_64))
1012
import Combine
1113
import SwiftUI

0 commit comments

Comments
 (0)