ParseRelation.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
  7. var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
  8. var _ParseOp = require("./ParseOp");
  9. var _ParseObject = _interopRequireDefault(require("./ParseObject"));
  10. var _ParseQuery = _interopRequireDefault(require("./ParseQuery"));
  11. var ParseRelation = function () {
  12. function ParseRelation(parent, key) {
  13. (0, _classCallCheck2.default)(this, ParseRelation);
  14. this.parent = parent;
  15. this.key = key;
  16. this.targetClassName = null;
  17. }
  18. (0, _createClass2.default)(ParseRelation, [{
  19. key: "_ensureParentAndKey",
  20. value: function (parent, key) {
  21. this.key = this.key || key;
  22. if (this.key !== key) {
  23. throw new Error('Internal Error. Relation retrieved from two different keys.');
  24. }
  25. if (this.parent) {
  26. if (this.parent.className !== parent.className) {
  27. throw new Error('Internal Error. Relation retrieved from two different Objects.');
  28. }
  29. if (this.parent.id) {
  30. if (this.parent.id !== parent.id) {
  31. throw new Error('Internal Error. Relation retrieved from two different Objects.');
  32. }
  33. } else if (parent.id) {
  34. this.parent = parent;
  35. }
  36. } else {
  37. this.parent = parent;
  38. }
  39. }
  40. }, {
  41. key: "add",
  42. value: function (objects) {
  43. if (!Array.isArray(objects)) {
  44. objects = [objects];
  45. }
  46. var change = new _ParseOp.RelationOp(objects, []);
  47. var parent = this.parent;
  48. if (!parent) {
  49. throw new Error('Cannot add to a Relation without a parent');
  50. }
  51. if (objects.length === 0) {
  52. return parent;
  53. }
  54. parent.set(this.key, change);
  55. this.targetClassName = change._targetClassName;
  56. return parent;
  57. }
  58. }, {
  59. key: "remove",
  60. value: function (objects) {
  61. if (!Array.isArray(objects)) {
  62. objects = [objects];
  63. }
  64. var change = new _ParseOp.RelationOp([], objects);
  65. if (!this.parent) {
  66. throw new Error('Cannot remove from a Relation without a parent');
  67. }
  68. if (objects.length === 0) {
  69. return;
  70. }
  71. this.parent.set(this.key, change);
  72. this.targetClassName = change._targetClassName;
  73. }
  74. }, {
  75. key: "toJSON",
  76. value: function () {
  77. return {
  78. __type: 'Relation',
  79. className: this.targetClassName
  80. };
  81. }
  82. }, {
  83. key: "query",
  84. value: function query() {
  85. var query;
  86. var parent = this.parent;
  87. if (!parent) {
  88. throw new Error('Cannot construct a query for a Relation without a parent');
  89. }
  90. if (!this.targetClassName) {
  91. query = new _ParseQuery.default(parent.className);
  92. query._extraOptions.redirectClassNameForKey = this.key;
  93. } else {
  94. query = new _ParseQuery.default(this.targetClassName);
  95. }
  96. query._addCondition('$relatedTo', 'object', {
  97. __type: 'Pointer',
  98. className: parent.className,
  99. objectId: parent.id
  100. });
  101. query._addCondition('$relatedTo', 'key', this.key);
  102. return query;
  103. }
  104. }]);
  105. return ParseRelation;
  106. }();
  107. var _default = ParseRelation;
  108. exports.default = _default;