@plusscommunities/pluss-circles-web-groups 1.5.11-beta.2 → 1.5.11-beta.4

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
@@ -784,14 +784,14 @@ var Circles$1 = reactRedux.connect(mapStateToProps$3, {
784
784
  circleRemoved
785
785
  })(Circles);
786
786
 
787
- function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
788
- function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
787
+ function ownKeys$5(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
788
+ function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
789
789
  const {
790
790
  Actions: Actions$1,
791
791
  Components: Components$3,
792
792
  Session: Session$2,
793
793
  Apis,
794
- Colours: Colours$2,
794
+ Colours: Colours$3,
795
795
  Helper: Helper$2
796
796
  } = PlussCore__namespace;
797
797
  class AddCircle extends React.Component {
@@ -810,7 +810,7 @@ class AddCircle extends React.Component {
810
810
  users: ___default["default"].sortBy(res.data.results.Items, u => {
811
811
  return (u.displayName || "").toLowerCase();
812
812
  }).map(u => {
813
- return _objectSpread$4(_objectSpread$4({}, u), {}, {
813
+ return _objectSpread$5(_objectSpread$5({}, u), {}, {
814
814
  userId: u.userId || u.Id
815
815
  });
816
816
  })
@@ -1188,7 +1188,7 @@ class AddCircle extends React.Component {
1188
1188
  }, /*#__PURE__*/React__default["default"].createElement(Components$3.SVGIcon, {
1189
1189
  className: "removeIcon marginLeft-8",
1190
1190
  icon: "close",
1191
- colour: Colours$2.COLOUR_DUSK,
1191
+ colour: Colours$3.COLOUR_DUSK,
1192
1192
  onClick: () => {
1193
1193
  this.onSelectUser(user);
1194
1194
  }
@@ -1238,14 +1238,14 @@ var AddCircle$1 = reactRedux.connect(mapStateToProps$2, {
1238
1238
  addRecentlyCreated: Actions$1.addRecentlyCreated
1239
1239
  })(reactRouter.withRouter(AddCircle));
1240
1240
 
1241
- function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1242
- function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1241
+ function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1242
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1243
1243
  const {
1244
1244
  Components: Components$2,
1245
1245
  Helper: Helper$1,
1246
1246
  Actions,
1247
1247
  Session: Session$1,
1248
- Colours: Colours$1
1248
+ Colours: Colours$2
1249
1249
  } = PlussCore__namespace;
1250
1250
  class Circle extends React.Component {
1251
1251
  constructor(props) {
@@ -1416,7 +1416,7 @@ class Circle extends React.Component {
1416
1416
  // Optimistically update UI - mark as deleted immediately
1417
1417
  const updatedMessages = this.state.messages.map(m => {
1418
1418
  if (m._id === messageToDelete._id) {
1419
- return _objectSpread$3(_objectSpread$3({}, m), {}, {
1419
+ return _objectSpread$4(_objectSpread$4({}, m), {}, {
1420
1420
  deleted: true,
1421
1421
  text: " "
1422
1422
  });
@@ -1845,7 +1845,7 @@ class Circle extends React.Component {
1845
1845
  onClick: () => {
1846
1846
  this.onReply(null);
1847
1847
  },
1848
- colour: Colours$1.COLOUR_DUSK
1848
+ colour: Colours$2.COLOUR_DUSK
1849
1849
  })));
1850
1850
  }
1851
1851
  renderDeleteConfirmPopup() {
@@ -1908,7 +1908,7 @@ class Circle extends React.Component {
1908
1908
  showMessageDate: !this.state.showMessageDate
1909
1909
  }),
1910
1910
  rightContent: !___default["default"].isEmpty(this.state.messageDate) && /*#__PURE__*/React__default["default"].createElement(Components$2.SVGIcon, {
1911
- colour: Colours$1.COLOUR_DUSK_LIGHT,
1911
+ colour: Colours$2.COLOUR_DUSK_LIGHT,
1912
1912
  icon: "close",
1913
1913
  className: "timepicker_clear",
1914
1914
  onClick: this.onClearDate
@@ -1947,11 +1947,14 @@ var Circle$1 = reactRedux.connect(mapStateToProps$1, {
1947
1947
  setNavData: Actions.setNavData
1948
1948
  })(Circle);
1949
1949
 
1950
+ function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1951
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1950
1952
  const {
1951
1953
  Analytics: Analytics$1,
1952
1954
  Session,
1953
1955
  Components: Components$1,
1954
- Helper
1956
+ Helper,
1957
+ Colours: Colours$1
1955
1958
  } = PlussCore__namespace;
1956
1959
  const getInitialState = () => ({
1957
1960
  isLoading: true,
@@ -2040,84 +2043,97 @@ const AnalyticsHub = _ref => {
2040
2043
  getData();
2041
2044
  }, [startTime, endTime, userType, userCategory, selectedSites]);
2042
2045
  const getData = async () => {
2043
- if (comparisonMode) {
2044
- setComparisonData({
2045
- messages: [],
2046
- staffMessages: [],
2047
- residentMessages: [],
2048
- groupMessages: [],
2049
- privateMessages: [],
2050
- activeGroups: [],
2051
- isLoading: true
2052
- });
2053
- const multiSiteResultsObj = await Analytics$1.fetchMultiSiteData(selectedSites, async site => {
2054
- const {
2055
- data
2056
- } = await analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2046
+ try {
2047
+ setFailedSites([]);
2048
+ if (comparisonMode) {
2049
+ setComparisonData({
2050
+ messages: [],
2051
+ staffMessages: [],
2052
+ residentMessages: [],
2053
+ groupMessages: [],
2054
+ privateMessages: [],
2055
+ activeGroups: [],
2056
+ isLoading: true
2057
+ });
2058
+ const multiSiteResultsObj = await Analytics$1.fetchMultiSiteData(selectedSites, async site => {
2059
+ const {
2060
+ data
2061
+ } = await analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2062
+ userType,
2063
+ userCategory
2064
+ });
2065
+ return data;
2066
+ });
2067
+ const roles = auth.user.Roles;
2068
+ const failed = Object.entries(multiSiteResultsObj).filter(_ref2 => {
2069
+ let [, data] = _ref2;
2070
+ return data === null;
2071
+ }).map(_ref3 => {
2072
+ let [site] = _ref3;
2073
+ return Helper.getSiteNameFromRoles(site, roles);
2074
+ });
2075
+ setFailedSites(failed);
2076
+ const multiSiteResults = Object.entries(multiSiteResultsObj).filter(_ref4 => {
2077
+ let [, data] = _ref4;
2078
+ return data !== null;
2079
+ }).map(_ref5 => {
2080
+ let [site, data] = _ref5;
2081
+ return {
2082
+ site,
2083
+ data
2084
+ };
2085
+ });
2086
+ const buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
2087
+ name: Helper.getSiteNameFromRoles(result.site, roles),
2088
+ value: Analytics$1.countActivities(result.data, activityKey, countType)
2089
+ }));
2090
+ setComparisonData({
2091
+ messages: buildComparison("Message", "total"),
2092
+ staffMessages: buildComparison("StaffMessage", "total"),
2093
+ residentMessages: buildComparison("ResidentMessage", "total"),
2094
+ groupMessages: buildComparison("GroupMessage", "total"),
2095
+ privateMessages: buildComparison("PrivateMessage", "total"),
2096
+ activeGroups: buildComparison("GroupMessage", "unique"),
2097
+ isLoading: false
2098
+ });
2099
+ } else {
2100
+ setAnalyticsData(getInitialState());
2101
+ const site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
2102
+ const timeDifference = endTime - startTime;
2103
+ const [currentStatsResponse, prevStatsResponse] = await Promise.all([analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2057
2104
  userType,
2058
2105
  userCategory
2059
- });
2060
- return data;
2061
- });
2062
- const roles = auth.user.Roles;
2063
- const failed = Object.entries(multiSiteResultsObj).filter(_ref2 => {
2064
- let [, data] = _ref2;
2065
- return data === null;
2066
- }).map(_ref3 => {
2067
- let [site] = _ref3;
2068
- return Helper.getSiteNameFromRoles(site, roles);
2069
- });
2070
- setFailedSites(failed);
2071
- const multiSiteResults = Object.entries(multiSiteResultsObj).filter(_ref4 => {
2072
- let [, data] = _ref4;
2073
- return data !== null;
2074
- }).map(_ref5 => {
2075
- let [site, data] = _ref5;
2076
- return {
2077
- site,
2078
- data
2106
+ }), analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime - timeDifference, startTime, true, {
2107
+ userType,
2108
+ userCategory
2109
+ })]);
2110
+ const data = {
2111
+ messages: Analytics$1.countActivities(currentStatsResponse.data, "Message", "total"),
2112
+ prevMessages: Analytics$1.countActivities(prevStatsResponse.data, "Message", "total"),
2113
+ staffMessages: Analytics$1.countActivities(currentStatsResponse.data, "StaffMessage", "total"),
2114
+ prevStaffMessages: Analytics$1.countActivities(prevStatsResponse.data, "StaffMessage", "total"),
2115
+ residentMessages: Analytics$1.countActivities(currentStatsResponse.data, "ResidentMessage", "total"),
2116
+ prevResidentMessages: Analytics$1.countActivities(prevStatsResponse.data, "ResidentMessage", "total"),
2117
+ groupMessages: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "total"),
2118
+ prevGroupMessages: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "total"),
2119
+ privateMessages: Analytics$1.countActivities(currentStatsResponse.data, "PrivateMessage", "total"),
2120
+ prevPrivateMessages: Analytics$1.countActivities(prevStatsResponse.data, "PrivateMessage", "total"),
2121
+ activeGroups: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "unique"),
2122
+ prevActiveGroups: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "unique"),
2123
+ isLoading: false
2079
2124
  };
2080
- });
2081
- const buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
2082
- name: Helper.getSiteNameFromRoles(result.site, roles),
2083
- value: Analytics$1.countActivities(result.data, activityKey, countType)
2084
- }));
2085
- setComparisonData({
2086
- messages: buildComparison("Message", "total"),
2087
- staffMessages: buildComparison("StaffMessage", "total"),
2088
- residentMessages: buildComparison("ResidentMessage", "total"),
2089
- groupMessages: buildComparison("GroupMessage", "total"),
2090
- privateMessages: buildComparison("PrivateMessage", "total"),
2091
- activeGroups: buildComparison("GroupMessage", "unique"),
2092
- isLoading: false
2093
- });
2094
- } else {
2095
- setAnalyticsData(getInitialState());
2096
- const site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
2097
- const timeDifference = endTime - startTime;
2098
- const [currentStatsResponse, prevStatsResponse] = await Promise.all([analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2099
- userType,
2100
- userCategory
2101
- }), analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime - timeDifference, startTime, true, {
2102
- userType,
2103
- userCategory
2104
- })]);
2105
- const data = {
2106
- messages: Analytics$1.countActivities(currentStatsResponse.data, "Message", "total"),
2107
- prevMessages: Analytics$1.countActivities(prevStatsResponse.data, "Message", "total"),
2108
- staffMessages: Analytics$1.countActivities(currentStatsResponse.data, "StaffMessage", "total"),
2109
- prevStaffMessages: Analytics$1.countActivities(prevStatsResponse.data, "StaffMessage", "total"),
2110
- residentMessages: Analytics$1.countActivities(currentStatsResponse.data, "ResidentMessage", "total"),
2111
- prevResidentMessages: Analytics$1.countActivities(prevStatsResponse.data, "ResidentMessage", "total"),
2112
- groupMessages: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "total"),
2113
- prevGroupMessages: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "total"),
2114
- privateMessages: Analytics$1.countActivities(currentStatsResponse.data, "PrivateMessage", "total"),
2115
- prevPrivateMessages: Analytics$1.countActivities(prevStatsResponse.data, "PrivateMessage", "total"),
2116
- activeGroups: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "unique"),
2117
- prevActiveGroups: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "unique"),
2118
- isLoading: false
2119
- };
2120
- setAnalyticsData(data);
2125
+ setAnalyticsData(data);
2126
+ }
2127
+ } catch (err) {
2128
+ if (comparisonMode) {
2129
+ setComparisonData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
2130
+ isLoading: false
2131
+ }));
2132
+ } else {
2133
+ setAnalyticsData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
2134
+ isLoading: false
2135
+ }));
2136
+ }
2121
2137
  }
