@dreamkit/solid
Version:
DreamKit tools for Solid.
34 lines (33 loc) • 1.21 kB
JavaScript
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];
}