@plusscommunities/pluss-circles-web-groups 1.5.6 → 1.5.7-beta.1

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.
package/dist/index.cjs.js CHANGED
@@ -376,6 +376,35 @@ var circleActions = {
376
376
  }
377
377
 
378
378
  return deleteMessage;
379
+ }(),
380
+ markAsRead: function () {
381
+ var _markAsRead = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee4(circleId, userId) {
382
+ return _regeneratorRuntime__default['default'].wrap(function _callee4$(_context4) {
383
+ while (1) {
384
+ switch (_context4.prev = _context4.next) {
385
+ case 0:
386
+ return _context4.abrupt("return", Session$4.authedFunction({
387
+ method: 'post',
388
+ url: Helper$3.getUrl('notifications', 'resetunread'),
389
+ data: {
390
+ groupID: circleId,
391
+ userID: userId
392
+ }
393
+ }));
394
+
395
+ case 1:
396
+ case "end":
397
+ return _context4.stop();
398
+ }
399
+ }
400
+ }, _callee4);
401
+ }));
402
+
403
+ function markAsRead(_x9, _x10) {
404
+ return _markAsRead.apply(this, arguments);
405
+ }
406
+
407
+ return markAsRead;
379
408
  }()
380
409
  };
381
410
 
@@ -418,7 +447,7 @@ var Circles = /*#__PURE__*/function (_Component) {
418
447
 
419
448
  case 3:
420
449
  res = _context.sent;
421
- console.log('getData', res.data);
450
+ console.log("getData", res.data);
422
451
 
423
452
  _this.props.circlesLoaded(res.data);
424
453
 
@@ -432,7 +461,7 @@ var Circles = /*#__PURE__*/function (_Component) {
432
461
  case 9:
433
462
  _context.prev = 9;
434
463
  _context.t0 = _context["catch"](0);
435
- console.error('getData', _context.t0);
464
+ console.error("getData", _context.t0);
436
465
 
437
466
  _this.setState({
438
467
  loadingAll: false
@@ -447,6 +476,12 @@ var Circles = /*#__PURE__*/function (_Component) {
447
476
  })));
448
477
  });
449
478
 
479
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "selectUnreadFilter", function (showUnreadOnly) {
480
+ _this.setState({
481
+ showUnreadOnly: showUnreadOnly
482
+ });
483
+ });
484
+
450
485
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "canAddNew", function () {
451
486
  var auth = _this.props.auth;
452
487
  return Session$3.validateAccess(auth.site, values.permission, auth);
@@ -514,9 +549,15 @@ var Circles = /*#__PURE__*/function (_Component) {
514
549
  });
515
550
  });
516
551
 
552
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "selectSort", function (sortType) {
553
+ _this.setState({
554
+ sortBy: sortType
555
+ });
556
+ });
557
+
517
558
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onHandleChange", function (event) {
518
559
  var stateChange = {};
519
- stateChange[event.target.getAttribute('id')] = event.target.value;
560
+ stateChange[event.target.getAttribute("id")] = event.target.value;
520
561
 
521
562
  _this.setState(stateChange);
522
563
  });
@@ -528,14 +569,14 @@ var Circles = /*#__PURE__*/function (_Component) {
528
569
  circleActions.delete(circle.Id).then(function (res) {
529
570
  _this.getData();
530
571
  }).catch(function (res) {
531
- alert('Something went wrong with the request. Please try again.');
572
+ alert("Something went wrong with the request. Please try again.");
532
573
  });
533
574
  }
534
575
  });
535
576
 
536
577
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "getTypeFilterText", function (type) {
537
- if (type === 'private') {
538
- return 'Private Message';
578
+ if (type === "private") {
579
+ return "Private Message";
539
580
  }
540
581
 
541
582
  return ___default['default'].capitalize(values.entityName);
@@ -545,14 +586,17 @@ var Circles = /*#__PURE__*/function (_Component) {
545
586
  if (circle.IsPrivate) {
546
587
  return "PM: ".concat(circle.Audience.map(function (user) {
547
588
  return user.displayName;
548
- }).join(', '));
589
+ }).join(", "));
549
590
  }
550
591
 
551
592
  return circle.Title;
552
593
  });
553
594
 
554
595
  _this.state = {
555
- userSearch: ''
596
+ userSearch: "",
597
+ sortBy: "newest",
598
+ showUnreadOnly: false,
599
+ pollingInterval: null
556
600
  };
