okservable

Project Url: pearxteam/okservable
Introduction: 👀 Multiplatform Kotlin library containing observable data structures, such as ObservableList, ObservableSet and ObservableMap.
More: Author   ReportBugs   
Tags:

License Discord Release Build Status Develop Build Status

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:
  2. Groovy (replace $okservable_version with the version you want):
    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
    
  3. Kotlin (replace $okservableVersion with the version you want):

    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
    
  4. Use the library and have fun!

Examples

  • Creating a simple observable list:
    //             \/ 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:

    //             \/ 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:
      //             \/ 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:
      //             \/ 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:
      //             \/ 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:

    //             \/ 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:
      //             \/ 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:
      //             \/ there may be anything extending MutableMap
      val items = mutableMapOf("pickaxe" to "diamond", "axe" to "iron").observableMap {
      put { key, prevValue, value ->
         println("put[$key]: ${prevValue ?: "<null>"} 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]: <null> to wooden
      items.remove("axe")        // remove[axe]: iron
      items.clear()              // clear: {pickaxe=stone, bow=wooden}
      
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools