Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not able to pass dynamic attribute to FacetList Connector ? #296

Open
winstoncex7 opened this issue Jul 4, 2023 · 0 comments
Open

Not able to pass dynamic attribute to FacetList Connector ? #296

winstoncex7 opened this issue Jul 4, 2023 · 0 comments

Comments

@winstoncex7
Copy link

winstoncex7 commented Jul 4, 2023

import SwiftUI
import InstantSearch

class ALGController {

//MARK: - PLP Search & Results
let searcher: HitsSearcher
let searchBoxInteractor: SearchBoxInteractor
let searchBoxController: SearchBoxObservableController
let hitsInteractor: HitsInteractor<Hit<Box>>
let hitsController: HitsObservableController<Hit<Box>>

//MARK: - Sort By View
let sortByConnector: SortByConnector
let selectableSegmentObservableController: SelectableSegmentObservableController

//MARK: - Results Count View
let statsController: StatsTextObservableController
let statsConnector: StatsConnector

//MARK: - Common Filter Storage State
let filterState: FilterState

//MARK: - Clear/Reset All Filters
let clearFiltersConnector: FilterClearConnector
let clearFilterController: FilterClearObservableController

//MARK: - Current Applied Filters
let currentFiltersListConnector: CurrentFiltersConnector
let currentFiltersController: CurrentFiltersObservableController

//MARK: - Filter Detail View
let AllFilterConnector : FacetListConnector
let AllFilterController : FacetListObservableController
let AllFilterPresenter : FacetListPresenter

//MARK: - Filter Detail View
let FilterDetailConnector : FacetListConnector
let FilterDetailController : FacetListObservableController
let FilterDetailPresenter : FacetListPresenter

//MARK: - LOADER
let loadingController: LoadingObservableController
let loadingConnector: LoadingConnector

init() {

self.searcher = HitsSearcher(client: .Cred, indexName: .Index)
self.filterState = .init()
self.searchBoxInteractor = .init()
self.searchBoxController = .init()
self.hitsInteractor = .init()
self.hitsController = .init()
self.statsController = .init()
self.statsConnector = .init(searcher: searcher)
self.currentFiltersController = .init()
self.clearFilterController = .init()
self.loadingConnector = .init(searcher: searcher)
   
currentFiltersListConnector = .init(filterState: filterState)
clearFiltersConnector = .init(filterState: filterState)

self.sortByConnector = .init(searcher: searcher,
                               indicesNames: [.Relevance,
                                              .NameAsc,
                                              .NameDesc,
                                              .PriceAsc,
                                              .PriceDesc,
                                              .Popularity,
                                              .Rating],
                               selected: 0)

  selectableSegmentObservableController = SelectableSegmentObservableController()

  AllFilterPresenter = FacetListPresenter(sortBy: [.alphabetical(order: .ascending)])

  AllFilterController = FacetListObservableController()

  AllFilterConnector =  .init(searcher: searcher,
                               filterState: filterState,
                               attribute: "*",
                               operator: .or,
                               controller: AllFilterController,presenter: AllFilterPresenter)
  
  FilterDetailPresenter = FacetListPresenter(sortBy: [.alphabetical(order: .ascending)])

  FilterDetailController = FacetListObservableController()
   
  FilterDetailConnector =  .init(searcher: searcher,
                               filterState: filterState,
                               attribute: "",  // Pass a dynamic attribute here selected by the user. for example Color
                               operator: .or,
                               controller: FilterDetailController,presenter: FilterDetailPresenter)
  
   loadingController = LoadingObservableController()
   loadingConnector.connectController(loadingController)
   
  setupConnections()

}

func setupConnections() {

searchBoxInteractor.connectSearcher(searcher)
searchBoxInteractor.connectController(searchBoxController)
hitsInteractor.connectSearcher(searcher)
hitsInteractor.connectController(hitsController)
sortByConnector.connectController(selectableSegmentObservableController,
                                                   presenter: self.title(for:))
statsConnector.interactor.connectController(statsController) { stats -> String? in
    guard let stats = stats else {
      return nil
    }
    return "\(stats.totalHitsCount) results"
  }
  
  AllFilterConnector.connectController(AllFilterController)
  AllFilterConnector.connect()

  FilterDetailConnector.connect()
  
  currentFiltersListConnector.connectController(currentFiltersController)
  currentFiltersListConnector.connect()
  
  clearFiltersConnector.connectController(clearFilterController)
  clearFiltersConnector.connect()
  
  searcher.connectFilterState(filterState)
  
  searcher.search()

}

func title(for indexName: IndexName) -> String {
  switch indexName {
  case .Relevance:
    return "Relevance".localized
  case .NameAsc:
    return "Product Name - A to Z".localized
  case .NameDesc:
    return "Product Name - Z to A".localized
  case .PriceAsc:
    return "Price - Low To High".localized
  case .PriceDesc:
    return "Price - High To Low".localized
  case .Popularity:
    return "Most Popular".localized
  case .Rating:
    return "Top Rated".localized
  default:
    return indexName.rawValue
  }
}

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant