From 3717359a040d740e7dff39f46b3a7004b21c1088 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 8 Jul 2024 02:19:46 +0200 Subject: [PATCH] Working client --- bun.lockb | Bin 260760 -> 261298 bytes packages/webui/package.json | 3 +++ packages/webui/src/Index.tsx | 26 +++++++++++++++++++++----- packages/webui/src/todo/VTodo.tsx | 19 +++++++++++++++++++ packages/webui/src/todo/VTodos.tsx | 29 +++++++++++++++++++++++++++++ 5 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 packages/webui/src/todo/VTodo.tsx create mode 100644 packages/webui/src/todo/VTodos.tsx diff --git a/bun.lockb b/bun.lockb index 54f6226551669308fb57744deb0695dff8d954d8..923538059d000b2f3dbe3474aff64eaa4e85e321 100755 GIT binary patch delta 27470 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 delta 26837 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 BFNgpD diff --git a/packages/webui/package.json b/packages/webui/package.json index b7abf00..a085bb6 100644 --- a/packages/webui/package.json +++ b/packages/webui/package.json @@ -14,6 +14,9 @@ "@thilawyn/thilalib": "^0.1.5", "@trpc/client": "^10.45.2", "@trpc/react-query": "^10.45.2", + "effect": "^3.4.7", + "mobx": "^6.13.0", + "mobx-react-lite": "^4.0.7", "react": "^18.3.1", "react-dom": "^18.3.1" }, diff --git a/packages/webui/src/Index.tsx b/packages/webui/src/Index.tsx index 20f1370..1e33d3b 100644 --- a/packages/webui/src/Index.tsx +++ b/packages/webui/src/Index.tsx @@ -1,15 +1,20 @@ import { Schema as S } from "@effect/schema" import { JsonifiableTodo } from "@todo-tests/common/data" +import { flow } from "effect" +import { observable } from "mobx" import { Todo } from "./data" +import { VTodos } from "./todo/VTodos" import { trpc } from "./trpc/trpc" -const decodeTodos = S.decodeSync( - S.mutable( - S.Array( +const decodeTodos = flow( + S.decodeSync( + S.mutable(S.Array( JsonifiableTodo.pipe(S.compose(Todo)) - ) - ) + )) + ), + + observable.array, ) @@ -22,7 +27,18 @@ export function Index() {

Todos

+ {function() { + switch (todosQuery.status) { + case "success": + return + case "error": + return

Failed.

+ + case "loading": + return

Loading...

+ } + }()}
diff --git a/packages/webui/src/todo/VTodo.tsx b/packages/webui/src/todo/VTodo.tsx new file mode 100644 index 0000000..4837945 --- /dev/null +++ b/packages/webui/src/todo/VTodo.tsx @@ -0,0 +1,19 @@ +import { observer } from "mobx-react-lite" +import { Todo } from "../data" + + +export interface VTodoProps { + todo: Todo +} + + +export const VTodo = observer(({ todo }: VTodoProps) => { + + return ( +
+

{todo.title}

+

{todo.content}

+
+ ) + +}) diff --git a/packages/webui/src/todo/VTodos.tsx b/packages/webui/src/todo/VTodos.tsx new file mode 100644 index 0000000..5dd8e12 --- /dev/null +++ b/packages/webui/src/todo/VTodos.tsx @@ -0,0 +1,29 @@ +import { Option, identity } from "effect" +import { IObservableArray } from "mobx" +import { observer } from "mobx-react-lite" +import { Todo } from "../data" +import { VTodo } from "./VTodo" + + +export interface VTodosProps { + todos: IObservableArray +} + + +/** + * Displays a vertical list of todos + */ +export const VTodos = observer(({ todos }: VTodosProps) => ( +
+ {todos.map((todo, index) => ( + index, + })} + + todo={todo} + /> + ))} +
+))