From fda95709ff4e3f46a0eb702043e188e13ba16a2d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mikl=C3=B3s=20T=C3=B3th?= <tothmiklostibor@gmail.com>
Date: Tue, 1 Mar 2022 16:35:18 +0100
Subject: [PATCH] Add language chooser

---
 mosogepsch/src/jsMain/kotlin/Main.kt          | 36 ++++++++++++++-----
 .../src/jsMain/kotlin/localization/English.kt |  2 +-
 mosogepsch/src/jsMain/kotlin/styles/Style.kt  |  5 +++
 3 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/mosogepsch/src/jsMain/kotlin/Main.kt b/mosogepsch/src/jsMain/kotlin/Main.kt
index 35cf219..f698cd5 100644
--- a/mosogepsch/src/jsMain/kotlin/Main.kt
+++ b/mosogepsch/src/jsMain/kotlin/Main.kt
@@ -5,8 +5,10 @@ import app.softwork.bootstrapcompose.Color
 import components.*
 import kotlinx.browser.localStorage
 import kotlinx.browser.window
+import localization.English
 import localization.Hungarian
 import localization.LocalLang
+import localization.Localization
 import org.jetbrains.compose.web.css.*
 import org.jetbrains.compose.web.dom.*
 import org.jetbrains.compose.web.renderComposable
@@ -32,7 +34,7 @@ fun main() {
         ?: window.matchMedia("(prefers-color-scheme: dark)").matches
 
     var mosogepStyle by mutableStateOf(Style(dark))
-    val lang = Hungarian()
+    var lang by mutableStateOf<Localization>(Hungarian())
     renderComposable(rootElementId = "root") {
         Style(mosogepStyle)
         Style(CardStyle)
@@ -71,14 +73,30 @@ fun main() {
                         )
                         Text("MosógépSCH")
                     }
-                    switch(
-                        label = "Sötét téma",
-                        value = mosogepStyle.dark,
-                        onSet = {
-                            mosogepStyle = Style(it)
-                            localStorage["darkMode"] = "$it"
-                        }
-                    )
+                    Div(
+                        attrs = { classes(mosogepStyle.options) }
+                    ) {
+                        switch(
+                            label = "Sötét téma",
+                            value = mosogepStyle.dark,
+                            onSet = {
+                                mosogepStyle = Style(it)
+                                localStorage["darkMode"] = "$it"
+                            }
+                        )
+                        // todo make this a dropdown menu
+                        switch(
+                            label = "magyar",
+                            value = lang is Hungarian,
+                            onSet = {
+                                if (lang is Hungarian) {
+                                    lang = English()
+                                } else {
+                                    lang = Hungarian()
+                                }
+                            }
+                        )
+                    }
                 }
             }
             Main(attrs = {
diff --git a/mosogepsch/src/jsMain/kotlin/localization/English.kt b/mosogepsch/src/jsMain/kotlin/localization/English.kt
index c5bb88a..01faadf 100644
--- a/mosogepsch/src/jsMain/kotlin/localization/English.kt
+++ b/mosogepsch/src/jsMain/kotlin/localization/English.kt
@@ -47,6 +47,6 @@ fun Localization.machineStatus(status: MachineStatus): String = when(status) {
     MachineStatus.NotAvailable -> notAvailable
 }
 
-val LocalLang = compositionLocalOf { Hungarian() }
+val LocalLang = compositionLocalOf<Localization> { Hungarian() }
 
 fun Int.padded() = this.toString().padStart(2, '0')
\ No newline at end of file
diff --git a/mosogepsch/src/jsMain/kotlin/styles/Style.kt b/mosogepsch/src/jsMain/kotlin/styles/Style.kt
index 44ff244..20199d2 100644
--- a/mosogepsch/src/jsMain/kotlin/styles/Style.kt
+++ b/mosogepsch/src/jsMain/kotlin/styles/Style.kt
@@ -42,6 +42,11 @@ class Style(val dark: Boolean = false): StyleSheet() {
         flexGrow(0)
         property("z-index", 2000)
     }
+    val options by style {
+        display(DisplayStyle.Flex)
+        flexDirection(FlexDirection.Row)
+        gap(1.em)
+    }
 }
 
 val LocalStyle = compositionLocalOf { Style() }
\ No newline at end of file
-- 
GitLab