@northern.tech/store 0.12.0 → 0.13.0

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.
Files changed (176) hide show
  1. package/dist/actions.cjs +20 -16
  2. package/dist/actions.cjs.map +1 -1
  3. package/dist/actions.d.cts +7 -22
  4. package/dist/actions.d.ts +7 -22
  5. package/dist/actions.js +8 -8
  6. package/dist/appSlice/index.cjs.map +1 -1
  7. package/dist/appSlice/index.d.cts +1 -1
  8. package/dist/appSlice/index.d.ts +1 -1
  9. package/dist/appSlice/index.js +1 -1
  10. package/dist/appSlice/mocks.cjs.map +1 -1
  11. package/dist/appSlice/mocks.js +1 -1
  12. package/dist/appSlice/selectors.d.cts +34 -528
  13. package/dist/appSlice/selectors.d.ts +34 -528
  14. package/dist/appSlice/thunks.cjs +45 -41
  15. package/dist/appSlice/thunks.cjs.map +1 -1
  16. package/dist/appSlice/thunks.d.cts +5 -3
  17. package/dist/appSlice/thunks.d.ts +5 -3
  18. package/dist/appSlice/thunks.js +14 -14
  19. package/dist/{chunk-QOFVCPRW.js → chunk-5PUF4LA5.js} +1 -1
  20. package/dist/chunk-5PUF4LA5.js.map +1 -0
  21. package/dist/{chunk-TKIOEF3B.js → chunk-6KAV62BW.js} +6 -6
  22. package/dist/{chunk-OFGCC3GM.js → chunk-7MTM3BDT.js} +1 -1
  23. package/dist/chunk-7MTM3BDT.js.map +1 -0
  24. package/dist/{chunk-4HSH7RH3.js → chunk-AR4FTKSL.js} +8 -8
  25. package/dist/{chunk-ZRMB4U7Z.js → chunk-BZAXFAGT.js} +4 -4
  26. package/dist/{chunk-ZNAJKEP2.js → chunk-CQXDAXQF.js} +1 -1
  27. package/dist/chunk-CQXDAXQF.js.map +1 -0
  28. package/dist/{chunk-5ZCZTTYX.js → chunk-EOZ665GA.js} +2 -2
  29. package/dist/{chunk-C5NXNZ7F.js → chunk-ETZVJXPD.js} +23 -30
  30. package/dist/chunk-ETZVJXPD.js.map +1 -0
  31. package/dist/{chunk-WCBHYLUK.js → chunk-KJ4BPXMB.js} +1 -1
  32. package/dist/chunk-KJ4BPXMB.js.map +1 -0
  33. package/dist/{chunk-C2LGE3P6.js → chunk-OLKM53RL.js} +1 -1
  34. package/dist/chunk-OLKM53RL.js.map +1 -0
  35. package/dist/{chunk-HLX5L3IM.js → chunk-PVCHKW35.js} +1 -1
  36. package/dist/chunk-PVCHKW35.js.map +1 -0
  37. package/dist/{chunk-REZWSU22.js → chunk-VODRLEDP.js} +21 -17
  38. package/dist/chunk-VODRLEDP.js.map +1 -0
  39. package/dist/{chunk-MH5WPYQI.js → chunk-X7NEALMI.js} +16 -9
  40. package/dist/chunk-X7NEALMI.js.map +1 -0
  41. package/dist/{chunk-OGUVURJ5.js → chunk-YFAIYNQG.js} +9 -9
  42. package/dist/commonSelectors.cjs +15 -8
  43. package/dist/commonSelectors.cjs.map +1 -1
  44. package/dist/commonSelectors.d.cts +178 -3523
  45. package/dist/commonSelectors.d.ts +178 -3523
  46. package/dist/commonSelectors.js +2 -2
  47. package/dist/deploymentsSlice/index.cjs.map +1 -1
  48. package/dist/deploymentsSlice/index.d.cts +1 -1
  49. package/dist/deploymentsSlice/index.d.ts +1 -1
  50. package/dist/deploymentsSlice/index.js +1 -1
  51. package/dist/deploymentsSlice/mocks.cjs.map +1 -1
  52. package/dist/deploymentsSlice/mocks.js +1 -1
  53. package/dist/deploymentsSlice/selectors.d.cts +16 -138
  54. package/dist/deploymentsSlice/selectors.d.ts +16 -138
  55. package/dist/deploymentsSlice/thunks.cjs +45 -41
  56. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  57. package/dist/deploymentsSlice/thunks.d.cts +4 -2
  58. package/dist/deploymentsSlice/thunks.d.ts +4 -2
  59. package/dist/deploymentsSlice/thunks.js +14 -14
  60. package/dist/devicesSlice/index.cjs +20 -16
  61. package/dist/devicesSlice/index.cjs.map +1 -1
  62. package/dist/devicesSlice/index.d.cts +11 -20
  63. package/dist/devicesSlice/index.d.ts +11 -20
  64. package/dist/devicesSlice/index.js +1 -1
  65. package/dist/devicesSlice/mocks.cjs +24 -22
  66. package/dist/devicesSlice/mocks.cjs.map +1 -1
  67. package/dist/devicesSlice/mocks.d.cts +20 -12
  68. package/dist/devicesSlice/mocks.d.ts +20 -12
  69. package/dist/devicesSlice/mocks.js +5 -7
  70. package/dist/devicesSlice/mocks.js.map +1 -1
  71. package/dist/devicesSlice/selectors.cjs +15 -8
  72. package/dist/devicesSlice/selectors.cjs.map +1 -1
  73. package/dist/devicesSlice/selectors.d.cts +207 -1730
  74. package/dist/devicesSlice/selectors.d.ts +207 -1730
  75. package/dist/devicesSlice/selectors.js +1 -1
  76. package/dist/devicesSlice/thunks.cjs +45 -43
  77. package/dist/devicesSlice/thunks.cjs.map +1 -1
  78. package/dist/devicesSlice/thunks.d.cts +12 -46
  79. package/dist/devicesSlice/thunks.d.ts +12 -46
  80. package/dist/devicesSlice/thunks.js +14 -16
  81. package/dist/monitorSlice/index.cjs.map +1 -1
  82. package/dist/monitorSlice/index.d.cts +1 -1
  83. package/dist/monitorSlice/index.d.ts +1 -1
  84. package/dist/monitorSlice/index.js +1 -1
  85. package/dist/monitorSlice/mocks.cjs.map +1 -1
  86. package/dist/monitorSlice/mocks.js +1 -1
  87. package/dist/monitorSlice/thunks.cjs +35 -24
  88. package/dist/monitorSlice/thunks.cjs.map +1 -1
  89. package/dist/monitorSlice/thunks.d.cts +3 -2
  90. package/dist/monitorSlice/thunks.d.ts +3 -2
  91. package/dist/monitorSlice/thunks.js +12 -12
  92. package/dist/onboardingSlice/index.cjs.map +1 -1
  93. package/dist/onboardingSlice/index.d.cts +1 -1
  94. package/dist/onboardingSlice/index.d.ts +1 -1
  95. package/dist/onboardingSlice/index.js +1 -1
  96. package/dist/onboardingSlice/mocks.cjs.map +1 -1
  97. package/dist/onboardingSlice/mocks.js +1 -1
  98. package/dist/onboardingSlice/thunks.cjs +45 -41
  99. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  100. package/dist/onboardingSlice/thunks.d.cts +7 -15
  101. package/dist/onboardingSlice/thunks.d.ts +7 -15
  102. package/dist/onboardingSlice/thunks.js +14 -14
  103. package/dist/organizationSlice/index.cjs.map +1 -1
  104. package/dist/organizationSlice/index.d.cts +41 -31
  105. package/dist/organizationSlice/index.d.ts +41 -31
  106. package/dist/organizationSlice/index.js +1 -1
  107. package/dist/organizationSlice/mocks.cjs.map +1 -1
  108. package/dist/organizationSlice/mocks.js +1 -1
  109. package/dist/organizationSlice/selectors.d.cts +42 -659
  110. package/dist/organizationSlice/selectors.d.ts +42 -659
  111. package/dist/organizationSlice/thunks.cjs +45 -41
  112. package/dist/organizationSlice/thunks.cjs.map +1 -1
  113. package/dist/organizationSlice/thunks.d.cts +4 -1
  114. package/dist/organizationSlice/thunks.d.ts +4 -1
  115. package/dist/organizationSlice/thunks.js +14 -14
  116. package/dist/organizationSlice/types.cjs.map +1 -1
  117. package/dist/organizationSlice/types.d.cts +2 -12
  118. package/dist/organizationSlice/types.d.ts +2 -12
  119. package/dist/releasesSlice/mocks.d.cts +7 -1
  120. package/dist/releasesSlice/mocks.d.ts +7 -1
  121. package/dist/releasesSlice/selectors.d.cts +155 -930
  122. package/dist/releasesSlice/selectors.d.ts +155 -930
  123. package/dist/releasesSlice/thunks.cjs +35 -24
  124. package/dist/releasesSlice/thunks.cjs.map +1 -1
  125. package/dist/releasesSlice/thunks.d.cts +4 -2
  126. package/dist/releasesSlice/thunks.d.ts +4 -2
  127. package/dist/releasesSlice/thunks.js +12 -12
  128. package/dist/selectors.cjs +15 -8
  129. package/dist/selectors.cjs.map +1 -1
  130. package/dist/selectors.d.cts +6 -3
  131. package/dist/selectors.d.ts +6 -3
  132. package/dist/selectors.js +2 -2
  133. package/dist/store.cjs +20 -16
  134. package/dist/store.cjs.map +1 -1
  135. package/dist/store.d.cts +40 -658
  136. package/dist/store.d.ts +40 -658
  137. package/dist/store.js +9 -9
  138. package/dist/storehooks.cjs +45 -41
  139. package/dist/storehooks.cjs.map +1 -1
  140. package/dist/storehooks.js +14 -14
  141. package/dist/thunks.cjs +45 -43
  142. package/dist/thunks.cjs.map +1 -1
  143. package/dist/thunks.d.cts +7 -5
  144. package/dist/thunks.d.ts +7 -5
  145. package/dist/thunks.js +14 -16
  146. package/dist/useDeploymentDevice.cjs +45 -41
  147. package/dist/useDeploymentDevice.cjs.map +1 -1
  148. package/dist/useDeploymentDevice.js +14 -14
  149. package/dist/usersSlice/index.cjs.map +1 -1
  150. package/dist/usersSlice/index.d.cts +46 -46
  151. package/dist/usersSlice/index.d.ts +46 -46
  152. package/dist/usersSlice/index.js +1 -1
  153. package/dist/usersSlice/mocks.cjs.map +1 -1
  154. package/dist/usersSlice/mocks.js +1 -1
  155. package/dist/usersSlice/selectors.d.cts +75 -1436
  156. package/dist/usersSlice/selectors.d.ts +75 -1436
  157. package/dist/usersSlice/thunks.cjs +45 -41
  158. package/dist/usersSlice/thunks.cjs.map +1 -1
  159. package/dist/usersSlice/thunks.d.cts +3 -1
  160. package/dist/usersSlice/thunks.d.ts +3 -1
  161. package/dist/usersSlice/thunks.js +14 -14
  162. package/package.json +1 -1
  163. package/dist/chunk-C2LGE3P6.js.map +0 -1
  164. package/dist/chunk-C5NXNZ7F.js.map +0 -1
  165. package/dist/chunk-HLX5L3IM.js.map +0 -1
  166. package/dist/chunk-MH5WPYQI.js.map +0 -1
  167. package/dist/chunk-OFGCC3GM.js.map +0 -1
  168. package/dist/chunk-QOFVCPRW.js.map +0 -1
  169. package/dist/chunk-REZWSU22.js.map +0 -1
  170. package/dist/chunk-WCBHYLUK.js.map +0 -1
  171. package/dist/chunk-ZNAJKEP2.js.map +0 -1
  172. /package/dist/{chunk-TKIOEF3B.js.map → chunk-6KAV62BW.js.map} +0 -0
  173. /package/dist/{chunk-4HSH7RH3.js.map → chunk-AR4FTKSL.js.map} +0 -0
  174. /package/dist/{chunk-ZRMB4U7Z.js.map → chunk-BZAXFAGT.js.map} +0 -0
  175. /package/dist/{chunk-5ZCZTTYX.js.map → chunk-EOZ665GA.js.map} +0 -0
  176. /package/dist/{chunk-OGUVURJ5.js.map → chunk-YFAIYNQG.js.map} +0 -0
