diff --git a/packages/example/src/todo/TodosState.service.ts b/packages/example/src/todo/TodosState.service.ts index 8a55df5..4032d9e 100644 --- a/packages/example/src/todo/TodosState.service.ts +++ b/packages/example/src/todo/TodosState.service.ts @@ -2,7 +2,6 @@ import { Todo } from "@/domain" import { KeyValueStore } from "@effect/platform" import { BrowserKeyValueStore } from "@effect/platform-browser" import { Chunk, Console, Effect, Option, Schema, Stream, SubscriptionRef } from "effect" -import { SubscriptionSubRef } from "effect-fc/types" export class TodosState extends Effect.Service()("TodosState", { @@ -11,7 +10,7 @@ export class TodosState extends Effect.Service()("TodosState", { const readFromLocalStorage = Console.log("Reading todos from local storage...").pipe( Effect.andThen(kv.get(key)), - Effect.flatMap(Option.match({ + Effect.andThen(Option.match({ onSome: Schema.decode( Schema.parseJson(Schema.Chunk(Todo.TodoFromJson)) ), @@ -22,7 +21,7 @@ export class TodosState extends Effect.Service()("TodosState", { const saveToLocalStorage = (todos: Chunk.Chunk) => Effect.andThen( Console.log("Saving todos to local storage..."), Chunk.isNonEmpty(todos) - ? Effect.flatMap( + ? Effect.andThen( Schema.encode( Schema.parseJson(Schema.Chunk(Todo.TodoFromJson)) )(todos), @@ -33,21 +32,16 @@ export class TodosState extends Effect.Service()("TodosState", { const ref = yield* SubscriptionRef.make(yield* readFromLocalStorage) - const makeSubRef = (index: number) => SubscriptionSubRef.makeFromGetSet(ref, { - get: parent => Chunk.unsafeGet(parent, index), - set: (parent, v) => Chunk.replace(parent, index, v), - }) - yield* Effect.forkScoped(ref.changes.pipe( Stream.debounce("500 millis"), Stream.runForEach(saveToLocalStorage), )) yield* Effect.addFinalizer(() => ref.pipe( - Effect.flatMap(saveToLocalStorage), + Effect.andThen(saveToLocalStorage), Effect.ignore, )) - return { ref, makeSubRef } as const + return { ref } as const }), dependencies: [BrowserKeyValueStore.layerLocalStorage],