0.1.4 #5
@@ -17,10 +17,16 @@
|
|||||||
"types": "./dist/index.d.ts",
|
"types": "./dist/index.d.ts",
|
||||||
"default": "./dist/index.js"
|
"default": "./dist/index.js"
|
||||||
},
|
},
|
||||||
"./*": {
|
"./*": [
|
||||||
"types": "./dist/*.d.ts",
|
{
|
||||||
"default": "./dist/*.js"
|
"types": "./dist/*/index.d.ts",
|
||||||
}
|
"default": "./dist/*/index.js"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"types": "./dist/*.d.ts",
|
||||||
|
"default": "./dist/*.js"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Callout, Flex, Spinner, TextField } from "@radix-ui/themes"
|
import { Callout, Flex, Spinner, TextField } from "@radix-ui/themes"
|
||||||
import { Array, Option } from "effect"
|
import { Array, Option } from "effect"
|
||||||
import { Component, Form } from "effect-fc"
|
import { Component, Form } from "effect-fc"
|
||||||
import { useSubscribables } from "effect-fc/hooks"
|
import { useSubscribables } from "effect-fc/Hooks"
|
||||||
|
|
||||||
|
|
||||||
export interface TextFieldFormInputProps
|
export interface TextFieldFormInputProps
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import { Callout, Flex, TextArea, TextAreaProps } from "@radix-ui/themes"
|
/** biome-ignore-all lint/correctness/useHookAtTopLevel: effect-fc HOC */
|
||||||
import { Array, Equivalence, Option, ParseResult, Schema, Struct } from "effect"
|
import { Callout, Flex, TextArea, type TextAreaProps } from "@radix-ui/themes"
|
||||||
|
import { Array, type Equivalence, Option, ParseResult, type Schema, Struct } from "effect"
|
||||||
import { Component } from "effect-fc"
|
import { Component } from "effect-fc"
|
||||||
import { useInput } from "effect-fc/hooks"
|
import { useInput } from "effect-fc/Hooks"
|
||||||
import * as React from "react"
|
import * as React from "react"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
|
/** biome-ignore-all lint/correctness/useHookAtTopLevel: effect-fc HOC */
|
||||||
import { Callout, Checkbox, Flex, TextField } from "@radix-ui/themes"
|
import { Callout, Checkbox, Flex, TextField } from "@radix-ui/themes"
|
||||||
import { Array, Equivalence, Option, ParseResult, Schema, Struct } from "effect"
|
import { Array, type Equivalence, Option, ParseResult, type Schema, Struct } from "effect"
|
||||||
import { Component, Memo } from "effect-fc"
|
import { Component } from "effect-fc"
|
||||||
import { useInput, useOptionalInput } from "effect-fc/hooks"
|
import { useInput, useOptionalInput } from "effect-fc/Hooks"
|
||||||
import * as React from "react"
|
import * as React from "react"
|
||||||
|
|
||||||
|
|
||||||
@@ -67,4 +68,4 @@ export const TextFieldInput = <A, R, O extends boolean = false>(options: {
|
|||||||
}
|
}
|
||||||
</Flex>
|
</Flex>
|
||||||
)
|
)
|
||||||
}).pipe(Memo.memo)
|
})
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { TextFieldFormInput } from "@/lib/form/TextFieldFormInput"
|
|
||||||
import { runtime } from "@/runtime"
|
|
||||||
import { Button, Container, Flex } from "@radix-ui/themes"
|
import { Button, Container, Flex } from "@radix-ui/themes"
|
||||||
import { createFileRoute } from "@tanstack/react-router"
|
import { createFileRoute } from "@tanstack/react-router"
|
||||||
import { Effect, ParseResult, Schema } from "effect"
|
import { Effect, ParseResult, Schema } from "effect"
|
||||||
import { Component, Form } from "effect-fc"
|
import { Component, Form } from "effect-fc"
|
||||||
import { useContext, useSubscribables } from "effect-fc/hooks"
|
import { useContext, useSubscribables } from "effect-fc/Hooks"
|
||||||
|
import { TextFieldFormInput } from "@/lib/form/TextFieldFormInput"
|
||||||
|
import { runtime } from "@/runtime"
|
||||||
|
|
||||||
|
|
||||||
const email = Schema.pattern<typeof Schema.String>(
|
const email = Schema.pattern<typeof Schema.String>(
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { runtime } from "@/runtime"
|
|
||||||
import { Todos } from "@/todo/Todos"
|
|
||||||
import { TodosState } from "@/todo/TodosState.service"
|
|
||||||
import { createFileRoute } from "@tanstack/react-router"
|
import { createFileRoute } from "@tanstack/react-router"
|
||||||
import { Effect } from "effect"
|
import { Effect } from "effect"
|
||||||
import { Component } from "effect-fc"
|
import { Component } from "effect-fc"
|
||||||
import { useContext } from "effect-fc/hooks"
|
import { useContext } from "effect-fc/Hooks"
|
||||||
|
import { runtime } from "@/runtime"
|
||||||
|
import { Todos } from "@/todo/Todos"
|
||||||
|
import { TodosState } from "@/todo/TodosState.service"
|
||||||
|
|
||||||
|
|
||||||
const TodosStateLive = TodosState.Default("todos")
|
const TodosStateLive = TodosState.Default("todos")
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
|
import { Box, Button, Flex, IconButton } from "@radix-ui/themes"
|
||||||
|
import { GetRandomValues, makeUuid4 } from "@typed/id"
|
||||||
|
import { Chunk, DateTime, Effect, Match, Option, Ref, Runtime, Schema, Stream, SubscriptionRef } from "effect"
|
||||||
|
import { Component, Hooks } from "effect-fc"
|
||||||
|
import { FaArrowDown, FaArrowUp } from "react-icons/fa"
|
||||||
|
import { FaDeleteLeft } from "react-icons/fa6"
|
||||||
import * as Domain from "@/domain"
|
import * as Domain from "@/domain"
|
||||||
import { TextAreaInput } from "@/lib/input/TextAreaInput"
|
import { TextAreaInput } from "@/lib/input/TextAreaInput"
|
||||||
import { TextFieldInput } from "@/lib/input/TextFieldInput"
|
import { TextFieldInput } from "@/lib/input/TextFieldInput"
|
||||||
import { DateTimeUtcFromZonedInput } from "@/lib/schema"
|
import { DateTimeUtcFromZonedInput } from "@/lib/schema"
|
||||||
import { Box, Button, Flex, IconButton } from "@radix-ui/themes"
|
|
||||||
import { GetRandomValues, makeUuid4 } from "@typed/id"
|
|
||||||
import { Chunk, DateTime, Effect, Match, Option, Ref, Runtime, Schema, Stream, SubscriptionRef } from "effect"
|
|
||||||
import { Component, Memo } from "effect-fc"
|
|
||||||
import { useMemo, useOnce, useSubscribables } from "effect-fc/hooks"
|
|
||||||
import { Subscribable, SubscriptionSubRef } from "effect-fc/types"
|
|
||||||
import { FaArrowDown, FaArrowUp } from "react-icons/fa"
|
|
||||||
import { FaDeleteLeft } from "react-icons/fa6"
|
|
||||||
import { TodosState } from "./TodosState.service"
|
import { TodosState } from "./TodosState.service"
|
||||||
|
|
||||||
|
|
||||||
@@ -35,7 +33,7 @@ export class Todo extends Component.makeUntraced("Todo")(function*(props: TodoPr
|
|||||||
const runtime = yield* Effect.runtime()
|
const runtime = yield* Effect.runtime()
|
||||||
const state = yield* TodosState
|
const state = yield* TodosState
|
||||||
|
|
||||||
const { ref, indexRef, contentRef, completedAtRef } = yield* useMemo(() => Match.value(props).pipe(
|
const { ref, indexRef, contentRef, completedAtRef } = yield* Hooks.useMemo(() => Match.value(props).pipe(
|
||||||
Match.tag("new", () => Effect.Do.pipe(
|
Match.tag("new", () => Effect.Do.pipe(
|
||||||
Effect.bind("ref", () => Effect.andThen(makeTodo, SubscriptionRef.make)),
|
Effect.bind("ref", () => Effect.andThen(makeTodo, SubscriptionRef.make)),
|
||||||
Effect.let("indexRef", () => Subscribable.make({ get: Effect.succeed(-1), changes: Stream.empty })),
|
Effect.let("indexRef", () => Subscribable.make({ get: Effect.succeed(-1), changes: Stream.empty })),
|
||||||
@@ -48,10 +46,9 @@ export class Todo extends Component.makeUntraced("Todo")(function*(props: TodoPr
|
|||||||
|
|
||||||
Effect.let("contentRef", ({ ref }) => SubscriptionSubRef.makeFromPath(ref, ["content"])),
|
Effect.let("contentRef", ({ ref }) => SubscriptionSubRef.makeFromPath(ref, ["content"])),
|
||||||
Effect.let("completedAtRef", ({ ref }) => SubscriptionSubRef.makeFromPath(ref, ["completedAt"])),
|
Effect.let("completedAtRef", ({ ref }) => SubscriptionSubRef.makeFromPath(ref, ["completedAt"])),
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
), [props._tag, props._tag === "edit" ? props.id : undefined])
|
), [props._tag, props._tag === "edit" ? props.id : undefined])
|
||||||
|
|
||||||
const [index, size] = yield* useSubscribables(indexRef, state.sizeSubscribable)
|
const [index, size] = yield* Hooks.useSubscribables(indexRef, state.sizeSubscribable)
|
||||||
|
|
||||||
const StringTextAreaInputFC = yield* StringTextAreaInput
|
const StringTextAreaInputFC = yield* StringTextAreaInput
|
||||||
const OptionalDateTimeInputFC = yield* OptionalDateTimeInput
|
const OptionalDateTimeInputFC = yield* OptionalDateTimeInput
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { Todo } from "@/domain"
|
|
||||||
import { KeyValueStore } from "@effect/platform"
|
import { KeyValueStore } from "@effect/platform"
|
||||||
import { BrowserKeyValueStore } from "@effect/platform-browser"
|
import { BrowserKeyValueStore } from "@effect/platform-browser"
|
||||||
import { Chunk, Console, Effect, Option, Schema, Stream, SubscriptionRef } from "effect"
|
import { Chunk, Console, Effect, Option, Schema, Stream, SubscriptionRef } from "effect"
|
||||||
import { Subscribable, SubscriptionSubRef } from "effect-fc/types"
|
import { Subscribable, SubscriptionSubRef } from "effect-fc"
|
||||||
|
import { Todo } from "@/domain"
|
||||||
|
|
||||||
|
|
||||||
export class TodosState extends Effect.Service<TodosState>()("TodosState", {
|
export class TodosState extends Effect.Service<TodosState>()("TodosState", {
|
||||||
|
|||||||
Reference in New Issue
Block a user