@discardableResult func assembleInterations(with topDisposer: DisposeBag = .init()) -> CustomerNoteListIneractor { let noteListController = CustomerNoteListViewController() noteListController.modalPresentationStyle = .pageSheet noteListController.preferredContentSize = noteListController.view.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize) let interactor = CustomerNoteListIneractor() let useCase = CustomerNoteUseCase() let back = backButton() back.rx.controlEvent(.touchUpInside).bind(to: interactor.onTakeMeBackSelected).disposed(by: topDisposer) let create = createNoteButton() create.rx.controlEvent(.touchUpInside).bind(to: interactor.onCreateNoteSelected).disposed(by: topDisposer) configureBottomView(with: [back, create]) showController(noteListController) //TODO: make more handy chaining interactor.setCustomerId.subscribe(onNext: { useCase.customerNotes(by: $0).bind { models in noteListController.load(models) }.disposed(by: topDisposer) }).disposed(by: topDisposer) return interactor }