0.1.0 #1

Merged
Thilawyn merged 87 commits from next into master 2025-01-18 00:54:42 +01:00
3 changed files with 13 additions and 6 deletions
Showing only changes of commit ec264e0381 - Show all commits

View File

@@ -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 })),
)) ))

View File

@@ -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,
)} )}
> >

View File

@@ -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)),
}))
))