@@ -69,7 +69,7 @@ class PeopleViewController: UITableViewController, UIViewControllerRestoration {
6969 // Followers must be sorted out by creationDate!
7070 //
7171 switch filter {
72- case . followers:
72+ case . followers, . email :
7373 return [ NSSortDescriptor ( key: " creationDate " , ascending: true , selector: #selector( NSDate . compare ( _: ) ) ) ]
7474 default :
7575 return [ NSSortDescriptor ( key: " displayName " , ascending: true , selector: #selector( NSString . localizedCaseInsensitiveCompare ( _: ) ) ) ]
@@ -182,22 +182,18 @@ class PeopleViewController: UITableViewController, UIViewControllerRestoration {
182182 tableView. reloadData ( )
183183 }
184184
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+ }
199194
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 ,
201197 let inviteViewController = navController. topViewController as? InvitePersonViewController {
202198 inviteViewController. blog = blog
203199 }
@@ -274,10 +270,11 @@ private extension PeopleViewController {
274270
275271 case users = " users "
276272 case followers = " followers "
273+ case email = " email "
277274 case viewers = " viewers "
278275
279276 static var defaultFilters : [ Filter ] {
280- return [ . users, . followers]
277+ return [ . users, . followers, . email ]
281278 }
282279
283280 var title : String {
@@ -288,6 +285,8 @@ private extension PeopleViewController {
288285 return NSLocalizedString ( " Followers " , comment: " Blog Followers " )
289286 case . viewers:
290287 return NSLocalizedString ( " Viewers " , comment: " Blog Viewers " )
288+ case . email:
289+ return NSLocalizedString ( " Email Followers " , comment: " Blog Email Followers " )
291290 }
292291 }
293292
@@ -299,6 +298,21 @@ private extension PeopleViewController {
299298 return . follower
300299 case . viewers:
301300 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
302316 }
303317 }
304318 }
@@ -395,6 +409,8 @@ private extension PeopleViewController {
395409 loadUsersPage ( offset, success: success)
396410 case . viewers:
397411 service. loadViewersPage ( offset, success: success)
412+ case . email:
413+ service. loadEmailFollowersPage ( offset, success: success)
398414 }
399415 }
400416
@@ -449,32 +465,29 @@ private extension PeopleViewController {
449465 // MARK: No Results Helpers
450466
451467 func refreshNoResultsView( ) {
452- noResultsViewController. removeFromView ( )
453-
454- if isInitialLoad {
455- displayNoResultsView ( forLoading: true )
456- return
457- }
458-
459468 guard resultsController. fetchedObjects? . count == 0 else {
469+ noResultsViewController. removeFromView ( )
460470 return
461471 }
462472
463- displayNoResultsView ( )
473+ displayNoResultsView ( isLoading : isInitialLoad )
464474 }
465475
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
468478 noResultsViewController. configure ( title: noResultsTitle ( ) , accessoryView: accessoryView)
469479
470- addChild ( noResultsViewController)
471- tableView. addSubview ( withFadeAnimation: noResultsViewController. view)
472-
473480 // Set the NRV top as the filterBar bottom so the NRV
474481 // adjusts correctly when refreshControl is active.
475482 let filterBarBottom = filterBar. frame. origin. y + filterBar. frame. size. height
476483 noResultsViewController. view. frame. origin. y = filterBarBottom
477484
485+ guard noResultsViewController. parent == nil else {
486+ noResultsViewController. updateView ( )
487+ return
488+ }
489+ addChild ( noResultsViewController)
490+ tableView. addSubview ( withFadeAnimation: noResultsViewController. view)
478491 noResultsViewController. didMove ( toParent: self )
479492 }
480493
0 commit comments