Orfeo Ciano
09/26/2024, 2:41 PMArtem Kobzar
09/26/2024, 3:16 PMlocalStorage
(for data to be stored "infinitely") and sessionStorage
for the session (so, until user close your app): https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
They are key-value storage, so, you can store your data like this:
external interface BrowserStorage {
fun setItem(key: String, value: String)
fun getItem(key: String): String?
fun removeItem(key: String)
fun clear()
}
external val localStorage: BrowserStorage
external val sessionStorage: BrowserStorage
So, you can use them like this:
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import localStorage
@Serializable
data class User(val name: String, val age: Int)
fun main() {
var user = User("Some User", 26)
val jsonString = Json.encodeToString(user)
localStorage.setItem("USER", jsonString)
val savedUser = localStorage.getItem("USER") ?: error("User was not saved")
user = Json.decodeFromString<User>(savedUser)
}
For more advanced DB-like experience there is a thing called IndexedDB: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDBOrfeo Ciano
09/26/2024, 3:25 PMwasmJsMain.dependencies {
implementation("app.cash.sqldelight:web-worker-driver:2.0.2")
implementation(devNpm("copy-webpack-plugin", "9.1.0"))
}
Artem Kobzar
09/26/2024, 3:45 PMOrfeo Ciano
09/26/2024, 3:47 PMEdoardo Luppi
09/26/2024, 4:56 PMMichael Paus
09/26/2024, 7:14 PMPablichjenkov
09/26/2024, 8:27 PMMichael Paus
09/26/2024, 9:50 PMPablichjenkov
09/26/2024, 9:54 PMEdoardo Luppi
09/26/2024, 10:03 PMIndexedDB
externals should go under https://github.com/Kotlin/kotlinx-browser
I guess you can either open an issue there, or use YouTrack.Edoardo Luppi
09/26/2024, 10:04 PMEdoardo Luppi
09/26/2024, 10:05 PMwasmJs
support at some point. I know there is an ongoing effort.Michael Paus
09/26/2024, 10:21 PMPablichjenkov
09/26/2024, 10:37 PMMichael Paus
09/27/2024, 6:11 AMArjan van Wieringen
09/27/2024, 1:40 PMMichael Paus
09/27/2024, 3:08 PMOrfeo Ciano
09/28/2024, 5:28 PMOrfeo Ciano
09/28/2024, 5:45 PM