diff --git a/packages/example/src/routes/dev/async-rendering.tsx b/packages/example/src/routes/dev/async-rendering.tsx index 4e6c957..be03b9f 100644 --- a/packages/example/src/routes/dev/async-rendering.tsx +++ b/packages/example/src/routes/dev/async-rendering.tsx @@ -3,7 +3,7 @@ import { Flex, Text, TextField } from "@radix-ui/themes" import { createFileRoute } from "@tanstack/react-router" import { GetRandomValues, makeUuid4 } from "@typed/id" import { Effect } from "effect" -import { Component, Hook } from "effect-fc" +import { Component, Hook, Memoized, Suspense } from "effect-fc" import * as React from "react" @@ -50,7 +50,7 @@ const RouteComponent = Component.make(function* AsyncRendering() { // ) -const AsyncComponent = Component.make(function* AsyncComponent() { +class AsyncComponent extends Component.make(function* AsyncComponent() { const VSubComponent = yield* Component.useFC(SubComponent) yield* Effect.sleep("500 millis") @@ -61,14 +61,15 @@ const AsyncComponent = Component.make(function* AsyncComponent() { ) }).pipe( - Component.suspenseWithOptions({ defaultFallback:

Loading...

}) -) -const MemoizedAsyncComponent = Component.memo(AsyncComponent) + Suspense.suspense, + Suspense.withOptions({ defaultFallback:

Loading...

}), +) {} +class MemoizedAsyncComponent extends Memoized.memo(AsyncComponent) {} -const SubComponent = Component.make(function* SubComponent() { +class SubComponent extends Component.make(function* SubComponent() { const [state] = React.useState(yield* Hook.useOnce(() => Effect.provide(makeUuid4, GetRandomValues.CryptoRandom))) return {state} -}) +}) {} export const Route = createFileRoute("/dev/async-rendering")({ component: RouteComponent diff --git a/packages/example/src/todo/Todo.tsx b/packages/example/src/todo/Todo.tsx index 3c8365a..69b82c8 100644 --- a/packages/example/src/todo/Todo.tsx +++ b/packages/example/src/todo/Todo.tsx @@ -2,7 +2,7 @@ import * as Domain from "@/domain" import { Box, Button, Flex, IconButton, TextArea } from "@radix-ui/themes" import { GetRandomValues, makeUuid4 } from "@typed/id" import { Chunk, Effect, Match, Option, Ref, Runtime, SubscriptionRef } from "effect" -import { Component, Hook } from "effect-fc" +import { Component, Hook, Memoized } from "effect-fc" import { SubscriptionSubRef } from "effect-fc/types" import { FaArrowDown, FaArrowUp } from "react-icons/fa" import { FaDeleteLeft } from "react-icons/fa6" @@ -24,7 +24,7 @@ export type TodoProps = ( | { readonly _tag: "edit", readonly index: number } ) -export const Todo = Component.make(function* Todo(props: TodoProps) { +export class Todo extends Component.make(function* Todo(props: TodoProps) { const runtime = yield* Effect.runtime() const state = yield* TodosState @@ -111,5 +111,5 @@ export const Todo = Component.make(function* Todo(props: TodoProps) { ) }).pipe( - Component.memo -) + Memoized.memo +) {} diff --git a/packages/example/src/todo/Todos.tsx b/packages/example/src/todo/Todos.tsx index aeec4e4..7529127 100644 --- a/packages/example/src/todo/Todos.tsx +++ b/packages/example/src/todo/Todos.tsx @@ -5,7 +5,7 @@ import { Todo } from "./Todo" import { TodosState } from "./TodosState.service" -export const Todos = Component.make(function* Todos() { +export class Todos extends Component.make(function* Todos() { const state = yield* TodosState const [todos] = yield* Hook.useSubscribeRefs(state.ref) @@ -29,4 +29,4 @@ export const Todos = Component.make(function* Todos() { ) -}) +}) {}