react-native-wishlist
Version:
The fastest List component for React Native.
72 lines (67 loc) • 1.95 kB
JavaScript
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
;