ParseRelation.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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 _CoreManager = _interopRequireDefault(require("./CoreManager"));
  9. var ParseRelation = function () {
  10. function ParseRelation(parent, key) {
  11. (0, _classCallCheck2.default)(this, ParseRelation);
  12. this.parent = parent;
  13. this.key = key;
  14. this.targetClassName = null;
  15. }
  16. return (0, _createClass2.default)(ParseRelation, [{
  17. key: "_ensureParentAndKey",
  18. value: function (parent, key) {
  19. this.key = this.key || key;
  20. if (this.key !== key) {
  21. throw new Error('Internal Error. Relation retrieved from two different keys.');
  22. }
  23. if (this.parent) {
  24. if (this.parent.className !== parent.className) {
  25. throw new Error('Internal Error. Relation retrieved from two different Objects.');
  26. }
  27. if (this.parent.id) {
  28. if (this.parent.id !== parent.id) {
  29. throw new Error('Internal Error. Relation retrieved from two different Objects.');
  30. }
  31. } else if (parent.id) {
  32. this.parent = parent;
  33. }
  34. } else {
  35. this.parent = parent;
  36. }
  37. }
  38. }, {
  39. key: "add",
  40. value: function (objects) {
  41. if (!Array.isArray(objects)) {
  42. objects = [objects];
  43. }
  44. var _CoreManager$getParse = _CoreManager.default.getParseOp(),
  45. RelationOp = _CoreManager$getParse.RelationOp;
  46. var change = new 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 _CoreManager$getParse2 = _CoreManager.default.getParseOp(),
  65. RelationOp = _CoreManager$getParse2.RelationOp;
  66. var change = new RelationOp([], objects);
  67. if (!this.parent) {
  68. throw new Error('Cannot remove from a Relation without a parent');
  69. }
  70. if (objects.length === 0) {
  71. return;
  72. }
  73. this.parent.set(this.key, change);
  74. this.targetClassName = change._targetClassName;
  75. }
  76. }, {
  77. key: "toJSON",
  78. value: function () {
  79. return {
  80. __type: 'Relation',
  81. className: this.targetClassName
  82. };
  83. }
  84. }, {
  85. key: "query",
  86. value: function query() {
  87. var query;
  88. var parent = this.parent;
  89. if (!parent) {
  90. throw new Error('Cannot construct a query for a Relation without a parent');
  91. }
  92. var ParseQuery = _CoreManager.default.getParseQuery();
  93. if (!this.targetClassName) {
  94. query = new ParseQuery(parent.className);
  95. query._extraOptions.redirectClassNameForKey = this.key;
  96. } else {
  97. query = new ParseQuery(this.targetClassName);
  98. }
  99. query._addCondition('$relatedTo', 'object', {
  100. __type: 'Pointer',
  101. className: parent.className,
  102. objectId: parent.id
  103. });
  104. query._addCondition('$relatedTo', 'key', this.key);
  105. return query;
  106. }
  107. }]);
  108. }();
  109. var _default = exports.default = ParseRelation;