2122
2138
  };
2123
2139
  const isReadyToOpenCSV = () => {
@@ -2154,14 +2170,14 @@ const AnalyticsHub = _ref => {
2154
2170
  return null;
2155
2171
  }
2156
2172
  const source = getExportSource();
2157
- const filterSuffix = [userType, userCategory].filter(Boolean).map(f => f.toLowerCase().replace(/\s+/g, '-')).join('_');
2173
+ const filterSuffix = [userType, userCategory].filter(Boolean).map(f => f.toLowerCase().replace(/\s+/g, "-")).join("_");
2158
2174
  return /*#__PURE__*/React__default["default"].createElement(Components$1.ExportCsvPopup, {
2159
2175
  onClose: () => {
2160
2176
  setIsExportOpen(false);
2161
2177
  },
2162
2178
  columns: exportColumns,
2163
2179
  source: source,
2164
- filename: "".concat(values.analyticsKey, "analytics").concat(comparisonMode ? '_comparison' : '').concat(filterSuffix ? "_".concat(filterSuffix) : '', "_").concat(source[0].startDate, "_").concat(source[0].endDate, ".csv")
2180
+ filename: "".concat(values.analyticsKey, "analytics").concat(comparisonMode ? "_comparison" : "").concat(filterSuffix ? "_".concat(filterSuffix) : "", "_").concat(source[0].startDate, "_").concat(source[0].endDate, ".csv")
2165
2181
  });
2166
2182
  };
