https://github.com/pearxteam/okservable
👀 Multiplatform Kotlin library containing observable data structures, such as ObservableList, ObservableSet and ObservableMap.
https://github.com/pearxteam/okservable
gradle-kotlin-dsl kotlin kotlin-library kotlin-multiplatform multiplatform-kotlin-library observable observable-collections observablecollection observablelist observablemap observableset
Last synced: 17 days ago
JSON representation
👀 Multiplatform Kotlin library containing observable data structures, such as ObservableList, ObservableSet and ObservableMap.
- Host: GitHub
- URL: https://github.com/pearxteam/okservable
- Owner: pearxteam
- License: mpl-2.0
- Created: 2020-01-22T11:50:14.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-05-11T10:51:39.000Z (almost 5 years ago)
- Last Synced: 2025-04-02T19:47:05.259Z (about 1 month ago)
- Topics: gradle-kotlin-dsl, kotlin, kotlin-library, kotlin-multiplatform, multiplatform-kotlin-library, observable, observable-collections, observablecollection, observablelist, observablemap, observableset
- Language: Kotlin
- Homepage:
- Size: 182 KB
- Stars: 19
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.MD
- License: LICENSE.TXT
Awesome Lists containing this project
README
# Okservable [](https://search.maven.org/search?q=g:%22net.pearx.okservable%22%20AND%20a:%22okservable-metadata%22) [](https://search.maven.org/search?q=g:%22net.pearx.okservable%22%20AND%20a:%22okservable-jvm%22) [](https://search.maven.org/search?q=g:%22net.pearx.okservable%22%20AND%20a:%22okservable-js%22)
[](https://raw.githubusercontent.com/pearxteam/okservable/master/LICENSE.TXT)
[](https://discord.gg/q9cX9QE)
[](https://ci.pearx.net/job/pearxteam/job/okservable/job/master/)
[](https://ci.pearx.net/job/pearxteam/job/okservable/job/develop/)Multiplatform Kotlin library containing observable data structures, such as ObservableList, ObservableSet and ObservableMap.
# Setup
1. Add the lib to your project's dependencies by copying one of the following lines depending on the platform:
- Groovy (replace `$okservable_version` with the version you want):
```groovy
implementation "net.pearx.okservable:okservable-metadata:$okservable_version" // for Common
// or
implementation "net.pearx.okservable:okservable-jvm:$okservable_version" // for JVM
// or
implementation "net.pearx.okservable:okservable-js:$okservable_version" // for JS
```
- Kotlin (replace `$okservableVersion` with the version you want):
```kotlin
implementation("net.pearx.okservable:okservable-metadata:$okservableVersion") // for Common
// or
implementation("net.pearx.okservable:okservable-jvm:$okservableVersion") // for JVM
// or
implementation("net.pearx.okservable:okservable-js:$okservableVersion") // for JS
```2. Use the library and have fun!
# Examples
- Creating a simple observable list:
```kotlin
// \/ there may be anything extending MutableList
val items = mutableListOf("pickaxe", "bow").observableListSimple {
println("The list has modified!")
}
items += "axe" // The list has modified!
items -= "pickaxe" // The list has modified!
items -= "teapot" // This line won't print the message since the list wasn't modified
```
- Creating a simple observable set:
```kotlin
// \/ there may be anything extending MutableSet
val items = mutableSetOf("pickaxe", "bow").observableSetSimple {
println("The set has modified!")
}
items += "axe" // The set has modified!
items += "pickaxe" // This line won't print the message since the set wasn't modified
```
- Creating a simple observable collection:
```kotlin
// \/ there may be anything extending MutableCollection
val items = mutableListOf("pickaxe", "bow").observableCollectionSimple {
println("The collection has modified!")
}
items += "axe" // The collection has modified!
```
- Creating a simple observable map:
```kotlin
// \/ there may be anything extending MutableMap
val items = mutableMapOf("pickaxe" to "diamond", "axe" to "iron").observableMapSimple {
println("The map has modified!")
}
items["pickaxe"] = "stone" // The map has modified!
items["bow"] = "wooden" // The map has modified!
```
- Creating an observable list:
```kotlin
// \/ there may be anything extending MutableList
val items = mutableListOf("pickaxe", "bow").observableList {
add { index, element ->
println("add[$index]: $element")
}
remove { index, element ->
println("remove[$index]: $element")
}
clear { elements ->
println("clear: $elements")
}
set { index, prevElement, newElement ->
println("set[$index]: $prevElement to $newElement")
}
}
items += "axe" // add[2]: axe
items -= "pickaxe" // remove[0]: pickaxe
items -= "teapot" // This line won't print any message since the list wasn't modified
items += setOf("shovel", "sword") // add[2]: shovel
// add[3]: sword
items[2] = "not_shovel" // set[2]: shovel to not_shovel
items.clear() // clear: [bow, axe, not_shovel, sword]
```- Creating an observable set:
```kotlin
// \/ there may be anything extending MutableSet
val items = mutableSetOf("pickaxe", "bow").observableSet {
add { element ->
println("add: $element")
}
remove { element ->
println("remove: $element")
}
clear { elements ->
println("clear: $elements")
}
}
items += "axe" // add: axe
items += "pickaxe" // This line won't print any message since the set wasn't modified
items -= "pickaxe" // remove: pickaxe
items.clear() // clear: [bow, axe]
```
- Creating an observable collection:
```kotlin
// \/ there may be anything extending MutableCollection
val items = mutableListOf("pickaxe", "bow").observableCollection {
add { element ->
println("add: $element")
}
remove { element ->
println("remove: $element")
}
clear { elements ->
println("clear: $elements")
}
}
items += "axe" // add: axe
items -= "pickaxe" // remove: pickaxe
items.clear() // clear: [bow, axe]
```
- Creation an observable map:
```kotlin
// \/ there may be anything extending MutableMap
val items = mutableMapOf("pickaxe" to "diamond", "axe" to "iron").observableMap {
put { key, prevValue, value ->
println("put[$key]: ${prevValue ?: ""} to $value")
}
remove { key, value ->
println("remove[$key]: $value")
}
clear { elements ->
println("clear: $elements")
}
}
items["pickaxe"] = "stone" // put[pickaxe]: diamond to stone
items["bow"] = "wooden" // put[bow]: to wooden
items.remove("axe") // remove[axe]: iron
items.clear() // clear: {pickaxe=stone, bow=wooden}
```