557
601
  return _this;
558
602
  }
@@ -560,27 +604,77 @@ var Circles = /*#__PURE__*/function (_Component) {
560
604
  _createClass__default['default'](Circles, [{
561
605
  key: "componentDidMount",
562
606
  value: function componentDidMount() {
563
- this.getData();
607
+ var _this2 = this;
608
+
609
+ this.getData(); // Poll for updates every 10 seconds
610
+
611
+ this.pollingInterval = setInterval(function () {
612
+ _this2.getData();
613
+ }, 10000);
614
+ }
615
+ }, {
616
+ key: "componentWillUnmount",
617
+ value: function componentWillUnmount() {
618
+ if (this.pollingInterval) {
619
+ clearInterval(this.pollingInterval);
620
+ }
621
+ }
622
+ }, {
623
+ key: "isCircleUnread",
624
+ value: function isCircleUnread(circle) {
625
+ var userId = this.props.user.Id;
626
+
627
+ if (!circle.Unread || !circle.Unread[userId]) {
628
+ return false;
629
+ }
630
+
631
+ return circle.Unread[userId] > 0;
632
+ }
633
+ }, {
634
+ key: "getUnreadCount",
635
+ value: function getUnreadCount(circle) {
636
+ var userId = this.props.user.Id;
637
+
638
+ if (!circle.Unread || !circle.Unread[userId]) {
639
+ return 0;
640
+ }
641
+
642
+ return circle.Unread[userId];
564
643
  }
565
644
  }, {
566
645
  key: "getCircles",
567
646
  value: function getCircles() {
568
- var _this2 = this;
647
+ var _this3 = this;
569
648
 
570
649
  var result = this.props.circles;
571
650
 
572
651
  if (this.state.selectedTypeFilter) {
573
652
  result = ___default['default'].filter(result, function (circle) {
574
- return _this2.state.selectedTypeFilter === 'circle' ? !circle.IsPrivate : circle.IsPrivate;
653
+ return _this3.state.selectedTypeFilter === "circle" ? !circle.IsPrivate : circle.IsPrivate;
575
654
  });
576
655
  }
577
656
 
578
657
  if (this.state.selectedUserFilter) {
579
658
  result = ___default['default'].filter(result, function (circle) {
580
659
  return ___default['default'].some(circle.Audience, function (user) {
581
- return user.userId === _this2.state.selectedUserFilter.userId;
660
+ return user.userId === _this3.state.selectedUserFilter.userId;
582
661
  });
583
662
  });
663
+ } // Apply sorting
664
+
665
+
666
+ result = ___default['default'].sortBy(result, function (circle) {
667
+ return moment__default['default'](circle.Changed).valueOf();
668
+ });
669
+
670
+ if (this.state.sortBy === "newest") {
671
+ result.reverse();
672
+
673
+ if (this.state.showUnreadOnly) {
674
+ result = ___default['default'].filter(result, function (circle) {
675
+ return _this3.isCircleUnread(circle);
676
+ });
677
+ }
584
678
  }
585
679
 
586
680
  return result;
@@ -588,7 +682,7 @@ var Circles = /*#__PURE__*/function (_Component) {
588
682
  }, {
589
683
  key: "getUsers",
590
684
  value: function getUsers() {
591
- var _this3 = this;
685
+ var _this4 = this;
592
686
 
593
687
  var users = [];
594
688
  this.props.circles.forEach(function (circle) {
@@ -598,10 +692,10 @@ var Circles = /*#__PURE__*/function (_Component) {
598
692
  });
599
693
  users = ___default['default'].sortBy(___default['default'].uniqBy(users, function (user) {
600
694
  return user.userId;
601
- }), 'displayName');
695
+ }), "displayName");
602
696
  return ___default['default'].filter(users, function (u) {
603
- if (!___default['default'].isEmpty(_this3.state.userSearch)) {
604
- return (u.displayName || '').toLowerCase().indexOf(_this3.state.userSearch.toLowerCase()) > -1;
697
+ if (!___default['default'].isEmpty(_this4.state.userSearch)) {
698
+ return (u.displayName || "").toLowerCase().indexOf(_this4.state.userSearch.toLowerCase()) > -1;
605
699
  }
606
700
 
607
701
  return true;
@@ -610,7 +704,7 @@ var Circles = /*#__PURE__*/function (_Component) {
610
704
  }, {
611
705
  key: "validateCircleAdmin",
612
706
  value: function validateCircleAdmin(circle, onlyCreator) {
613
- var _this4 = this;
707
+ var _this5 = this;
614
708
 
615
709
  if (Session$3.validateAccess(this.props.auth.site, values.permission, this.props.auth)) {
616
710
  return true;
@@ -621,13 +715,13 @@ var Circles = /*#__PURE__*/function (_Component) {
621
715
  }
622
716
 
623
717
  return ___default['default'].some(circle.Audience, function (user) {
624
- return user.userId === _this4.props.user.Id && user.isAdmin;
718
+ return user.userId === _this5.props.user.Id && user.isAdmin;
625
719
  });
626
720
  }
627
721
  }, {
628
722
  key: "renderRow",
629
723
  value: function renderRow(circle) {
630
- var _this5 = this;
724
+ var _this6 = this;
631
725
 
632
726
  return /*#__PURE__*/React__default['default'].createElement("tr", {
633
727
  key: circle.Id
@@ -635,7 +729,7 @@ var Circles = /*#__PURE__*/function (_Component) {
635
729
  className: "table-TitleColumn"
636
730
  }, /*#__PURE__*/React__default['default'].createElement(reactRouterDom.Link, {
637
731
  to: "/".concat(values.featureKey, "/").concat(values.entityKey, "/").concat(circle.Id)
638
- }, this.getTitle(circle))), /*#__PURE__*/React__default['default'].createElement("td", null, moment__default['default'](circle.Changed).local().format('D MMM YYYY')), /*#__PURE__*/React__default['default'].createElement("td", null, circle.Audience.map(function (user) {
732
+ }, this.getTitle(circle))), /*#__PURE__*/React__default['default'].createElement("td", null, moment__default['default'](circle.Changed).local().format("D MMM YYYY")), /*#__PURE__*/React__default['default'].createElement("td", null, circle.Audience.map(function (user) {
639
733
  return /*#__PURE__*/React__default['default'].createElement(Components$4.ProfilePic, {
640
734
  size: 30,
641
735
  image: user.profilePic,
@@ -646,8 +740,8 @@ var Circles = /*#__PURE__*/function (_Component) {
646
740
  className: "table-options"
647
741
  }, /*#__PURE__*/React__default['default'].createElement("div", {
648
742
  style: {
649
- display: 'flex',
650
- alignItems: 'center'
743
+ display: "flex",
744
+ alignItems: "center"
651
745
  }
652
746
  }, this.validateCircleAdmin(circle) && !circle.IsPrivate && /*#__PURE__*/React__default['default'].createElement(reactRouterDom.Link, {
653
747
  to: "/".concat(values.featureKey, "/edit/").concat(circle.Id)
@@ -656,19 +750,19 @@ var Circles = /*#__PURE__*/function (_Component) {
656
750
  fontSize: 20,
657
751
  padding: 5,
658
752
  marginLeft: 12,
659
- cursor: 'pointer'
753
+ cursor: "pointer"
660
754
  },
661
755
  name: "pencil"
662
756
  })), this.validateCircleAdmin(circle, true) && !circle.IsPrivate && /*#__PURE__*/React__default['default'].createElement("a", {
663
757
  onClick: function onClick() {
664
- _this5.removeCircle(circle);
758
+ _this6.removeCircle(circle);
665
759
  }
666
760
  }, /*#__PURE__*/React__default['default'].createElement(FontAwesome__default['default'], {
667
761
  style: {
668
762
  fontSize: 20,
669
763
  padding: 5,
670
764
  marginLeft: 12,
671
- cursor: 'pointer'
765
+ cursor: "pointer"
672
766
  },
673
767
  name: "minus-circle"
674
768
  })))));
@@ -676,11 +770,21 @@ var Circles = /*#__PURE__*/function (_Component) {
676
770
  }, {
677
771
  key: "renderFilters",
678
772
  value: function renderFilters() {
773
+ var _this7 = this;
774
+
679
775
  var userFilter = /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
680
776
  className: "marginRight-10",
681
777
  onClick: this.openUserFilter,
682
778
  text: "User"
683
779
  });
780
+ var unreadFilter = /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
781
+ className: "marginRight-10",
782
+ onClick: function onClick() {
783
+ return _this7.selectUnreadFilter(!_this7.state.showUnreadOnly);
784
+ },
785
+ leftIcon: this.state.showUnreadOnly ? "check" : null,
786
+ text: "Unread Only"
787
+ });
684
788
  var typeFilter = /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
685
789
  className: "marginRight-10",
686
790
  onClick: this.openTypeFilter,
@@ -715,12 +819,28 @@ var Circles = /*#__PURE__*/function (_Component) {
715
819
  }, /*#__PURE__*/React__default['default'].createElement(Components$4.Text, {
716
820
  type: "h5",
717
821
  className: "marginRight-20"
718
- }, "Filter by"), userFilter, typeFilter);
822
+ }, "Filter by"), userFilter, unreadFilter, typeFilter, /*#__PURE__*/React__default['default'].createElement(Components$4.Text, {
823
+ type: "h5",
824
+ className: "marginRight-20 marginLeft-20"
825
+ }, "Sort by:"), /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
826
+ className: "marginRight-10",
827
+ onClick: function onClick() {
828
+ return _this7.selectSort("newest");
829
+ },
830
+ leftIcon: this.state.sortBy === "newest" ? "check" : null,
831
+ text: "Newest first"
832
+ }), /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
833
+ onClick: function onClick() {
834
+ return _this7.selectSort("oldest");
835
+ },
836
+ leftIcon: this.state.sortBy === "oldest" ? "check" : null,
837
+ text: "Oldest first"
838
+ }));
719
839
  }
720
840
  }, {
721
841
  key: "renderUserFilterPopup",
722
842
  value: function renderUserFilterPopup() {
723
- var _this6 = this;
843
+ var _this8 = this;
724
844
 
725
845
  if (!this.state.userFilterOpen) {
726
846
  return null;
@@ -740,7 +860,7 @@ var Circles = /*#__PURE__*/function (_Component) {
740
860
  placeholder: "Enter name",
741
861
  value: this.state.userSearch,
742
862
  onChange: function onChange(e) {
743
- return _this6.onHandleChange(e);
863
+ return _this8.onHandleChange(e);
744
864
  },
745
865
  alwaysShowLabel: true
746
866
  }), this.getUsers().map(function (user) {
@@ -748,7 +868,7 @@ var Circles = /*#__PURE__*/function (_Component) {
748
868
  key: user.userId,
749
869
  user: user,
750
870
  onClick: function onClick() {
751
- _this6.selectUserFilter(user);
871
+ _this8.selectUserFilter(user);
752
872
  }
753
873
  });
754
874
  }));
@@ -756,7 +876,7 @@ var Circles = /*#__PURE__*/function (_Component) {
756
876
  }, {
757
877
  key: "renderTypeFilterPopup",
758
878
  value: function renderTypeFilterPopup() {
759
- var _this7 = this;
879
+ var _this9 = this;
760
880
 
761
881
  if (!this.state.typeFilterOpen) {
762
882
  return null;
@@ -770,13 +890,13 @@ var Circles = /*#__PURE__*/function (_Component) {
770
890
  onClose: this.closeTypeFilter
771
891
  }, /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
772
892
  onClick: function onClick() {
773
- _this7.selectTypeFilter('circle');
893
+ _this9.selectTypeFilter("circle");
774
894
  },
775
895
  text: ___default['default'].capitalize(values.entityName),
776
896
  className: "marginRight-10"
777
897
  }), /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
778
898
  onClick: function onClick() {
779
- _this7.selectTypeFilter('private');
899
+ _this9.selectTypeFilter("private");
780
900
  },
781
901
  text: "Private Message"
782
902
  }));
