molstar
Version:
A comprehensive macromolecular library.
42 lines (41 loc) • 1.65 kB
JavaScript
/**
* Copyright (c) 2020-22 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.useBehavior = void 0;
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importDefault(require("react"));
var rxjs_1 = require("rxjs");
function useBehaviorLegacy(s) {
var _a = react_1.default.useState({}), next = _a[1];
var current = react_1.default.useRef();
current.current = s === null || s === void 0 ? void 0 : s.value;
react_1.default.useEffect(function () {
if (!s) {
return;
}
var sub = s.subscribe(function (v) {
if (current.current !== v)
next({});
});
return function () { return sub.unsubscribe(); };
}, [s]);
return s === null || s === void 0 ? void 0 : s.value;
}
function useBehaviorReact18(s) {
return react_1.default.useSyncExternalStore(react_1.default.useCallback(function (callback) {
var sub = s === null || s === void 0 ? void 0 : s.pipe((0, rxjs_1.skip)(1)).subscribe(callback);
return function () { return sub === null || sub === void 0 ? void 0 : sub.unsubscribe(); };
}, [s]), react_1.default.useCallback(function () { return s === null || s === void 0 ? void 0 : s.value; }, [s]));
}
var _useBehavior = !!react_1.default.useSyncExternalStore
? useBehaviorReact18
: useBehaviorLegacy;
// eslint-disable-next-line
function useBehavior(s) {
return _useBehavior(s);
}
exports.useBehavior = useBehavior;
;