@@ -4,7 +4,7 @@ import { Reffuse as PostsReffuse } from "@/views/posts/reffuse"
|
|||||||
import { PostsState } from "@/views/posts/services"
|
import { PostsState } from "@/views/posts/services"
|
||||||
import { VPosts } from "@/views/posts/VPosts"
|
import { VPosts } from "@/views/posts/VPosts"
|
||||||
import { createFileRoute } from "@tanstack/react-router"
|
import { createFileRoute } from "@tanstack/react-router"
|
||||||
import { Effect, Layer, SubscriptionRef } from "effect"
|
import { Effect } from "effect"
|
||||||
|
|
||||||
|
|
||||||
export const Route = createFileRoute("/")({
|
export const Route = createFileRoute("/")({
|
||||||
@@ -15,8 +15,7 @@ function Index() {
|
|||||||
|
|
||||||
const postsLayer = Reffuse.useMemo(FetchData.FetchData.pipe(
|
const postsLayer = Reffuse.useMemo(FetchData.FetchData.pipe(
|
||||||
Effect.flatMap(({ fetchPosts }) => fetchPosts),
|
Effect.flatMap(({ fetchPosts }) => fetchPosts),
|
||||||
Effect.flatMap(SubscriptionRef.make),
|
Effect.map(PostsState.make),
|
||||||
Effect.map(posts => Layer.succeed(PostsState.PostsState, { posts })),
|
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Post } from "@/domain"
|
import { Post } from "@/domain"
|
||||||
import { Chunk, Effect, Ref } from "effect"
|
import { Effect } from "effect"
|
||||||
import { PostsState } from "../posts/services"
|
import { PostsState } from "../posts/services"
|
||||||
import { Reffuse } from "./reffuse"
|
import { Reffuse } from "./reffuse"
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ export function VPost({ post, index }: VPostProps) {
|
|||||||
|
|
||||||
<button
|
<button
|
||||||
onClick={() => PostsState.PostsState.pipe(
|
onClick={() => PostsState.PostsState.pipe(
|
||||||
Effect.flatMap(({ posts }) => Ref.update(posts, Chunk.remove(index))),
|
Effect.flatMap(state => state.remove(index)),
|
||||||
runSync,
|
runSync,
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -1,7 +1,15 @@
|
|||||||
import { Post } from "@/domain"
|
import { Post } from "@/domain"
|
||||||
import { Chunk, Context, SubscriptionRef } from "effect"
|
import { Chunk, Context, Effect, Layer, Ref, SubscriptionRef } from "effect"
|
||||||
|
|
||||||
|
|
||||||
export class PostsState extends Context.Tag("PostsState")<PostsState, {
|
export class PostsState extends Context.Tag("PostsState")<PostsState, {
|
||||||
readonly posts: SubscriptionRef.SubscriptionRef<Chunk.Chunk<Post.Post>>
|
readonly posts: SubscriptionRef.SubscriptionRef<Chunk.Chunk<Post.Post>>
|
||||||
|
readonly remove: (index: number) => Effect.Effect<void>
|
||||||
}>() {}
|
}>() {}
|
||||||
|
|
||||||
|
export const make = (posts: Chunk.Chunk<Post.Post>) => Layer.effect(PostsState, SubscriptionRef.make(posts).pipe(
|
||||||
|
Effect.map(posts => ({
|
||||||
|
posts,
|
||||||
|
remove: (index: number) => Ref.update(posts, Chunk.remove(index)),
|
||||||
|
}))
|
||||||
|
))
|
||||||
|
|||||||
Reference in New Issue
Block a user