UNPKG

@dreamkit/solid

Version:

DreamKit tools for Solid.

34 lines (33 loc) 1.21 kB
import { createEffect, createSignal, createMemo, } from "solid-js"; export function createControlledValue(props) { const controlled = props.value !== undefined; const [valueState, setValueState] = createSignal(props.defaultValue); const propsValue = () => typeof props.value === "function" ? props.value() : props.value; const value = controlled ? createMemo(propsValue) : createMemo(valueState); if (controlled) { createEffect(() => setValueState(() => value())); createEffect(() => { if (propsValue() === undefined) console.error("Controlled value can not be undefined"); }); } else { createEffect(() => { if (propsValue() !== undefined) console.error("Uncontrolled value can not be defined"); }); createEffect((first) => { props.defaultValue; if (first) return false; console.error("Uncontrolled value can not change the default value"); return false; }, true); } const setValue = controlled ? (() => { }) : setValueState; return [value, setValue, controlled]; }