2167
2183
  return /*#__PURE__*/React__default["default"].createElement("div", {
@@ -2181,9 +2197,10 @@ const AnalyticsHub = _ref => {
2181
2197
  }, "Export CSV")), failedSites.length > 0 && /*#__PURE__*/React__default["default"].createElement(Components$1.Text, {
2182
2198
  type: "help",
2183
2199
  style: {
2184
- color: '#c02743'
2200
+ color: Colours$1.COLOUR_RED,
2201
+ marginTop: 8
2185
2202
  }
2186
- }, "Data unavailable for: ", failedSites.join(', ')), /*#__PURE__*/React__default["default"].createElement("div", {
2203
+ }, "Data unavailable for: ", failedSites.join(", ")), /*#__PURE__*/React__default["default"].createElement("div", {
2187
2204
  className: "analyticsSection dashboardSection_content"
2188
2205
  }, (() => {
2189
2206
  const chartSuffix = [selectedSites && selectedSites.length > 0 ? "&sites=".concat(selectedSites.join(",")) : "", userType ? "&userType=".concat(encodeURIComponent(userType)) : "", userCategory ? "&userCategory=".concat(encodeURIComponent(userCategory)) : ""].join("");
package/dist/index.esm.js CHANGED
@@ -753,14 +753,14 @@ var Circles$1 = connect(mapStateToProps$3, {
753
753
  circleRemoved
754
754
  })(Circles);
755
755
 
756
- function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
757
- function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
756
+ function ownKeys$5(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
757
+ function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
758
758
  const {
759
759
  Actions: Actions$1,
760
760
  Components: Components$3,
761
761
  Session: Session$2,
762
762
  Apis,
763
- Colours: Colours$2,
763
+ Colours: Colours$3,
764
764
  Helper: Helper$2
765
765
  } = PlussCore;
766
766
  class AddCircle extends Component {
@@ -779,7 +779,7 @@ class AddCircle extends Component {
779
779
  users: _.sortBy(res.data.results.Items, u => {
780
780
  return (u.displayName || "").toLowerCase();
781
781
  }).map(u => {
782
- return _objectSpread$4(_objectSpread$4({}, u), {}, {
782
+ return _objectSpread$5(_objectSpread$5({}, u), {}, {
783
783
  userId: u.userId || u.Id
784
784
  });
785
785
  })
@@ -1157,7 +1157,7 @@ class AddCircle extends Component {
1157
1157
  }, /*#__PURE__*/React.createElement(Components$3.SVGIcon, {
1158
1158
  className: "removeIcon marginLeft-8",
1159
1159
  icon: "close",
1160
- colour: Colours$2.COLOUR_DUSK,
1160
+ colour: Colours$3.COLOUR_DUSK,
1161
1161
  onClick: () => {
1162
1162
  this.onSelectUser(user);
1163
1163
  }
@@ -1207,14 +1207,14 @@ var AddCircle$1 = connect(mapStateToProps$2, {
1207
1207
  addRecentlyCreated: Actions$1.addRecentlyCreated
1208
1208
  })(withRouter(AddCircle));
1209
1209
 
1210
- function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1211
- function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1210
+ function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1211
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1212
1212
  const {
1213
1213
  Components: Components$2,
1214
1214
  Helper: Helper$1,
1215
1215
  Actions,
1216
1216
  Session: Session$1,
1217
- Colours: Colours$1
1217
+ Colours: Colours$2
1218
1218
  } = PlussCore;
1219
1219
  class Circle extends Component {
1220
1220
  constructor(props) {
@@ -1385,7 +1385,7 @@ class Circle extends Component {
1385
1385
  // Optimistically update UI - mark as deleted immediately
1386
1386
  const updatedMessages = this.state.messages.map(m => {
1387
1387
  if (m._id === messageToDelete._id) {
1388
- return _objectSpread$3(_objectSpread$3({}, m), {}, {
1388
+ return _objectSpread$4(_objectSpread$4({}, m), {}, {
1389
1389
  deleted: true,
1390
1390
  text: " "
1391
1391
  });
@@ -1814,7 +1814,7 @@ class Circle extends Component {
1814
1814
  onClick: () => {
1815
1815
  this.onReply(null);
1816
1816
  },
1817
- colour: Colours$1.COLOUR_DUSK
1817
+ colour: Colours$2.COLOUR_DUSK
1818
1818
  })));
1819
1819
  }
1820
1820
  renderDeleteConfirmPopup() {
@@ -1877,7 +1877,7 @@ class Circle extends Component {
1877
1877
  showMessageDate: !this.state.showMessageDate
1878
1878
  }),
1879
1879
  rightContent: !_.isEmpty(this.state.messageDate) && /*#__PURE__*/React.createElement(Components$2.SVGIcon, {
1880
- colour: Colours$1.COLOUR_DUSK_LIGHT,
1880
+ colour: Colours$2.COLOUR_DUSK_LIGHT,
1881
1881
  icon: "close",
1882
1882
  className: "timepicker_clear",
1883
1883
  onClick: this.onClearDate
@@ -1916,11 +1916,14 @@ var Circle$1 = connect(mapStateToProps$1, {
1916
1916
  setNavData: Actions.setNavData
1917
1917
  })(Circle);
1918
1918
 
1919
+ function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1920
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1919
1921
  const {
1920
1922
  Analytics: Analytics$1,
1921
1923
  Session,
1922
1924
  Components: Components$1,
1923
- Helper
1925
+ Helper,
1926
+ Colours: Colours$1
1924
1927
  } = PlussCore;
1925
1928
  const getInitialState = () => ({
1926
1929
  isLoading: true,
@@ -2009,84 +2012,97 @@ const AnalyticsHub = _ref => {
2009
2012
  getData();
2010
2013
  }, [startTime, endTime, userType, userCategory, selectedSites]);
2011
2014
  const getData = async () => {
2012
- if (comparisonMode) {
2013
- setComparisonData({
2014
- messages: [],
2015
- staffMessages: [],
2016
- residentMessages: [],
2017
- groupMessages: [],
2018
- privateMessages: [],
2019
- activeGroups: [],
2020
- isLoading: true
2021
- });
2022
- const multiSiteResultsObj = await Analytics$1.fetchMultiSiteData(selectedSites, async site => {
2023
- const {
2024
- data
2025
- } = await analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2015
+ try {
2016
+ setFailedSites([]);
2017
+ if (comparisonMode) {
2018
+ setComparisonData({
2019
+ messages: [],
2020
+ staffMessages: [],
2021
+ residentMessages: [],
2022
+ groupMessages: [],
2023
+ privateMessages: [],
2024
+ activeGroups: [],
2025
+ isLoading: true
2026
+ });
2027
+ const multiSiteResultsObj = await Analytics$1.fetchMultiSiteData(selectedSites, async site => {
2028
+ const {
2029
+ data
2030
+ } = await analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2031
+ userType,
2032
+ userCategory
2033
+ });
2034
+ return data;
2035
+ });
2036
+ const roles = auth.user.Roles;
2037
+ const failed = Object.entries(multiSiteResultsObj).filter(_ref2 => {
2038
+ let [, data] = _ref2;
2039
+ return data === null;
2040
+ }).map(_ref3 => {
2041
+ let [site] = _ref3;
2042
+ return Helper.getSiteNameFromRoles(site, roles);
2043
+ });
2044
+ setFailedSites(failed);
2045
+ const multiSiteResults = Object.entries(multiSiteResultsObj).filter(_ref4 => {
2046
+ let [, data] = _ref4;
2047
+ return data !== null;
2048
+ }).map(_ref5 => {
2049
+ let [site, data] = _ref5;
2050
+ return {
2051
+ site,
2052
+ data
2053
+ };
2054
+ });
2055
+ const buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
2056
+ name: Helper.getSiteNameFromRoles(result.site, roles),
2057
+ value: Analytics$1.countActivities(result.data, activityKey, countType)
2058
+ }));
2059
+ setComparisonData({
2060
+ messages: buildComparison("Message", "total"),
2061
+ staffMessages: buildComparison("StaffMessage", "total"),
2062
+ residentMessages: buildComparison("ResidentMessage", "total"),
2063
+ groupMessages: buildComparison("GroupMessage", "total"),
2064
+ privateMessages: buildComparison("PrivateMessage", "total"),
2065
+ activeGroups: buildComparison("GroupMessage", "unique"),
2066
+ isLoading: false
2067
+ });
2068
+ } else {
2069
+ setAnalyticsData(getInitialState());
2070
+ const site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
2071
+ const timeDifference = endTime - startTime;
2072
+ const [currentStatsResponse, prevStatsResponse] = await Promise.all([analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2026
2073
  userType,
2027
2074
  userCategory
2028
- });
2029
- return data;
2030
- });
2031
- const roles = auth.user.Roles;
2032
- const failed = Object.entries(multiSiteResultsObj).filter(_ref2 => {
2033
- let [, data] = _ref2;
2034
- return data === null;
2035
- }).map(_ref3 => {
2036
- let [site] = _ref3;
2037
- return Helper.getSiteNameFromRoles(site, roles);
2038
- });
2039
- setFailedSites(failed);
2040
- const multiSiteResults = Object.entries(multiSiteResultsObj).filter(_ref4 => {
2041
- let [, data] = _ref4;
2042
- return data !== null;
2043
- }).map(_ref5 => {
2044
- let [site, data] = _ref5;
2045
- return {
2046
- site,
2047
- data
2075
+ }), analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime - timeDifference, startTime, true, {
2076
+ userType,
2077
+ userCategory
2078
+ })]);
2079
+ const data = {
2080
+ messages: Analytics$1.countActivities(currentStatsResponse.data, "Message", "total"),
2081
+ prevMessages: Analytics$1.countActivities(prevStatsResponse.data, "Message", "total"),
2082
+ staffMessages: Analytics$1.countActivities(currentStatsResponse.data, "StaffMessage", "total"),
2083
+ prevStaffMessages: Analytics$1.countActivities(prevStatsResponse.data, "StaffMessage", "total"),
2084
+ residentMessages: Analytics$1.countActivities(currentStatsResponse.data, "ResidentMessage", "total"),
2085
+ prevResidentMessages: Analytics$1.countActivities(prevStatsResponse.data, "ResidentMessage", "total"),
2086
+ groupMessages: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "total"),
2087
+ prevGroupMessages: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "total"),
2088
+ privateMessages: Analytics$1.countActivities(currentStatsResponse.data, "PrivateMessage", "total"),
2089
+ prevPrivateMessages: Analytics$1.countActivities(prevStatsResponse.data, "PrivateMessage", "total"),
2090
+ activeGroups: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "unique"),
2091
+ prevActiveGroups: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "unique"),
2092
+ isLoading: false
2048
2093
  };
2049
- });
2050
- const buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
2051
- name: Helper.getSiteNameFromRoles(result.site, roles),
2052
- value: Analytics$1.countActivities(result.data, activityKey, countType)
2053
- }));
2054
- setComparisonData({
2055
- messages: buildComparison("Message", "total"),
2056
- staffMessages: buildComparison("StaffMessage", "total"),
2057
- residentMessages: buildComparison("ResidentMessage", "total"),
2058
- groupMessages: buildComparison("GroupMessage", "total"),
2059
- privateMessages: buildComparison("PrivateMessage", "total"),
2060
- activeGroups: buildComparison("GroupMessage", "unique"),
2061
- isLoading: false
2062
- });
2063
- } else {
2064
- setAnalyticsData(getInitialState());
2065
- const site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
2066
- const timeDifference = endTime - startTime;
2067
- const [currentStatsResponse, prevStatsResponse] = await Promise.all([analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2068
- userType,
2069
- userCategory
2070
- }), analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime - timeDifference, startTime, true, {
2071
- userType,
2072
- userCategory
2073
- })]);
2074
- const data = {
2075
- messages: Analytics$1.countActivities(currentStatsResponse.data, "Message", "total"),
2076
- prevMessages: Analytics$1.countActivities(prevStatsResponse.data, "Message", "total"),
2077
- staffMessages: Analytics$1.countActivities(currentStatsResponse.data, "StaffMessage", "total"),
2078
- prevStaffMessages: Analytics$1.countActivities(prevStatsResponse.data, "StaffMessage", "total"),
2079
- residentMessages: Analytics$1.countActivities(currentStatsResponse.data, "ResidentMessage", "total"),
2080
- prevResidentMessages: Analytics$1.countActivities(prevStatsResponse.data, "ResidentMessage", "total"),
2081
- groupMessages: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "total"),
2082
- prevGroupMessages: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "total"),
2083
- privateMessages: Analytics$1.countActivities(currentStatsResponse.data, "PrivateMessage", "total"),
2084
- prevPrivateMessages: Analytics$1.countActivities(prevStatsResponse.data, "PrivateMessage", "total"),
2085
- activeGroups: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "unique"),
2086
- prevActiveGroups: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "unique"),
2087
- isLoading: false
2088
- };
2089
- setAnalyticsData(data);
2094
+ setAnalyticsData(data);
2095
+ }
2096
+ } catch (err) {
2097
+ if (comparisonMode) {
2098
+ setComparisonData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
2099
+ isLoading: false
2100
+ }));
2101
+ } else {
2102
+ setAnalyticsData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
2103
+ isLoading: false
2104
+ }));
2105
+ }
2090
2106
  }
