       .bind(to: reactor.action)
       .disposed(by: self.disposeBag)
 
-    self.titleInput.rx.text
-      .map { $0?.isEmpty == false }
+    self.titleInput.rx.text.orEmpty
+      .map { !$0.isEmpty }
       .subscribe(onNext: { [weak self] validation in
         guard let `self` = self else { return }
         self.messageInputBar.isEnabled = validation

    self.tableView.rx.itemSelected
      .subscribe(onNext: { [weak tableView] indexPath in
        tableView?.deselectRow(at: indexPath, animated: true)
      })
      .disposed(by: self.disposeBag)
  }

  let dataSource = RxTableViewSectionedReloadDataSource<TaskListSection>()
  fileprivate let headerView = SectionHeaderView()
  fileprivate let messageInputBar = MessageInputBar()
  fileprivate lazy var tableView = UITableView() <== {
    $0.alwaysBounceVertical = true
    $0.backgroundColor = .snow
    $0.separatorStyle = .none