@@ -784,7 +904,7 @@ var Circles = /*#__PURE__*/function (_Component) {
784
904
  }, {
785
905
  key: "render",
786
906
  value: function render() {
787
- var _this8 = this;
907
+ var _this10 = this;
788
908
 
789
909
  return /*#__PURE__*/React__default['default'].createElement("div", null, this.renderTypeFilterPopup(), this.renderUserFilterPopup(), /*#__PURE__*/React__default['default'].createElement(Components$4.Header, null, this.canAddNew() && /*#__PURE__*/React__default['default'].createElement(Components$4.AddButton, {
790
910
  onClick: this.onAddNew,
@@ -801,14 +921,14 @@ var Circles = /*#__PURE__*/function (_Component) {
801
921
  condensed: true,
802
922
  hover: true,
803
923
  style: {
804
- minWidth: '100%'
924
+ minWidth: "100%"
805
925
  }
806
926
  }, /*#__PURE__*/React__default['default'].createElement("thead", null, /*#__PURE__*/React__default['default'].createElement("tr", null, /*#__PURE__*/React__default['default'].createElement("th", null, "Title"), /*#__PURE__*/React__default['default'].createElement("th", null, "Last updated"), /*#__PURE__*/React__default['default'].createElement("th", null, "Members"), /*#__PURE__*/React__default['default'].createElement("th", {
807
927
  style: {
808
928
  width: 50
809
929
  }
810
930
  }))), /*#__PURE__*/React__default['default'].createElement("tbody", null, this.getCircles().map(function (circle) {
811
- return _this8.renderRow(circle);
931
+ return _this10.renderRow(circle);
812
932
  })))));
813
933
  }
814
934
  }]);
