diff --git a/packages/example/src/todo/Todo.tsx b/packages/example/src/todo/Todo.tsx index 0b78b4d..7f7ba08 100644 --- a/packages/example/src/todo/Todo.tsx +++ b/packages/example/src/todo/Todo.tsx @@ -57,11 +57,37 @@ export const Todo = Component.make(function* Todo(props: TodoProps) { {props._tag === "edit" && Runtime.runSync(runtime)( + Ref.updateSome(state.ref, todos => Option.gen(function*() { + if (props.index <= 0) + return yield* Option.none() + + const toSwapIndex = props.index - 1 + const toSwap = yield* Chunk.get(todos, toSwapIndex) + return todos.pipe( + Chunk.replace(props.index, toSwap), + Chunk.replace(toSwapIndex, todo), + ) + })) + )} > Runtime.runSync(runtime)( + Ref.updateSome(state.ref, todos => Option.gen(function*() { + if (props.index >= Chunk.size(todos)) + return yield* Option.none() + + const toSwapIndex = props.index + 1 + const toSwap = yield* Chunk.get(todos, toSwapIndex) + return todos.pipe( + Chunk.replace(props.index, toSwap), + Chunk.replace(toSwapIndex, todo), + ) + })) + )} >