@@ -1076,15 +1076,22 @@ var getDeviceIdentityAttributes = (0, import_toolkit4.createSelector)(
1076
1076
  );
1077
1077
  var getDeviceCountsByStatus = (0, import_toolkit4.createSelector)(
1078
1078
  [getDevicesByStatus],
1079
- (byStatus) => Object.values(import_constants5.DEVICE_STATES).reduce((accu, state) => {
1080
- accu[state] = byStatus[state].total || 0;
1081
- return accu;
1082
- }, {})
1079
+ (byStatus) => Object.values(import_constants5.DEVICE_STATES).reduce(
1080
+ (accu, deviceState) => {
1081
+ const { counts } = byStatus[deviceState];
1082
+ const { total, ...tieredCounts } = counts;
1083
+ const count = Object.values(tieredCounts).reduce((accu2, countPerTier) => accu2 + countPerTier, 0);
1084
+ accu[deviceState] = count;
1085
+ accu.total = accu.total + count;
1086
+ return accu;
1087
+ },
1088
+ { total: 0 }
1089
+ )
1083
1090
  );
1084
1091
  var getDeviceById = (0, import_toolkit4.createSelector)([getDevicesById, (_, deviceId) => deviceId], (devicesById, deviceId = "") => devicesById[deviceId] ?? {});
