1
0
Fork 0
fenix/app/src/main/java/org/mozilla/fenix/logins/SavedLoginsFragmentStore.kt

56 lines
1.8 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.logins
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
import mozilla.components.lib.state.Action
import mozilla.components.lib.state.State
import mozilla.components.lib.state.Store
/**
* Class representing an saved logins item
* @property url Site of the saved login
* @property userName Username that's saved for this site
* @property password Password that's saved for this site
*/
@Parcelize
data class SavedLoginsItem(val url: String, val userName: String?, val password: String?) :
Parcelable
/**
* The [Store] for holding the [SavedLoginsFragmentState] and applying [SavedLoginsFragmentAction]s.
*/
class SavedLoginsFragmentStore(initialState: SavedLoginsFragmentState) :
Store<SavedLoginsFragmentState, SavedLoginsFragmentAction>(
initialState,
::savedLoginsStateReducer
)
/**
* Actions to dispatch through the `SavedLoginsStore` to modify `SavedLoginsFragmentState` through the reducer.
*/
sealed class SavedLoginsFragmentAction : Action {
data class UpdateLogins(val list: List<SavedLoginsItem>) : SavedLoginsFragmentAction()
}
/**
* The state for the Saved Logins Screen
* @property items List of logins to display
*/
data class SavedLoginsFragmentState(val items: List<SavedLoginsItem>) : State
/**
* The SavedLoginsState Reducer.
*/
private fun savedLoginsStateReducer(
state: SavedLoginsFragmentState,
action: SavedLoginsFragmentAction
): SavedLoginsFragmentState {
return when (action) {
is SavedLoginsFragmentAction.UpdateLogins -> state.copy(items = action.list)
}
}