Material Alert Dialog Example with AndroidReactComponentKit
data classShowBasicAlertAction(
valtitle:String,
valmessage:String
): Actionfun MainViewModel.handleRoute(state:State, action:Action): Observable<State> {
val mainViewState = (state as?MainViewState) ?:returnObservable.just(state)
returnwhen (action) {
isShowBasicAlertAction-> {
Observable.just(mainViewState.copy(route =Route.BasicAlert(action.title, action.message)))
}
else-> {
Observable.just(mainViewState.copy(route =Route.None))
}
}
}sealedclassRoute {
object None: Route()
data classBasicAlert(valtitle:String, valmessage:String): Route()
}
data classMainViewState(
varroute:Route = Route.None
): State()
classMainViewModel(application:Application): RootAndroidViewModelType<MainViewState>(application) {
var route:Output<Route> =Output(Route.None)
overridefunsetupStore() {
store
.set(
initialState =MainViewState(),
middlewares = arrayOf(::handleRoute)
)
}
overridefunon(newState:MainViewState) {
route.acceptWithoutCompare(newState.route)
}
}classMainActivity : AppCompatActivity() {
privatelateinitvar viewModel:MainViewModelprivateval disposeBag:AutoDisposeBag by lazy {
AutoDisposeBag(this)
}
overridefunonCreate(savedInstanceState:Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel =ViewModelProviders.of(this).get(MainViewModel::class.java)
handleClickEvent()
handleViewModelOutputs()
}
privatefunhandleClickEvent() {
showAlert.onClick {
viewModel.dispatch(ShowBasicAlertAction(
title ="Hello",
message ="This is Material Alert Dialog"
))
}
}
privatefunhandleViewModelOutputs() {
viewModel
.route
.asObservable()
.skip(1)
.subscribe {
handleRoute(it)
}
.disposedBy(disposeBag)
}
privatefunhandleRoute(route:Route) {
when (route) {
isRoute.None->UnitisRoute.BasicAlert-> showBasicAlert(route.title, route.message)
}
}
privatefunshowBasicAlert(title:String, message:String) {
MaterialAlertDialogBuilder(this)
.setTitle(title)
.setMessage(message)
.setPositiveButton("OK", null)
.show()
}
}