Skip to content

Commit d33a435

Browse files
authored
Merge pull request #6569 from woocommerce/issue/6568-product-reviews-list-empty-crash
Product Reviews: Empty list and crash when syncing remotely for the first time
2 parents 88ab33d + 6be16e0 commit d33a435

File tree

7 files changed

+7
-105
lines changed

7 files changed

+7
-105
lines changed

WooCommerce/Classes/ViewRelated/Products/Edit Product/Reviews/ProductReviewsViewController.swift

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,6 @@ extension ProductReviewsViewController: UITableViewDelegate {
172172
// MARK: - Placeholders
173173
//
174174
private extension ProductReviewsViewController {
175-
176-
/// Renders Placeholder Reviews.
177-
///
178-
func displayPlaceholderReviews() {
179-
displayGhostContent()
180-
viewModel.didDisplayPlaceholderReviews()
181-
}
182-
183-
/// Removes Placeholder Reviews.
184-
///
185-
func removePlaceholderReviews() {
186-
removeGhostContent()
187-
viewModel.didRemovePlaceholderReviews(tableView: tableView)
188-
}
189-
190175
/// Displays the EmptyStateViewController.
191176
///
192177
func displayEmptyViewController() {
@@ -250,7 +235,7 @@ private extension ProductReviewsViewController {
250235
case .results:
251236
break
252237
case .placeholder:
253-
displayPlaceholderReviews()
238+
displayGhostContent()
254239
case .syncing:
255240
ensureFooterSpinnerIsStarted()
256241
}
@@ -265,7 +250,7 @@ private extension ProductReviewsViewController {
265250
case .results:
266251
break
267252
case .placeholder:
268-
removePlaceholderReviews()
253+
removeGhostContent()
269254
case .syncing:
270255
ensureFooterSpinnerIsStopped()
271256
}

WooCommerce/Classes/ViewRelated/Products/Edit Product/Reviews/ProductReviewsViewModel.swift

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,6 @@ final class ProductReviewsViewModel {
2727
self.data = data
2828
}
2929

30-
func didDisplayPlaceholderReviews() {
31-
data.stopForwardingEvents()
32-
}
33-
34-
/// Removes Placeholder Notes (and restores the ResultsController <> UITableView link).
35-
///
36-
func didRemovePlaceholderReviews(tableView: UITableView) {
37-
data.startForwardingEvents(to: tableView)
38-
}
39-
4030
func configureResultsController(tableView: UITableView) {
4131
data.startForwardingEvents(to: tableView)
4232

WooCommerce/Classes/ViewRelated/Reviews/ReviewsDataSource.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,4 @@ protocol ReviewsDataSource: UITableViewDataSource, ReviewsInteractionDelegate {
5555
/// Force a refresh of entities observing data collections
5656
///
5757
func refreshDataObservers()
58-
59-
/// Cancels forwarding events to any previously registered table view
60-
///
61-
func stopForwardingEvents()
6258
}

WooCommerce/Classes/ViewRelated/Reviews/ReviewsViewController.swift

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ final class ReviewsViewController: UIViewController, GhostableViewController {
169169
refreshControl.resetAnimation(in: tableView) { [unowned self] in
170170
// ghost animation is also removed after switching tabs
171171
// show make sure it's displayed again
172-
self.removePlaceholderReviews()
173-
self.displayPlaceholderReviews()
172+
self.removeGhostContent()
173+
self.displayGhostContent()
174174
}
175175
}
176176

@@ -338,20 +338,6 @@ private extension ReviewsViewController {
338338
//
339339
private extension ReviewsViewController {
340340

341-
/// Renders Placeholder Reviews.
342-
///
343-
func displayPlaceholderReviews() {
344-
displayGhostContent()
345-
viewModel.didDisplayPlaceholderReviews()
346-
}
347-
348-
/// Removes Placeholder Reviews.
349-
///
350-
func removePlaceholderReviews() {
351-
removeGhostContent()
352-
viewModel.didRemovePlaceholderReviews(tableView: tableView)
353-
}
354-
355341
/// Displays the EmptyStateViewController.
356342
///
357343
func displayEmptyViewController() {
@@ -446,7 +432,7 @@ private extension ReviewsViewController {
446432
case .results:
447433
break
448434
case .placeholder:
449-
displayPlaceholderReviews()
435+
displayGhostContent()
450436
case .syncing(let pageNumber):
451437
if pageNumber != SyncingCoordinator.Defaults.pageFirstIndex {
452438
ensureFooterSpinnerIsStarted()
@@ -463,10 +449,10 @@ private extension ReviewsViewController {
463449
case .results:
464450
break
465451
case .placeholder:
466-
removePlaceholderReviews()
452+
removeGhostContent()
467453
case .syncing:
468454
ensureFooterSpinnerIsStopped()
469-
removePlaceholderReviews()
455+
removeGhostContent()
470456
}
471457
}
472458

WooCommerce/Classes/ViewRelated/Reviews/ReviewsViewModel.swift

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@ protocol ReviewsViewModelOutput {
2626
/// Handles actions related to Reviews screen
2727
///
2828
protocol ReviewsViewModelActionsHandler {
29-
func didDisplayPlaceholderReviews()
30-
31-
func didRemovePlaceholderReviews(tableView: UITableView)
32-
3329
func configureResultsController(tableView: UITableView)
3430

3531
func refreshResults()
@@ -88,17 +84,6 @@ final class ReviewsViewModel: ReviewsViewModelOutput, ReviewsViewModelActionsHan
8884
self.stores = stores
8985
}
9086

91-
func didDisplayPlaceholderReviews() {
92-
data.stopForwardingEvents()
93-
}
94-
95-
/// Restores the ResultsController <> UITableView link after the placeholder was removed from the view.
96-
///
97-
func didRemovePlaceholderReviews(tableView: UITableView) {
98-
data.startForwardingEvents(to: tableView)
99-
tableView.reloadData()
100-
}
101-
10287
func configureResultsController(tableView: UITableView) {
10388
data.startForwardingEvents(to: tableView)
10489

WooCommerce/WooCommerceTests/Reviews/ReviewsViewModelTests.swift

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,29 +40,6 @@ final class ReviewsViewModelTests: XCTestCase {
4040
XCTAssertEqual(viewModel.isEmpty, mockDataSource.isEmpty)
4141
}
4242

43-
func testDisplayPlaceHolderReviewsStopsForWardingEventsInDataSource() {
44-
// Given
45-
let mockDataSource = MockReviewsDataSource()
46-
let viewModel = ReviewsViewModel(siteID: sampleSiteID, data: mockDataSource)
47-
viewModel.didDisplayPlaceholderReviews()
48-
49-
// Then
50-
XCTAssertTrue(mockDataSource.stopsForwardingEventsWasHit)
51-
}
52-
53-
func testRemovePlaceHolderReviewsStartsForWardingEventsInDataSource() {
54-
// Given
55-
let table = UITableView()
56-
let mockDataSource = MockReviewsDataSource()
57-
let viewModel = ReviewsViewModel(siteID: sampleSiteID, data: mockDataSource)
58-
59-
// When
60-
viewModel.didRemovePlaceholderReviews(tableView: table)
61-
62-
// Then
63-
XCTAssertTrue(mockDataSource.startForwardingEventsWasHit)
64-
}
65-
6643
func testConfigureResultsControllerStartsForWardingEventsAndStartsObservingReviewsInDataSource() {
6744
// Given
6845
let table = UITableView()

WooCommerce/WooCommerceTests/ViewRelated/Products/Edit Product/ProductReviewsViewModelTests.swift

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,6 @@ final class ProductReviewsViewModelTests: XCTestCase {
3434
XCTAssertEqual(viewModel.isEmpty, mockDataSource.isEmpty)
3535
}
3636

37-
func test_did_display_placeHolder_reviews_stops_forwarding_events_in_dataSource() {
38-
let ds = mockDataSource as! MockProductReviewsDataSource
39-
40-
viewModel.didDisplayPlaceholderReviews()
41-
42-
XCTAssertTrue(ds.stopsForwardingEventsWasHit)
43-
}
44-
45-
func test_did_remove_placeHolder_reviews_starts_forwarding_events_in_dataSource() {
46-
let table = UITableView()
47-
let ds = mockDataSource as! MockProductReviewsDataSource
48-
49-
viewModel.didRemovePlaceholderReviews(tableView: table)
50-
51-
XCTAssertTrue(ds.startForwardingEventsWasHit)
52-
}
53-
5437
func test_configure_resultsController_starts_forwarding_events_and_starts_observing_reviews_in_dataSource() {
5538
let table = UITableView()
5639
let ds = mockDataSource as! MockProductReviewsDataSource

0 commit comments

Comments
 (0)