@@ -1772,6 +1892,32 @@ var Circle = /*#__PURE__*/function (_Component) {
1772
1892
  });
1773
1893
  });
1774
1894
 
1895
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "markCircleAsRead", /*#__PURE__*/_asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee5() {
1896
+ return _regeneratorRuntime__default['default'].wrap(function _callee5$(_context5) {
1897
+ while (1) {
1898
+ switch (_context5.prev = _context5.next) {
1899
+ case 0:
1900
+ _context5.prev = 0;
1901
+ _context5.next = 3;
1902
+ return circleActions.markAsRead(_this.state.circleId, _this.props.user.Id);
1903
+
1904
+ case 3:
1905
+ _context5.next = 8;
1906
+ break;
1907
+
1908
+ case 5:
1909
+ _context5.prev = 5;
1910
+ _context5.t0 = _context5["catch"](0);
1911
+ console.error("Failed to mark circle as read:", _context5.t0);
1912
+
1913
+ case 8:
1914
+ case "end":
1915
+ return _context5.stop();
1916
+ }
1917
+ }
1918
+ }, _callee5, null, [[0, 5]]);
1919
+ })));
1920
+
1775
1921
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "sendMessage", function () {
1776
1922
  var message = {
1777
1923
  _id: Helper.randomString(),
@@ -1856,6 +2002,7 @@ var Circle = /*#__PURE__*/function (_Component) {
1856
2002
  _createClass__default['default'](Circle, [{
1857
2003
  key: "componentDidMount",
1858
2004
  value: function componentDidMount() {
2005
+ this.markCircleAsRead();
1859
2006
  this.checkGetData();
1860
2007
  this.connect();
1861
2008
  this.props.setNavData({
@@ -1992,8 +2139,8 @@ var Circle = /*#__PURE__*/function (_Component) {
1992
2139
  display: this.state.imageInputShowing ? "block" : "none"
1993
2140
  }
1994
2141
  }, /*#__PURE__*/React__default['default'].createElement(Components$2.ImageInput, {
1995
- ref: function ref(_ref5) {
1996
- _this5.imageInput = _ref5;
2142
+ ref: function ref(_ref6) {
2143
+ _this5.imageInput = _ref6;
1997
2144
  },
1998
2145
  multiple: true,
1999
2146
  limit: 10,
@@ -2007,8 +2154,8 @@ var Circle = /*#__PURE__*/function (_Component) {
2007
2154
  display: this.state.fileInputShowing ? "block" : "none"
2008
2155
  }
2009
2156
  }, /*#__PURE__*/React__default['default'].createElement(Components$2.FileInput, {
2010
- ref: function ref(_ref6) {
2011
- _this5.fileInput = _ref6;
2157
+ ref: function ref(_ref7) {
2158
+ _this5.fileInput = _ref7;
2012
2159
  },
2013
2160
  multiple: true,
2014
2161
  limit: 10,
@@ -2302,8 +2449,8 @@ var Circle = /*#__PURE__*/function (_Component) {
2302
2449
  }, /*#__PURE__*/React__default['default'].createElement("div", {
2303
2450
  className: "chat_newMessage"
2304
2451
  }, this.renderChatInput()), this.renderReplyTo(), /*#__PURE__*/React__default['default'].createElement("div", {
2305
- ref: function ref(_ref7) {
2306
- return _this8.chat = _ref7;
2452
+ ref: function ref(_ref8) {
2453
+ return _this8.chat = _ref8;
2307
2454
  },
2308
2455
  className: "chat_messages"
2309
2456
  }, ___default['default'].isEmpty(this.state.messages) && !___default['default'].isEmpty(this.state.messageDate) && this.renderEmptyDate(), this.state.messages.map(function (m) {