|
|
|
@ -18,20 +18,20 @@ import mozilla.components.lib.state.Store
|
|
|
|
|
data class HistoryItem(val id: Int, val title: String, val url: String, val visitedAt: Long)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The [Store] for holding the [HistoryState] and applying [HistoryAction]s.
|
|
|
|
|
* The [Store] for holding the [HistoryFragmentState] and applying [HistoryFragmentAction]s.
|
|
|
|
|
*/
|
|
|
|
|
class HistoryStore(initialState: HistoryState) :
|
|
|
|
|
Store<HistoryState, HistoryAction>(initialState, ::historyStateReducer)
|
|
|
|
|
class HistoryFragmentStore(initialState: HistoryFragmentState) :
|
|
|
|
|
Store<HistoryFragmentState, HistoryFragmentAction>(initialState, ::historyStateReducer)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Actions to dispatch through the `HistoryStore` to modify `HistoryState` through the reducer.
|
|
|
|
|
*/
|
|
|
|
|
sealed class HistoryAction : Action {
|
|
|
|
|
object ExitEditMode : HistoryAction()
|
|
|
|
|
data class AddItemForRemoval(val item: HistoryItem) : HistoryAction()
|
|
|
|
|
data class RemoveItemForRemoval(val item: HistoryItem) : HistoryAction()
|
|
|
|
|
object EnterDeletionMode : HistoryAction()
|
|
|
|
|
object ExitDeletionMode : HistoryAction()
|
|
|
|
|
sealed class HistoryFragmentAction : Action {
|
|
|
|
|
object ExitEditMode : HistoryFragmentAction()
|
|
|
|
|
data class AddItemForRemoval(val item: HistoryItem) : HistoryFragmentAction()
|
|
|
|
|
data class RemoveItemForRemoval(val item: HistoryItem) : HistoryFragmentAction()
|
|
|
|
|
object EnterDeletionMode : HistoryFragmentAction()
|
|
|
|
|
object ExitDeletionMode : HistoryFragmentAction()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -39,7 +39,7 @@ sealed class HistoryAction : Action {
|
|
|
|
|
* @property items List of HistoryItem to display
|
|
|
|
|
* @property mode Current Mode of History
|
|
|
|
|
*/
|
|
|
|
|
data class HistoryState(val items: List<HistoryItem>, val mode: Mode) : State {
|
|
|
|
|
data class HistoryFragmentState(val items: List<HistoryItem>, val mode: Mode) : State {
|
|
|
|
|
sealed class Mode {
|
|
|
|
|
open val selectedItems = emptySet<HistoryItem>()
|
|
|
|
|
|
|
|
|
@ -52,18 +52,18 @@ data class HistoryState(val items: List<HistoryItem>, val mode: Mode) : State {
|
|
|
|
|
/**
|
|
|
|
|
* The HistoryState Reducer.
|
|
|
|
|
*/
|
|
|
|
|
fun historyStateReducer(state: HistoryState, action: HistoryAction): HistoryState {
|
|
|
|
|
private fun historyStateReducer(state: HistoryFragmentState, action: HistoryFragmentAction): HistoryFragmentState {
|
|
|
|
|
return when (action) {
|
|
|
|
|
is HistoryAction.AddItemForRemoval ->
|
|
|
|
|
state.copy(mode = HistoryState.Mode.Editing(state.mode.selectedItems + action.item))
|
|
|
|
|
is HistoryAction.RemoveItemForRemoval -> {
|
|
|
|
|
is HistoryFragmentAction.AddItemForRemoval ->
|
|
|
|
|
state.copy(mode = HistoryFragmentState.Mode.Editing(state.mode.selectedItems + action.item))
|
|
|
|
|
is HistoryFragmentAction.RemoveItemForRemoval -> {
|
|
|
|
|
val selected = state.mode.selectedItems - action.item
|
|
|
|
|
state.copy(
|
|
|
|
|
mode = if (selected.isEmpty()) HistoryState.Mode.Normal else HistoryState.Mode.Editing(selected)
|
|
|
|
|
mode = if (selected.isEmpty()) HistoryFragmentState.Mode.Normal else HistoryFragmentState.Mode.Editing(selected)
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
is HistoryAction.ExitEditMode -> state.copy(mode = HistoryState.Mode.Normal)
|
|
|
|
|
is HistoryAction.EnterDeletionMode -> state.copy(mode = HistoryState.Mode.Deleting)
|
|
|
|
|
is HistoryAction.ExitDeletionMode -> state.copy(mode = HistoryState.Mode.Normal)
|
|
|
|
|
is HistoryFragmentAction.ExitEditMode -> state.copy(mode = HistoryFragmentState.Mode.Normal)
|
|
|
|
|
is HistoryFragmentAction.EnterDeletionMode -> state.copy(mode = HistoryFragmentState.Mode.Deleting)
|
|
|
|
|
is HistoryFragmentAction.ExitDeletionMode -> state.copy(mode = HistoryFragmentState.Mode.Normal)
|
|
|
|
|
}
|
|
|
|
|
}
|