rhine-var
Version:
Variables that support multi-user collaboration and persistence, making collaboration and variable operations as simple as possible, with strict and well-defined type hints.
38 lines (37 loc) • 1.56 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = useSynced;
const connector_abstract_1 = __importDefault(require("../../core/connector/connector.abstract"));
const rhine_var_base_class_1 = __importDefault(require("../../core/var/rhine-var-base.class"));
const load_react_1 = __importDefault(require("../load-react"));
function useSynced(target) {
const React = (0, load_react_1.default)();
if (!React) {
throw new Error('RhineVar: useRhine hook requires React');
}
const checkSynced = () => {
var _a;
let connector = null;
if (target instanceof connector_abstract_1.default) {
connector = target;
}
else if (target instanceof rhine_var_base_class_1.default) {
connector = target.getConnector();
}
return (_a = connector === null || connector === void 0 ? void 0 : connector.synced) !== null && _a !== void 0 ? _a : false;
};
const [synced, setSynced] = React.useState(checkSynced);
React.useEffect(() => {
if (target instanceof connector_abstract_1.default) {
return target.subscribeSynced((value) => setSynced(value));
}
if (target instanceof rhine_var_base_class_1.default) {
// @ts-ignore
return target.subscribeSynced((value) => setSynced(value));
}
}, [target]);
return synced;
}