Skip to content

Commit 7d4423f

Browse files
committed
Move AsyncPaginationTracker to Yosemite
1 parent 313f222 commit 7d4423f

File tree

5 files changed

+11
-15
lines changed

5 files changed

+11
-15
lines changed

WooCommerce/Classes/Tools/InfiniteScroll/AsyncPaginationTracker.swift renamed to Modules/Sources/Yosemite/Tools/AsyncPaginationTracker.swift

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import Foundation
2-
import Yosemite
32

43
/// Async/await version of `PaginationTracker`, consider renaming `PaginationTracker` as deprecated and this class to `PaginationTracker`.
54
/// Keeps track of the pagination for API syncing to support infinite scroll and pull-to-refresh.
6-
final class AsyncPaginationTracker {
7-
typealias SyncFunction = (_ pageNumber: Int) async throws -> Bool
5+
public final class AsyncPaginationTracker {
6+
public typealias SyncFunction = (_ pageNumber: Int) async throws -> Bool
87

98
/// State of loading the next page in `ensureNextPageIsSynced`.
10-
enum NextPageSyncState {
9+
public enum NextPageSyncState {
1110
case syncing
1211
case synced
1312
case noNextPage
@@ -28,7 +27,7 @@ final class AsyncPaginationTracker {
2827
private var pagesBeingSynced = IndexSet()
2928

3029
/// Whether there might be more pages to fetch from the API, set by the sync function.
31-
private(set) var hasNextPage: Bool = true
30+
private(set) public var hasNextPage: Bool = true
3231

3332
/// Returns the highest page number that has been successfully synced, if any.
3433
private var highestPageSynced: Int? {
@@ -41,7 +40,7 @@ final class AsyncPaginationTracker {
4140
}
4241

4342
/// Designated Initializer
44-
init(pageFirstIndex: Int = Defaults.pageFirstIndex) {
43+
public init(pageFirstIndex: Int = Defaults.pageFirstIndex) {
4544
self.pageFirstIndex = pageFirstIndex
4645
}
4746

@@ -50,7 +49,7 @@ final class AsyncPaginationTracker {
5049
/// 1. Proceed only if there is next page to sync.
5150
/// 2. Verify if the next page isn't currently being synced.
5251
/// 3. Proceed syncing the next page.
53-
func ensureNextPageIsSynced(syncFunction: @escaping SyncFunction) async throws -> NextPageSyncState {
52+
public func ensureNextPageIsSynced(syncFunction: @escaping SyncFunction) async throws -> NextPageSyncState {
5453
guard hasNextPage else {
5554
return .noNextPage
5655
}
@@ -69,14 +68,14 @@ final class AsyncPaginationTracker {
6968

7069
/// Resets internal states and resyncs the first page of results.
7170
///
72-
func resync(syncFunction: @escaping SyncFunction) async throws {
71+
public func resync(syncFunction: @escaping SyncFunction) async throws {
7372
resetInternalState()
7473
try await syncFirstPage(syncFunction: syncFunction)
7574
}
7675

7776
/// Syncs the first page of results.
7877
///
79-
func syncFirstPage(syncFunction: @escaping SyncFunction) async throws {
78+
public func syncFirstPage(syncFunction: @escaping SyncFunction) async throws {
8079
try await sync(pageNumber: pageFirstIndex, syncFunction: syncFunction)
8180
}
8281
}

WooCommerce/Classes/POS/Controllers/POSOrderListController.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import struct Yosemite.POSOrder
88
import struct Yosemite.POSOrderItem
99
import struct Yosemite.POSOrderRefund
1010
import class Yosemite.Store
11+
import class Yosemite.AsyncPaginationTracker
1112

1213
protocol POSOrderListControllerProtocol {
1314
var ordersViewState: POSOrderListState { get }

WooCommerce/Classes/POS/Controllers/PointOfSaleCouponsController.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import protocol Yosemite.PointOfSaleItemServiceProtocol
55
import protocol Yosemite.PointOfSaleCouponServiceProtocol
66
import struct Yosemite.PointOfSaleCouponFetchStrategyFactory
77
import protocol Yosemite.PointOfSaleCouponFetchStrategy
8+
import class Yosemite.AsyncPaginationTracker
89

910
protocol PointOfSaleCouponsControllerProtocol: PointOfSaleSearchingItemsControllerProtocol {
1011
/// Enables coupons in store settings

WooCommerce/Classes/POS/Controllers/PointOfSaleItemsController.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import enum Yosemite.PointOfSaleItemServiceError
99
import struct Yosemite.POSVariableParentProduct
1010
import class Yosemite.Store
1111
import enum Yosemite.POSItemType
12+
import class Yosemite.AsyncPaginationTracker
1213

1314
protocol PointOfSaleItemsControllerProtocol {
1415
///

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,6 @@
270270
0230B4D62C33454900F2F660 /* PointOfSaleCardPresentPaymentCaptureErrorMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0230B4D52C33454900F2F660 /* PointOfSaleCardPresentPaymentCaptureErrorMessageView.swift */; };
271271
0230B4D82C3345DF00F2F660 /* PointOfSaleCardPresentPaymentCaptureFailedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0230B4D72C3345DF00F2F660 /* PointOfSaleCardPresentPaymentCaptureFailedView.swift */; };
272272
02312797277D4F650060E180 /* StoreStatsPeriodViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02312796277D4F640060E180 /* StoreStatsPeriodViewModel.swift */; };
273-
02335E492D13BA42000B6ECE /* AsyncPaginationTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02335E482D13BA42000B6ECE /* AsyncPaginationTracker.swift */; };
274273
023453F22579DA1A00A6BB20 /* ShippingLabelPrintingInstructionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023453F12579DA1A00A6BB20 /* ShippingLabelPrintingInstructionsViewController.swift */; };
275274
0234680A282CEA5F00CFC503 /* LegacyReceiptViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02346809282CEA5F00CFC503 /* LegacyReceiptViewModelTests.swift */; };
276275
0235595024496853004BE2B8 /* BottomSheetListSelectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0235594E24496853004BE2B8 /* BottomSheetListSelectorViewController.swift */; };
@@ -1646,7 +1645,6 @@
16461645
68A38DF52B293B030090C263 /* MockProductListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A38DF42B293B030090C263 /* MockProductListViewModel.swift */; };
16471646
68A5221B2BA1804900A6A584 /* PluginDetailsViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A5221A2BA1804900A6A584 /* PluginDetailsViewModelTests.swift */; };
16481647
68A905012ACCFC13004C71D3 /* CollapsibleProductCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A905002ACCFC13004C71D3 /* CollapsibleProductCard.swift */; };
1649-
68AC9D292ACE598B0042F784 /* ProductImageThumbnail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68AC9D282ACE598B0042F784 /* ProductImageThumbnail.swift */; };
16501648
68B3BA262D9147480000B2F2 /* AISettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68B3BA252D9147440000B2F2 /* AISettingsView.swift */; };
16511649
68B681162D9257810098D5CD /* PointOfSaleCouponsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68B681152D92577F0098D5CD /* PointOfSaleCouponsController.swift */; };
16521650
68B6F22B2ADE7ED500D171FC /* TooltipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68B6F22A2ADE7ED500D171FC /* TooltipView.swift */; };
@@ -3485,7 +3483,6 @@
34853483
0230B4D52C33454900F2F660 /* PointOfSaleCardPresentPaymentCaptureErrorMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointOfSaleCardPresentPaymentCaptureErrorMessageView.swift; sourceTree = "<group>"; };
34863484
0230B4D72C3345DF00F2F660 /* PointOfSaleCardPresentPaymentCaptureFailedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointOfSaleCardPresentPaymentCaptureFailedView.swift; sourceTree = "<group>"; };
34873485
02312796277D4F640060E180 /* StoreStatsPeriodViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreStatsPeriodViewModel.swift; sourceTree = "<group>"; };
3488-
02335E482D13BA42000B6ECE /* AsyncPaginationTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncPaginationTracker.swift; sourceTree = "<group>"; };
34893486
023453F12579DA1A00A6BB20 /* ShippingLabelPrintingInstructionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelPrintingInstructionsViewController.swift; sourceTree = "<group>"; };
34903487
02346809282CEA5F00CFC503 /* LegacyReceiptViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyReceiptViewModelTests.swift; sourceTree = "<group>"; };
34913488
0235594E24496853004BE2B8 /* BottomSheetListSelectorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomSheetListSelectorViewController.swift; sourceTree = "<group>"; };
@@ -4845,7 +4842,6 @@
48454842
68A38DF42B293B030090C263 /* MockProductListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockProductListViewModel.swift; sourceTree = "<group>"; };
48464843
68A5221A2BA1804900A6A584 /* PluginDetailsViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluginDetailsViewModelTests.swift; sourceTree = "<group>"; };
48474844
68A905002ACCFC13004C71D3 /* CollapsibleProductCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollapsibleProductCard.swift; sourceTree = "<group>"; };
4848-
68AC9D282ACE598B0042F784 /* ProductImageThumbnail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductImageThumbnail.swift; sourceTree = "<group>"; };
48494845
68B3BA252D9147440000B2F2 /* AISettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AISettingsView.swift; sourceTree = "<group>"; };
48504846
68B681152D92577F0098D5CD /* PointOfSaleCouponsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointOfSaleCouponsController.swift; sourceTree = "<group>"; };
48514847
68B6F22A2ADE7ED500D171FC /* TooltipView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TooltipView.swift; sourceTree = "<group>"; };
@@ -7651,7 +7647,6 @@
76517647
children = (
76527648
02ECD1DE24FF48D000735BE5 /* PaginationTracker.swift */,
76537649
029700EB24FE38C900D242F8 /* ScrollWatcher.swift */,
7654-
02335E482D13BA42000B6ECE /* AsyncPaginationTracker.swift */,
76557650
);
76567651
path = InfiniteScroll;
76577652
sourceTree = "<group>";
@@ -16167,7 +16162,6 @@
1616716162
268D7C9C2984752A00D38709 /* SupportForm.swift in Sources */,
1616816163
02A275BA23FE50AA005C560F /* ProductUIImageLoader.swift in Sources */,
1616916164
02305353237454C700487A64 /* AztecInsertMoreFormatBarCommand.swift in Sources */,
16170-
02335E492D13BA42000B6ECE /* AsyncPaginationTracker.swift in Sources */,
1617116165
B5D6DC54214802740003E48A /* SyncCoordinator.swift in Sources */,
1617216166
205B7EBD2C19FB6600D14A36 /* PointOfSaleCardPresentPaymentFoundReaderAlertViewModel.swift in Sources */,
1617316167
018D5C7E2CA6B4A60085EBEE /* CurrencySettings+Sanitized.swift in Sources */,

0 commit comments

Comments
 (0)