UNPKG

molstar

Version:

A comprehensive macromolecular library.

42 lines (41 loc) 1.65 kB
"use strict"; /** * 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;