UNPKG

react-native-wishlist

Version:
72 lines (67 loc) 1.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createTemplateValue = createTemplateValue; exports.isTemplateValue = isTemplateValue; exports.useTemplateValue = useTemplateValue; var _react = require("react"); var _InflatorRepository = require("./InflatorRepository"); var _Utils = require("./Utils"); var _WishlistJsRuntime = require("./WishlistJsRuntime"); function createTemplateValue(mapper) { const id = (0, _Utils.generateId)(); function getOrCreateUIState() { 'worklet'; const registry = (0, _InflatorRepository.getUIInflatorRegistry)(); let state = registry.getTemplateValueState(id); if (!state) { state = { dirty: true, current: undefined }; registry.setTemplateValueState(id, state); } return state; } function setDirty() { 'worklet'; const state = getOrCreateUIState(); state.dirty = true; } function value() { 'worklet'; const registry = (0, _InflatorRepository.getUIInflatorRegistry)(); const state = getOrCreateUIState(); if (state.dirty) { state.current = mapper(registry.getCurrentValue(), registry.getCurrentRootValue()); state.dirty = false; } return state.current; } function remove() { (0, _WishlistJsRuntime.createRunInWishlistFn)(() => { 'worklet'; (0, _InflatorRepository.getUIInflatorRegistry)().deleteTemplateValueState(id); }); } return { __isTemplateValue: true, __setDirty: setDirty, __remove: remove, value }; } function isTemplateValue(value) { return value !== null && typeof value === 'object' && value.__isTemplateValue === true; } function useTemplateValue(mapper) { const value = (0, _react.useMemo)(() => { return createTemplateValue(mapper); }, [mapper]); (0, _react.useEffect)(() => { return () => value.__remove(); }, [value]); return value; } //# sourceMappingURL=TemplateValue.js.map