UNPKG

@nozbe/watermelondb

Version:

Build powerful React Native and React web apps that scale from hundreds to tens of thousands of records and remain fast

66 lines (64 loc) 3.02 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _initializerDefineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/initializerDefineProperty")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime/helpers/applyDecoratedDescriptor")); var _initializerWarningHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/initializerWarningHelper")); var _invariant = _interopRequireDefault(require("../utils/common/invariant")); var _publishReplayLatestWhileConnected = _interopRequireDefault(require("../utils/rx/publishReplayLatestWhileConnected")); var _lazy = _interopRequireDefault(require("../decorators/lazy")); var _helpers = require("./helpers"); var _class, _descriptor, _class2; // Defines a one-to-one relation between two Models (two tables in db) // Do not create this object directly! Use `relation` or `immutableRelation` decorators instead var Relation = exports.default = (_class = (_class2 = /*#__PURE__*/function () { // Used by withObservables to differentiate between object types function Relation(model, relationTableName, columnName, options) { (0, _initializerDefineProperty2.default)(this, "_cachedObservable", _descriptor, this); this._model = model; this._relationTableName = relationTableName; this._columnName = columnName; this._isImmutable = options.isImmutable; } var _proto = Relation.prototype; _proto.fetch = function () { var { id: id } = this; if (id) { return this._model.collections.get(this._relationTableName).find(id); } return Promise.resolve(null); }; _proto.then = function (onFulfill, onReject) { // $FlowFixMe return this.fetch().then(onFulfill, onReject); }; _proto.set = function (record) { this.id = null === record || void 0 === record ? void 0 : record.id; }; _proto.observe = function () { return this._cachedObservable; }; return (0, _createClass2.default)(Relation, [{ key: "id", get: function get() { return this._model._getRaw(this._columnName); }, set: function set(newId) { if (this._isImmutable) { (0, _invariant.default)('create' === this._model._preparedState, "Cannot change property marked as @immutableRelation ".concat(Object.getPrototypeOf(this._model).constructor.name, " - ").concat(this._columnName)); } this._model._setRaw(this._columnName, newId || null); } }]); }(), _class2._wmelonTag = 'relation', _class2), _descriptor = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "_cachedObservable", [_lazy.default], { configurable: true, enumerable: true, writable: true, initializer: function initializer() { return (0, _helpers.createObservable)(this).pipe(_publishReplayLatestWhileConnected.default).refCount(); } }), _class);