2091
2107
  };
2092
2108
  const isReadyToOpenCSV = () => {
@@ -2123,14 +2139,14 @@ const AnalyticsHub = _ref => {
2123
2139
  return null;
2124
2140
  }
2125
2141
  const source = getExportSource();
2126
- const filterSuffix = [userType, userCategory].filter(Boolean).map(f => f.toLowerCase().replace(/\s+/g, '-')).join('_');
2142
+ const filterSuffix = [userType, userCategory].filter(Boolean).map(f => f.toLowerCase().replace(/\s+/g, "-")).join("_");
2127
2143
  return /*#__PURE__*/React.createElement(Components$1.ExportCsvPopup, {
2128
2144
  onClose: () => {
2129
2145
  setIsExportOpen(false);
2130
2146
  },
2131
2147
  columns: exportColumns,
2132
2148
  source: source,
2133
- filename: "".concat(values.analyticsKey, "analytics").concat(comparisonMode ? '_comparison' : '').concat(filterSuffix ? "_".concat(filterSuffix) : '', "_").concat(source[0].startDate, "_").concat(source[0].endDate, ".csv")
2149
+ filename: "".concat(values.analyticsKey, "analytics").concat(comparisonMode ? "_comparison" : "").concat(filterSuffix ? "_".concat(filterSuffix) : "", "_").concat(source[0].startDate, "_").concat(source[0].endDate, ".csv")
2134
2150
  });
2135
2151
  };
