@banta/sdk 4.5.1 → 4.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8758,13 +8758,14 @@
8758
8758
  CommentViewComponent.prototype.getInitialMessages = function () {
8759
8759
  return __awaiter(this, void 0, void 0, function () {
8760
8760
  var messages;
8761
- return __generator(this, function (_b) {
8762
- switch (_b.label) {
8761
+ return __generator(this, function (_c) {
8762
+ switch (_c.label) {
8763
8763
  case 0: return [4 /*yield*/, this._source.getExistingMessages()];
8764
8764
  case 1:
8765
- messages = (_b.sent());
8765
+ messages = (_c.sent());
8766
8766
  messages.forEach(function (m) { var _a; return (_a = m.transientState) !== null && _a !== void 0 ? _a : (m.transientState = {}); });
8767
- this.messages = messages;
8767
+ this.messages = this.newestLast ? messages.slice().reverse() : messages;
8768
+ this.sortMessages();
8768
8769
  return [2 /*return*/];
8769
8770
  }
8770
8771
  });
@@ -8775,14 +8776,18 @@
8775
8776
  };
8776
8777
  CommentViewComponent.prototype.showNew = function () {
8777
8778
  return __awaiter(this, void 0, void 0, function () {
8778
- var overflow;
8779
- return __generator(this, function (_b) {
8780
- if (this.source && this.source.sortOrder !== common$1.CommentsOrder.NEWEST) {
8781
- this.sortOrderChanged.next(common$1.CommentsOrder.NEWEST);
8779
+ var naturalOrder, overflow;
8780
+ return __generator(this, function (_c) {
8781
+ naturalOrder = common$1.CommentsOrder.NEWEST;
8782
+ if (this.source && this.source.sortOrder !== naturalOrder) {
8783
+ this.sortOrderChanged.next(naturalOrder);
8782
8784
  return [2 /*return*/];
8783
8785
  }
8784
8786
  this.isViewingMore = false;
8785
- this.messages = this.newMessages.splice(0, this.newMessages.length).concat(this.messages);
8787
+ if (this.newestLast)
8788
+ this.messages = this.messages.concat(this.newMessages.splice(0, this.newMessages.length));
8789
+ else
8790
+ this.messages = this.newMessages.splice(0, this.newMessages.length).concat(this.messages);
8786
8791
  overflow = this.messages.splice(this.maxVisibleMessages, this.messages.length);
8787
8792
  this.olderMessages = overflow.concat(this.olderMessages);
8788
8793
  this.olderMessages.splice(this.maxMessages - this.maxVisibleMessages, this.olderMessages.length);
@@ -8791,38 +8796,45 @@
8791
8796
  });
8792
8797
  };
8793
8798
  CommentViewComponent.prototype.showMore = function () {
8799
+ var _a, _b;
8794
8800
  return __awaiter(this, void 0, void 0, function () {
8795
8801
  var nextPageSize, lastMessage, messages;
8796
- return __generator(this, function (_b) {
8797
- switch (_b.label) {
8802
+ return __generator(this, function (_c) {
8803
+ switch (_c.label) {
8798
8804
  case 0:
8799
8805
  this.isViewingMore = true;
8800
- if (!(this.olderMessages.length > 0)) return [3 /*break*/, 1];
8801
- this.isLoadingMore = false;
8802
- this.messages = this.messages.concat(this.olderMessages.splice(0, 50));
8803
- return [3 /*break*/, 3];
8804
- case 1:
8806
+ if (this.olderMessages.length > 0) {
8807
+ this.isLoadingMore = false;
8808
+ this.messages = this.messages.concat(this.olderMessages.splice(0, 50));
8809
+ }
8805
8810
  this.isLoadingMore = true;
8806
8811
  nextPageSize = 20;
8807
- lastMessage = void 0;
8808
- lastMessage = this.messages[this.messages.length - 1];
8812
+ if (this.newestLast) {
8813
+ lastMessage = (_a = this.olderMessages[0]) !== null && _a !== void 0 ? _a : this.messages[0];
8814
+ }
8815
+ else {
8816
+ lastMessage = (_b = this.olderMessages[this.olderMessages.length - 1]) !== null && _b !== void 0 ? _b : this.messages[this.messages.length - 1];
8817
+ }
8818
+ console.dir(lastMessage);
8809
8819
  if (!lastMessage) {
8810
8820
  this.isLoadingMore = false;
8811
8821
  this.hasMore = false;
8812
8822
  return [2 /*return*/];
8813
8823
  }
8814
8824
  return [4 /*yield*/, this.source.loadAfter(lastMessage, nextPageSize)];
8815
- case 2:
8816
- messages = _b.sent();
8825
+ case 1:
8826
+ messages = _c.sent();
8817
8827
  messages.forEach(function (m) { var _a; return (_a = m.transientState) !== null && _a !== void 0 ? _a : (m.transientState = {}); });
8818
- this.messages = this.messages.concat(messages);
8828
+ if (this.newestLast)
8829
+ this.messages = messages.concat(this.messages);
8830
+ else
8831
+ this.messages = this.messages.concat(messages);
8819
8832
  this.isLoadingMore = false;
8820
8833
  if (messages.length === 0) {
8821
8834
  console.log("Reached the end of the list.");
8822
8835
  this.hasMore = false;
8823
8836
  }
8824
- _b.label = 3;
8825
- case 3: return [2 /*return*/];
8837
+ return [2 /*return*/];
8826
8838
  }
8827
8839
  });
8828
8840
  });
@@ -8833,11 +8845,11 @@
8833
8845
  (_a = message.transientState) !== null && _a !== void 0 ? _a : (message.transientState = {});
8834
8846
  var destination = this.messages;
8835
8847
  var bucket = this.olderMessages;
8848
+ var newestLast = this.newestLast;
8836
8849
  if (this.isViewingMore) {
8837
8850
  destination = this.newMessages;
8838
8851
  bucket = null;
8839
8852
  }
8840
- var newestLast = this.newestLast;
8841
8853
  if (newestLast) {
8842
8854
  destination.push(message);
8843
8855
  var overflow = destination.splice(this.maxVisibleMessages, destination.length);
@@ -8850,6 +8862,51 @@
8850
8862
  }
8851
8863
  if ((bucket === null || bucket === void 0 ? void 0 : bucket.length) > 0)
8852
8864
  this.hasMore = true;
8865
+ message.pagingCursor = String(this.incrementPagingCursors());
8866
+ this.sortMessages();
8867
+ };
8868
+ CommentViewComponent.prototype.incrementPagingCursors = function () {
8869
+ var e_1, _c, e_2, _d;
8870
+ if (this.source.sortOrder !== common$1.CommentsOrder.NEWEST)
8871
+ return;
8872
+ var maxPagingCursor = 0;
8873
+ try {
8874
+ for (var _e = __values([this.messages, this.olderMessages, this.newMessages]), _f = _e.next(); !_f.done; _f = _e.next()) {
8875
+ var group = _f.value;
8876
+ try {
8877
+ for (var group_1 = (e_2 = void 0, __values(group)), group_1_1 = group_1.next(); !group_1_1.done; group_1_1 = group_1.next()) {
8878
+ var message = group_1_1.value;
8879
+ if (message.pagingCursor) {
8880
+ var pagingCursor = Number(message.pagingCursor) + 1;
8881
+ if (pagingCursor > maxPagingCursor)
8882
+ maxPagingCursor = pagingCursor;
8883
+ message.pagingCursor = String(pagingCursor);
8884
+ }
8885
+ }
8886
+ }
8887
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
8888
+ finally {
8889
+ try {
8890
+ if (group_1_1 && !group_1_1.done && (_d = group_1.return)) _d.call(group_1);
8891
+ }
8892
+ finally { if (e_2) throw e_2.error; }
8893
+ }
8894
+ }
8895
+ }
8896
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
8897
+ finally {
8898
+ try {
8899
+ if (_f && !_f.done && (_c = _e.return)) _c.call(_e);
8900
+ }
8901
+ finally { if (e_1) throw e_1.error; }
8902
+ }
8903
+ return maxPagingCursor;
8904
+ };
8905
+ CommentViewComponent.prototype.sortMessages = function () {
8906
+ var _this = this;
8907
+ this.messages.sort(function (a, b) { return (a.sentAt - b.sentAt) * (_this.newestLast ? 1 : -1); });
8908
+ this.olderMessages.sort(function (a, b) { return (a.sentAt - b.sentAt) * (_this.newestLast ? 1 : -1); });
8909
+ this.newMessages.sort(function (a, b) { return (a.sentAt - b.sentAt) * (_this.newestLast ? 1 : -1); });
8853
8910
  };
8854
8911
  CommentViewComponent.prototype.messageReceived = function (message) {
8855
8912
  var _this = this;
@@ -8889,7 +8946,7 @@
8889
8946
  CommentViewComponent.decorators = [
8890
8947
  { type: core.Component, args: [{
8891
8948
  selector: 'banta-comment-view',
8892
- template: "<div class=\"message-container\">\r\n <ng-content select=\"[data-before]\"></ng-content>\r\n\r\n <a mat-button class=\"nav\" [class.visible]=\"isViewingMore || customSortEnabled\" href=\"javascript:;\" (click)=\"showNew()\">\r\n <mat-icon>file_upload</mat-icon>\r\n New\r\n <ng-container *ngIf=\"newMessages.length >= 1\">\r\n ({{newMessages.length}})\r\n </ng-container>\r\n </a>\r\n\r\n <ng-container *ngIf=\"messages.length === 0\">\r\n <div class=\"empty-state\" *ngIf=\"showEmptyState\">\r\n Be the first to comment!\r\n </div>\r\n </ng-container>\r\n <ng-container *ngFor=\"let message of messages; trackBy: messageIdentity\">\r\n <banta-comment\r\n *ngIf=\"!message.hidden\"\r\n class=\"abbreviated\"\r\n \r\n [customMenuItems]=\"customMenuItems\"\r\n [message]=\"message\"\r\n [mine]=\"currentUser?.id === message.user?.id\"\r\n [permissions]=\"source?.permissions\"\r\n [showReplyAction]=\"allowReplies\"\r\n [editing]=\"message.transientState.editing\"\r\n [genericAvatarUrl]=\"genericAvatarUrl\"\r\n (click)=\"isViewingMore = true\"\r\n (editStarted)=\"startEditing(message)\"\r\n (deleted)=\"deleteMessage(message)\"\r\n (editEnded)=\"message.transientState.editing = false\"\r\n (edited)=\"saveEdit(message, $event)\"\r\n (userSelected)=\"selectMessageUser(message)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (liked)=\"likeMessage(message)\"\r\n (unliked)=\"unlikeMessage(message)\"\r\n (reported)=\"reportMessage(message)\"\r\n (selected)=\"selectMessage(message)\"\r\n (shared)=\"sharedMessage($event)\"\r\n ></banta-comment>\r\n <div class=\"inline-replies-container\" *ngIf=\"selectedMessage === message\">\r\n <ng-content select=\".inline-replies\"></ng-content>\r\n </div>\r\n </ng-container>\r\n\r\n <a mat-button class=\"nav\" [class.visible]=\"hasMore && !isLoadingMore\" href=\"javascript:;\" (click)=\"showMore()\">Show more</a>\r\n\r\n <div class=\"loading-more\" *ngIf=\"isLoadingMore\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n\r\n <!-- <div style=\"color: #666\">\r\n n={{newMessages.length}}, m={{messages.length}}, o={{olderMessages.length}},\r\n v={{maxVisibleMessages}}, M={{maxMessages}}\r\n </div> -->\r\n\r\n <ng-content select=\":not([data-before]):not(.inline-replies)\"></ng-content>\r\n</div>\r\n",
8949
+ template: "<div class=\"message-container\">\r\n <ng-content select=\"[data-before]\"></ng-content>\r\n\r\n <a mat-button class=\"nav\" [class.visible]=\"!newestLast && (isViewingMore || customSortEnabled)\" href=\"javascript:;\" (click)=\"showNew()\">\r\n <mat-icon>file_upload</mat-icon>\r\n New\r\n <ng-container *ngIf=\"newMessages.length >= 1\">\r\n ({{newMessages.length}})\r\n </ng-container>\r\n </a>\r\n <a mat-button class=\"nav\" [class.visible]=\"newestLast && hasMore && !isLoadingMore\" href=\"javascript:;\" (click)=\"showMore()\">Show earlier</a>\r\n\r\n <ng-container *ngIf=\"messages.length === 0\">\r\n <div class=\"empty-state\" *ngIf=\"showEmptyState\">\r\n Be the first to comment!\r\n </div>\r\n </ng-container>\r\n <ng-container *ngFor=\"let message of messages; trackBy: messageIdentity\">\r\n <banta-comment\r\n *ngIf=\"!message.hidden\"\r\n class=\"abbreviated\"\r\n \r\n [customMenuItems]=\"customMenuItems\"\r\n [message]=\"message\"\r\n [mine]=\"currentUser?.id === message.user?.id\"\r\n [permissions]=\"source?.permissions\"\r\n [showReplyAction]=\"allowReplies\"\r\n [editing]=\"message.transientState.editing\"\r\n [genericAvatarUrl]=\"genericAvatarUrl\"\r\n (click)=\"isViewingMore = true\"\r\n (editStarted)=\"startEditing(message)\"\r\n (deleted)=\"deleteMessage(message)\"\r\n (editEnded)=\"message.transientState.editing = false\"\r\n (edited)=\"saveEdit(message, $event)\"\r\n (userSelected)=\"selectMessageUser(message)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (liked)=\"likeMessage(message)\"\r\n (unliked)=\"unlikeMessage(message)\"\r\n (reported)=\"reportMessage(message)\"\r\n (selected)=\"selectMessage(message)\"\r\n (shared)=\"sharedMessage($event)\"\r\n ></banta-comment>\r\n <div class=\"inline-replies-container\" *ngIf=\"selectedMessage === message\">\r\n <ng-content select=\".inline-replies\"></ng-content>\r\n </div>\r\n </ng-container>\r\n\r\n <a mat-button class=\"nav\" [class.visible]=\"newestLast && (isViewingMore || customSortEnabled)\" href=\"javascript:;\" (click)=\"showNew()\">\r\n <mat-icon>file_download</mat-icon>\r\n New\r\n <ng-container *ngIf=\"newMessages.length >= 1\">\r\n ({{newMessages.length}})\r\n </ng-container>\r\n </a>\r\n <a mat-button class=\"nav\" [class.visible]=\"!newestLast && hasMore && !isLoadingMore\" href=\"javascript:;\" (click)=\"showMore()\">Show more</a>\r\n\r\n <div class=\"loading-more\" *ngIf=\"isLoadingMore\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n\r\n <!-- <div style=\"color: #666\">\r\n n={{newMessages.length}}, m={{messages.length}}, o={{olderMessages.length}},\r\n v={{maxVisibleMessages}}, M={{maxMessages}}\r\n </div> -->\r\n\r\n <ng-content select=\":not([data-before]):not(.inline-replies)\"></ng-content>\r\n</div>\r\n",
8893
8950
  styles: [":host{flex-grow:1;display:flex;flex-direction:column;opacity:1;transition:opacity .2s ease-in}.message-container{flex-grow:1;overflow-x:hidden;color:#111;background:#fff;padding:.5em 1em 3em .5em;opacity:1;transition:opacity .5s ease-in-out;position:relative}.message-container.no-scroll{height:auto;overflow-y:visible}.message-container.faded{opacity:.25}.message-container .overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:10}:host.fixed-height .message-container{overflow-y:auto}:host-context(.mat-dark-theme) .message-container{color:#fff;background:#111}.empty-state{text-align:center;margin:3em;color:#666}:host-context(.mat-dark-theme) .empty-state{color:#666}a.nav{position:absolute;right:.5em;z-index:10;text-align:center;opacity:0;transition:opacity .4s ease-in-out;pointer-events:none;border-radius:2em;background:#222}a.nav.visible{opacity:1;pointer-events:auto}.loading-more{padding:2em;text-align:center;margin:0 auto;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}@media (max-width:400px){.message-container{padding:0 0 3em}}"]
8894
8951
  },] }
8895
8952
  ];
@@ -10638,23 +10695,27 @@
10638
10695
  });
10639
10696
  });
10640
10697
  };
10698
+ ChatSource.prototype.mapOrUpdateMessages = function (messages) {
10699
+ var _this = this;
10700
+ return messages.map(function (message) { return _this.mapOrUpdateMessage(message); });
10701
+ };
10702
+ ChatSource.prototype.mapOrUpdateMessage = function (message) {
10703
+ var existingMessage = this.messageMap.get(message.id);
10704
+ if (existingMessage)
10705
+ message = Object.assign(existingMessage, message);
10706
+ else
10707
+ this.messageMap.set(message.id, message);
10708
+ return message;
10709
+ };
10641
10710
  ChatSource.prototype.getExistingMessages = function () {
10642
10711
  return __awaiter(this, void 0, void 0, function () {
10643
10712
  var messages;
10644
- var _this = this;
10645
10713
  return __generator(this, function (_b) {
10646
10714
  switch (_b.label) {
10647
10715
  case 0: return [4 /*yield*/, this.peer.getExistingMessages()];
10648
10716
  case 1:
10649
10717
  messages = _b.sent();
10650
- messages = messages.map(function (message) {
10651
- var existingMessage = _this.messageMap.get(message.id);
10652
- if (existingMessage)
10653
- message = Object.assign(existingMessage, message);
10654
- else
10655
- _this.messageMap.set(message.id, message);
10656
- return message;
10657
- });
10718
+ messages = this.mapOrUpdateMessages(messages);
10658
10719
  return [2 /*return*/, messages];
10659
10720
  }
10660
10721
  });
@@ -10737,8 +10798,7 @@
10737
10798
  };
10738
10799
  ChatSource.prototype.onChatMessage = function (message) {
10739
10800
  if (this.messageMap.has(message.id)) {
10740
- Object.assign(this.messageMap.get(message.id), message);
10741
- this._messageUpdated.next(message);
10801
+ return this.mapOrUpdateMessage(message);
10742
10802
  }
10743
10803
  else if (!message.hidden) {
10744
10804
  // Only process non-hidden messages through here.
@@ -10778,12 +10838,18 @@
10778
10838
  };
10779
10839
  ChatSource.prototype.loadAfter = function (message, count) {
10780
10840
  return __awaiter(this, void 0, void 0, function () {
10781
- return __generator(this, function (_b) {
10782
- if (!message)
10783
- return [2 /*return*/];
10784
- if (!message.pagingCursor)
10785
- return [2 /*return*/, []];
10786
- return [2 /*return*/, this.peer.loadAfter(Number(message.pagingCursor), count)];
10841
+ var _b;
10842
+ return __generator(this, function (_c) {
10843
+ switch (_c.label) {
10844
+ case 0:
10845
+ if (!message)
10846
+ return [2 /*return*/];
10847
+ if (!message.pagingCursor)
10848
+ return [2 /*return*/, []];
10849
+ _b = this.mapOrUpdateMessages;
10850
+ return [4 /*yield*/, this.peer.loadAfter(Number(message.pagingCursor), count)];
10851
+ case 1: return [2 /*return*/, _b.apply(this, [_c.sent()])];
10852
+ }
10787
10853
  });
10788
10854
  });
10789
10855
  };