Skip to content

Commit

Permalink
improve page state storage logic
Browse files Browse the repository at this point in the history
  • Loading branch information
amir1376 committed Sep 12, 2024
1 parent 97ceb15 commit f8e1999
Showing 1 changed file with 28 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,27 +17,27 @@ import org.koin.core.component.inject
@optics
@Serializable
data class CommonData(
val lastSavedLocations:List<String> = emptyList(),
){
val lastSavedLocations: List<String> = emptyList(),
) {
companion object
class ConfigLens(prefix:String):Lens<MapConfig,CommonData> ,KoinComponent{
class ConfigLens(prefix: String) : Lens<MapConfig, CommonData>, KoinComponent {
class Keys(prefix: String) {
val lastSavedLocations = keyOfEncoded<List<String>>("${prefix}lastSavedLocations")
}

private val json:Json by inject()
private val json: Json by inject()
private val keys = Keys(prefix)
override fun get(source: MapConfig): CommonData {
return with(json){
return with(json) {
CommonData(
lastSavedLocations = source.getDecoded(keys.lastSavedLocations)?: emptyList()
lastSavedLocations = source.getDecoded(keys.lastSavedLocations) ?: emptyList()
)
}
}

override fun set(source: MapConfig, focus: CommonData): MapConfig {
return with(json){
source.putEncoded(keys.lastSavedLocations,focus.lastSavedLocations)
return with(json) {
source.putEncoded(keys.lastSavedLocations, focus.lastSavedLocations)
source
}
}
Expand All @@ -47,32 +47,34 @@ data class CommonData(
@optics
@Serializable
data class PageStatesModel(
val home:HomePageStateToPersist = HomePageStateToPersist(),
val global:CommonData = CommonData(),
){
companion object{
val default get() = PageStatesModel()
val home: HomePageStateToPersist = HomePageStateToPersist(),
val global: CommonData = CommonData(),
) {
companion object {
val default get() = PageStatesModel()
}
object ConfigLens:Lens<MapConfig,PageStatesModel>,KoinComponent{
private val json :Json by inject()
private val commonDataMapper= CommonData.ConfigLens("global.")
private val homeDataMapper= HomePageStateToPersist.ConfigLens("home.")
object Keys {
val home = keyOfEncoded<HomePageStateToPersist>("home")

object ConfigLens : Lens<MapConfig, PageStatesModel>, KoinComponent {
private val json: Json by inject()

object Child {
val common = CommonData.ConfigLens("global.")
val home = HomePageStateToPersist.ConfigLens("home.")
}

override fun get(source: MapConfig): PageStatesModel {
return with(json){
return with(json) {
PageStatesModel(
home = source.getDecoded(Keys.home)?:HomePageStateToPersist(),
global = commonDataMapper.get(source)
home = Child.home.get(source),
global = Child.common.get(source)
)
}
}

override fun set(source: MapConfig, focus: PageStatesModel): MapConfig {
with(json){
source.putEncoded(Keys.home,focus.home)
commonDataMapper.set(source,focus.global)
with(json) {
Child.home.set(source, focus.home)
Child.common.set(source, focus.global)
}
return source
}
Expand All @@ -81,7 +83,7 @@ data class PageStatesModel(

class PageStatesStorage(
settings: DataStore<MapConfig>,
) : ConfigBaseSettings<PageStatesModel>(settings,PageStatesModel.ConfigLens) {
) : ConfigBaseSettings<PageStatesModel>(settings, PageStatesModel.ConfigLens) {
val lastUsedSaveLocations = from(PageStatesModel.global.lastSavedLocations)

val homePageStorage = from(PageStatesModel.home)
Expand Down

0 comments on commit f8e1999

Please sign in to comment.