2136
2152
  return /*#__PURE__*/React.createElement("div", {
@@ -2150,9 +2166,10 @@ const AnalyticsHub = _ref => {
2150
2166
  }, "Export CSV")), failedSites.length > 0 && /*#__PURE__*/React.createElement(Components$1.Text, {
2151
2167
  type: "help",
2152
2168
  style: {
2153
- color: '#c02743'
2169
+ color: Colours$1.COLOUR_RED,
2170
+ marginTop: 8
2154
2171
  }
2155
- }, "Data unavailable for: ", failedSites.join(', ')), /*#__PURE__*/React.createElement("div", {
2172
+ }, "Data unavailable for: ", failedSites.join(", ")), /*#__PURE__*/React.createElement("div", {
2156
2173
  className: "analyticsSection dashboardSection_content"
2157
2174
  }, (() => {
2158
2175
  const chartSuffix = [selectedSites && selectedSites.length > 0 ? "&sites=".concat(selectedSites.join(",")) : "", userType ? "&userType=".concat(encodeURIComponent(userType)) : "", userCategory ? "&userCategory=".concat(encodeURIComponent(userCategory)) : ""].join("");
package/dist/index.umd.js CHANGED
@@ -774,14 +774,14 @@
774
774
  circleRemoved
775
775
  })(Circles);
776
776
 
777
- function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
778
- function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
777
+ function ownKeys$5(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
778
+ function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
779
779
  const {
780
780
  Actions: Actions$1,
781
781
  Components: Components$3,
782
782
  Session: Session$2,
783
783
  Apis,
784
- Colours: Colours$2,
784
+ Colours: Colours$3,
785
785
  Helper: Helper$2
786
786
  } = PlussCore__namespace;
787
787
  class AddCircle extends React.Component {
@@ -800,7 +800,7 @@
800
800
  users: ___default["default"].sortBy(res.data.results.Items, u => {
801
801
  return (u.displayName || "").toLowerCase();
802
802
  }).map(u => {
803
- return _objectSpread$4(_objectSpread$4({}, u), {}, {
803
+ return _objectSpread$5(_objectSpread$5({}, u), {}, {
804
804
  userId: u.userId || u.Id
805
805
  });
806
806
  })
@@ -1178,7 +1178,7 @@
1178
1178
  }, /*#__PURE__*/React__default["default"].createElement(Components$3.SVGIcon, {
1179
1179
  className: "removeIcon marginLeft-8",
1180
1180
  icon: "close",
1181
- colour: Colours$2.COLOUR_DUSK,
1181
+ colour: Colours$3.COLOUR_DUSK,
1182
1182
  onClick: () => {
1183
1183
  this.onSelectUser(user);
1184
1184
  }
@@ -1228,14 +1228,14 @@
1228
1228
  addRecentlyCreated: Actions$1.addRecentlyCreated
1229
1229
  })(reactRouter.withRouter(AddCircle));
1230
1230
 
1231
- function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1232
- function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1231
+ function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1232
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1233
1233
  const {
1234
1234
  Components: Components$2,
1235
1235
  Helper: Helper$1,
1236
1236
  Actions,
1237
1237
  Session: Session$1,
1238
- Colours: Colours$1
1238
+ Colours: Colours$2
1239
1239
  } = PlussCore__namespace;
1240
1240
  class Circle extends React.Component {
1241
1241
  constructor(props) {
@@ -1406,7 +1406,7 @@
1406
1406
  // Optimistically update UI - mark as deleted immediately
1407
1407
  const updatedMessages = this.state.messages.map(m => {
1408
1408
  if (m._id === messageToDelete._id) {
1409
- return _objectSpread$3(_objectSpread$3({}, m), {}, {
1409
+ return _objectSpread$4(_objectSpread$4({}, m), {}, {
1410
1410
  deleted: true,
1411
1411
  text: " "
1412
1412
  });
@@ -1835,7 +1835,7 @@
1835
1835
  onClick: () => {
1836
1836
  this.onReply(null);
1837
1837
  },
1838
- colour: Colours$1.COLOUR_DUSK
1838
+ colour: Colours$2.COLOUR_DUSK
1839
1839
  })));
1840
1840
  }
1841
1841
  renderDeleteConfirmPopup() {
@@ -1898,7 +1898,7 @@
1898
1898
  showMessageDate: !this.state.showMessageDate
1899
1899
  }),
1900
1900
  rightContent: !___default["default"].isEmpty(this.state.messageDate) && /*#__PURE__*/React__default["default"].createElement(Components$2.SVGIcon, {
1901
- colour: Colours$1.COLOUR_DUSK_LIGHT,
1901
+ colour: Colours$2.COLOUR_DUSK_LIGHT,
1902
1902
  icon: "close",
1903
1903
  className: "timepicker_clear",
1904
1904
  onClick: this.onClearDate
@@ -1937,11 +1937,14 @@
1937
1937
  setNavData: Actions.setNavData
1938
1938
  })(Circle);
1939
1939
 
1940
+ function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1941
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1940
1942
  const {
1941
1943
  Analytics: Analytics$1,
1942
1944
  Session,
1943
1945
  Components: Components$1,
1944
- Helper
1946
+ Helper,
1947
+ Colours: Colours$1
1945
1948
  } = PlussCore__namespace;
1946
1949
  const getInitialState = () => ({
1947
1950
  isLoading: true,
@@ -2030,84 +2033,97 @@
2030
2033
  getData();
2031
2034
  }, [startTime, endTime, userType, userCategory, selectedSites]);
2032
2035
  const getData = async () => {
2033
- if (comparisonMode) {
2034
- setComparisonData({
2035
- messages: [],
2036
- staffMessages: [],
2037
- residentMessages: [],
2038
- groupMessages: [],
2039
- privateMessages: [],
2040
- activeGroups: [],
2041
- isLoading: true
2042
- });
2043
- const multiSiteResultsObj = await Analytics$1.fetchMultiSiteData(selectedSites, async site => {
2044
- const {
2045
- data
2046
- } = await analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2036
+ try {
2037
+ setFailedSites([]);
2038
+ if (comparisonMode) {
2039
+ setComparisonData({
2040
+ messages: [],
2041
+ staffMessages: [],
2042
+ residentMessages: [],
2043
+ groupMessages: [],
2044
+ privateMessages: [],
2045
+ activeGroups: [],
2046
+ isLoading: true
2047
+ });
2048
+ const multiSiteResultsObj = await Analytics$1.fetchMultiSiteData(selectedSites, async site => {
2049
+ const {
2050
+ data
2051
+ } = await analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2052
+ userType,
2053
+ userCategory
2054
+ });
2055
+ return data;
2056
+ });
2057
+ const roles = auth.user.Roles;
2058
+ const failed = Object.entries(multiSiteResultsObj).filter(_ref2 => {
2059
+ let [, data] = _ref2;
2060
+ return data === null;
2061
+ }).map(_ref3 => {
2062
+ let [site] = _ref3;
2063
+ return Helper.getSiteNameFromRoles(site, roles);
2064
+ });
2065
+ setFailedSites(failed);
2066
+ const multiSiteResults = Object.entries(multiSiteResultsObj).filter(_ref4 => {
2067
+ let [, data] = _ref4;
2068
+ return data !== null;
2069
+ }).map(_ref5 => {
2070
+ let [site, data] = _ref5;
2071
+ return {
2072
+ site,
2073
+ data
2074
+ };
2075
+ });
2076
+ const buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
2077
+ name: Helper.getSiteNameFromRoles(result.site, roles),
2078
+ value: Analytics$1.countActivities(result.data, activityKey, countType)
2079
+ }));
2080
+ setComparisonData({
2081
+ messages: buildComparison("Message", "total"),
2082
+ staffMessages: buildComparison("StaffMessage", "total"),
2083
+ residentMessages: buildComparison("ResidentMessage", "total"),
2084
+ groupMessages: buildComparison("GroupMessage", "total"),
2085
+ privateMessages: buildComparison("PrivateMessage", "total"),
2086
+ activeGroups: buildComparison("GroupMessage", "unique"),
2087
+ isLoading: false
2088
+ });
2089
+ } else {
2090
+ setAnalyticsData(getInitialState());
2091
+ const site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
2092
+ const timeDifference = endTime - startTime;
2093
+ const [currentStatsResponse, prevStatsResponse] = await Promise.all([analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2047
2094
  userType,
2048
2095
  userCategory
2049
- });
2050
- return data;
2051
- });
2052
- const roles = auth.user.Roles;
2053
- const failed = Object.entries(multiSiteResultsObj).filter(_ref2 => {
2054
- let [, data] = _ref2;
2055
- return data === null;
2056
- }).map(_ref3 => {
2057
- let [site] = _ref3;
2058
- return Helper.getSiteNameFromRoles(site, roles);
2059
- });
2060
- setFailedSites(failed);
2061
- const multiSiteResults = Object.entries(multiSiteResultsObj).filter(_ref4 => {
2062
- let [, data] = _ref4;
2063
- return data !== null;
2064
- }).map(_ref5 => {
2065
- let [site, data] = _ref5;
2066
- return {
2067
- site,
2068
- data
2096
+ }), analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime - timeDifference, startTime, true, {
2097
+ userType,
2098
+ userCategory
2099
+ })]);
2100
+ const data = {
2101
+ messages: Analytics$1.countActivities(currentStatsResponse.data, "Message", "total"),
2102
+ prevMessages: Analytics$1.countActivities(prevStatsResponse.data, "Message", "total"),
2103
+ staffMessages: Analytics$1.countActivities(currentStatsResponse.data, "StaffMessage", "total"),
2104
+ prevStaffMessages: Analytics$1.countActivities(prevStatsResponse.data, "StaffMessage", "total"),
2105
+ residentMessages: Analytics$1.countActivities(currentStatsResponse.data, "ResidentMessage", "total"),
2106
+ prevResidentMessages: Analytics$1.countActivities(prevStatsResponse.data, "ResidentMessage", "total"),
2107
+ groupMessages: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "total"),
2108
+ prevGroupMessages: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "total"),
2109
+ privateMessages: Analytics$1.countActivities(currentStatsResponse.data, "PrivateMessage", "total"),
2110
+ prevPrivateMessages: Analytics$1.countActivities(prevStatsResponse.data, "PrivateMessage", "total"),
2111
+ activeGroups: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "unique"),
2112
+ prevActiveGroups: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "unique"),
2113
+ isLoading: false
2069
2114
  };
