@plusscommunities/pluss-circles-web 1.0.17-beta.0 → 1.0.18

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.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@babel/runtime/helpers/defineProperty'), require('@babel/runtime/helpers/asyncToGenerator'), require('@babel/runtime/helpers/classCallCheck'), require('@babel/runtime/helpers/createClass'), require('@babel/runtime/helpers/assertThisInitialized'), require('@babel/runtime/helpers/inherits'), require('@babel/runtime/helpers/possibleConstructorReturn'), require('@babel/runtime/helpers/getPrototypeOf'), require('@babel/runtime/regenerator'), require('react'), require('react-redux'), require('lodash'), require('moment'), require('react-router-dom'), require('@plusscommunities/pluss-core-web'), require('react-bootstrap'), require('react-fontawesome'), require('@babel/runtime/helpers/toConsumableArray'), require('react-router')) :
3
- typeof define === 'function' && define.amd ? define(['exports', '@babel/runtime/helpers/defineProperty', '@babel/runtime/helpers/asyncToGenerator', '@babel/runtime/helpers/classCallCheck', '@babel/runtime/helpers/createClass', '@babel/runtime/helpers/assertThisInitialized', '@babel/runtime/helpers/inherits', '@babel/runtime/helpers/possibleConstructorReturn', '@babel/runtime/helpers/getPrototypeOf', '@babel/runtime/regenerator', 'react', 'react-redux', 'lodash', 'moment', 'react-router-dom', '@plusscommunities/pluss-core-web', 'react-bootstrap', 'react-fontawesome', '@babel/runtime/helpers/toConsumableArray', 'react-router'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['@plusscommunities/pluss-circles-web'] = {}, global._defineProperty, global._asyncToGenerator, global._classCallCheck, global._createClass, global._assertThisInitialized, global._inherits, global._possibleConstructorReturn, global._getPrototypeOf, global._regeneratorRuntime, global.React, global.reactRedux, global._, global.moment, global.reactRouterDom, global.PlussCore, global.reactBootstrap, global.FontAwesome, global._toConsumableArray, global.reactRouter));
5
- }(this, (function (exports, _defineProperty, _asyncToGenerator, _classCallCheck, _createClass, _assertThisInitialized, _inherits, _possibleConstructorReturn, _getPrototypeOf, _regeneratorRuntime, React, reactRedux, _, moment, reactRouterDom, PlussCore, reactBootstrap, FontAwesome, _toConsumableArray, reactRouter) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@babel/runtime/helpers/defineProperty'), require('@babel/runtime/helpers/asyncToGenerator'), require('@babel/runtime/helpers/classCallCheck'), require('@babel/runtime/helpers/createClass'), require('@babel/runtime/helpers/assertThisInitialized'), require('@babel/runtime/helpers/inherits'), require('@babel/runtime/helpers/possibleConstructorReturn'), require('@babel/runtime/helpers/getPrototypeOf'), require('@babel/runtime/regenerator'), require('react'), require('react-redux'), require('lodash'), require('moment'), require('react-router-dom'), require('@plusscommunities/pluss-core-web'), require('react-bootstrap'), require('react-fontawesome'), require('@babel/runtime/helpers/toConsumableArray'), require('react-router'), require('@babel/runtime/helpers/slicedToArray'), require('@fortawesome/free-solid-svg-icons')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@babel/runtime/helpers/defineProperty', '@babel/runtime/helpers/asyncToGenerator', '@babel/runtime/helpers/classCallCheck', '@babel/runtime/helpers/createClass', '@babel/runtime/helpers/assertThisInitialized', '@babel/runtime/helpers/inherits', '@babel/runtime/helpers/possibleConstructorReturn', '@babel/runtime/helpers/getPrototypeOf', '@babel/runtime/regenerator', 'react', 'react-redux', 'lodash', 'moment', 'react-router-dom', '@plusscommunities/pluss-core-web', 'react-bootstrap', 'react-fontawesome', '@babel/runtime/helpers/toConsumableArray', 'react-router', '@babel/runtime/helpers/slicedToArray', '@fortawesome/free-solid-svg-icons'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['@plusscommunities/pluss-circles-web'] = {}, global._defineProperty, global._asyncToGenerator, global._classCallCheck, global._createClass, global._assertThisInitialized, global._inherits, global._possibleConstructorReturn, global._getPrototypeOf, global._regeneratorRuntime, global.React, global.reactRedux, global._, global.moment, global.reactRouterDom, global.PlussCore, global.reactBootstrap, global.FontAwesome, global._toConsumableArray, global.reactRouter, global._slicedToArray, global.freeSolidSvgIcons));
5
+ }(this, (function (exports, _defineProperty, _asyncToGenerator, _classCallCheck, _createClass, _assertThisInitialized, _inherits, _possibleConstructorReturn, _getPrototypeOf, _regeneratorRuntime, React, reactRedux, _, moment, reactRouterDom, PlussCore, reactBootstrap, FontAwesome, _toConsumableArray, reactRouter, _slicedToArray, freeSolidSvgIcons) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -41,6 +41,7 @@
41
41
  var PlussCore__namespace = /*#__PURE__*/_interopNamespace(PlussCore);
42
42
  var FontAwesome__default = /*#__PURE__*/_interopDefaultLegacy(FontAwesome);
43
43
  var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
44
+ var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
44
45
 
45
46
  var values = {
46
47
  featureKey: 'circles',
@@ -175,10 +176,10 @@
175
176
  };
176
177
 
177
178
  var Helper$3 = PlussCore__namespace.Helper,
178
- Session$3 = PlussCore__namespace.Session;
179
+ Session$4 = PlussCore__namespace.Session;
179
180
  var circleActions = {
180
181
  getAll: function getAll(site) {
181
- return Session$3.authedFunction({
182
+ return Session$4.authedFunction({
182
183
  method: 'GET',
183
184
  url: Helper$3.getUrl(values.serviceKey, 'get/all', {
184
185
  site: site
@@ -186,7 +187,7 @@
186
187
  });
187
188
  },
188
189
  getFiles: function getFiles(circleId) {
189
- return Session$3.authedFunction({
190
+ return Session$4.authedFunction({
190
191
  method: 'GET',
191
192
  url: Helper$3.getUrl(values.serviceKey, 'get/files', {
192
193
  circleId: circleId
@@ -194,7 +195,7 @@
194
195
  });
195
196
  },
196
197
  getImages: function getImages(circleId) {
197
- return Session$3.authedFunction({
198
+ return Session$4.authedFunction({
198
199
  method: 'GET',
199
200
  url: Helper$3.getUrl(values.serviceKey, 'get/images', {
200
201
  circleId: circleId
@@ -202,7 +203,7 @@
202
203
  });
203
204
  },
204
205
  add: function add(site, title, image, audience, isPublic) {
205
- return Session$3.authedFunction({
206
+ return Session$4.authedFunction({
206
207
  method: 'POST',
207
208
  url: Helper$3.getUrl(values.serviceKey, 'update/add'),
208
209
  data: {
@@ -215,7 +216,7 @@
215
216
  });
216
217
  },
217
218
  edit: function edit(circleId, title, image, audience, isPublic) {
218
- return Session$3.authedFunction({
219
+ return Session$4.authedFunction({
219
220
  method: 'POST',
220
221
  url: Helper$3.getUrl(values.serviceKey, 'update/edit'),
221
222
  data: {
@@ -228,7 +229,7 @@
228
229
  });
229
230
  },
230
231
  delete: function _delete(circleId) {
231
- return Session$3.authedFunction({
232
+ return Session$4.authedFunction({
232
233
  method: 'POST',
233
234
  url: Helper$3.getUrl(values.serviceKey, 'update/delete'),
234
235
  data: {
@@ -237,7 +238,7 @@
237
238
  });
238
239
  },
239
240
  addAdmin: function addAdmin(circleId, userId) {
240
- return Session$3.authedFunction({
241
+ return Session$4.authedFunction({
241
242
  method: 'POST',
242
243
  url: Helper$3.getUrl(values.serviceKey, 'update/addadmin'),
243
244
  data: {
@@ -247,7 +248,7 @@
247
248
  });
248
249
  },
249
250
  removeAdmin: function removeAdmin(circleId, userId) {
250
- return Session$3.authedFunction({
251
+ return Session$4.authedFunction({
251
252
  method: 'POST',
252
253
  url: Helper$3.getUrl(values.serviceKey, 'update/removeadmin'),
253
254
  data: {
@@ -279,7 +280,7 @@
279
280
  query.limit = limit;
280
281
  }
281
282
 
282
- return _context.abrupt("return", Session$3.authedFunction({
283
+ return _context.abrupt("return", Session$4.authedFunction({
283
284
  method: 'GET',
284
285
  url: Helper$3.getUrl(values.serviceKey, 'getMessages', query)
285
286
  }));
@@ -304,7 +305,7 @@
304
305
  while (1) {
305
306
  switch (_context2.prev = _context2.next) {
306
307
  case 0:
307
- return _context2.abrupt("return", Session$3.authedFunction({
308
+ return _context2.abrupt("return", Session$4.authedFunction({
308
309
  method: 'post',
309
310
  url: Helper$3.getUrl(values.serviceKey, 'sendMessage'),
310
311
  data: {
@@ -329,11 +330,14 @@
329
330
  }()
330
331
  };
331
332
 
333
+ var Apis$1 = PlussCore__namespace.Apis;
334
+ var analyticsActions = Apis$1.analyticsActions;
335
+
332
336
  function _createSuper$7(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$7(); return function _createSuperInternal() { var Super = _getPrototypeOf__default['default'](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default['default'](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default['default'](this, result); }; }
333
337
 
334
338
  function _isNativeReflectConstruct$7() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
335
- var Components$3 = PlussCore__namespace.Components,
336
- Session$2 = PlussCore__namespace.Session,
339
+ var Components$4 = PlussCore__namespace.Components,
340
+ Session$3 = PlussCore__namespace.Session,
337
341
  Helper$2 = PlussCore__namespace.Helper;
338
342
 
339
343
  var Circles = /*#__PURE__*/function (_Component) {
@@ -396,13 +400,13 @@
396
400
 
397
401
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "canAddNew", function () {
398
402
  var auth = _this.props.auth;
399
- return Session$2.validateAccess(auth.site, values.permission, auth);
403
+ return Session$3.validateAccess(auth.site, values.permission, auth);
400
404
  });
401
405
 
402
406
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onAddNew", function () {
403
407
  var auth = _this.props.auth;
404
408
 
405
- if (Session$2.validateAccess(auth.site, values.permission, auth)) {
409
+ if (Session$3.validateAccess(auth.site, values.permission, auth)) {
406
410
  _this.props.history.push("/".concat(values.featureKey, "/add"));
407
411
  }
408
412
  });
@@ -559,7 +563,7 @@
559
563
  value: function validateCircleAdmin(circle, onlyCreator) {
560
564
  var _this4 = this;
561
565
 
562
- if (Session$2.validateAccess(this.props.auth.site, values.permission, this.props.auth)) {
566
+ if (Session$3.validateAccess(this.props.auth.site, values.permission, this.props.auth)) {
563
567
  return true;
564
568
  }
565
569
 
@@ -583,7 +587,7 @@
583
587
  }, /*#__PURE__*/React__default['default'].createElement(reactRouterDom.Link, {
584
588
  to: "/".concat(values.featureKey, "/").concat(values.entityKey, "/").concat(circle.Id)
585
589
  }, 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) {
586
- return /*#__PURE__*/React__default['default'].createElement(Components$3.ProfilePic, {
590
+ return /*#__PURE__*/React__default['default'].createElement(Components$4.ProfilePic, {
587
591
  size: 30,
588
592
  image: user.profilePic,
589
593
  hoverText: user.displayName,
@@ -623,24 +627,24 @@
623
627
  }, {
624
628
  key: "renderFilters",
625
629
  value: function renderFilters() {
626
- var userFilter = /*#__PURE__*/React__default['default'].createElement(Components$3.Tag, {
630
+ var userFilter = /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
627
631
  className: "marginRight-10",
628
632
  onClick: this.openUserFilter,
629
633
  text: "User"
630
634
  });
631
- var typeFilter = /*#__PURE__*/React__default['default'].createElement(Components$3.Tag, {
635
+ var typeFilter = /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
632
636
  className: "marginRight-10",
633
637
  onClick: this.openTypeFilter,
634
638
  text: "Type"
635
639
  });
636
640
 
637
641
  if (this.state.selectedUserFilter) {
638
- userFilter = /*#__PURE__*/React__default['default'].createElement(Components$3.Tag, {
642
+ userFilter = /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
639
643
  className: "marginRight-10",
640
644
  onClick: this.openUserFilter,
641
645
  rightIcon: "close",
642
646
  rightClick: this.removeUserFilter
643
- }, /*#__PURE__*/React__default['default'].createElement(Components$3.UserListing, {
647
+ }, /*#__PURE__*/React__default['default'].createElement(Components$4.UserListing, {
644
648
  size: 15,
645
649
  user: this.state.selectedUserFilter,
646
650
  textClass: "tag_text"
@@ -648,7 +652,7 @@
648
652
  }
649
653
 
650
654
  if (this.state.selectedTypeFilter) {
651
- typeFilter = /*#__PURE__*/React__default['default'].createElement(Components$3.Tag, {
655
+ typeFilter = /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
652
656
  className: "marginRight-10",
653
657
  onClick: this.openTypeFilter,
654
658
  rightIcon: "close",
@@ -659,7 +663,7 @@
659
663
 
660
664
  return /*#__PURE__*/React__default['default'].createElement("div", {
661
665
  className: "flex flex-center marginTop-20"
662
- }, /*#__PURE__*/React__default['default'].createElement(Components$3.Text, {
666
+ }, /*#__PURE__*/React__default['default'].createElement(Components$4.Text, {
663
667
  type: "h5",
664
668
  className: "marginRight-20"
665
669
  }, "Filter by"), userFilter, typeFilter);
@@ -673,14 +677,14 @@
673
677
  return null;
674
678
  }
675
679
 
676
- return /*#__PURE__*/React__default['default'].createElement(Components$3.Popup, {
680
+ return /*#__PURE__*/React__default['default'].createElement(Components$4.Popup, {
677
681
  title: "Select User",
678
682
  maxWidth: 600,
679
683
  minWidth: 400,
680
684
  minHeight: 400,
681
685
  hasPadding: true,
682
686
  onClose: this.closeUserFilter
683
- }, /*#__PURE__*/React__default['default'].createElement(Components$3.GenericInput, {
687
+ }, /*#__PURE__*/React__default['default'].createElement(Components$4.GenericInput, {
684
688
  id: "userSearch",
685
689
  type: "text",
686
690
  label: "Search",
@@ -691,7 +695,7 @@
691
695
  },
692
696
  alwaysShowLabel: true
693
697
  }), this.getUsers().map(function (user) {
694
- return /*#__PURE__*/React__default['default'].createElement(Components$3.UserListing, {
698
+ return /*#__PURE__*/React__default['default'].createElement(Components$4.UserListing, {
695
699
  key: user.userId,
696
700
  user: user,
697
701
  onClick: function onClick() {
@@ -709,19 +713,19 @@
709
713
  return null;
710
714
  }
711
715
 
712
- return /*#__PURE__*/React__default['default'].createElement(Components$3.Popup, {
716
+ return /*#__PURE__*/React__default['default'].createElement(Components$4.Popup, {
713
717
  title: "Select Type",
714
718
  maxWidth: 600,
715
719
  minWidth: 400,
716
720
  hasPadding: true,
717
721
  onClose: this.closeTypeFilter
718
- }, /*#__PURE__*/React__default['default'].createElement(Components$3.Tag, {
722
+ }, /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
719
723
  onClick: function onClick() {
720
724
  _this7.selectTypeFilter('circle');
721
725
  },
722
726
  text: ___default['default'].capitalize(values.entityName),
723
727
  className: "marginRight-10"
724
- }), /*#__PURE__*/React__default['default'].createElement(Components$3.Tag, {
728
+ }), /*#__PURE__*/React__default['default'].createElement(Components$4.Tag, {
725
729
  onClick: function onClick() {
726
730
  _this7.selectTypeFilter('private');
727
731
  },
@@ -733,12 +737,12 @@
733
737
  value: function render() {
734
738
  var _this8 = this;
735
739
 
736
- return /*#__PURE__*/React__default['default'].createElement("div", null, this.renderTypeFilterPopup(), this.renderUserFilterPopup(), /*#__PURE__*/React__default['default'].createElement(Components$3.Header, null, this.canAddNew() && /*#__PURE__*/React__default['default'].createElement(Components$3.AddButton, {
740
+ 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, {
737
741
  onClick: this.onAddNew,
738
742
  text: "NEW ".concat(___default['default'].upperCase(values.entityName))
739
743
  })), /*#__PURE__*/React__default['default'].createElement("div", {
740
744
  className: "pageContainer paddingVertical-20 paddingHorizontal-40"
741
- }, /*#__PURE__*/React__default['default'].createElement(Components$3.Text, {
745
+ }, /*#__PURE__*/React__default['default'].createElement(Components$4.Text, {
742
746
  type: "h1",
743
747
  className: ""
744
748
  }, values.textFeatureTitle), this.renderFilters(), /*#__PURE__*/React__default['default'].createElement(reactBootstrap.Table, {
@@ -765,7 +769,7 @@
765
769
  return Circles;
766
770
  }(React.Component);
767
771
 
768
- var mapStateToProps$2 = function mapStateToProps(state) {
772
+ var mapStateToProps$3 = function mapStateToProps(state) {
769
773
  var circles = state[values.reducerKey].circles;
770
774
  var auth = state.auth;
771
775
  return {
@@ -775,7 +779,7 @@
775
779
  };
776
780
  };
777
781
 
778
- var Circles$1 = reactRedux.connect(mapStateToProps$2, {
782
+ var Circles$1 = reactRedux.connect(mapStateToProps$3, {
779
783
  circlesLoaded: circlesLoaded,
780
784
  circleRemoved: circleRemoved
781
785
  })(Circles);
@@ -784,8 +788,8 @@
784
788
 
785
789
  function _isNativeReflectConstruct$6() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
786
790
  var Actions$1 = PlussCore__namespace.Actions,
787
- Components$2 = PlussCore__namespace.Components,
788
- Session$1 = PlussCore__namespace.Session,
791
+ Components$3 = PlussCore__namespace.Components,
792
+ Session$2 = PlussCore__namespace.Session,
789
793
  Apis = PlussCore__namespace.Apis,
790
794
  Colours$2 = PlussCore__namespace.Colours,
791
795
  Helper$1 = PlussCore__namespace.Helper;
@@ -1061,7 +1065,7 @@
1061
1065
  _createClass__default['default'](AddCircle, [{
1062
1066
  key: "componentDidMount",
1063
1067
  value: function componentDidMount() {
1064
- Session$1.checkLoggedIn(this, this.props.auth);
1068
+ Session$2.checkLoggedIn(this, this.props.auth);
1065
1069
  this.props.addRecentlyCreated(values.entityKey);
1066
1070
  this.getUsers();
1067
1071
  this.checkGetCircle();
@@ -1107,7 +1111,7 @@
1107
1111
  key: "renderSuccess",
1108
1112
  value: function renderSuccess() {
1109
1113
  if (!this.state.success) return null;
1110
- return /*#__PURE__*/React__default['default'].createElement(Components$2.SuccessPopup, {
1114
+ return /*#__PURE__*/React__default['default'].createElement(Components$3.SuccessPopup, {
1111
1115
  text: "".concat(___default['default'].capitalize(values.entityName), " has been ").concat(this.state.circleId == null ? 'added' : 'edited'),
1112
1116
  buttons: [{
1113
1117
  type: 'outlined',
@@ -1124,12 +1128,12 @@
1124
1128
  var _this4 = this;
1125
1129
 
1126
1130
  if (this.state.updating) {
1127
- return /*#__PURE__*/React__default['default'].createElement(Components$2.Button, {
1131
+ return /*#__PURE__*/React__default['default'].createElement(Components$3.Button, {
1128
1132
  buttonType: "secondary"
1129
1133
  }, "Saving...");
1130
1134
  }
1131
1135
 
1132
- return /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement(Components$2.Button, {
1136
+ return /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement(Components$3.Button, {
1133
1137
  inline: true,
1134
1138
  buttonType: "tertiary",
1135
1139
  onClick: function onClick() {
@@ -1139,7 +1143,7 @@
1139
1143
  style: {
1140
1144
  marginRight: 16
1141
1145
  }
1142
- }, "Cancel"), /*#__PURE__*/React__default['default'].createElement(Components$2.Button, {
1146
+ }, "Cancel"), /*#__PURE__*/React__default['default'].createElement(Components$3.Button, {
1143
1147
  inline: true,
1144
1148
  buttonType: "primary",
1145
1149
  onClick: this.onSave,
@@ -1153,7 +1157,7 @@
1153
1157
 
1154
1158
  return /*#__PURE__*/React__default['default'].createElement("div", {
1155
1159
  className: "optionsContent_bottom"
1156
- }, /*#__PURE__*/React__default['default'].createElement(Components$2.RadioButton, {
1160
+ }, /*#__PURE__*/React__default['default'].createElement(Components$3.RadioButton, {
1157
1161
  label: "Do you want to make this ".concat(values.entityName, " a public ").concat(values.entityName, "?"),
1158
1162
  isActive: this.state.isPublic,
1159
1163
  options: [{
@@ -1208,7 +1212,7 @@
1208
1212
  return null;
1209
1213
  }
1210
1214
 
1211
- return /*#__PURE__*/React__default['default'].createElement(Components$2.OptionsSection, {
1215
+ return /*#__PURE__*/React__default['default'].createElement(Components$3.OptionsSection, {
1212
1216
  options: options,
1213
1217
  selected: this.state.selectedOption,
1214
1218
  selectOption: this.selectOption
@@ -1221,12 +1225,12 @@
1221
1225
 
1222
1226
  return /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("div", {
1223
1227
  className: "padding-60 paddingVertical-40 bottomDivideBorder"
1224
- }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1228
+ }, /*#__PURE__*/React__default['default'].createElement(Components$3.Text, {
1225
1229
  type: "formTitleLarge",
1226
1230
  className: "marginBottom-24"
1227
1231
  }, this.state.circleId == null ? 'New' : 'Edit', " ", ___default['default'].capitalize(values.entityName)), /*#__PURE__*/React__default['default'].createElement("div", {
1228
1232
  className: "flex flex-reverse"
1229
- }, /*#__PURE__*/React__default['default'].createElement(Components$2.ImageInput, {
1233
+ }, /*#__PURE__*/React__default['default'].createElement(Components$3.ImageInput, {
1230
1234
  ref: function ref(_ref2) {
1231
1235
  _this6.imageInput = _ref2;
1232
1236
  },
@@ -1238,7 +1242,7 @@
1238
1242
  }
1239
1243
  }), /*#__PURE__*/React__default['default'].createElement("div", {
1240
1244
  className: "flex-1"
1241
- }, /*#__PURE__*/React__default['default'].createElement(Components$2.GenericInput, {
1245
+ }, /*#__PURE__*/React__default['default'].createElement(Components$3.GenericInput, {
1242
1246
  id: "title",
1243
1247
  type: "text",
1244
1248
  label: "Title",
@@ -1257,16 +1261,16 @@
1257
1261
  }
1258
1262
  })))), /*#__PURE__*/React__default['default'].createElement("div", {
1259
1263
  className: "padding-60 paddingVertical-40 bottomDivideBorder"
1260
- }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1264
+ }, /*#__PURE__*/React__default['default'].createElement(Components$3.Text, {
1261
1265
  type: "formTitleMedium"
1262
1266
  }, "Members"), /*#__PURE__*/React__default['default'].createElement("div", {
1263
1267
  className: "flex marginTop-20"
1264
1268
  }, /*#__PURE__*/React__default['default'].createElement("div", {
1265
1269
  className: "flex-1"
1266
- }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1270
+ }, /*#__PURE__*/React__default['default'].createElement(Components$3.Text, {
1267
1271
  type: "formTitleSmall",
1268
1272
  className: "marginBottom-10"
1269
- }, "Select Users"), /*#__PURE__*/React__default['default'].createElement(Components$2.GenericInput, {
1273
+ }, "Select Users"), /*#__PURE__*/React__default['default'].createElement(Components$3.GenericInput, {
1270
1274
  id: "userSearch",
1271
1275
  type: "text",
1272
1276
  label: "Search",
@@ -1277,7 +1281,7 @@
1277
1281
  },
1278
1282
  alwaysShowLabel: true
1279
1283
  }), this.getShownUsers().map(function (user) {
1280
- return /*#__PURE__*/React__default['default'].createElement(Components$2.UserListing, {
1284
+ return /*#__PURE__*/React__default['default'].createElement(Components$3.UserListing, {
1281
1285
  key: user.userId,
1282
1286
  user: user,
1283
1287
  onClick: function onClick() {
@@ -1286,23 +1290,23 @@
1286
1290
  });
1287
1291
  })), /*#__PURE__*/React__default['default'].createElement("div", {
1288
1292
  className: "flex-1"
1289
- }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1293
+ }, /*#__PURE__*/React__default['default'].createElement(Components$3.Text, {
1290
1294
  type: "formTitleSmall",
1291
1295
  className: "marginBottom-10"
1292
1296
  }, "Selected"), this.state.selectedUsers.map(function (user) {
1293
- return /*#__PURE__*/React__default['default'].createElement(Components$2.UserListing, {
1297
+ return /*#__PURE__*/React__default['default'].createElement(Components$3.UserListing, {
1294
1298
  key: user.userId,
1295
1299
  user: user,
1296
1300
  rightContent: /*#__PURE__*/React__default['default'].createElement("div", {
1297
1301
  className: "flex flex-reverse flex-center"
1298
- }, /*#__PURE__*/React__default['default'].createElement(Components$2.SVGIcon, {
1302
+ }, /*#__PURE__*/React__default['default'].createElement(Components$3.SVGIcon, {
1299
1303
  className: "removeIcon marginLeft-8",
1300
1304
  icon: "close",
1301
1305
  colour: Colours$2.COLOUR_DUSK,
1302
1306
  onClick: function onClick() {
1303
1307
  _this6.onSelectUser(user);
1304
1308
  }
1305
- }), /*#__PURE__*/React__default['default'].createElement(Components$2.StatusButton, {
1309
+ }), /*#__PURE__*/React__default['default'].createElement(Components$3.StatusButton, {
1306
1310
  isActive: user.isAdmin,
1307
1311
  activate: function activate() {
1308
1312
  _this6.addAdmin(user);
@@ -1322,18 +1326,18 @@
1322
1326
  key: "render",
1323
1327
  value: function render() {
1324
1328
  var success = this.state.success;
1325
- return /*#__PURE__*/React__default['default'].createElement(Components$2.OverlayPage, null, /*#__PURE__*/React__default['default'].createElement(Components$2.OverlayPageContents, {
1329
+ return /*#__PURE__*/React__default['default'].createElement(Components$3.OverlayPage, null, /*#__PURE__*/React__default['default'].createElement(Components$3.OverlayPageContents, {
1326
1330
  noBottomButtons: success
1327
- }, /*#__PURE__*/React__default['default'].createElement(Components$2.OverlayPageSection, {
1331
+ }, /*#__PURE__*/React__default['default'].createElement(Components$3.OverlayPageSection, {
1328
1332
  className: "pageSectionWrapper--newPopup"
1329
- }, /*#__PURE__*/React__default['default'].createElement("div", null, this.renderSuccess(), !success && this.renderMain()))), /*#__PURE__*/React__default['default'].createElement(Components$2.OverlayPageBottomButtons, null, this.renderSubmit()));
1333
+ }, /*#__PURE__*/React__default['default'].createElement("div", null, this.renderSuccess(), !success && this.renderMain()))), /*#__PURE__*/React__default['default'].createElement(Components$3.OverlayPageBottomButtons, null, this.renderSubmit()));
1330
1334
  }
1331
1335
  }]);
1332
1336
 
1333
1337
  return AddCircle;
1334
1338
  }(React.Component);
1335
1339
 
1336
- var mapStateToProps$1 = function mapStateToProps(state) {
1340
+ var mapStateToProps$2 = function mapStateToProps(state) {
1337
1341
  var circles = state[values.reducerKey].circles;
1338
1342
  var auth = state.auth;
1339
1343
  return {
@@ -1343,7 +1347,7 @@
1343
1347
  };
1344
1348
  };
1345
1349
 
1346
- var AddCircle$1 = reactRedux.connect(mapStateToProps$1, {
1350
+ var AddCircle$1 = reactRedux.connect(mapStateToProps$2, {
1347
1351
  circlesLoaded: circlesLoaded,
1348
1352
  circleUpdated: circleUpdated,
1349
1353
  addRecentlyCreated: Actions$1.addRecentlyCreated
@@ -1352,10 +1356,10 @@
1352
1356
  function _createSuper$5(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$5(); return function _createSuperInternal() { var Super = _getPrototypeOf__default['default'](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default['default'](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default['default'](this, result); }; }
1353
1357
 
1354
1358
  function _isNativeReflectConstruct$5() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
1355
- var Components$1 = PlussCore__namespace.Components,
1359
+ var Components$2 = PlussCore__namespace.Components,
1356
1360
  Helper = PlussCore__namespace.Helper,
1357
1361
  Actions = PlussCore__namespace.Actions,
1358
- Session = PlussCore__namespace.Session,
1362
+ Session$1 = PlussCore__namespace.Session,
1359
1363
  Colours$1 = PlussCore__namespace.Colours;
1360
1364
 
1361
1365
  var Circle = /*#__PURE__*/function (_Component) {
@@ -1560,6 +1564,17 @@
1560
1564
  });
1561
1565
  });
1562
1566
 
1567
+ _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "onReply", function (m) {
1568
+ _this.setState({
1569
+ replyingTo: m
1570
+ });
1571
+
1572
+ if (m) {
1573
+ var input = document.getElementById('messageInput');
1574
+ if (input) input.focus();
1575
+ }
1576
+ });
1577
+
1563
1578
  _defineProperty__default['default'](_assertThisInitialized__default['default'](_this), "handleMessageDateChange", function (date) {
1564
1579
  _this.setState({
1565
1580
  messageDate: date,
@@ -1631,6 +1646,10 @@
1631
1646
  return;
1632
1647
  }
1633
1648
 
1649
+ if (_this.state.replyingTo) {
1650
+ message.replyingTo = _this.state.replyingTo;
1651
+ }
1652
+
1634
1653
  var clonedMessage = ___default['default'].cloneDeep(message);
1635
1654
 
1636
1655
  clonedMessage.uploading = true;
@@ -1653,6 +1672,8 @@
1653
1672
  });
1654
1673
 
1655
1674
  setTimeout(function () {
1675
+ _this.onReply(null);
1676
+
1656
1677
  _this.scrollToBottom();
1657
1678
 
1658
1679
  _this.imageInput && _this.imageInput.getWrappedInstance().setValue(null);
@@ -1670,7 +1691,8 @@
1670
1691
  messages: [],
1671
1692
  images: [],
1672
1693
  files: [],
1673
- membersExpanded: true
1694
+ membersExpanded: true,
1695
+ replyingTo: null
1674
1696
  };
1675
1697
  return _this;
1676
1698
  }
@@ -1758,7 +1780,7 @@
1758
1780
  value: function validateCircleAdmin() {
1759
1781
  var _this4 = this;
1760
1782
 
1761
- if (Session.validateAccess(this.props.auth.site, values.permission, this.props.auth)) {
1783
+ if (Session$1.validateAccess(this.props.auth.site, values.permission, this.props.auth)) {
1762
1784
  return true;
1763
1785
  }
1764
1786
 
@@ -1772,7 +1794,7 @@
1772
1794
  var _this5 = this;
1773
1795
 
1774
1796
  if (!this.isMember()) {
1775
- return /*#__PURE__*/React__default['default'].createElement(Components$1.Text, {
1797
+ return /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1776
1798
  type: "highlightedHelp",
1777
1799
  className: "chat_noMessage"
1778
1800
  }, "You can't send a message to this ", ___default['default'].capitalize(values.entityName), " as you are not a member.");
@@ -1786,7 +1808,7 @@
1786
1808
  onClick: this.sendMessage
1787
1809
  }), /*#__PURE__*/React__default['default'].createElement("div", {
1788
1810
  className: "chat_inputContainer"
1789
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.GenericInput, {
1811
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.GenericInput, {
1790
1812
  id: "messageInput",
1791
1813
  type: "textarea",
1792
1814
  className: "chat_input",
@@ -1813,7 +1835,7 @@
1813
1835
  style: {
1814
1836
  display: this.state.imageInputShowing ? 'block' : 'none'
1815
1837
  }
1816
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.ImageInput, {
1838
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.ImageInput, {
1817
1839
  ref: function ref(_ref4) {
1818
1840
  _this5.imageInput = _ref4;
1819
1841
  },
@@ -1828,7 +1850,7 @@
1828
1850
  style: {
1829
1851
  display: this.state.fileInputShowing ? 'block' : 'none'
1830
1852
  }
1831
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.FileInput, {
1853
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.FileInput, {
1832
1854
  ref: function ref(_ref5) {
1833
1855
  _this5.fileInput = _ref5;
1834
1856
  },
@@ -1843,11 +1865,13 @@
1843
1865
  }, {
1844
1866
  key: "renderMessage",
1845
1867
  value: function renderMessage(m) {
1868
+ var _this6 = this;
1869
+
1846
1870
  if (m.system) {
1847
1871
  return /*#__PURE__*/React__default['default'].createElement("div", {
1848
1872
  key: m._id,
1849
1873
  className: "message"
1850
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.Text, {
1874
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1851
1875
  type: "h5",
1852
1876
  className: "message_system"
1853
1877
  }, m.text));
@@ -1857,23 +1881,28 @@
1857
1881
  return /*#__PURE__*/React__default['default'].createElement("div", {
1858
1882
  key: m._id,
1859
1883
  className: "message".concat(isSelf ? ' message-self' : '').concat(m.uploading ? ' message-uploading' : '')
1860
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.Text, {
1884
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1861
1885
  type: "h5-noUpper",
1862
1886
  className: "message_time"
1863
1887
  }, moment__default['default'].utc(m.createdAt).local().format('D MMM YYYY • h:mma')), /*#__PURE__*/React__default['default'].createElement("div", {
1864
1888
  className: "message_inner"
1865
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.ProfilePic, {
1889
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.ProfilePic, {
1866
1890
  size: 40,
1867
1891
  image: m.user.avatar,
1868
1892
  className: "message_profilePic"
1869
1893
  }), /*#__PURE__*/React__default['default'].createElement("div", {
1870
1894
  className: "message_bubbleContainer"
1871
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.Text, {
1895
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1872
1896
  type: "body",
1873
1897
  className: "message_name"
1874
- }, m.user.name), /*#__PURE__*/React__default['default'].createElement("div", {
1898
+ }, m.user.name, m.replyingTo ? " replied to ".concat(m.replyingTo.user.name) : ''), m.replyingTo && /*#__PURE__*/React__default['default'].createElement("div", {
1899
+ className: "message_replyBubble"
1900
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1901
+ type: "body",
1902
+ className: "message_text"
1903
+ }, Helper.toParagraphed((m.replyingTo.text || '').substr(0, 100)))), /*#__PURE__*/React__default['default'].createElement("div", {
1875
1904
  className: "message_bubble"
1876
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.Text, {
1905
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1877
1906
  type: "body",
1878
1907
  className: "message_text"
1879
1908
  }, Helper.toParagraphed(m.text)), /*#__PURE__*/React__default['default'].createElement("div", null, (m.image || []).map(function (url, i) {
@@ -1887,12 +1916,19 @@
1887
1916
  alt: Helper.getFileName(url)
1888
1917
  }));
1889
1918
  })), /*#__PURE__*/React__default['default'].createElement("div", null, (m.attachments || []).map(function (url, i) {
1890
- return /*#__PURE__*/React__default['default'].createElement(Components$1.Attachment, {
1919
+ return /*#__PURE__*/React__default['default'].createElement(Components$2.Attachment, {
1891
1920
  source: url,
1892
1921
  key: i,
1893
1922
  white: isSelf
1894
1923
  });
1895
- }))))));
1924
+ }))), /*#__PURE__*/React__default['default'].createElement("div", {
1925
+ className: "message_reply"
1926
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1927
+ type: "button",
1928
+ onClick: function onClick() {
1929
+ _this6.onReply(m);
1930
+ }
1931
+ }, "Reply")))));
1896
1932
  }
1897
1933
  }, {
1898
1934
  key: "renderHeaderRight",
@@ -1936,12 +1972,12 @@
1936
1972
  onClick: this.toggleMembers
1937
1973
  }), /*#__PURE__*/React__default['default'].createElement("div", {
1938
1974
  className: "flex-1"
1939
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.Text, {
1975
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1940
1976
  type: "formTitleMedium"
1941
1977
  }, "Member", Helper.getPluralS(members.length), " (", members.length, ")"))), this.state.membersExpanded && /*#__PURE__*/React__default['default'].createElement("div", {
1942
1978
  className: "paddingTop-8"
1943
1979
  }, members.map(function (user) {
1944
- return /*#__PURE__*/React__default['default'].createElement(Components$1.UserListing, {
1980
+ return /*#__PURE__*/React__default['default'].createElement(Components$2.UserListing, {
1945
1981
  user: user
1946
1982
  });
1947
1983
  }))), /*#__PURE__*/React__default['default'].createElement("div", {
@@ -1954,7 +1990,7 @@
1954
1990
  onClick: this.toggleImages
1955
1991
  }), /*#__PURE__*/React__default['default'].createElement("div", {
1956
1992
  className: "flex-1"
1957
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.Text, {
1993
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1958
1994
  type: "formTitleMedium"
1959
1995
  }, "Image", Helper.getPluralS(this.state.images.length), " (", this.state.images.length, ")"))), this.state.imagesExpanded && /*#__PURE__*/React__default['default'].createElement("div", {
1960
1996
  className: "paddingTop-8"
@@ -1977,29 +2013,58 @@
1977
2013
  onClick: this.toggleFiles
1978
2014
  }), /*#__PURE__*/React__default['default'].createElement("div", {
1979
2015
  className: "flex-1"
1980
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.Text, {
2016
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
1981
2017
  type: "formTitleMedium"
1982
2018
  }, "File", Helper.getPluralS(this.state.files.length), " (", this.state.files.length, ")"))), this.state.filesExpanded && /*#__PURE__*/React__default['default'].createElement("div", {
1983
2019
  className: "paddingTop-8"
1984
2020
  }, this.state.files.map(function (file, i) {
1985
- return /*#__PURE__*/React__default['default'].createElement(Components$1.Attachment, {
2021
+ return /*#__PURE__*/React__default['default'].createElement(Components$2.Attachment, {
1986
2022
  source: file.Url,
1987
2023
  key: i
1988
2024
  });
1989
2025
  }))));
1990
2026
  }
2027
+ }, {
2028
+ key: "renderReplyTo",
2029
+ value: function renderReplyTo() {
2030
+ var _this7 = this;
2031
+
2032
+ if (!this.state.replyingTo) {
2033
+ return null;
2034
+ }
2035
+
2036
+ var m = this.state.replyingTo;
2037
+ return /*#__PURE__*/React__default['default'].createElement("div", {
2038
+ className: "chat_replyTo"
2039
+ }, /*#__PURE__*/React__default['default'].createElement("div", {
2040
+ className: "chat_replyTo_container"
2041
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
2042
+ type: "h5"
2043
+ }, "Replying to ", m && m.user && !___default['default'].isEmpty(m.user.displayName) ? m.user.displayName : ''), m && !___default['default'].isEmpty(m.text) && /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
2044
+ type: "body"
2045
+ }, m.text.substr(0, 50))), /*#__PURE__*/React__default['default'].createElement("div", {
2046
+ className: "chat_replyTo_remove"
2047
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.SVGIcon, {
2048
+ className: "removeIcon",
2049
+ icon: "close",
2050
+ onClick: function onClick() {
2051
+ _this7.onReply(null);
2052
+ },
2053
+ colour: Colours$1.COLOUR_DUSK
2054
+ })));
2055
+ }
1991
2056
  }, {
1992
2057
  key: "render",
1993
2058
  value: function render() {
1994
- var _this6 = this;
2059
+ var _this8 = this;
1995
2060
 
1996
- return /*#__PURE__*/React__default['default'].createElement(Components$1.OverlayPage, {
2061
+ return /*#__PURE__*/React__default['default'].createElement(Components$2.OverlayPage, {
1997
2062
  fullPage: true,
1998
2063
  fullPageStyle: {
1999
2064
  display: 'flex',
2000
2065
  flexDirection: 'column'
2001
2066
  }
2002
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.Header, {
2067
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Header, {
2003
2068
  rightContent: this.renderHeaderRight()
2004
2069
  }, /*#__PURE__*/React__default['default'].createElement(FontAwesome__default['default'], {
2005
2070
  className: "header_back",
@@ -2007,38 +2072,38 @@
2007
2072
  onClick: function onClick() {
2008
2073
  window.history.back();
2009
2074
  }
2010
- }), /*#__PURE__*/React__default['default'].createElement(Components$1.Text, {
2075
+ }), /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
2011
2076
  type: "formTitleLarge",
2012
2077
  className: "header_title"
2013
2078
  }, this.getTitle())), /*#__PURE__*/React__default['default'].createElement("div", {
2014
2079
  className: "flex flex-1 flex-reverse overflow-hidden"
2015
2080
  }, this.renderSideBar(), /*#__PURE__*/React__default['default'].createElement("div", {
2016
2081
  className: "flex-1 flex flex-column overflow-hidden"
2017
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.Header, {
2082
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Header, {
2018
2083
  onlyContainer: true
2019
2084
  }, /*#__PURE__*/React__default['default'].createElement("div", {
2020
2085
  className: "flex flex-center flex-1 paddingHorizontal-16"
2021
- }, /*#__PURE__*/React__default['default'].createElement(Components$1.Text, {
2086
+ }, /*#__PURE__*/React__default['default'].createElement(Components$2.Text, {
2022
2087
  type: "h5",
2023
2088
  className: "marginRight-20"
2024
- }, "Filter by"), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement(Components$1.GenericInput, {
2089
+ }, "Filter by"), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement(Components$2.GenericInput, {
2025
2090
  id: "messageDate",
2026
2091
  label: "Date",
2027
2092
  alwaysShowLabel: true,
2028
2093
  value: this.state.messageDateText,
2029
2094
  readOnly: true,
2030
2095
  onClick: function onClick() {
2031
- return _this6.setState({
2032
- showMessageDate: !_this6.state.showMessageDate
2096
+ return _this8.setState({
2097
+ showMessageDate: !_this8.state.showMessageDate
2033
2098
  });
2034
2099
  },
2035
- rightContent: !___default['default'].isEmpty(this.state.messageDate) && /*#__PURE__*/React__default['default'].createElement(Components$1.SVGIcon, {
2100
+ rightContent: !___default['default'].isEmpty(this.state.messageDate) && /*#__PURE__*/React__default['default'].createElement(Components$2.SVGIcon, {
2036
2101
  colour: Colours$1.COLOUR_DUSK_LIGHT,
2037
2102
  icon: "close",
2038
2103
  className: "timepicker_clear",
2039
2104
  onClick: this.onClearDate
2040
2105
  })
2041
- }), this.state.showMessageDate && /*#__PURE__*/React__default['default'].createElement(Components$1.DatePicker, {
2106
+ }), this.state.showMessageDate && /*#__PURE__*/React__default['default'].createElement(Components$2.DatePicker, {
2042
2107
  hideTop: true,
2043
2108
  selectedDate: this.state.messageDate,
2044
2109
  selectDate: this.handleMessageDateChange
@@ -2046,13 +2111,13 @@
2046
2111
  className: "chat"
2047
2112
  }, /*#__PURE__*/React__default['default'].createElement("div", {
2048
2113
  className: "chat_newMessage"
2049
- }, this.renderChatInput()), /*#__PURE__*/React__default['default'].createElement("div", {
2114
+ }, this.renderChatInput()), this.renderReplyTo(), /*#__PURE__*/React__default['default'].createElement("div", {
2050
2115
  ref: function ref(_ref6) {
2051
- return _this6.chat = _ref6;
2116
+ return _this8.chat = _ref6;
2052
2117
  },
2053
2118
  className: "chat_messages"
2054
2119
  }, ___default['default'].isEmpty(this.state.messages) && !___default['default'].isEmpty(this.state.messageDate) && this.renderEmptyDate(), this.state.messages.map(function (m) {
2055
- return _this6.renderMessage(m);
2120
+ return _this8.renderMessage(m);
2056
2121
  }))))));
2057
2122
  }
2058
2123
  }]);
@@ -2060,7 +2125,7 @@
2060
2125
  return Circle;
2061
2126
  }(React.Component);
2062
2127
 
2063
- var mapStateToProps = function mapStateToProps(state) {
2128
+ var mapStateToProps$1 = function mapStateToProps(state) {
2064
2129
  var circles = state[values.reducerKey].circles;
2065
2130
  var auth = state.auth;
2066
2131
  return {
@@ -2070,11 +2135,259 @@
2070
2135
  };
2071
2136
  };
2072
2137
 
2073
- var Circle$1 = reactRedux.connect(mapStateToProps, {
2138
+ var Circle$1 = reactRedux.connect(mapStateToProps$1, {
2074
2139
  circlesLoaded: circlesLoaded,
2075
2140
  setNavData: Actions.setNavData
2076
2141
  })(Circle);
2077
2142
 
2143
+ var Analytics$1 = PlussCore__namespace.Analytics,
2144
+ Session = PlussCore__namespace.Session,
2145
+ Components$1 = PlussCore__namespace.Components;
2146
+
2147
+ var getInitialState = function getInitialState() {
2148
+ return {
2149
+ isLoading: true,
2150
+ messages: 0,
2151
+ prevMessages: 0,
2152
+ staffMessages: 0,
2153
+ prevStaffMessages: 0,
2154
+ residentMessages: 0,
2155
+ prevResidentMessages: 0,
2156
+ groupMessages: 0,
2157
+ prevGroupMessages: 0,
2158
+ privateMessages: 0,
2159
+ prevPrivateMessages: 0,
2160
+ activeGroups: 0,
2161
+ prevActiveGroups: 0
2162
+ };
2163
+ }; // AnalyticsHub Component
2164
+
2165
+
2166
+ var AnalyticsHub = function AnalyticsHub(_ref) {
2167
+ var startTime = _ref.startTime,
2168
+ endTime = _ref.endTime,
2169
+ auth = _ref.auth,
2170
+ prevText = _ref.prevText,
2171
+ dayCount = _ref.dayCount,
2172
+ strings = _ref.strings;
2173
+
2174
+ var _useState = React.useState(getInitialState()),
2175
+ _useState2 = _slicedToArray__default['default'](_useState, 2),
2176
+ analyticsData = _useState2[0],
2177
+ setAnalyticsData = _useState2[1];
2178
+
2179
+ var _useState3 = React.useState(false),
2180
+ _useState4 = _slicedToArray__default['default'](_useState3, 2),
2181
+ isExportOpen = _useState4[0],
2182
+ setIsExportOpen = _useState4[1];
2183
+
2184
+ var hasAccess = Session.validateAccess(auth.site, values.permissionNewsletter, auth);
2185
+
2186
+ if (!hasAccess) {
2187
+ return null;
2188
+ }
2189
+
2190
+ var featureTitle = function (key) {
2191
+ if (!strings || !strings.sideNav || !strings.sideNav[key]) {
2192
+ return values.textFeatureTitle;
2193
+ }
2194
+
2195
+ return strings.sideNav[key];
2196
+ }();
2197
+
2198
+ var exportColumns = [{
2199
+ label: 'Select All',
2200
+ key: ''
2201
+ }, {
2202
+ label: 'Start Date',
2203
+ key: 'startDate'
2204
+ }, {
2205
+ label: 'End Date',
2206
+ key: 'endDate'
2207
+ }, {
2208
+ label: 'Messages',
2209
+ key: 'messages'
2210
+ }, {
2211
+ label: 'Messages by Staff',
2212
+ key: 'staffMessages'
2213
+ }, {
2214
+ label: 'Messages by Primary Users',
2215
+ key: 'residentMessages'
2216
+ }, {
2217
+ label: 'Group Messages',
2218
+ key: 'groupMessages'
2219
+ }, {
2220
+ label: 'Private Messages',
2221
+ key: 'privateMessages'
2222
+ }, {
2223
+ label: 'Groups with Messages',
2224
+ key: 'activeGroups'
2225
+ }];
2226
+ React.useEffect(function () {
2227
+ getData();
2228
+ }, [startTime, endTime]);
2229
+
2230
+ var getData = /*#__PURE__*/function () {
2231
+ var _ref2 = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee() {
2232
+ var timeDifference, _yield$Promise$all, _yield$Promise$all2, currentStatsResponse, prevStatsResponse, data;
2233
+
2234
+ return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
2235
+ while (1) {
2236
+ switch (_context.prev = _context.next) {
2237
+ case 0:
2238
+ setAnalyticsData(getInitialState()); // Load analytics data here using startTime and endTime
2239
+
2240
+ timeDifference = endTime - startTime;
2241
+ _context.next = 4;
2242
+ return Promise.all([analyticsActions.getAggregateEntityStats(auth.site, values.entityKey, startTime, endTime, true), analyticsActions.getAggregateEntityStats(auth.site, values.entityKey, startTime - timeDifference, startTime, true)]);
2243
+
2244
+ case 4:
2245
+ _yield$Promise$all = _context.sent;
2246
+ _yield$Promise$all2 = _slicedToArray__default['default'](_yield$Promise$all, 2);
2247
+ currentStatsResponse = _yield$Promise$all2[0];
2248
+ prevStatsResponse = _yield$Promise$all2[1];
2249
+ data = {
2250
+ messages: Analytics$1.countActivities(currentStatsResponse.data, 'Message', 'total'),
2251
+ prevMessages: Analytics$1.countActivities(prevStatsResponse.data, 'Message', 'total'),
2252
+ staffMessages: Analytics$1.countActivities(currentStatsResponse.data, 'StaffMessage', 'total'),
2253
+ prevStaffMessages: Analytics$1.countActivities(prevStatsResponse.data, 'StaffMessage', 'total'),
2254
+ residentMessages: Analytics$1.countActivities(currentStatsResponse.data, 'ResidentMessage', 'total'),
2255
+ prevResidentMessages: Analytics$1.countActivities(prevStatsResponse.data, 'ResidentMessage', 'total'),
2256
+ groupMessages: Analytics$1.countActivities(currentStatsResponse.data, 'GroupMessage', 'total'),
2257
+ prevGroupMessages: Analytics$1.countActivities(prevStatsResponse.data, 'GroupMessage', 'total'),
2258
+ privateMessages: Analytics$1.countActivities(currentStatsResponse.data, 'PrivateMessage', 'total'),
2259
+ prevPrivateMessages: Analytics$1.countActivities(prevStatsResponse.data, 'PrivateMessage', 'total'),
2260
+ activeGroups: Analytics$1.countActivities(currentStatsResponse.data, 'GroupMessage', 'unique'),
2261
+ prevActiveGroups: Analytics$1.countActivities(prevStatsResponse.data, 'GroupMessage', 'unique'),
2262
+ // uniquePageView: Analytics.countActivities(currentStatsResponse.data, 'UniquePageView', 'uniquearray'),
2263
+ // prevUniquePageView: Analytics.countActivities(prevStatsResponse.data, 'UniquePageView', 'uniquearray'),
2264
+ isLoading: false
2265
+ };
2266
+ setAnalyticsData(data);
2267
+
2268
+ case 10:
2269
+ case "end":
2270
+ return _context.stop();
2271
+ }
2272
+ }
2273
+ }, _callee);
2274
+ }));
2275
+
2276
+ return function getData() {
2277
+ return _ref2.apply(this, arguments);
2278
+ };
2279
+ }();
2280
+
2281
+ var isReadyToOpenCSV = function isReadyToOpenCSV() {
2282
+ return !analyticsData.isLoading;
2283
+ };
2284
+
2285
+ var getExportSource = function getExportSource() {
2286
+ return [{
2287
+ startDate: moment__default['default'](startTime + 1).format('D-MM-YYYY'),
2288
+ endDate: moment__default['default'](endTime).format('D-MM-YYYY'),
2289
+ messages: analyticsData.messages,
2290
+ staffMessages: analyticsData.staffMessages,
2291
+ residentMessages: analyticsData.residentMessages,
2292
+ groupMessages: analyticsData.groupMessages,
2293
+ privateMessages: analyticsData.privateMessages,
2294
+ activeGroups: analyticsData.activeGroups
2295
+ }];
2296
+ };
2297
+
2298
+ var csvPopup = function csvPopup() {
2299
+ if (!isExportOpen) {
2300
+ return null;
2301
+ }
2302
+
2303
+ var source = getExportSource();
2304
+ return /*#__PURE__*/React__default['default'].createElement(Components$1.ExportCsvPopup, {
2305
+ onClose: function onClose() {
2306
+ setIsExportOpen(false);
2307
+ },
2308
+ columns: exportColumns,
2309
+ source: source,
2310
+ filename: "".concat(values.analyticsKey, "analytics_").concat(source[0].startDate, "_").concat(source[0].endDate, ".csv")
2311
+ });
2312
+ };
2313
+
2314
+ return /*#__PURE__*/React__default['default'].createElement("div", {
2315
+ className: "dashboardSection"
2316
+ }, csvPopup(), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement(Components$1.Text, {
2317
+ type: "h4",
2318
+ className: "inlineBlock marginRight-40"
2319
+ }, featureTitle), /*#__PURE__*/React__default['default'].createElement(Components$1.Button, {
2320
+ inline: true,
2321
+ buttonType: "primaryAction",
2322
+ onClick: function onClick() {
2323
+ if (!isReadyToOpenCSV()) return;
2324
+ setIsExportOpen(true);
2325
+ },
2326
+ isActive: isReadyToOpenCSV(),
2327
+ leftIcon: "file-code-o"
2328
+ }, "Export CSV")), /*#__PURE__*/React__default['default'].createElement("div", {
2329
+ className: "analyticsSection dashboardSection_content"
2330
+ }, /*#__PURE__*/React__default['default'].createElement(Components$1.StatBox, {
2331
+ title: "Groups with Messages",
2332
+ icon: freeSolidSvgIcons.faUserGroup,
2333
+ value: analyticsData.activeGroups,
2334
+ previousValue: analyticsData.prevActiveGroups,
2335
+ prevText: prevText,
2336
+ viewGraphLink: "/chart?entity=".concat(values.entityKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=GroupMessage&countType=unique&dayCount=").concat(dayCount),
2337
+ isLoading: analyticsData.isLoading
2338
+ }), /*#__PURE__*/React__default['default'].createElement(Components$1.StatBox, {
2339
+ title: "Messages",
2340
+ icon: freeSolidSvgIcons.faMessage,
2341
+ value: analyticsData.messages,
2342
+ previousValue: analyticsData.prevMessages,
2343
+ prevText: prevText,
2344
+ viewGraphLink: "/chart?entity=".concat(values.entityKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Message&countType=total&dayCount=").concat(dayCount),
2345
+ isLoading: analyticsData.isLoading
2346
+ }), /*#__PURE__*/React__default['default'].createElement(Components$1.StatBox, {
2347
+ title: "Messages by Staff",
2348
+ icon: freeSolidSvgIcons.faUserTie,
2349
+ value: analyticsData.staffMessages,
2350
+ previousValue: analyticsData.prevStaffMessages,
2351
+ prevText: prevText,
2352
+ viewGraphLink: "/chart?entity=".concat(values.entityKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=StaffMessage&countType=total&dayCount=").concat(dayCount),
2353
+ isLoading: analyticsData.isLoading
2354
+ }), /*#__PURE__*/React__default['default'].createElement(Components$1.StatBox, {
2355
+ title: "Messages by Primary Users",
2356
+ icon: freeSolidSvgIcons.faUsers,
2357
+ value: analyticsData.residentMessages,
2358
+ previousValue: analyticsData.prevResidentMessages,
2359
+ prevText: prevText,
2360
+ viewGraphLink: "/chart?entity=".concat(values.entityKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=ResidentMessage&countType=total&dayCount=").concat(dayCount),
2361
+ isLoading: analyticsData.isLoading
2362
+ }), /*#__PURE__*/React__default['default'].createElement(Components$1.StatBox, {
2363
+ title: "Group Messages",
2364
+ icon: freeSolidSvgIcons.faUsersRectangle,
2365
+ value: analyticsData.groupMessages,
2366
+ previousValue: analyticsData.prevGroupMessages,
2367
+ prevText: prevText,
2368
+ viewGraphLink: "/chart?entity=".concat(values.entityKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=GroupMessage&countType=total&dayCount=").concat(dayCount),
2369
+ isLoading: analyticsData.isLoading
2370
+ }), /*#__PURE__*/React__default['default'].createElement(Components$1.StatBox, {
2371
+ title: "Private Messages",
2372
+ icon: freeSolidSvgIcons.faPeopleArrows,
2373
+ value: analyticsData.privateMessages,
2374
+ previousValue: analyticsData.prevPrivateMessages,
2375
+ prevText: prevText,
2376
+ viewGraphLink: "/chart?entity=".concat(values.entityKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=PrivateMessage&countType=total&dayCount=").concat(dayCount),
2377
+ isLoading: analyticsData.isLoading
2378
+ })));
2379
+ };
2380
+
2381
+ var mapStateToProps = function mapStateToProps(state) {
2382
+ var auth = state.auth;
2383
+ return {
2384
+ auth: auth,
2385
+ strings: state.strings && state.strings.config || {}
2386
+ };
2387
+ };
2388
+
2389
+ var toExport = reactRedux.connect(mapStateToProps, {})(AnalyticsHub);
2390
+
2078
2391
  function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2079
2392
 
2080
2393
  function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$2(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
@@ -2379,7 +2692,9 @@
2379
2692
  var _Screens;
2380
2693
  var Reducers = _defineProperty__default['default']({}, values.reducerKey, CircleReducer);
2381
2694
  var Screens = (_Screens = {}, _defineProperty__default['default'](_Screens, values.componentCircles, Circles$1), _defineProperty__default['default'](_Screens, values.componentAddCircle, AddCircle$1), _defineProperty__default['default'](_Screens, values.componentCircle, Circle$1), _Screens);
2695
+ var Analytics = [toExport];
2382
2696
 
2697
+ exports.Analytics = Analytics;
2383
2698
  exports.Config = FeatureConfig;
2384
2699
  exports.FeaturePickerContent = FeaturePickerContent;
2385
2700
  exports.PreviewFull = PreviewFull;