@@ -39,17 +39,17 @@ protocol DetailItemsCoordinatorDelegate: AnyObject {
3939 func showItemDetail( for type: ItemDetailState . DetailType , libraryId: LibraryIdentifier , scrolledToKey childKey: String ? , animated: Bool )
4040 func showAttachmentError( _ error: Error )
4141 func showAddActions( viewModel: ViewModel < ItemsActionHandler > , button: UIBarButtonItem )
42- func showSortActions( sortType: ItemsSortType , button: UIBarButtonItem , changed: @escaping ( ItemsSortType ) -> Void )
4342 func show( url: URL )
4443 func show( doi: String )
45- func showFilters( filters: [ ItemsFilter ] , filtersDelegate: BaseItemsViewController , button: UIBarButtonItem )
4644 func showDeletionQuestion( count: Int , confirmAction: @escaping ( ) -> Void , cancelAction: @escaping ( ) -> Void )
4745 func showRemoveFromCollectionQuestion( count: Int , confirmAction: @escaping ( ) -> Void )
4846 func showCitation( using presenter: UIViewController ? , for itemIds: Set < String > , libraryId: LibraryIdentifier , delegate: DetailCitationCoordinatorDelegate ? )
4947 func copyBibliography( using presenter: UIViewController , for itemIds: Set < String > , libraryId: LibraryIdentifier , delegate: DetailCopyBibliographyCoordinatorDelegate ? )
5048 func showCiteExport( for itemIds: Set < String > , libraryId: LibraryIdentifier )
5149 func showAttachment( key: String , parentKey: String ? , libraryId: LibraryIdentifier , readerURL: URL ? )
5250 func show( error: ItemsError )
51+ func showFilters( filters: [ ItemsFilter ] , filtersDelegate: BaseItemsViewController , button: UIBarButtonItem )
52+ func dismissFilters( )
5353 func showLookup( )
5454}
5555
@@ -481,66 +481,6 @@ extension DetailCoordinator: DetailItemsCoordinatorDelegate {
481481 self . navigationController? . present ( controller, animated: true , completion: nil )
482482 }
483483
484- func showSortActions( sortType: ItemsSortType , button: UIBarButtonItem , changed: @escaping ( ItemsSortType ) -> Void ) {
485- DDLogInfo ( " DetailCoordinator: show item sort popup " )
486-
487- let sortNavigationController = UINavigationController ( )
488- sortNavigationController. modalPresentationStyle = . popover
489- sortNavigationController. popoverPresentationController? . sourceItem = button
490- let view = ItemSortingView (
491- sortType: sortType,
492- changed: changed,
493- showPicker: { [ weak sortNavigationController] view in
494- guard let sortNavigationController else { return }
495- showPicker ( view: view, navigationController: sortNavigationController)
496- } ,
497- closePicker: { [ weak sortNavigationController] in
498- sortNavigationController? . popViewController ( animated: true )
499- }
500- )
501- let controller = createItemSortingController ( for: view, navigationController: sortNavigationController)
502- sortNavigationController. setViewControllers ( [ controller] , animated: false )
503- navigationController? . present ( sortNavigationController, animated: true , completion: nil )
504-
505- func createItemSortingController( for view: ItemSortingView , navigationController: UINavigationController ) -> UIHostingController < ItemSortingView > {
506- let controller = DisappearActionHostingController ( rootView: view)
507- var size : CGSize ?
508- controller. willAppear = { [ weak controller, weak navigationController] in
509- guard let controller else { return }
510- let _size = size ?? controller. view. systemLayoutSizeFitting ( CGSize ( width: 400.0 , height: . greatestFiniteMagnitude) )
511- size = _size
512- controller. preferredContentSize = _size
513- navigationController? . preferredContentSize = _size
514- }
515-
516- if UIDevice . current. userInterfaceIdiom == . phone {
517- controller. didLoad = { [ weak self] viewController in
518- guard let self else { return }
519- let doneButton = UIBarButtonItem ( title: L10n . done, style: . done, target: nil , action: nil )
520- doneButton. rx. tap
521- . subscribe ( { [ weak self] _ in
522- self ? . navigationController? . dismiss ( animated: true )
523- } )
524- . disposed ( by: disposeBag)
525- viewController. navigationItem. rightBarButtonItem = doneButton
526- }
527- }
528- return controller
529- }
530-
531- func showPicker( view: ItemSortTypePickerView , navigationController: UINavigationController ) {
532- let controller = UIHostingController ( rootView: view)
533- controller. preferredContentSize = CGSize ( width: 400 , height: 600 )
534- navigationController. preferredContentSize = controller. preferredContentSize
535- navigationController. pushViewController ( controller, animated: true )
536- }
537- }
538-
539- private func sortButtonTitles( for sortType: ItemsSortType ) -> ( field: String , order: String ) {
540- let sortOrderTitle = sortType. ascending ? L10n . Items. ascending : L10n . Items. descending
541- return ( " \( L10n . Items. sortBy) : \( sortType. field. title) " , " \( L10n . Items. sortOrder) : \( sortOrderTitle) " )
542- }
543-
544484 func createNoteController(
545485 library: Library ,
546486 kind: NoteEditorKind ,
@@ -655,27 +595,6 @@ extension DetailCoordinator: DetailItemsCoordinatorDelegate {
655595 self . navigationController? . present ( navigationController, animated: true , completion: nil )
656596 }
657597
658- func showFilters( filters: [ ItemsFilter ] , filtersDelegate: BaseItemsViewController , button: UIBarButtonItem ) {
659- DDLogInfo ( " DetailCoordinator: show item filters " )
660-
661- let navigationController = NavigationViewController ( )
662- navigationController. modalPresentationStyle = . popover
663- navigationController. popoverPresentationController? . sourceItem = button
664-
665- let coordinator = ItemsFilterCoordinator (
666- filters: filters,
667- filtersDelegate: filtersDelegate,
668- navigationController: navigationController,
669- mainCoordinatorDelegate: mainCoordinatorDelegate,
670- controllers: controllers
671- )
672- coordinator. parentCoordinator = self
673- childCoordinators. append ( coordinator)
674- coordinator. start ( animated: false )
675-
676- self . navigationController? . present ( navigationController, animated: true , completion: nil )
677- }
678-
679598 func showDeletionQuestion( count: Int , confirmAction: @escaping ( ) -> Void , cancelAction: @escaping ( ) -> Void ) {
680599 let question = L10n . Items. deleteQuestion ( count)
681600 self . ask ( question: question, title: L10n . delete, isDestructive: true , confirm: confirmAction, cancel: cancelAction)
@@ -754,6 +673,32 @@ extension DetailCoordinator: DetailItemsCoordinatorDelegate {
754673 self . navigationController? . present ( containerController, animated: true , completion: nil )
755674 }
756675
676+ func showFilters( filters: [ ItemsFilter ] , filtersDelegate: BaseItemsViewController , button: UIBarButtonItem ) {
677+ DDLogInfo ( " DetailCoordinator: show item filters " )
678+
679+ let navigationController = NavigationViewController ( )
680+ navigationController. modalPresentationStyle = . popover
681+ navigationController. popoverPresentationController? . sourceItem = button
682+
683+ let coordinator = ItemsFilterCoordinator (
684+ filters: filters,
685+ filtersDelegate: filtersDelegate,
686+ navigationController: navigationController,
687+ mainCoordinatorDelegate: mainCoordinatorDelegate,
688+ controllers: controllers
689+ )
690+ coordinator. parentCoordinator = self
691+ childCoordinators. append ( coordinator)
692+ coordinator. start ( animated: false )
693+
694+ self . navigationController? . present ( navigationController, animated: true , completion: nil )
695+ }
696+
697+ func dismissFilters( ) {
698+ guard let coordinator = childCoordinators. first ( where: { $0 is ItemsFilterCoordinator } ) as? ItemsFilterCoordinator else { return }
699+ coordinator. navigationController? . dismiss ( animated: true )
700+ }
701+
757702 func show( error: ItemsError ) {
758703 let message : String
759704 switch error {
0 commit comments