Todo update work

This commit is contained in:
Julien Valverdé
2024-07-13 04:21:54 +02:00
parent 44909f256e
commit e5641924f8
5 changed files with 39 additions and 23 deletions

View File

@@ -0,0 +1,13 @@
import { Schema as S } from "@effect/schema"
import { MobXObservable, MutableClass } from "@thilawyn/thilalib/effect/schema/class"
import { JsonifiableTodo as CommonJsonifiableTodo, Todo as CommonTodo } from "@todo-tests/common/data"
export class Todo
extends MutableClass<Todo>("Todo")(CommonTodo.fields).pipe(
MobXObservable
)
{}
export const JsonifiableTodo = CommonJsonifiableTodo.pipe(S.compose(Todo))

View File

@@ -1,9 +0,0 @@
import { MobXObservable, MutableClass } from "@thilawyn/thilalib/effect/schema/class"
import { Todo as CommonTodo } from "@todo-tests/common/data"
export class Todo
extends MutableClass<Todo>("Todo")(CommonTodo.fields).pipe(
MobXObservable
)
{}

View File

@@ -1 +1 @@
export * from "./Todo" export * from "./Todo.class"

View File

@@ -1,22 +1,18 @@
import { Schema as S } from "@effect/schema" import { Schema as S } from "@effect/schema"
import { createLazyFileRoute } from "@tanstack/react-router" import { createLazyFileRoute } from "@tanstack/react-router"
import { JsonifiableTodo } from "@todo-tests/common/data"
import { Option, flow, identity } from "effect" import { Option, flow, identity } from "effect"
import { IObservableArray, observable } from "mobx" import { IObservableArray, observable } from "mobx"
import { observer } from "mobx-react-lite" import { observer } from "mobx-react-lite"
import { useState } from "react" import { useState } from "react"
import { Todo } from "../data" import { JsonifiableTodo, Todo } from "../data"
import { VTodo } from "../todo/VTodo" import { VTodo } from "../todo/VTodo"
import { trpc } from "../trpc/trpc" import { trpc } from "../trpc/trpc"
const decodeTodos = flow( const decodeTodos = flow(
S.decodeSync( S.decodeSync(
S.mutable(S.Array( S.mutable(S.Array(JsonifiableTodo))
JsonifiableTodo.pipe(S.compose(Todo))
))
), ),
observable.array, observable.array,
) )

View File

@@ -1,15 +1,12 @@
import { Schema as S } from "@effect/schema" import { Schema as S } from "@effect/schema"
import { ArrowUpward } from "@mui/icons-material" import { ArrowDownward, ArrowUpward } from "@mui/icons-material"
import { JsonifiableTodo } from "@todo-tests/common/data"
import { observer } from "mobx-react-lite" import { observer } from "mobx-react-lite"
import { Button } from "primereact/button" import { Button } from "primereact/button"
import { Todo } from "../data" import { JsonifiableTodo, Todo } from "../data"
import { trpc } from "../trpc/trpc" import { trpc } from "../trpc/trpc"
const encodeTodo = S.encodeSync( const encodeTodo = S.encodeSync(JsonifiableTodo)
JsonifiableTodo.pipe(S.compose(Todo))
)
export interface VTodoProps { export interface VTodoProps {
@@ -27,13 +24,32 @@ export const VTodo = observer(({ todo }: VTodoProps) => {
<p>{todo.content}</p> <p>{todo.content}</p>
<div className="flex flex-row gap-1 content-center"> <div className="flex flex-row gap-1 content-center">
<Button
severity="secondary"
rounded
size="small"
icon={<ArrowDownward />}
onClick={() => updateTodo.mutate(encodeTodo(
new Todo({
...todo,
order: todo.order + 1,
}, { disableValidation: true })
))}
/>
<Button <Button
severity="secondary" severity="secondary"
rounded rounded
size="small" size="small"
icon={<ArrowUpward />} icon={<ArrowUpward />}
onClick={() => updateTodo.mutate(encodeTodo(todo))} onClick={() => updateTodo.mutate(encodeTodo(
new Todo({
...todo,
order: todo.order - 1,
}, { disableValidation: true })
))}
/> />
</div> </div>
</div> </div>