1085
1092
  var getSelectedGroupInfo = (0, import_toolkit4.createSelector)(
1086
- [getAcceptedDevices, getGroupsById, getSelectedGroup],
1087
- ({ total: acceptedDeviceTotal }, groupsById, selectedGroup) => {
1093
+ [getDeviceCountsByStatus, getGroupsById, getSelectedGroup],
1094
+ ({ accepted: acceptedDeviceTotal }, groupsById, selectedGroup) => {
1088
1095
  let groupCount = acceptedDeviceTotal;
1089
1096
  let groupFilters = [];
1090
1097
  if (selectedGroup && groupsById[selectedGroup]) {
@@ -1100,8 +1107,8 @@ var getCombinedLimit = (0, import_toolkit4.createSelector)(
1100
1107
  // limit might be -1 for unlimited devices
1101
1108
  );
1102
1109
  var getLimitMaxed = (0, import_toolkit4.createSelector)(
1103
- [getAcceptedDevices, getCombinedLimit],
1104
- ({ total: acceptedDevices = 0 }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices
1110
+ [getDeviceCountsByStatus, getCombinedLimit],
1111
+ ({ accepted: acceptedDevices }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices
1105
1112
  );
1106
1113
  var getGroupsByIdWithoutUngrouped = (0, import_toolkit4.createSelector)([getGroupsById], ({ [UNGROUPED_GROUP.id]: ungrouped, ...groups }) => groups);
1107
1114
  var getGroupData = (0, import_toolkit4.createSelector)([getGroupsByIdWithoutUngrouped], (groups) => {
@@ -1721,12 +1728,10 @@ var initialState3 = {
1721
1728
  // }
1722
1729
  },
1723
1730
  byStatus: {
1724
- [import_constants5.DEVICE_STATES.accepted]: { deviceIds: [], total: 0 },
1725
- active: { deviceIds: [], total: 0 },
1726
- inactive: { deviceIds: [], total: 0 },
1727
- [import_constants5.DEVICE_STATES.pending]: { deviceIds: [], total: 0 },
1728
- [import_constants5.DEVICE_STATES.preauth]: { deviceIds: [], total: 0 },
1729
- [import_constants5.DEVICE_STATES.rejected]: { deviceIds: [], total: 0 }
1731
+ [import_constants5.DEVICE_STATES.accepted]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1732
+ [import_constants5.DEVICE_STATES.pending]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1733
+ [import_constants5.DEVICE_STATES.preauth]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1734
+ [import_constants5.DEVICE_STATES.rejected]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } }
1730
1735
  },
1731
1736
  deviceList: {
1732
1737
  deviceIds: [],
@@ -1856,21 +1861,19 @@ var devicesSlice = (0, import_toolkit10.createSlice)({
1856
1861
  }
1857
1862
  state.filters = action.payload.filter((filter) => filter.key && filter.operator && filter.scope && typeof filter.value !== "undefined");
1858
1863
  },
1859
- setInactiveDevices: (state, action) => {
1860
- const { activeDeviceTotal, inactiveDeviceTotal } = action.payload;
1861
- state.byStatus.active.total = activeDeviceTotal;
1862
- state.byStatus.inactive.total = inactiveDeviceTotal;
1863
- },
1864
1864
  setDeviceReports: (state, action) => {
1865
1865
  state.reports = action.payload;
1866
1866
  },
1867
1867
  setDevicesByStatus: (state, action) => {
1868
- const { forceUpdate, status, total, deviceIds } = action.payload;
1869
- state.byStatus[status] = total || forceUpdate ? { deviceIds, total } : state.byStatus[status];
1868
+ const { status, total, deviceIds } = action.payload;
1869
+ if (total) {
1870
+ state.byStatus[status].deviceIds = deviceIds;
1871
+ state.byStatus[status].counts.total = total;
1872
+ }
1870
1873
  },
1871
1874
  setDevicesCountByStatus: (state, action) => {
1872
- const { count, status } = action.payload;
1873
- state.byStatus[status].total = count;
1875
+ const { countsPerTier, status } = action.payload;
1876
+ state.byStatus[status].counts = { ...countsPerTier, total: Object.values(countsPerTier).reduce((accu, tieredCount) => accu += tieredCount, 0) };
1874
1877
  },
1875
1878
  setDeviceLimits: (state, action) => {
1876
1879
  state.limits = action.payload;
@@ -1887,7 +1890,15 @@ var devicesSlice = (0, import_toolkit10.createSlice)({
1887
1890
  const hasMultipleAuthSets = authId && device.auth_sets ? device.auth_sets.filter((authset) => authset.id !== authId).length > 0 : false;
1888
1891
  if (!hasMultipleAuthSets && Object.values(import_constants5.DEVICE_STATES).includes(device.status)) {
1889
1892
  const deviceIds = state.byStatus[device.status].deviceIds.filter((id) => id !== deviceId);
1890
- state.byStatus[device.status] = { deviceIds, total: Math.max(0, state.byStatus[device.status].total - 1) };
1893
+ const deviceTier = device.attributes.tier || "standard";
1894
+ state.byStatus[device.status] = {
1895
+ deviceIds,
1896
+ counts: {
1897
+ ...state.byStatus[device.status].counts,
1898
+ [deviceTier]: Math.max(0, state.byStatus[device.status].counts[deviceTier] - 1),
1899
+ total: Math.max(0, state.byStatus[device.status].counts.total - 1)
1900
+ }
1901
+ };
1891
1902
  }
1892
1903
  }
1893
1904
  }
@@ -3216,21 +3227,13 @@ var getDeviceInfo = createAppAsyncThunk(`${sliceName3}/getDeviceInfo`, (deviceId
3216
3227
  }
3217
3228
  return Promise.all(tasks);
3218
3229
  });
3219
- var getDeviceCount = createAppAsyncThunk(
3220
- `${sliceName3}/getDeviceCount`,
3221
- (status, { dispatch, getState }) => general_api_default.post(getSearchEndpoint(getState()), {
3222
- page: 1,
3223
- per_page: 1,
3224
- filters: mapFiltersToTerms([{ key: "status", value: status, operator: import_constants5.DEVICE_FILTERING_OPTIONS.$eq.key, scope: "identity" }]),
3225
- attributes: defaultAttributes
3226
- }).then((response) => {
3227
- const count = Number(response.headers[import_constants5.headerNames.total]);
3228
- return dispatch(actions3.setDevicesCountByStatus({ count, status }));
3229
- })
3230
- );
3231
3230
  var getAllDeviceCounts = createAppAsyncThunk(
3232
3231
  `${sliceName3}/getAllDeviceCounts`,
3233
- (_, { dispatch }) => Promise.all([import_constants5.DEVICE_STATES.accepted, import_constants5.DEVICE_STATES.pending].map((status) => dispatch(getDeviceCount(status))))
3232
+ (_, { dispatch }) => general_api_default.get(`${import_constants5.inventoryApiUrlV2}/statistics`).then(({ data }) => {
3233
+ const { devices_by_status } = data;
3234
+ Object.entries(devices_by_status).map(([status, countsPerTier]) => dispatch(actions3.setDevicesCountByStatus({ countsPerTier, status })));
3235
+ return;
3236
+ })
3234
3237
  );
3235
3238
  var getDeviceLimits2 = createAppAsyncThunk(
3236
3239
  `${sliceName3}/getDeviceLimit`,
@@ -3302,7 +3305,7 @@ var getDevicesByStatus2 = createAppAsyncThunk(
3302
3305
  const state2 = getState();
3303
3306
  const deviceAccu = reduceReceivedDevices(response.data, [], state2, status);
3304
3307
  let total = !applicableFilters.length ? Number(response.headers[import_constants5.headerNames.total]) : 0;
3305
- if (status && state2.devices.byStatus[status].total === deviceAccu.ids.length) {
3308
+ if (status && state2.devices.byStatus[status].counts.total === deviceAccu.ids.length) {
3306
3309
  total = deviceAccu.ids.length;
3307
3310
  }
3308
3311
  const tasks = [dispatch(actions3.receivedDevices(deviceAccu.devicesById))];
@@ -3409,8 +3412,8 @@ var updateReportData = createAppAsyncThunk(`${sliceName3}/updateReportData`, (re
3409
3412
  const { group = "" } = report;
3410
3413
  const devicesById = getDevicesById(getState());
3411
3414
  const groups = getGroupsById(getState());
3412
- const acceptedDevices = getAcceptedDevices(getState());
3413
- const totalDeviceCount = groups[group] ? groups[group].total : acceptedDevices.total;
3415
+ const { accepted: acceptedDevicesCount } = getDeviceCountsByStatus(getState());
3416
+ const totalDeviceCount = groups[group] ? groups[group].total : acceptedDevicesCount;
3414
3417
  const reportsData = getDeviceReports(getState());
3415
3418
  const newReports = [...reportsData];
3416
3419
  newReports[reportIndex] = initializeDistributionData(report, groups, devicesById, totalDeviceCount);
@@ -3428,6 +3431,7 @@ var getReportDataWithoutBackendSupport = createAppAsyncThunk(
3428
3431
  const effectiveAttribute = software ? software : attribute;
3429
3432
  const devicesById = getDevicesById(getState());
3430
3433
  const acceptedDevices = getAcceptedDevices(getState());
3434
+ const { accepted: acceptedDevicesCount } = getDeviceCountsByStatus(getState());
3431
3435
  const groups = getGroupsById(getState());
3432
3436
  const { deviceIds = [], filters = [], total = 0 } = groups[group] || {};
3433
3437
  let groupDevicesRequest = Promise.resolve({
@@ -3435,7 +3439,7 @@ var getReportDataWithoutBackendSupport = createAppAsyncThunk(
3435
3439
  });
3436
3440
  if (group && (!(deviceIds.length && total) || deviceIds.length !== total || !deviceIds.every((id) => !!devicesById[id]))) {
3437
3441
  groupDevicesRequest = filters.length ? dispatch(getAllDynamicGroupDevices({ group, attribute: effectiveAttribute })).unwrap() : dispatch(getAllGroupDevices({ group, attribute: effectiveAttribute })).unwrap();
3438
- } else if (!group && (acceptedDevices.deviceIds.length !== acceptedDevices.total || !acceptedDevices.deviceIds.every((id) => !!devicesById[id]))) {
3442
+ } else if (!group && (acceptedDevices.deviceIds.length !== acceptedDevicesCount || !acceptedDevices.deviceIds.every((id) => !!devicesById[id]))) {
3439
3443
  groupDevicesRequest = dispatch(getAllDevicesByStatus({ status: import_constants5.DEVICE_STATES.accepted, attribute: effectiveAttribute })).unwrap();
3440
3444
  }
3441
3445
  return groupDevicesRequest.then(() => dispatch(updateReportData(reportIndex)));