@plusscommunities/pluss-circles-web-groups 1.5.7-beta.0 → 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
@@ -64,30 +64,30 @@ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumab
64
64
  var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
65
65
 
66
66
  var values = {
67
- featureKey: 'circles',
68
- entityKey: 'circle',
69
- entityName: 'circle',
70
- serviceKey: 'circles',
71
- permission: 'circles',
72
- menuIcon: 'circle-o',
67
+ featureKey: 'groups',
68
+ entityKey: 'group',
69
+ entityName: 'group',
70
+ serviceKey: 'groups',
71
+ permission: 'groups',
72
+ menuIcon: 'comments',
73
73
  isFontAwesome: true,
74
- reducerKey: 'circles',
75
- actionCircleKey: 'CIRCLE',
76
- textFeatureTitle: 'Circles',
77
- textAddMenuTitle: 'Circle',
78
- textEmptyGroups: "You aren't in any Circles",
74
+ reducerKey: 'groups',
75
+ actionCircleKey: 'GROUP',
76
+ textFeatureTitle: 'Groups',
77
+ textAddMenuTitle: 'Group',
78
+ textEmptyGroups: "You aren't in any Groups",
79
79
  textEmptyPeople: 'Contacts will show here',
80
- componentCircles: 'Circles',
81
- componentAddCircle: 'AddCircle',
82
- componentCircle: 'Circle',
83
- inviteKey: 'circleInvite',
84
- messageKey: 'circleMessage',
85
- chatRoute: 'circleChat',
86
- updateKeyUserCircles: 'userCircles',
87
- allowPublicKey: 'circleAllowPublicCircles',
88
- allowPublicKeyDefault: false,
80
+ componentCircles: 'Groups',
81
+ componentAddCircle: 'AddGroup',
82
+ componentCircle: 'Group',
83
+ inviteKey: 'groupInvite',
84
+ messageKey: 'groupMessage',
85
+ chatRoute: 'groupChat',
86
+ updateKeyUserCircles: 'userGroups',
87
+ allowPublicKey: 'groupAllowPublicGroups',
88
+ allowPublicKeyDefault: true,
89
89
  settings: {
90
- allowAnyCreate: false
90
+ allowAnyCreate: true
91
91
  }
92
92
  };
93
93
 
@@ -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
 
@@ -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);
@@ -559,7 +594,9 @@ var Circles = /*#__PURE__*/function (_Component) {
559
594
 
560
595
  _this.state = {
561
596
  userSearch: "",
562
- sortBy: "newest"
597
+ sortBy: "newest",
598
+ showUnreadOnly: false,
599
+ pollingInterval: null
563
600
  };
564
601
  return _this;
565
602
  }
