Skip to content

Commit

Permalink
feat: added selector on useSignal
Browse files Browse the repository at this point in the history
  • Loading branch information
mbret committed Nov 19, 2023
1 parent 849e5f9 commit 81adff1
Showing 1 changed file with 23 additions and 2 deletions.
25 changes: 23 additions & 2 deletions src/lib/state/useSignalValue.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,27 @@
import { distinctUntilChanged, map } from "rxjs"
import { useObserve } from "../binding/useObserve"
import { type Signal } from "./signal"

export const useSignalValue = <S, K>(signal: Signal<S, S, K>, key?: string) => {
return useObserve(signal.subject, { defaultValue: signal.getValue(), key })
export function useSignalValue<S, K, L>(
signal: Signal<S, S, K>,
selector: (value: S) => L
): L
export function useSignalValue<S, K>(signal: Signal<S, S, K>): S
export function useSignalValue<S, K, L>(
signal: Signal<S, S, K>,
selector?: (value: S) => L
) {
const selectorOrDefault = selector ?? ((v) => v)

return useObserve(
() =>
signal.subject.pipe(
map((value) => selectorOrDefault(value)),
distinctUntilChanged()
),
{
defaultValue: selectorOrDefault(signal.getValue())
},
[]
)
}

0 comments on commit 81adff1

Please sign in to comment.