diff --git a/site/src/jsMain/kotlin/todo/data/ApiCalls.kt b/site/src/jsMain/kotlin/todo/data/ApiCalls.kt index 6d09609c4fe633917114fa728e713f061fbfcd76..8d727fe3d042c22708a9a61a2e01421cc14d09cd 100644 --- a/site/src/jsMain/kotlin/todo/data/ApiCalls.kt +++ b/site/src/jsMain/kotlin/todo/data/ApiCalls.kt @@ -36,9 +36,9 @@ suspend fun getAllTasks( } } -/*suspend fun deleteTask(taskID: String): String { +suspend fun deleteTask(task: Task): String { return window.api.tryPost( apiPath = "deletetask", - body = Json.encodeToString(taskID).encodeToByteArray() + body = Json.encodeToString(task).encodeToByteArray() )?.decodeToString().toString() -}*/ +} diff --git a/site/src/jsMain/kotlin/todo/pages/Index.kt b/site/src/jsMain/kotlin/todo/pages/Index.kt index 2a93ffe2badea6f7127307e84accc701fe6c2ec4..fdcab7f7c6053cb93275088c362f73cd8d2b4d57 100644 --- a/site/src/jsMain/kotlin/todo/pages/Index.kt +++ b/site/src/jsMain/kotlin/todo/pages/Index.kt @@ -25,7 +25,6 @@ import com.varabyte.kobweb.silk.style.base import com.varabyte.kobweb.silk.style.selectors.hover import com.varabyte.kobweb.silk.style.toModifier import com.varabyte.kobweb.silk.theme.colors.ColorMode - import kotlinx.browser.document import kotlinx.browser.window import kotlinx.coroutines.launch @@ -42,6 +41,7 @@ import org.jetbrains.compose.web.dom.Text import org.w3c.dom.HTMLInputElement import todo.components.widgets.HeaderLayout import todo.data.addTask +import todo.data.deleteTask import todo.data.getAllTasks import todo.model.ApiListResponse import todo.model.Task @@ -102,6 +102,9 @@ fun HomePage() { var response by remember { mutableStateOf<ApiListResponse>(ApiListResponse.Loading) } + + + LaunchedEffect(Unit) { getAllTasks( @@ -123,10 +126,12 @@ fun HomePage() { verticalArrangement = Arrangement.Top, ) { + HeaderLayout(context = context) {} + // ======== H E A D E R ======== - Header( + /*Header( HeaderStyle.toModifier().toAttrs() ) { @@ -145,7 +150,7 @@ fun HomePage() { Text(value = "Change theme") } } - } + }*/ // ===== Input form ===== @@ -226,11 +231,12 @@ fun HomePage() { modifier = TaskStyle.toModifier() ) Button(ButtonStyle.toModifier() - /*.onClick { + .onClick { scope.launch { - deleteTask(task._id) + deleteTask(task) + } - }*/ + } .toAttrs() ) { Text(value = "Delete") @@ -247,8 +253,6 @@ fun HomePage() { } } - - Spacer() diff --git a/site/src/jvmMain/kotlin/todo/api/Tasks.kt b/site/src/jvmMain/kotlin/todo/api/Tasks.kt index 2f1fb9b89e9b239b9ec6662195ee8fcc7ee76456..e716c75e422bfe5682d5ab94ed8e020b169dcaf8 100644 --- a/site/src/jvmMain/kotlin/todo/api/Tasks.kt +++ b/site/src/jvmMain/kotlin/todo/api/Tasks.kt @@ -12,7 +12,6 @@ import todo.data.MongoDbImp import todo.model.ApiListResponse import todo.model.Task - @Api(routeOverride = "addtask") suspend fun addTask(context: ApiContext) { try { @@ -26,7 +25,6 @@ suspend fun addTask(context: ApiContext) { } - @Api(routeOverride = "getalltasks") suspend fun getAllTasks(context: ApiContext) { try { @@ -37,15 +35,13 @@ suspend fun getAllTasks(context: ApiContext) { } } -/* @Api(routeOverride = "deletetask") suspend fun deleteTask(context: ApiContext) { try { val task = context.req.body?.decodeToString()?.let { Json.decodeFromString<Task>(it) } - val responseBody = Json.encodeToString(task?.let { context.data.getValue<MongoDbImp>().deleteTask(it._id) }) + val responseBody = Json.encodeToString(task?.let { context.data.getValue<MongoDbImp>().deleteTask(it) }) context.res.setBodyText(responseBody) - }catch (e: Exception) { + } catch (e: Exception) { context.res.setBodyText(Json.encodeToString(e)) } - -}*/ +} diff --git a/site/src/jvmMain/kotlin/todo/data/MongoDb.kt b/site/src/jvmMain/kotlin/todo/data/MongoDb.kt index 3c8c744f00678e369890145fed4568187cbbdbee..4b0c27ef5459832ee4c15e37a656f2321a477f53 100644 --- a/site/src/jvmMain/kotlin/todo/data/MongoDb.kt +++ b/site/src/jvmMain/kotlin/todo/data/MongoDb.kt @@ -5,5 +5,5 @@ import todo.model.Task interface MongoDb { suspend fun getAllTasks(): List<Task> suspend fun addTask(task: Task): Boolean - /*suspend fun deleteTask(taskID: String): Boolean*/ + suspend fun deleteTask(task: Task): Boolean } \ No newline at end of file diff --git a/site/src/jvmMain/kotlin/todo/data/MongoDbImp.kt b/site/src/jvmMain/kotlin/todo/data/MongoDbImp.kt index b0ad57fd33698fd882b5918ebeb560185b3c30d8..45ca396764b83ea89e9bc84fe7856e7504621649 100644 --- a/site/src/jvmMain/kotlin/todo/data/MongoDbImp.kt +++ b/site/src/jvmMain/kotlin/todo/data/MongoDbImp.kt @@ -6,6 +6,7 @@ import com.varabyte.kobweb.api.data.add import com.varabyte.kobweb.api.init.InitApi import com.varabyte.kobweb.api.init.InitApiContext import kotlinx.coroutines.flow.toList +import org.bson.types.ObjectId import todo.model.Task @InitApi @@ -35,9 +36,9 @@ class MongoDbImp(): MongoDb { return tasksCollection.insertOne(task).wasAcknowledged() } - /*override suspend fun deleteTask(taskID: String): Boolean { - val filter = Filters.eq("_id", taskID) + override suspend fun deleteTask(task: Task): Boolean { + val filter = Filters.eq("_id", task._id) return tasksCollection.deleteOne(filter).wasAcknowledged() - }*/ + } } \ No newline at end of file diff --git a/site/src/jvmMain/kotlin/todo/model/TodoStore.kt b/site/src/jvmMain/kotlin/todo/model/TodoStore.kt deleted file mode 100644 index 8a7e8d33cda9f22680d0c1bdb8aebdef2ef3b4c4..0000000000000000000000000000000000000000 --- a/site/src/jvmMain/kotlin/todo/model/TodoStore.kt +++ /dev/null @@ -1,34 +0,0 @@ -package todo.model - -import com.varabyte.kobweb.api.data.add -import com.varabyte.kobweb.api.init.InitApi -import com.varabyte.kobweb.api.init.InitApiContext -import java.util.* -import java.util.concurrent.locks.ReentrantLock -import kotlin.concurrent.withLock - -// NOTE: This is a simple demo, so we create an in-memory store (which will get reset everytime server code is live -// reloaded). However, in a production app, you should use a real database instead, maybe a redis backend, or possibly -// even something that lives on a different server which you access via network calls. - -@InitApi -fun initTodoStore(ctx: InitApiContext) { - ctx.data.add(TodoStore()) -} - -class TodoStore { - private val lock = ReentrantLock() - private val todos = mutableMapOf<String, MutableList<TodoItem>>() - - fun add(ownerId: String, todo: String) { - lock.withLock { - todos.computeIfAbsent(ownerId) { mutableListOf() }.add(TodoItem(UUID.randomUUID().toString(), todo)) - } - } - - fun remove(ownerId: String, id: String) { - lock.withLock { todos[ownerId]?.removeIf { it.id == id } } - } - - operator fun get(ownerId: String): List<TodoItem> = lock.withLock { todos[ownerId] } ?: emptyList() -} \ No newline at end of file