UNPKG

solid-native

Version:

Use solid.js to develop native mobile applications

57 lines 2.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSolidProps = void 0; const react_1 = require("react"); const solid_js_1 = require("solid-js"); const symbols_1 = require("./symbols"); const util_1 = require("./util"); const propsProto = new Proxy({}, { get: (_, key, recv) => { const [accessor, setter] = (0, solid_js_1.runWithOwner)(recv[symbols_1.$owner], () => (0, solid_js_1.createSignal)(undefined)); recv[symbols_1.$setters][key] = setter; Object.defineProperty(recv, key, { enumerable: true, get: accessor, }); return accessor(); }, }); function createSolidProps(owner) { const props = Object.create(propsProto); props[symbols_1.$setters] = {}; props[symbols_1.$owner] = owner; return props; } function updateSolidProps(solidProps, props) { (0, solid_js_1.batch)(() => { for (const key in props) { if (key in solidProps) { solidProps[symbols_1.$setters][key](() => props[key]); } else { const [accessor, setter] = (0, solid_js_1.runWithOwner)(props[symbols_1.$owner], () => (0, solid_js_1.createSignal)(props[key])); solidProps[symbols_1.$setters][key] = setter; Object.defineProperty(solidProps, key, { enumerable: true, get: accessor, }); } } }); } function useSolidProps(props) { const { dispose, solidProps } = (0, util_1.useOnce)(() => (0, solid_js_1.createRoot)((dispose) => { const owner = (0, solid_js_1.getOwner)(); const solidProps = createSolidProps(owner); return { dispose, solidProps }; })); (0, react_1.useEffect)(() => dispose, []); const lastProps = (0, react_1.useRef)(null); if (props !== lastProps.current) { lastProps.current = props; updateSolidProps(solidProps, props); } return solidProps; } exports.useSolidProps = useSolidProps; //# sourceMappingURL=useSolidProps.js.map