@@ -567,25 +604,60 @@ var Circles = /*#__PURE__*/function (_Component) {
567
604
  _createClass__default['default'](Circles, [{
568
605
  key: "componentDidMount",
569
606
  value: function componentDidMount() {
570
- 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];
571
643
  }
572
644
  }, {
573
645
  key: "getCircles",
574
646
  value: function getCircles() {
575
- var _this2 = this;
647
+ var _this3 = this;
576
648
 
577
649
  var result = this.props.circles;
578
650
 
579
651
  if (this.state.selectedTypeFilter) {
580
652
  result = ___default['default'].filter(result, function (circle) {
581
- return _this2.state.selectedTypeFilter === "circle" ? !circle.IsPrivate : circle.IsPrivate;
653
+ return _this3.state.selectedTypeFilter === "circle" ? !circle.IsPrivate : circle.IsPrivate;
582
654
  });
583
655
  }
584
656
 
585
657
  if (this.state.selectedUserFilter) {
586
658
  result = ___default['default'].filter(result, function (circle) {
587
659
  return ___default['default'].some(circle.Audience, function (user) {
588
- return user.userId === _this2.state.selectedUserFilter.userId;
660
+ return user.userId === _this3.state.selectedUserFilter.userId;
589
661
  });
590
662
  });
591
663
  } // Apply sorting
@@ -597,6 +669,12 @@ var Circles = /*#__PURE__*/function (_Component) {
597
669
 
598
670
  if (this.state.sortBy === "newest") {
599
671
  result.reverse();
672
+
673
+ if (this.state.showUnreadOnly) {
674
+ result = ___default['default'].filter(result, function (circle) {
675
+ return _this3.isCircleUnread(circle);
676
+ });
677
+ }
600
678
  }
601
679
 
602
680
  return result;
@@ -604,7 +682,7 @@ var Circles = /*#__PURE__*/function (_Component) {
604
682
  }, {
605
683
  key: "getUsers",
606
684
  value: function getUsers() {
607
- var _this3 = this;
685
+ var _this4 = this;
608
686
 
609
687
  var users = [];
610
688
  this.props.circles.forEach(function (circle) {
@@ -616,8 +694,8 @@ var Circles = /*#__PURE__*/function (_Component) {
616
694
  return user.userId;
617
695
  }), "displayName");
618
696
  return ___default['default'].filter(users, function (u) {
619
- if (!___default['default'].isEmpty(_this3.state.userSearch)) {
620
- 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;
621
699
  }
622
700
 
623
701
  return true;
@@ -626,7 +704,7 @@ var Circles = /*#__PURE__*/function (_Component) {
626
704
  }, {
627
705
  key: "validateCircleAdmin",
628
706
  value: function validateCircleAdmin(circle, onlyCreator) {
629
- var _this4 = this;
707
+ var _this5 = this;
630
708
 
631
709
  if (Session$3.validateAccess(this.props.auth.site, values.permission, this.props.auth)) {
632
710
  return true;
@@ -637,13 +715,13 @@ var Circles = /*#__PURE__*/function (_Component) {
637
715
  }
638
716
 
639
717
  return ___default['default'].some(circle.Audience, function (user) {
640
- return user.userId === _this4.props.user.Id && user.isAdmin;
718
+ return user.userId === _this5.props.user.Id && user.isAdmin;
641
719
  });
642
720
  }
643
721
  }, {
644
722
  key: "renderRow",
645
723
  value: function renderRow(circle) {
646
- var _this5 = this;
724
+ var _this6 = this;
647
725
 
648
726
  return /*#__PURE__*/React__default['default'].createElement("tr", {
649
727
  key: circle.Id
@@ -677,7 +755,7 @@ var Circles = /*#__PURE__*/function (_Component) {
677
755
  name: "pencil"
678
756
  })), this.validateCircleAdmin(circle, true) && !circle.IsPrivate && /*#__PURE__*/React__default['default'].createElement("a", {
679
757
  onClick: function onClick() {
680
- _this5.removeCircle(circle);
758
+ _this6.removeCircle(circle);
681
759
  }
682
760
  }, /*#__PURE__*/React__default['default'].createElement(FontAwesome__default['default'], {
683
761
  style: {
@@ -692,13 +770,21 @@ var Circles = /*#__PURE__*/function (_Component) {
692
770
  }, {
693
771
  key: "renderFilters",
694
772
  value: function renderFilters() {
695
- var _this6 = this;
773
+ var _this7 = this;
696
774
 
697
775
  var userFilter = /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
698
776
  className: "marginRight-10",
699
777
  onClick: this.openUserFilter,
700
778
  text: "User"
701
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
+ });
702
788
  var typeFilter = /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
703
789
  className: "marginRight-10",
704
790
  onClick: this.openTypeFilter,
@@ -733,19 +819,19 @@ var Circles = /*#__PURE__*/function (_Component) {
733
819
  }, /*#__PURE__*/React__default['default'].createElement(Components$4.Text, {
734
820
  type: "h5",
735
821
  className: "marginRight-20"
736
- }, "Filter by"), userFilter, typeFilter, /*#__PURE__*/React__default['default'].createElement(Components$4.Text, {
822
+ }, "Filter by"), userFilter, unreadFilter, typeFilter, /*#__PURE__*/React__default['default'].createElement(Components$4.Text, {
737
823
  type: "h5",
738
824
  className: "marginRight-20 marginLeft-20"
739
825
  }, "Sort by:"), /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
740
826
  className: "marginRight-10",
741
827
  onClick: function onClick() {
742
- return _this6.selectSort("newest");
828
+ return _this7.selectSort("newest");
743
829
  },
744
830
  leftIcon: this.state.sortBy === "newest" ? "check" : null,
745
831
  text: "Newest first"
746
832
  }), /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
747
833
  onClick: function onClick() {
748
- return _this6.selectSort("oldest");
834
+ return _this7.selectSort("oldest");
749
835
  },
750
836
  leftIcon: this.state.sortBy === "oldest" ? "check" : null,
751
837
  text: "Oldest first"
@@ -754,7 +840,7 @@ var Circles = /*#__PURE__*/function (_Component) {
754
840
  }, {
755
841
  key: "renderUserFilterPopup",
756
842
  value: function renderUserFilterPopup() {
757
- var _this7 = this;
843
+ var _this8 = this;
758
844
 
759
845
  if (!this.state.userFilterOpen) {
760
846
  return null;
@@ -774,7 +860,7 @@ var Circles = /*#__PURE__*/function (_Component) {
774
860
  placeholder: "Enter name",
775
861
  value: this.state.userSearch,
776
862
  onChange: function onChange(e) {
777
- return _this7.onHandleChange(e);
863
+ return _this8.onHandleChange(e);
778
864
  },
779
865
  alwaysShowLabel: true
780
866
  }), this.getUsers().map(function (user) {
@@ -782,7 +868,7 @@ var Circles = /*#__PURE__*/function (_Component) {
782
868
  key: user.userId,
783
869
  user: user,
784
870
  onClick: function onClick() {
785
- _this7.selectUserFilter(user);
871
+ _this8.selectUserFilter(user);
786
872
  }
787
873
  });
788
874
  }));
@@ -790,7 +876,7 @@ var Circles = /*#__PURE__*/function (_Component) {
790
876
  }, {
791
877
  key: "renderTypeFilterPopup",
792
878
  value: function renderTypeFilterPopup() {
793
- var _this8 = this;
879
+ var _this9 = this;
794
880
 
795
881
  if (!this.state.typeFilterOpen) {
796
882
  return null;
@@ -804,13 +890,13 @@ var Circles = /*#__PURE__*/function (_Component) {
804
890
  onClose: this.closeTypeFilter
805
891
  }, /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
806
892
  onClick: function onClick() {
807
- _this8.selectTypeFilter("circle");
893
+ _this9.selectTypeFilter("circle");
808
894
  },
809
895
  text: ___default['default'].capitalize(values.entityName),
810
896
  className: "marginRight-10"
811
897
  }), /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
812
898
  onClick: function onClick() {
813
- _this8.selectTypeFilter("private");
899
+ _this9.selectTypeFilter("private");
814
900
  },
815
901
  text: "Private Message"
816
902
  }));
@@ -818,7 +904,7 @@ var Circles = /*#__PURE__*/function (_Component) {
818
904
  }, {
819
905
  key: "render",
820
906
  value: function render() {
821
- var _this9 = this;
907
+ var _this10 = this;
822
908
 
823
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, {
824
910
  onClick: this.onAddNew,
@@ -842,7 +928,7 @@ var Circles = /*#__PURE__*/function (_Component) {
842
928
  width: 50
843
929
  }
844
930
  }))), /*#__PURE__*/React__default['default'].createElement("tbody", null, this.getCircles().map(function (circle) {
845
- return _this9.renderRow(circle);
931
+ return _this10.renderRow(circle);
846
932
  })))));
847
933
  }
848
934
  }]);
@@ -1806,6 +1892,32 @@ var Circle = /*#__PURE__*/function (_Component) {
1806
1892
  });
1807
1893
  });
1808
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
+
1809
1921
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "sendMessage", function () {
1810
1922
  var message = {
1811
1923
  _id: Helper.randomString(),
@@ -1890,6 +2002,7 @@ var Circle = /*#__PURE__*/function (_Component) {
1890
2002
  _createClass__default['default'](Circle, [{
1891
2003
  key: "componentDidMount",
1892
2004
  value: function componentDidMount() {
2005
+ this.markCircleAsRead();
1893
2006
  this.checkGetData();
1894
2007
  this.connect();
1895
2008
  this.props.setNavData({
@@ -2026,8 +2139,8 @@ var Circle = /*#__PURE__*/function (_Component) {
2026
2139
  display: this.state.imageInputShowing ? "block" : "none"
2027
2140
  }
2028
2141
  }, /*#__PURE__*/React__default['default'].createElement(Components$2.ImageInput, {
2029
- ref: function ref(_ref5) {
2030
- _this5.imageInput = _ref5;
2142
+ ref: function ref(_ref6) {
2143
+ _this5.imageInput = _ref6;
2031
2144
  },
2032
2145
  multiple: true,
2033
2146
  limit: 10,
@@ -2041,8 +2154,8 @@ var Circle = /*#__PURE__*/function (_Component) {
2041
2154
  display: this.state.fileInputShowing ? "block" : "none"
2042
2155
  }
2043
2156
  }, /*#__PURE__*/React__default['default'].createElement(Components$2.FileInput, {
2044
- ref: function ref(_ref6) {
2045
- _this5.fileInput = _ref6;
2157
+ ref: function ref(_ref7) {
2158
+ _this5.fileInput = _ref7;
2046
2159
  },
2047
2160
  multiple: true,
2048
2161
  limit: 10,
@@ -2336,8 +2449,8 @@ var Circle = /*#__PURE__*/function (_Component) {
2336
2449
  }, /*#__PURE__*/React__default['default'].createElement("div", {
2337
2450
  className: "chat_newMessage"
2338
2451
  }, this.renderChatInput()), this.renderReplyTo(), /*#__PURE__*/React__default['default'].createElement("div", {
2339
- ref: function ref(_ref7) {
2340
- return _this8.chat = _ref7;
2452
+ ref: function ref(_ref8) {
2453
+ return _this8.chat = _ref8;
2341
2454
  },
2342
2455
  className: "chat_messages"
2343
2456
  }, ___default['default'].isEmpty(this.state.messages) && !___default['default'].isEmpty(this.state.messageDate) && this.renderEmptyDate(), this.state.messages.map(function (m) {