@@ -69,7 +69,7 @@ class PeopleViewController: UITableViewController, UIViewControllerRestoration {
69
69
// Followers must be sorted out by creationDate!
70
70
//
71
71
switch filter {
72
- case . followers:
72
+ case . followers, . email :
73
73
return [ NSSortDescriptor ( key: " creationDate " , ascending: true , selector: #selector( NSDate . compare ( _: ) ) ) ]
74
74
default :
75
75
return [ NSSortDescriptor ( key: " displayName " , ascending: true , selector: #selector( NSString . localizedCaseInsensitiveCompare ( _: ) ) ) ]
@@ -182,22 +182,18 @@ class PeopleViewController: UITableViewController, UIViewControllerRestoration {
182
182
tableView. reloadData ( )
183
183
}
184
184
185
- override func prepare( for segue: UIStoryboardSegue , sender: Any ? ) {
186
- if let personViewController = segue. destination as? PersonViewController ,
187
- let selectedIndexPath = tableView. indexPathForSelectedRow {
188
- personViewController. context = viewContext
189
- personViewController. blog = blog
190
- personViewController. person = personAtIndexPath ( selectedIndexPath)
191
- switch filter {
192
- case . followers:
193
- personViewController. screenMode = . Follower
194
- case . users:
195
- personViewController. screenMode = . User
196
- case . viewers:
197
- personViewController. screenMode = . Viewer
198
- }
185
+ @IBSegueAction func createPersonViewController( _ coder: NSCoder ) -> PersonViewController ? {
186
+ guard let selectedIndexPath = tableView. indexPathForSelectedRow, let blog = blog else { return nil }
187
+
188
+ return PersonViewController ( coder: coder,
189
+ blog: blog,
190
+ context: viewContext,
191
+ person: personAtIndexPath ( selectedIndexPath) ,
192
+ screenMode: filter. screenMode)
193
+ }
199
194
200
- } else if let navController = segue. destination as? UINavigationController ,
195
+ override func prepare( for segue: UIStoryboardSegue , sender: Any ? ) {
196
+ if let navController = segue. destination as? UINavigationController ,
201
197
let inviteViewController = navController. topViewController as? InvitePersonViewController {
202
198
inviteViewController. blog = blog
203
199
}
@@ -274,10 +270,11 @@ private extension PeopleViewController {
274
270
275
271
case users = " users "
276
272
case followers = " followers "
273
+ case email = " email "
277
274
case viewers = " viewers "
278
275
279
276
static var defaultFilters : [ Filter ] {
280
- return [ . users, . followers]
277
+ return [ . users, . followers, . email ]
281
278
}
282
279
283
280
var title : String {
@@ -288,6 +285,8 @@ private extension PeopleViewController {
288
285
return NSLocalizedString ( " Followers " , comment: " Blog Followers " )
289
286
case . viewers:
290
287
return NSLocalizedString ( " Viewers " , comment: " Blog Viewers " )
288
+ case . email:
289
+ return NSLocalizedString ( " Email Followers " , comment: " Blog Email Followers " )
291
290
}
292
291
}
293
292
@@ -299,6 +298,21 @@ private extension PeopleViewController {
299
298
return . follower
300
299
case . viewers:
301
300
return . viewer
301
+ case . email:
302
+ return . emailFollower
303
+ }
304
+ }
305
+
306
+ var screenMode : PersonViewController . ScreenMode {
307
+ switch self {
308
+ case . users:
309
+ return . User
310
+ case . followers:
311
+ return . Follower
312
+ case . viewers:
313
+ return . Viewer
314
+ case . email:
315
+ return . Email
302
316
}
303
317
}
304
318
}
@@ -395,6 +409,8 @@ private extension PeopleViewController {
395
409
loadUsersPage ( offset, success: success)
396
410
case . viewers:
397
411
service. loadViewersPage ( offset, success: success)
412
+ case . email:
413
+ service. loadEmailFollowersPage ( offset, success: success)
398
414
}
399
415
}
400
416
@@ -449,32 +465,29 @@ private extension PeopleViewController {
449
465
// MARK: No Results Helpers
450
466
451
467
func refreshNoResultsView( ) {
452
- noResultsViewController. removeFromView ( )
453
-
454
- if isInitialLoad {
455
- displayNoResultsView ( forLoading: true )
456
- return
457
- }
458
-
459
468
guard resultsController. fetchedObjects? . count == 0 else {
469
+ noResultsViewController. removeFromView ( )
460
470
return
461
471
}
462
472
463
- displayNoResultsView ( )
473
+ displayNoResultsView ( isLoading : isInitialLoad )
464
474
}
465
475
466
- func displayNoResultsView( forLoading : Bool = false ) {
467
- let accessoryView = forLoading ? NoResultsViewController . loadingAccessoryView ( ) : nil
476
+ func displayNoResultsView( isLoading : Bool = false ) {
477
+ let accessoryView = isLoading ? NoResultsViewController . loadingAccessoryView ( ) : nil
468
478
noResultsViewController. configure ( title: noResultsTitle ( ) , accessoryView: accessoryView)
469
479
470
- addChild ( noResultsViewController)
471
- tableView. addSubview ( withFadeAnimation: noResultsViewController. view)
472
-
473
480
// Set the NRV top as the filterBar bottom so the NRV
474
481
// adjusts correctly when refreshControl is active.
475
482
let filterBarBottom = filterBar. frame. origin. y + filterBar. frame. size. height
476
483
noResultsViewController. view. frame. origin. y = filterBarBottom
477
484
485
+ guard noResultsViewController. parent == nil else {
486
+ noResultsViewController. updateView ( )
487
+ return
488
+ }
489
+ addChild ( noResultsViewController)
490
+ tableView. addSubview ( withFadeAnimation: noResultsViewController. view)
478
491
noResultsViewController. didMove ( toParent: self )
479
492
}
480
493
0 commit comments