2070
- });
2071
- const buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
2072
- name: Helper.getSiteNameFromRoles(result.site, roles),
2073
- value: Analytics$1.countActivities(result.data, activityKey, countType)
2074
- }));
2075
- setComparisonData({
2076
- messages: buildComparison("Message", "total"),
2077
- staffMessages: buildComparison("StaffMessage", "total"),
2078
- residentMessages: buildComparison("ResidentMessage", "total"),
2079
- groupMessages: buildComparison("GroupMessage", "total"),
2080
- privateMessages: buildComparison("PrivateMessage", "total"),
2081
- activeGroups: buildComparison("GroupMessage", "unique"),
2082
- isLoading: false
2083
- });
2084
- } else {
2085
- setAnalyticsData(getInitialState());
2086
- const site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
2087
- const timeDifference = endTime - startTime;
2088
- const [currentStatsResponse, prevStatsResponse] = await Promise.all([analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime, endTime, true, {
2089
- userType,
2090
- userCategory
2091
- }), analyticsActions.getAggregateEntityStats(site, values.entityKey, startTime - timeDifference, startTime, true, {
2092
- userType,
2093
- userCategory
2094
- })]);
2095
- const data = {
2096
- messages: Analytics$1.countActivities(currentStatsResponse.data, "Message", "total"),
2097
- prevMessages: Analytics$1.countActivities(prevStatsResponse.data, "Message", "total"),
2098
- staffMessages: Analytics$1.countActivities(currentStatsResponse.data, "StaffMessage", "total"),
2099
- prevStaffMessages: Analytics$1.countActivities(prevStatsResponse.data, "StaffMessage", "total"),
2100
- residentMessages: Analytics$1.countActivities(currentStatsResponse.data, "ResidentMessage", "total"),
2101
- prevResidentMessages: Analytics$1.countActivities(prevStatsResponse.data, "ResidentMessage", "total"),
2102
- groupMessages: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "total"),
2103
- prevGroupMessages: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "total"),
2104
- privateMessages: Analytics$1.countActivities(currentStatsResponse.data, "PrivateMessage", "total"),
2105
- prevPrivateMessages: Analytics$1.countActivities(prevStatsResponse.data, "PrivateMessage", "total"),
2106
- activeGroups: Analytics$1.countActivities(currentStatsResponse.data, "GroupMessage", "unique"),
2107
- prevActiveGroups: Analytics$1.countActivities(prevStatsResponse.data, "GroupMessage", "unique"),
2108
- isLoading: false
2109
- };
2110
- setAnalyticsData(data);
2115
+ setAnalyticsData(data);
2116
+ }
2117
+ } catch (err) {
2118
+ if (comparisonMode) {
2119
+ setComparisonData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
2120
+ isLoading: false
2121
+ }));
2122
+ } else {
2123
+ setAnalyticsData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
2124
+ isLoading: false
2125
+ }));
2126
+ }
2111
2127
  }
2112
2128
  };
2113
2129
  const isReadyToOpenCSV = () => {
@@ -2144,14 +2160,14 @@
2144
2160
  return null;
2145
2161
  }
2146
2162
  const source = getExportSource();
2147
- const filterSuffix = [userType, userCategory].filter(Boolean).map(f => f.toLowerCase().replace(/\s+/g, '-')).join('_');
2163
+ const filterSuffix = [userType, userCategory].filter(Boolean).map(f => f.toLowerCase().replace(/\s+/g, "-")).join("_");
2148
2164
  return /*#__PURE__*/React__default["default"].createElement(Components$1.ExportCsvPopup, {
2149
2165
  onClose: () => {
2150
2166
  setIsExportOpen(false);
2151
2167
  },
2152
2168
  columns: exportColumns,
2153
2169
  source: source,
2154
- filename: "".concat(values.analyticsKey, "analytics").concat(comparisonMode ? '_comparison' : '').concat(filterSuffix ? "_".concat(filterSuffix) : '', "_").concat(source[0].startDate, "_").concat(source[0].endDate, ".csv")
2170
+ filename: "".concat(values.analyticsKey, "analytics").concat(comparisonMode ? "_comparison" : "").concat(filterSuffix ? "_".concat(filterSuffix) : "", "_").concat(source[0].startDate, "_").concat(source[0].endDate, ".csv")
2155
2171
  });
2156
2172
  };
