@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
@@ -1174,12 +1174,10 @@ var initialState4 = {
1174
1174
  // }
1175
1175
  },
1176
1176
  byStatus: {
1177
- [import_constants5.DEVICE_STATES.accepted]: { deviceIds: [], total: 0 },
1178
- active: { deviceIds: [], total: 0 },
1179
- inactive: { deviceIds: [], total: 0 },
1180
- [import_constants5.DEVICE_STATES.pending]: { deviceIds: [], total: 0 },
1181
- [import_constants5.DEVICE_STATES.preauth]: { deviceIds: [], total: 0 },
1182
- [import_constants5.DEVICE_STATES.rejected]: { deviceIds: [], total: 0 }
1177
+ [import_constants5.DEVICE_STATES.accepted]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1178
+ [import_constants5.DEVICE_STATES.pending]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1179
+ [import_constants5.DEVICE_STATES.preauth]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1180
+ [import_constants5.DEVICE_STATES.rejected]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } }
1183
1181
  },
1184
1182
  deviceList: {
1185
1183
  deviceIds: [],
@@ -1309,21 +1307,19 @@ var devicesSlice = (0, import_toolkit4.createSlice)({
1309
1307
  }
1310
1308
  state.filters = action.payload.filter((filter) => filter.key && filter.operator && filter.scope && typeof filter.value !== "undefined");
1311
1309
  },
1312
- setInactiveDevices: (state, action) => {
1313
- const { activeDeviceTotal, inactiveDeviceTotal } = action.payload;
1314
- state.byStatus.active.total = activeDeviceTotal;
1315
- state.byStatus.inactive.total = inactiveDeviceTotal;
1316
- },
1317
1310
  setDeviceReports: (state, action) => {
1318
1311
  state.reports = action.payload;
1319
1312
  },
1320
1313
  setDevicesByStatus: (state, action) => {
1321
- const { forceUpdate, status, total, deviceIds } = action.payload;
1322
- state.byStatus[status] = total || forceUpdate ? { deviceIds, total } : state.byStatus[status];
1314
+ const { status, total, deviceIds } = action.payload;
1315
+ if (total) {
1316
+ state.byStatus[status].deviceIds = deviceIds;
1317
+ state.byStatus[status].counts.total = total;
1318
+ }
1323
1319
  },
1324
1320
  setDevicesCountByStatus: (state, action) => {
1325
- const { count, status } = action.payload;
1326
- state.byStatus[status].total = count;
1321
+ const { countsPerTier, status } = action.payload;
1322
+ state.byStatus[status].counts = { ...countsPerTier, total: Object.values(countsPerTier).reduce((accu, tieredCount) => accu += tieredCount, 0) };
1327
1323
  },
1328
1324
  setDeviceLimits: (state, action) => {
1329
1325
  state.limits = action.payload;
@@ -1340,7 +1336,15 @@ var devicesSlice = (0, import_toolkit4.createSlice)({
1340
1336
  const hasMultipleAuthSets = authId && device.auth_sets ? device.auth_sets.filter((authset) => authset.id !== authId).length > 0 : false;
1341
1337
  if (!hasMultipleAuthSets && Object.values(import_constants5.DEVICE_STATES).includes(device.status)) {
1342
1338
  const deviceIds = state.byStatus[device.status].deviceIds.filter((id) => id !== deviceId);
1343
- state.byStatus[device.status] = { deviceIds, total: Math.max(0, state.byStatus[device.status].total - 1) };
1339
+ const deviceTier = device.attributes.tier || "standard";
1340
+ state.byStatus[device.status] = {
1341
+ deviceIds,
1342
+ counts: {
1343
+ ...state.byStatus[device.status].counts,
1344
+ [deviceTier]: Math.max(0, state.byStatus[device.status].counts[deviceTier] - 1),
1345
+ total: Math.max(0, state.byStatus[device.status].counts.total - 1)
1346
+ }
1347
+ };
1344
1348
  }
1345
1349
  }
1346
1350
  }
@@ -1909,15 +1913,22 @@ var getDeviceIdentityAttributes = (0, import_toolkit11.createSelector)(
1909
1913
  );
1910
1914
  var getDeviceCountsByStatus = (0, import_toolkit11.createSelector)(
1911
1915
  [getDevicesByStatus],
1912
- (byStatus) => Object.values(import_constants5.DEVICE_STATES).reduce((accu, state) => {
1913
- accu[state] = byStatus[state].total || 0;
1914
- return accu;
1915
- }, {})
1916
+ (byStatus) => Object.values(import_constants5.DEVICE_STATES).reduce(
1917
+ (accu, deviceState) => {
1918
+ const { counts } = byStatus[deviceState];
1919
+ const { total, ...tieredCounts } = counts;
1920
+ const count = Object.values(tieredCounts).reduce((accu2, countPerTier) => accu2 + countPerTier, 0);
1921
+ accu[deviceState] = count;
1922
+ accu.total = accu.total + count;
1923
+ return accu;
1924
+ },
1925
+ { total: 0 }
1926
+ )
1916
1927
  );
1917
1928
  var getDeviceById = (0, import_toolkit11.createSelector)([getDevicesById, (_, deviceId) => deviceId], (devicesById, deviceId = "") => devicesById[deviceId] ?? {});
1918
1929
  var getSelectedGroupInfo = (0, import_toolkit11.createSelector)(
1919
- [getAcceptedDevices, getGroupsById, getSelectedGroup],
1920
- ({ total: acceptedDeviceTotal }, groupsById, selectedGroup) => {
1930
+ [getDeviceCountsByStatus, getGroupsById, getSelectedGroup],
1931
+ ({ accepted: acceptedDeviceTotal }, groupsById, selectedGroup) => {
1921
1932
  let groupCount = acceptedDeviceTotal;
1922
1933
  let groupFilters = [];
1923
1934
  if (selectedGroup && groupsById[selectedGroup]) {
@@ -1933,8 +1944,8 @@ var getCombinedLimit = (0, import_toolkit11.createSelector)(
1933
1944
  // limit might be -1 for unlimited devices
1934
1945
  );
1935
1946
  var getLimitMaxed = (0, import_toolkit11.createSelector)(
1936
- [getAcceptedDevices, getCombinedLimit],
1937
- ({ total: acceptedDevices = 0 }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices
1947
+ [getDeviceCountsByStatus, getCombinedLimit],
1948
+ ({ accepted: acceptedDevices }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices
1938
1949
  );
1939
1950
  var getGroupsByIdWithoutUngrouped = (0, import_toolkit11.createSelector)([getGroupsById], ({ [UNGROUPED_GROUP.id]: ungrouped, ...groups }) => groups);
1940
1951
  var getGroupData = (0, import_toolkit11.createSelector)([getGroupsByIdWithoutUngrouped], (groups) => {
@@ -3378,21 +3389,13 @@ var getDeviceInfo = createAppAsyncThunk(`${sliceName4}/getDeviceInfo`, (deviceId
3378
3389
  }
3379
3390
  return Promise.all(tasks);
3380
3391
  });
3381
- var getDeviceCount = createAppAsyncThunk(
3382
- `${sliceName4}/getDeviceCount`,
3383
- (status, { dispatch, getState }) => general_api_default.post(getSearchEndpoint(getState()), {
3384
- page: 1,
3385
- per_page: 1,
3386
- filters: mapFiltersToTerms([{ key: "status", value: status, operator: import_constants5.DEVICE_FILTERING_OPTIONS.$eq.key, scope: "identity" }]),
3387
- attributes: defaultAttributes
3388
- }).then((response) => {
3389
- const count = Number(response.headers[import_constants5.headerNames.total]);
3390
- return dispatch(actions4.setDevicesCountByStatus({ count, status }));
3391
- })
3392
- );
3393
3392
  var getAllDeviceCounts = createAppAsyncThunk(
3394
3393
  `${sliceName4}/getAllDeviceCounts`,
3395
- (_, { dispatch }) => Promise.all([import_constants5.DEVICE_STATES.accepted, import_constants5.DEVICE_STATES.pending].map((status) => dispatch(getDeviceCount(status))))
3394
+ (_, { dispatch }) => general_api_default.get(`${import_constants5.inventoryApiUrlV2}/statistics`).then(({ data }) => {
3395
+ const { devices_by_status } = data;
3396
+ Object.entries(devices_by_status).map(([status, countsPerTier]) => dispatch(actions4.setDevicesCountByStatus({ countsPerTier, status })));
3397
+ return;
3398
+ })
3396
3399
  );
3397
3400
  var getDeviceLimits2 = createAppAsyncThunk(
3398
3401
  `${sliceName4}/getDeviceLimit`,
@@ -3464,7 +3467,7 @@ var getDevicesByStatus2 = createAppAsyncThunk(
3464
3467
  const state2 = getState();
3465
3468
  const deviceAccu = reduceReceivedDevices(response.data, [], state2, status);
3466
3469
  let total = !applicableFilters.length ? Number(response.headers[import_constants5.headerNames.total]) : 0;
3467
- if (status && state2.devices.byStatus[status].total === deviceAccu.ids.length) {
3470
+ if (status && state2.devices.byStatus[status].counts.total === deviceAccu.ids.length) {
3468
3471
  total = deviceAccu.ids.length;
3469
3472
  }
3470
3473
  const tasks = [dispatch(actions4.receivedDevices(deviceAccu.devicesById))];
@@ -3571,8 +3574,8 @@ var updateReportData = createAppAsyncThunk(`${sliceName4}/updateReportData`, (re
3571
3574
  const { group = "" } = report;
3572
3575
  const devicesById = getDevicesById(getState());
3573
3576
  const groups = getGroupsById(getState());
3574
- const acceptedDevices = getAcceptedDevices(getState());
3575
- const totalDeviceCount = groups[group] ? groups[group].total : acceptedDevices.total;
3577
+ const { accepted: acceptedDevicesCount } = getDeviceCountsByStatus(getState());
3578
+ const totalDeviceCount = groups[group] ? groups[group].total : acceptedDevicesCount;
3576
3579
  const reportsData = getDeviceReports(getState());
3577
3580
  const newReports = [...reportsData];
3578
3581
  newReports[reportIndex] = initializeDistributionData(report, groups, devicesById, totalDeviceCount);
@@ -3590,6 +3593,7 @@ var getReportDataWithoutBackendSupport = createAppAsyncThunk(
3590
3593
  const effectiveAttribute = software ? software : attribute;
3591
3594
  const devicesById = getDevicesById(getState());
3592
3595
  const acceptedDevices = getAcceptedDevices(getState());
3596
+ const { accepted: acceptedDevicesCount } = getDeviceCountsByStatus(getState());
3593
3597
  const groups = getGroupsById(getState());
3594
3598
  const { deviceIds = [], filters = [], total = 0 } = groups[group] || {};
3595
3599
  let groupDevicesRequest = Promise.resolve({
@@ -3597,7 +3601,7 @@ var getReportDataWithoutBackendSupport = createAppAsyncThunk(
3597
3601
  });
3598
3602
  if (group && (!(deviceIds.length && total) || deviceIds.length !== total || !deviceIds.every((id) => !!devicesById[id]))) {
3599
3603
  groupDevicesRequest = filters.length ? dispatch(getAllDynamicGroupDevices({ group, attribute: effectiveAttribute })).unwrap() : dispatch(getAllGroupDevices({ group, attribute: effectiveAttribute })).unwrap();
3600
- } else if (!group && (acceptedDevices.deviceIds.length !== acceptedDevices.total || !acceptedDevices.deviceIds.every((id) => !!devicesById[id]))) {
3604
+ } else if (!group && (acceptedDevices.deviceIds.length !== acceptedDevicesCount || !acceptedDevices.deviceIds.every((id) => !!devicesById[id]))) {
3601
3605
  groupDevicesRequest = dispatch(getAllDevicesByStatus({ status: import_constants5.DEVICE_STATES.accepted, attribute: effectiveAttribute })).unwrap();
3602
3606
  }
3603
3607
  return groupDevicesRequest.then(() => dispatch(updateReportData(reportIndex)));