Skip to content

Commit 86ae8a9

Browse files
add optional initalValue argument to from helper (#2429)
* add optional initalValue to `from` helper * Create dull-bikes-reply.md --------- Co-authored-by: Ryan Carniato <[email protected]>
1 parent e897701 commit 86ae8a9

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

.changeset/dull-bikes-reply.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"solid-js": patch
3+
---
4+
5+
add optional initalValue argument to `from` helper

packages/solid/src/reactive/observable.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,20 @@ export function observable<T>(input: Accessor<T>): Observable<T> {
8484
};
8585
}
8686

87-
export function from<T>(
88-
producer:
89-
| ((setter: Setter<T | undefined>) => () => void)
90-
| { subscribe: (fn: (v: T) => void) => (() => void) | { unsubscribe: () => void } }
91-
): Accessor<T | undefined> {
92-
const [s, set] = createSignal<T | undefined>(undefined, { equals: false });
93-
if ("subscribe" in producer) {
94-
const unsub = producer.subscribe(v => set(() => v));
95-
onCleanup(() => ("unsubscribe" in unsub ? unsub.unsubscribe() : unsub()));
96-
} else {
97-
const clean = producer(set);
98-
onCleanup(clean);
99-
}
100-
return s;
87+
type Producer<T> =
88+
| ((setter: Setter<T>) => () => void)
89+
| { subscribe: (fn: (v: T) => void) => (() => void) | { unsubscribe: () => void } };
90+
91+
export function from<T>(producer: Producer<T>, initalValue: T): Accessor<T>;
92+
export function from<T>(producer: Producer<T|undefined>): Accessor<T|undefined>;
93+
export function from<T>(producer: Producer<T|undefined>, initalValue: T|undefined = undefined): Accessor<T | undefined> {
94+
const [s, set] = createSignal<T | undefined>(initalValue, { equals: false });
95+
if ("subscribe" in producer) {
96+
const unsub = producer.subscribe(v => set(() => v));
97+
onCleanup(() => ("unsubscribe" in unsub ? unsub.unsubscribe() : unsub()));
98+
} else {
99+
const clean = producer(set);
100+
onCleanup(clean);
101+
}
102+
return s;
101103
}

0 commit comments

Comments
 (0)