From 754dfddc0a5eaf74af333b0272d92e59f0effa1e Mon Sep 17 00:00:00 2001 From: Suhaib Al-Absi Date: Sun, 25 Jan 2026 20:25:53 +0300 Subject: [PATCH 1/2] Make GetContextTabs request making exhaustable --- .../Common/CommonModels/Contexts/GetContextTabs.swift | 7 +++++++ .../CourseDetails/ViewModel/CourseDetailsViewModel.swift | 9 +++------ .../StudentAssignmentDetailsPresenter.swift | 2 +- .../CourseNavigation/CourseNavigationPresenter.swift | 2 +- .../GroupNavigation/GroupNavigationViewController.swift | 2 +- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Core/Core/Common/CommonModels/Contexts/GetContextTabs.swift b/Core/Core/Common/CommonModels/Contexts/GetContextTabs.swift index d716f813c5..2f869f1870 100644 --- a/Core/Core/Common/CommonModels/Contexts/GetContextTabs.swift +++ b/Core/Core/Common/CommonModels/Contexts/GetContextTabs.swift @@ -40,6 +40,13 @@ public class GetContextTabs: CollectionUseCase { return GetTabsRequest(context: context) } + public func makeRequest( + environment: AppEnvironment, + completionHandler: @escaping ([APITab]?, URLResponse?, Error?) -> Void + ) { + environment.api.exhaust(request, callback: completionHandler) + } + public var scope: Scope { let sort = NSSortDescriptor(key: #keyPath(Tab.position), ascending: true) let pred = NSPredicate(format: "%K == %@", #keyPath(Tab.contextRaw), context.canvasContextID) diff --git a/Core/Core/Features/Courses/CourseDetails/ViewModel/CourseDetailsViewModel.swift b/Core/Core/Features/Courses/CourseDetails/ViewModel/CourseDetailsViewModel.swift index 54f8295dc6..c77d922fd9 100644 --- a/Core/Core/Features/Courses/CourseDetails/ViewModel/CourseDetailsViewModel.swift +++ b/Core/Core/Features/Courses/CourseDetails/ViewModel/CourseDetailsViewModel.swift @@ -103,6 +103,7 @@ public class CourseDetailsViewModel: ObservableObject { customGradeStatuses.refresh() course.refresh() colors.refresh() + tabs.refresh() } public func retryAfterError() { @@ -167,7 +168,6 @@ public class CourseDetailsViewModel: ObservableObject { legacyHeaderViewModel.courseUpdated(course) courseColor = course.color setupHome(course: course) - tabs.exhaust() } private func setupHome(course: Course) { @@ -263,11 +263,8 @@ extension CourseDetailsViewModel { colors.refresh(force: true) course.refresh(force: true) return await withCheckedContinuation { continuation in - tabs.exhaust(force: true) { [weak self] _ in - if self?.tabs.hasNextPage == false { - continuation.resume() - } - return true + tabs.refresh(force: true) { _ in + continuation.resume() } } } diff --git a/Student/Student/Assignments/AssignmentDetails/StudentAssignmentDetailsPresenter.swift b/Student/Student/Assignments/AssignmentDetails/StudentAssignmentDetailsPresenter.swift index d13edf05d8..76e957d560 100644 --- a/Student/Student/Assignments/AssignmentDetails/StudentAssignmentDetailsPresenter.swift +++ b/Student/Student/Assignments/AssignmentDetails/StudentAssignmentDetailsPresenter.swift @@ -269,7 +269,7 @@ class StudentAssignmentDetailsPresenter { func viewIsReady() { customGradeStatuses.refresh() colors.refresh() - courses.refresh(force: true) + courses.refresh() assignments.refresh(force: true) arc.refresh() onlineUpload.refresh() diff --git a/Student/Student/Courses/CourseNavigation/CourseNavigationPresenter.swift b/Student/Student/Courses/CourseNavigation/CourseNavigationPresenter.swift index be1a86fae5..cbefb3bbfe 100644 --- a/Student/Student/Courses/CourseNavigation/CourseNavigationPresenter.swift +++ b/Student/Student/Courses/CourseNavigation/CourseNavigationPresenter.swift @@ -47,7 +47,7 @@ class CourseNavigationPresenter { func viewIsReady() { courses.refresh() color.refresh() - tabs.exhaust(while: { _ in true }) + tabs.refresh() } func update() { diff --git a/Student/Student/Groups/GroupNavigation/GroupNavigationViewController.swift b/Student/Student/Groups/GroupNavigation/GroupNavigationViewController.swift index 2dad0fcbcd..aea2bd80d2 100644 --- a/Student/Student/Groups/GroupNavigation/GroupNavigationViewController.swift +++ b/Student/Student/Groups/GroupNavigation/GroupNavigationViewController.swift @@ -59,7 +59,7 @@ class GroupNavigationViewController: ScreenViewTrackableTableViewController, Col colors.refresh() groups.refresh() - tabs.exhaust() + tabs.refresh() update() } From cf6c68219bd7619187f3cdde96652624f0e85bdf Mon Sep 17 00:00:00 2001 From: Suhaib Al-Absi Date: Mon, 26 Jan 2026 19:31:35 +0300 Subject: [PATCH 2/2] Fix unit tests refs: MBL-19666 affects: Student builds: Student release note: None. --- .../CourseNavigation/CourseNavigationPresenterTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Student/StudentUnitTests/Courses/CourseNavigation/CourseNavigationPresenterTests.swift b/Student/StudentUnitTests/Courses/CourseNavigation/CourseNavigationPresenterTests.swift index 1d9ad9b37b..7d1138b15f 100644 --- a/Student/StudentUnitTests/Courses/CourseNavigation/CourseNavigationPresenterTests.swift +++ b/Student/StudentUnitTests/Courses/CourseNavigation/CourseNavigationPresenterTests.swift @@ -73,7 +73,7 @@ class CourseNavigationPresenterTests: StudentTestCase { let colorStore = presenter.color as! TestStore let courseStore = presenter.courses as! TestStore let tabStore = presenter.tabs as! TestStore - wait(for: [colorStore.refreshExpectation, courseStore.refreshExpectation, tabStore.exhaustExpectation], timeout: 1) + wait(for: [colorStore.refreshExpectation, courseStore.refreshExpectation, tabStore.refreshExpectation], timeout: 1) } func testTabsAreOrderedByPosition() {