Todo update work
This commit is contained in:
13
packages/webui/src/data/Todo.class.ts
Normal file
13
packages/webui/src/data/Todo.class.ts
Normal 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))
|
||||
@@ -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
|
||||
)
|
||||
{}
|
||||
@@ -1 +1 @@
|
||||
export * from "./Todo"
|
||||
export * from "./Todo.class"
|
||||
|
||||
@@ -1,22 +1,18 @@
|
||||
import { Schema as S } from "@effect/schema"
|
||||
import { createLazyFileRoute } from "@tanstack/react-router"
|
||||
import { JsonifiableTodo } from "@todo-tests/common/data"
|
||||
import { Option, flow, identity } from "effect"
|
||||
import { IObservableArray, observable } from "mobx"
|
||||
import { observer } from "mobx-react-lite"
|
||||
import { useState } from "react"
|
||||
import { Todo } from "../data"
|
||||
import { JsonifiableTodo, Todo } from "../data"
|
||||
import { VTodo } from "../todo/VTodo"
|
||||
import { trpc } from "../trpc/trpc"
|
||||
|
||||
|
||||
const decodeTodos = flow(
|
||||
S.decodeSync(
|
||||
S.mutable(S.Array(
|
||||
JsonifiableTodo.pipe(S.compose(Todo))
|
||||
))
|
||||
S.mutable(S.Array(JsonifiableTodo))
|
||||
),
|
||||
|
||||
observable.array,
|
||||
)
|
||||
|
||||
|
||||
@@ -1,15 +1,12 @@
|
||||
import { Schema as S } from "@effect/schema"
|
||||
import { ArrowUpward } from "@mui/icons-material"
|
||||
import { JsonifiableTodo } from "@todo-tests/common/data"
|
||||
import { ArrowDownward, ArrowUpward } from "@mui/icons-material"
|
||||
import { observer } from "mobx-react-lite"
|
||||
import { Button } from "primereact/button"
|
||||
import { Todo } from "../data"
|
||||
import { JsonifiableTodo, Todo } from "../data"
|
||||
import { trpc } from "../trpc/trpc"
|
||||
|
||||
|
||||
const encodeTodo = S.encodeSync(
|
||||
JsonifiableTodo.pipe(S.compose(Todo))
|
||||
)
|
||||
const encodeTodo = S.encodeSync(JsonifiableTodo)
|
||||
|
||||
|
||||
export interface VTodoProps {
|
||||
@@ -27,13 +24,32 @@ export const VTodo = observer(({ todo }: VTodoProps) => {
|
||||
<p>{todo.content}</p>
|
||||
|
||||
<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
|
||||
severity="secondary"
|
||||
rounded
|
||||
size="small"
|
||||
icon={<ArrowUpward />}
|
||||
|
||||
onClick={() => updateTodo.mutate(encodeTodo(todo))}
|
||||
onClick={() => updateTodo.mutate(encodeTodo(
|
||||
new Todo({
|
||||
...todo,
|
||||
order: todo.order - 1,
|
||||
}, { disableValidation: true })
|
||||
))}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user