1
0
Fork 0
fenix/app/src/main/java/org/mozilla/fenix/search/SearchComponent.kt

68 lines
2.1 KiB
Kotlin

/* This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.search
import android.annotation.SuppressLint
import android.view.View
import android.view.ViewGroup
import kotlinx.android.synthetic.main.fragment_browser.*
import mozilla.components.browser.toolbar.BrowserToolbar
import mozilla.components.support.base.log.logger.Logger
import org.mozilla.fenix.mvi.Action
import org.mozilla.fenix.mvi.ActionBusFactory
import org.mozilla.fenix.mvi.Change
import org.mozilla.fenix.mvi.Reducer
import org.mozilla.fenix.mvi.UIComponent
import org.mozilla.fenix.mvi.ViewState
class SearchComponent(
private val container: ViewGroup,
override val bus: ActionBusFactory,
private val onEditComplete: (View) -> Unit,
override var initialState: SearchState = SearchState("")
) :
UIComponent<SearchState, SearchAction, SearchChange>(bus) {
override val reducer: Reducer<SearchState, SearchChange> = { state, change ->
when (change) {
is SearchChange.Changed -> state // TODO handle state changes here
}
}
override fun initView() = SearchUIView(container, bus)
init {
setup()
}
fun getView(): BrowserToolbar = uiView.toolbar
fun editMode() = getView().editMode()
@SuppressLint("CheckResult")
fun setup(): SearchComponent {
render(reducer)
getUserInteractionEvents<SearchAction>()
.subscribe {
Logger("SearchComponent").debug(it.toString())
when (it) {
is SearchAction.EditComplete -> {
onEditComplete.invoke(getView())
}
else -> {}
}
}
return this
}
}
data class SearchState(val term: String) : ViewState
sealed class SearchAction : Action {
object UrlClicked : SearchAction()
object EditComplete : SearchAction()
}
sealed class SearchChange : Change {
object Changed : SearchChange()
}