123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _ParseOp = require("./ParseOp");
- var _ParseObject = _interopRequireDefault(require("./ParseObject"));
- var _ParseQuery = _interopRequireDefault(require("./ParseQuery"));
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- class ParseRelation {
-
-
-
-
- constructor(parent /*: ?ParseObject*/, key /*: ?string*/) {
- this.parent = parent;
- this.key = key;
- this.targetClassName = null;
- }
-
- _ensureParentAndKey(parent , key ) {
- this.key = this.key || key;
- if (this.key !== key) {
- throw new Error('Internal Error. Relation retrieved from two different keys.');
- }
- if (this.parent) {
- if (this.parent.className !== parent.className) {
- throw new Error('Internal Error. Relation retrieved from two different Objects.');
- }
- if (this.parent.id) {
- if (this.parent.id !== parent.id) {
- throw new Error('Internal Error. Relation retrieved from two different Objects.');
- }
- } else if (parent.id) {
- this.parent = parent;
- }
- } else {
- this.parent = parent;
- }
- }
-
- add(objects ) {
- if (!Array.isArray(objects)) {
- objects = [objects];
- }
- const change = new _ParseOp.RelationOp(objects, []);
- const parent = this.parent;
- if (!parent) {
- throw new Error('Cannot add to a Relation without a parent');
- }
- if (objects.length === 0) {
- return parent;
- }
- parent.set(this.key, change);
- this.targetClassName = change._targetClassName;
- return parent;
- }
-
- remove(objects ) {
- if (!Array.isArray(objects)) {
- objects = [objects];
- }
- const change = new _ParseOp.RelationOp([], objects);
- if (!this.parent) {
- throw new Error('Cannot remove from a Relation without a parent');
- }
- if (objects.length === 0) {
- return;
- }
- this.parent.set(this.key, change);
- this.targetClassName = change._targetClassName;
- }
-
- toJSON() {
- return {
- __type: 'Relation',
- className: this.targetClassName
- };
- }
-
- query() {
- let query;
- const parent = this.parent;
- if (!parent) {
- throw new Error('Cannot construct a query for a Relation without a parent');
- }
- if (!this.targetClassName) {
- query = new _ParseQuery.default(parent.className);
- query._extraOptions.redirectClassNameForKey = this.key;
- } else {
- query = new _ParseQuery.default(this.targetClassName);
- }
- query._addCondition('$relatedTo', 'object', {
- __type: 'Pointer',
- className: parent.className,
- objectId: parent.id
- });
- query._addCondition('$relatedTo', 'key', this.key);
- return query;
- }
- }
- var _default = ParseRelation;
- exports.default = _default;
|