2157
2173
  return /*#__PURE__*/React__default["default"].createElement("div", {
@@ -2171,9 +2187,10 @@
2171
2187
  }, "Export CSV")), failedSites.length > 0 && /*#__PURE__*/React__default["default"].createElement(Components$1.Text, {
2172
2188
  type: "help",
2173
2189
  style: {
2174
- color: '#c02743'
2190
+ color: Colours$1.COLOUR_RED,
2191
+ marginTop: 8
2175
2192
  }
2176
- }, "Data unavailable for: ", failedSites.join(', ')), /*#__PURE__*/React__default["default"].createElement("div", {
2193
+ }, "Data unavailable for: ", failedSites.join(", ")), /*#__PURE__*/React__default["default"].createElement("div", {
2177
2194
  className: "analyticsSection dashboardSection_content"
2178
2195
  }, (() => {
2179
2196
  const chartSuffix = [selectedSites && selectedSites.length > 0 ? "&sites=".concat(selectedSites.join(",")) : "", userType ? "&userType=".concat(encodeURIComponent(userType)) : "", userCategory ? "&userCategory=".concat(encodeURIComponent(userCategory)) : ""].join("");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-circles-web-groups",
3
- "version": "1.5.11-beta.2",
3
+ "version": "1.5.11-beta.4",
4
4
  "description": "Extension package to enable circles on Pluss Communities Platform",
5
5
  "main": "dist/index.cjs.js",
6
6
  "scripts": {
package/package.json-e CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-circles-web",
3
- "version": "1.5.11-beta.2",
3
+ "version": "1.5.11-beta.4",
4
4
  "description": "Extension package to enable circles on Pluss Communities Platform",
5
5
  "main": "dist/index.cjs.js",
6
6
  "scripts": {
@@ -1,7 +1,6 @@
1
1
  import React, { useState, useEffect } from "react";
2
2
  import moment from "moment";
3
3
  import {
4
- faEye,
5
4
  faMessage,
6
5
  faPeopleArrows,
7
6
  faUserGroup,
@@ -14,7 +13,7 @@ import { analyticsActions } from "../apis";
14
13
  import { values } from "../values.config";
15
14
  import { PlussCore } from "../feature.config";
16
15
 
17
- const { Analytics, Session, Components, Helper } = PlussCore;
16
+ const { Analytics, Session, Components, Helper, Colours } = PlussCore;
18
17
 
19
18
  const getInitialState = () => ({
20
19
  isLoading: true,
@@ -93,142 +92,155 @@ const AnalyticsHub = ({
93
92
  }, [startTime, endTime, userType, userCategory, selectedSites]);
94
93
 
95
94
  const getData = async () => {
96
- if (comparisonMode) {
97
- setComparisonData({
98
- messages: [],
99
- staffMessages: [],
100
- residentMessages: [],
101
- groupMessages: [],
102
- privateMessages: [],
103
- activeGroups: [],
104
- isLoading: true,
105
- });
106
- const multiSiteResultsObj = await Analytics.fetchMultiSiteData(
107
- selectedSites,
108
- async (site) => {
109
- const { data } = await analyticsActions.getAggregateEntityStats(
95
+ try {
96
+ setFailedSites([]);
97
+ if (comparisonMode) {
98
+ setComparisonData({
99
+ messages: [],
100
+ staffMessages: [],
101
+ residentMessages: [],
102
+ groupMessages: [],
103
+ privateMessages: [],
104
+ activeGroups: [],
105
+ isLoading: true,
106
+ });
107
+ const multiSiteResultsObj = await Analytics.fetchMultiSiteData(
108
+ selectedSites,
109
+ async (site) => {
110
+ const { data } = await analyticsActions.getAggregateEntityStats(
111
+ site,
112
+ values.entityKey,
113
+ startTime,
114
+ endTime,
115
+ true,
116
+ { userType, userCategory },
117
+ );
118
+ return data;
119
+ },
120
+ );
121
+ const roles = auth.user.Roles;
122
+ const failed = Object.entries(multiSiteResultsObj)
123
+ .filter(([, data]) => data === null)
124
+ .map(([site]) => Helper.getSiteNameFromRoles(site, roles));
125
+ setFailedSites(failed);
126
+ const multiSiteResults = Object.entries(multiSiteResultsObj)
127
+ .filter(([, data]) => data !== null)
128
+ .map(([site, data]) => ({ site, data }));
129
+ const buildComparison = (activityKey, countType) =>
130
+ multiSiteResults.map((result) => ({
131
+ name: Helper.getSiteNameFromRoles(result.site, roles),
132
+ value: Analytics.countActivities(
133
+ result.data,
134
+ activityKey,
135
+ countType,
136
+ ),
137
+ }));
138
+ setComparisonData({
139
+ messages: buildComparison("Message", "total"),
140
+ staffMessages: buildComparison("StaffMessage", "total"),
141
+ residentMessages: buildComparison("ResidentMessage", "total"),
142
+ groupMessages: buildComparison("GroupMessage", "total"),
143
+ privateMessages: buildComparison("PrivateMessage", "total"),
144
+ activeGroups: buildComparison("GroupMessage", "unique"),
145
+ isLoading: false,
146
+ });
147
+ } else {
148
+ setAnalyticsData(getInitialState());
149
+ const site =
150
+ selectedSites && selectedSites.length === 1
151
+ ? selectedSites[0]
152
+ : auth.site;
153
+ const timeDifference = endTime - startTime;
154
+ const [currentStatsResponse, prevStatsResponse] = await Promise.all([
155
+ analyticsActions.getAggregateEntityStats(
110
156
  site,
111
157
  values.entityKey,
112
158
  startTime,
113
159
  endTime,
114
160
  true,
115
161
  { userType, userCategory },
116
- );
117
- return data;
118
- },
119
- );
120
- const roles = auth.user.Roles;
121
- const failed = Object.entries(multiSiteResultsObj)
122
- .filter(([, data]) => data === null)
123
- .map(([site]) => Helper.getSiteNameFromRoles(site, roles));
124
- setFailedSites(failed);
125
- const multiSiteResults = Object.entries(multiSiteResultsObj)
126
- .filter(([, data]) => data !== null)
127
- .map(([site, data]) => ({ site, data }));
128
- const buildComparison = (activityKey, countType) =>
129
- multiSiteResults.map((result) => ({
130
- name: Helper.getSiteNameFromRoles(result.site, roles),
131
- value: Analytics.countActivities(result.data, activityKey, countType),
132
- }));
133
- setComparisonData({
134
- messages: buildComparison("Message", "total"),
135
- staffMessages: buildComparison("StaffMessage", "total"),
136
- residentMessages: buildComparison("ResidentMessage", "total"),
137
- groupMessages: buildComparison("GroupMessage", "total"),
138
- privateMessages: buildComparison("PrivateMessage", "total"),
139
- activeGroups: buildComparison("GroupMessage", "unique"),
140
- isLoading: false,
141
- });
142
- } else {
143
- setAnalyticsData(getInitialState());
144
- const site =
145
- selectedSites && selectedSites.length === 1
146
- ? selectedSites[0]
147
- : auth.site;
148
- const timeDifference = endTime - startTime;
149
- const [currentStatsResponse, prevStatsResponse] = await Promise.all([
150
- analyticsActions.getAggregateEntityStats(
151
- site,
152
- values.entityKey,
153
- startTime,
154
- endTime,
155
- true,
156
- { userType, userCategory },
157
- ),
158
- analyticsActions.getAggregateEntityStats(
159
- site,
160
- values.entityKey,
161
- startTime - timeDifference,
162
- startTime,
163
- true,
164
- { userType, userCategory },
165
- ),
166
- ]);
162
+ ),
163
+ analyticsActions.getAggregateEntityStats(
164
+ site,
165
+ values.entityKey,
166
+ startTime - timeDifference,
167
+ startTime,
168
+ true,
169
+ { userType, userCategory },
170
+ ),
171
+ ]);
167
172
 
168
- const data = {
169
- messages: Analytics.countActivities(
170
- currentStatsResponse.data,
171
- "Message",
172
- "total",
173
- ),
174
- prevMessages: Analytics.countActivities(
175
- prevStatsResponse.data,
176
- "Message",
177
- "total",
178
- ),
179
- staffMessages: Analytics.countActivities(
180
- currentStatsResponse.data,
181
- "StaffMessage",
182
- "total",
183
- ),
184
- prevStaffMessages: Analytics.countActivities(
185
- prevStatsResponse.data,
186
- "StaffMessage",
187
- "total",
188
- ),
189
- residentMessages: Analytics.countActivities(
190
- currentStatsResponse.data,
191
- "ResidentMessage",
192
- "total",
193
- ),
194
- prevResidentMessages: Analytics.countActivities(
195
- prevStatsResponse.data,
196
- "ResidentMessage",
197
- "total",
198
- ),
199
- groupMessages: Analytics.countActivities(
200
- currentStatsResponse.data,
201
- "GroupMessage",
202
- "total",
203
- ),
204
- prevGroupMessages: Analytics.countActivities(
205
- prevStatsResponse.data,
206
- "GroupMessage",
207
- "total",
208
- ),
209
- privateMessages: Analytics.countActivities(
210
- currentStatsResponse.data,
211
- "PrivateMessage",
212
- "total",
213
- ),
214
- prevPrivateMessages: Analytics.countActivities(
215
- prevStatsResponse.data,
216
- "PrivateMessage",
217
- "total",
218
- ),
219
- activeGroups: Analytics.countActivities(
220
- currentStatsResponse.data,
221
- "GroupMessage",
222
- "unique",
223
- ),
224
- prevActiveGroups: Analytics.countActivities(
225
- prevStatsResponse.data,
226
- "GroupMessage",
227
- "unique",
228
- ),
229
- isLoading: false,
230
- };
231
- setAnalyticsData(data);
173
+ const data = {
174
+ messages: Analytics.countActivities(
175
+ currentStatsResponse.data,
176
+ "Message",
177
+ "total",
178
+ ),
179
+ prevMessages: Analytics.countActivities(
180
+ prevStatsResponse.data,
181
+ "Message",
182
+ "total",
183
+ ),
184
+ staffMessages: Analytics.countActivities(
185
+ currentStatsResponse.data,
186
+ "StaffMessage",
187
+ "total",
188
+ ),
189
+ prevStaffMessages: Analytics.countActivities(
190
+ prevStatsResponse.data,
191
+ "StaffMessage",
192
+ "total",
193
+ ),
194
+ residentMessages: Analytics.countActivities(
195
+ currentStatsResponse.data,
196
+ "ResidentMessage",
197
+ "total",
198
+ ),
199
+ prevResidentMessages: Analytics.countActivities(
200
+ prevStatsResponse.data,
201
+ "ResidentMessage",
202
+ "total",
203
+ ),
204
+ groupMessages: Analytics.countActivities(
205
+ currentStatsResponse.data,
206
+ "GroupMessage",
207
+ "total",
208
+ ),
209
+ prevGroupMessages: Analytics.countActivities(
210
+ prevStatsResponse.data,
211
+ "GroupMessage",
212
+ "total",
213
+ ),
214
+ privateMessages: Analytics.countActivities(
215
+ currentStatsResponse.data,
216
+ "PrivateMessage",
217
+ "total",
218
+ ),
219
+ prevPrivateMessages: Analytics.countActivities(
220
+ prevStatsResponse.data,
221
+ "PrivateMessage",
222
+ "total",
223
+ ),
224
+ activeGroups: Analytics.countActivities(
225
+ currentStatsResponse.data,
226
+ "GroupMessage",
227
+ "unique",
228
+ ),
229
+ prevActiveGroups: Analytics.countActivities(
230
+ prevStatsResponse.data,
231
+ "GroupMessage",
232
+ "unique",
233
+ ),
234
+ isLoading: false,
235
+ };
236
+ setAnalyticsData(data);
237
+ }
238
+ } catch (err) {
239
+ if (comparisonMode) {
240
+ setComparisonData((prev) => ({ ...prev, isLoading: false }));
241
+ } else {
242
+ setAnalyticsData((prev) => ({ ...prev, isLoading: false }));
243
+ }
232
244
  }
233
245
  };
234
246
 
@@ -246,11 +258,26 @@ const AnalyticsHub = ({
246
258
  startDate: moment(startTime + 1).format("D-MM-YYYY"),
247
259
  endDate: moment(endTime).format("D-MM-YYYY"),
248
260
  messages: site.value,
249
- staffMessages: (comparisonData.staffMessages[i] && comparisonData.staffMessages[i].value) || 0,
250
- residentMessages: (comparisonData.residentMessages[i] && comparisonData.residentMessages[i].value) || 0,
251
- groupMessages: (comparisonData.groupMessages[i] && comparisonData.groupMessages[i].value) || 0,
252
- privateMessages: (comparisonData.privateMessages[i] && comparisonData.privateMessages[i].value) || 0,
253
- activeGroups: (comparisonData.activeGroups[i] && comparisonData.activeGroups[i].value) || 0,
261
+ staffMessages:
262
+ (comparisonData.staffMessages[i] &&
263
+ comparisonData.staffMessages[i].value) ||
264
+ 0,
265
+ residentMessages:
266
+ (comparisonData.residentMessages[i] &&
267
+ comparisonData.residentMessages[i].value) ||
268
+ 0,
269
+ groupMessages:
270
+ (comparisonData.groupMessages[i] &&
271
+ comparisonData.groupMessages[i].value) ||
272
+ 0,
273
+ privateMessages:
274
+ (comparisonData.privateMessages[i] &&
275
+ comparisonData.privateMessages[i].value) ||
276
+ 0,
277
+ activeGroups:
278
+ (comparisonData.activeGroups[i] &&
279
+ comparisonData.activeGroups[i].value) ||
280
+ 0,
254
281
  }));
255
282
  }
256
283
  return [
@@ -272,7 +299,10 @@ const AnalyticsHub = ({
272
299
  return null;
273
300
  }
274
301
  const source = getExportSource();
275
- const filterSuffix = [userType, userCategory].filter(Boolean).map((f) => f.toLowerCase().replace(/\s+/g, '-')).join('_');
302
+ const filterSuffix = [userType, userCategory]
303
+ .filter(Boolean)
304
+ .map((f) => f.toLowerCase().replace(/\s+/g, "-"))
305
+ .join("_");
276
306
  return (
277
307
  <Components.ExportCsvPopup
278
308
  onClose={() => {
@@ -280,7 +310,7 @@ const AnalyticsHub = ({
280
310
  }}
281
311
  columns={exportColumns}
282
312
  source={source}
283
- filename={`${values.analyticsKey}analytics${comparisonMode ? '_comparison' : ''}${filterSuffix ? `_${filterSuffix}` : ''}_${source[0].startDate}_${source[0].endDate}.csv`}
313
+ filename={`${values.analyticsKey}analytics${comparisonMode ? "_comparison" : ""}${filterSuffix ? `_${filterSuffix}` : ""}_${source[0].startDate}_${source[0].endDate}.csv`}
284
314
  />
285
315
  );
286
316
  };
@@ -306,8 +336,8 @@ const AnalyticsHub = ({
306
336
  </Components.Button>
307
337
  </div>
308
338
  {failedSites.length > 0 && (
309
- <Components.Text type="help" style={{ color: '#c02743' }}>
310
- Data unavailable for: {failedSites.join(', ')}
339
+ <Components.Text type="help" style={{ color: Colours.COLOUR_RED, marginTop: 8 }}>
340
+ Data unavailable for: {failedSites.join(", ")}
311
341
  </Components.Text>
312
342
  )}
313
343
  <div className="analyticsSection dashboardSection_content">