@northern.tech/store 0.12.0 → 0.14.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 (179) hide show
  1. package/dist/actions.cjs +21 -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 +1 -0
  7. package/dist/appSlice/index.cjs.map +1 -1
  8. package/dist/appSlice/index.d.cts +1 -1
  9. package/dist/appSlice/index.d.ts +1 -1
  10. package/dist/appSlice/index.js +1 -1
  11. package/dist/appSlice/mocks.cjs +1 -0
  12. package/dist/appSlice/mocks.cjs.map +1 -1
  13. package/dist/appSlice/mocks.js +1 -1
  14. package/dist/appSlice/selectors.d.cts +34 -528
  15. package/dist/appSlice/selectors.d.ts +34 -528
  16. package/dist/appSlice/thunks.cjs +46 -41
  17. package/dist/appSlice/thunks.cjs.map +1 -1
  18. package/dist/appSlice/thunks.d.cts +5 -3
  19. package/dist/appSlice/thunks.d.ts +5 -3
  20. package/dist/appSlice/thunks.js +15 -15
  21. package/dist/{chunk-C5NXNZ7F.js → chunk-2SAH2AN2.js} +23 -30
  22. package/dist/chunk-2SAH2AN2.js.map +1 -0
  23. package/dist/{chunk-QOFVCPRW.js → chunk-5PUF4LA5.js} +1 -1
  24. package/dist/chunk-5PUF4LA5.js.map +1 -0
  25. package/dist/{chunk-ZRMB4U7Z.js → chunk-5XUPXMYV.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-OFGCC3GM.js → chunk-IUGHRJV2.js} +2 -1
  29. package/dist/chunk-IUGHRJV2.js.map +1 -0
  30. package/dist/{chunk-WCBHYLUK.js → chunk-KJ4BPXMB.js} +1 -1
  31. package/dist/chunk-KJ4BPXMB.js.map +1 -0
  32. package/dist/{chunk-OGUVURJ5.js → chunk-KVZEKHVC.js} +12 -12
  33. package/dist/{chunk-5ZCZTTYX.js → chunk-LX4YRTYY.js} +5 -5
  34. package/dist/{chunk-C2LGE3P6.js → chunk-OLKM53RL.js} +1 -1
  35. package/dist/chunk-OLKM53RL.js.map +1 -0
  36. package/dist/{chunk-4HSH7RH3.js → chunk-PIFXECFW.js} +10 -10
  37. package/dist/{chunk-HLX5L3IM.js → chunk-PVCHKW35.js} +1 -1
  38. package/dist/chunk-PVCHKW35.js.map +1 -0
  39. package/dist/{chunk-REZWSU22.js → chunk-VODRLEDP.js} +21 -17
  40. package/dist/chunk-VODRLEDP.js.map +1 -0
  41. package/dist/{chunk-MH5WPYQI.js → chunk-X7NEALMI.js} +16 -9
  42. package/dist/chunk-X7NEALMI.js.map +1 -0
  43. package/dist/{chunk-TKIOEF3B.js → chunk-ZWLCUOQN.js} +6 -6
  44. package/dist/commonSelectors.cjs +15 -8
  45. package/dist/commonSelectors.cjs.map +1 -1
  46. package/dist/commonSelectors.d.cts +178 -3523
  47. package/dist/commonSelectors.d.ts +178 -3523
  48. package/dist/commonSelectors.js +3 -3
  49. package/dist/deploymentsSlice/index.cjs.map +1 -1
  50. package/dist/deploymentsSlice/index.d.cts +1 -1
  51. package/dist/deploymentsSlice/index.d.ts +1 -1
  52. package/dist/deploymentsSlice/index.js +1 -1
  53. package/dist/deploymentsSlice/mocks.cjs.map +1 -1
  54. package/dist/deploymentsSlice/mocks.js +1 -1
  55. package/dist/deploymentsSlice/selectors.d.cts +16 -138
  56. package/dist/deploymentsSlice/selectors.d.ts +16 -138
  57. package/dist/deploymentsSlice/thunks.cjs +46 -41
  58. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  59. package/dist/deploymentsSlice/thunks.d.cts +4 -2
  60. package/dist/deploymentsSlice/thunks.d.ts +4 -2
  61. package/dist/deploymentsSlice/thunks.js +15 -15
  62. package/dist/devicesSlice/index.cjs +20 -16
  63. package/dist/devicesSlice/index.cjs.map +1 -1
  64. package/dist/devicesSlice/index.d.cts +11 -20
  65. package/dist/devicesSlice/index.d.ts +11 -20
  66. package/dist/devicesSlice/index.js +1 -1
  67. package/dist/devicesSlice/mocks.cjs +24 -22
  68. package/dist/devicesSlice/mocks.cjs.map +1 -1
  69. package/dist/devicesSlice/mocks.d.cts +20 -12
  70. package/dist/devicesSlice/mocks.d.ts +20 -12
  71. package/dist/devicesSlice/mocks.js +5 -7
  72. package/dist/devicesSlice/mocks.js.map +1 -1
  73. package/dist/devicesSlice/selectors.cjs +15 -8
  74. package/dist/devicesSlice/selectors.cjs.map +1 -1
  75. package/dist/devicesSlice/selectors.d.cts +207 -1730
  76. package/dist/devicesSlice/selectors.d.ts +207 -1730
  77. package/dist/devicesSlice/selectors.js +1 -1
  78. package/dist/devicesSlice/thunks.cjs +46 -43
  79. package/dist/devicesSlice/thunks.cjs.map +1 -1
  80. package/dist/devicesSlice/thunks.d.cts +12 -46
  81. package/dist/devicesSlice/thunks.d.ts +12 -46
  82. package/dist/devicesSlice/thunks.js +15 -17
  83. package/dist/monitorSlice/index.cjs.map +1 -1
  84. package/dist/monitorSlice/index.d.cts +1 -1
  85. package/dist/monitorSlice/index.d.ts +1 -1
  86. package/dist/monitorSlice/index.js +1 -1
  87. package/dist/monitorSlice/mocks.cjs.map +1 -1
  88. package/dist/monitorSlice/mocks.js +1 -1
  89. package/dist/monitorSlice/thunks.cjs +36 -24
  90. package/dist/monitorSlice/thunks.cjs.map +1 -1
  91. package/dist/monitorSlice/thunks.d.cts +3 -2
  92. package/dist/monitorSlice/thunks.d.ts +3 -2
  93. package/dist/monitorSlice/thunks.js +13 -13
  94. package/dist/onboardingSlice/index.cjs.map +1 -1
  95. package/dist/onboardingSlice/index.d.cts +1 -1
  96. package/dist/onboardingSlice/index.d.ts +1 -1
  97. package/dist/onboardingSlice/index.js +1 -1
  98. package/dist/onboardingSlice/mocks.cjs.map +1 -1
  99. package/dist/onboardingSlice/mocks.js +1 -1
  100. package/dist/onboardingSlice/thunks.cjs +46 -41
  101. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  102. package/dist/onboardingSlice/thunks.d.cts +7 -15
  103. package/dist/onboardingSlice/thunks.d.ts +7 -15
  104. package/dist/onboardingSlice/thunks.js +15 -15
  105. package/dist/organizationSlice/index.cjs.map +1 -1
  106. package/dist/organizationSlice/index.d.cts +41 -31
  107. package/dist/organizationSlice/index.d.ts +41 -31
  108. package/dist/organizationSlice/index.js +1 -1
  109. package/dist/organizationSlice/mocks.cjs.map +1 -1
  110. package/dist/organizationSlice/mocks.js +1 -1
  111. package/dist/organizationSlice/selectors.d.cts +42 -659
  112. package/dist/organizationSlice/selectors.d.ts +42 -659
  113. package/dist/organizationSlice/thunks.cjs +46 -41
  114. package/dist/organizationSlice/thunks.cjs.map +1 -1
  115. package/dist/organizationSlice/thunks.d.cts +4 -1
  116. package/dist/organizationSlice/thunks.d.ts +4 -1
  117. package/dist/organizationSlice/thunks.js +15 -15
  118. package/dist/organizationSlice/types.cjs.map +1 -1
  119. package/dist/organizationSlice/types.d.cts +2 -12
  120. package/dist/organizationSlice/types.d.ts +2 -12
  121. package/dist/releasesSlice/mocks.d.cts +7 -1
  122. package/dist/releasesSlice/mocks.d.ts +7 -1
  123. package/dist/releasesSlice/selectors.d.cts +155 -930
  124. package/dist/releasesSlice/selectors.d.ts +155 -930
  125. package/dist/releasesSlice/thunks.cjs +36 -24
  126. package/dist/releasesSlice/thunks.cjs.map +1 -1
  127. package/dist/releasesSlice/thunks.d.cts +4 -2
  128. package/dist/releasesSlice/thunks.d.ts +4 -2
  129. package/dist/releasesSlice/thunks.js +13 -13
  130. package/dist/selectors.cjs +15 -8
  131. package/dist/selectors.cjs.map +1 -1
  132. package/dist/selectors.d.cts +6 -3
  133. package/dist/selectors.d.ts +6 -3
  134. package/dist/selectors.js +17 -17
  135. package/dist/store.cjs +21 -16
  136. package/dist/store.cjs.map +1 -1
  137. package/dist/store.d.cts +40 -658
  138. package/dist/store.d.ts +40 -658
  139. package/dist/store.js +9 -9
  140. package/dist/storehooks.cjs +47 -41
  141. package/dist/storehooks.cjs.map +1 -1
  142. package/dist/storehooks.js +16 -15
  143. package/dist/storehooks.js.map +1 -1
  144. package/dist/thunks.cjs +46 -43
  145. package/dist/thunks.cjs.map +1 -1
  146. package/dist/thunks.d.cts +7 -5
  147. package/dist/thunks.d.ts +7 -5
  148. package/dist/thunks.js +15 -17
  149. package/dist/useDeploymentDevice.cjs +46 -41
  150. package/dist/useDeploymentDevice.cjs.map +1 -1
  151. package/dist/useDeploymentDevice.js +15 -15
  152. package/dist/usersSlice/index.cjs.map +1 -1
  153. package/dist/usersSlice/index.d.cts +46 -46
  154. package/dist/usersSlice/index.d.ts +46 -46
  155. package/dist/usersSlice/index.js +1 -1
  156. package/dist/usersSlice/mocks.cjs.map +1 -1
  157. package/dist/usersSlice/mocks.js +1 -1
  158. package/dist/usersSlice/selectors.d.cts +75 -1436
  159. package/dist/usersSlice/selectors.d.ts +75 -1436
  160. package/dist/usersSlice/thunks.cjs +46 -41
  161. package/dist/usersSlice/thunks.cjs.map +1 -1
  162. package/dist/usersSlice/thunks.d.cts +3 -1
  163. package/dist/usersSlice/thunks.d.ts +3 -1
  164. package/dist/usersSlice/thunks.js +15 -15
  165. package/package.json +7 -7
  166. package/dist/chunk-C2LGE3P6.js.map +0 -1
  167. package/dist/chunk-C5NXNZ7F.js.map +0 -1
  168. package/dist/chunk-HLX5L3IM.js.map +0 -1
  169. package/dist/chunk-MH5WPYQI.js.map +0 -1
  170. package/dist/chunk-OFGCC3GM.js.map +0 -1
  171. package/dist/chunk-QOFVCPRW.js.map +0 -1
  172. package/dist/chunk-REZWSU22.js.map +0 -1
  173. package/dist/chunk-WCBHYLUK.js.map +0 -1
  174. package/dist/chunk-ZNAJKEP2.js.map +0 -1
  175. /package/dist/{chunk-ZRMB4U7Z.js.map → chunk-5XUPXMYV.js.map} +0 -0
  176. /package/dist/{chunk-OGUVURJ5.js.map → chunk-KVZEKHVC.js.map} +0 -0
  177. /package/dist/{chunk-5ZCZTTYX.js.map → chunk-LX4YRTYY.js.map} +0 -0
  178. /package/dist/{chunk-4HSH7RH3.js.map → chunk-PIFXECFW.js.map} +0 -0
  179. /package/dist/{chunk-TKIOEF3B.js.map → chunk-ZWLCUOQN.js.map} +0 -0
@@ -15,25 +15,25 @@ import {
15
15
  getUserSettings as getUserSettings2,
16
16
  saveGlobalSettings,
17
17
  saveUserSettings
18
- } from "./chunk-C5NXNZ7F.js";
18
+ } from "./chunk-2SAH2AN2.js";
19
19
  import {
20
20
  getReleases
21
- } from "./chunk-ZRMB4U7Z.js";
22
- import "./chunk-TKIOEF3B.js";
23
- import "./chunk-OGUVURJ5.js";
21
+ } from "./chunk-5XUPXMYV.js";
22
+ import "./chunk-ZWLCUOQN.js";
23
+ import "./chunk-KVZEKHVC.js";
24
24
  import "./chunk-Y3DJIMEN.js";
25
25
  import "./chunk-5M6EUVNO.js";
26
26
  import {
27
27
  actions_default
28
- } from "./chunk-4HSH7RH3.js";
28
+ } from "./chunk-PIFXECFW.js";
29
+ import "./chunk-KJ4BPXMB.js";
29
30
  import "./chunk-TRKA7XYU.js";
30
- import "./chunk-WCBHYLUK.js";
31
- import "./chunk-QOFVCPRW.js";
32
- import "./chunk-HLX5L3IM.js";
33
- import "./chunk-ZNAJKEP2.js";
34
- import "./chunk-REZWSU22.js";
35
- import "./chunk-OFGCC3GM.js";
36
- import "./chunk-C2LGE3P6.js";
31
+ import "./chunk-5PUF4LA5.js";
32
+ import "./chunk-PVCHKW35.js";
33
+ import "./chunk-CQXDAXQF.js";
34
+ import "./chunk-VODRLEDP.js";
35
+ import "./chunk-IUGHRJV2.js";
36
+ import "./chunk-OLKM53RL.js";
37
37
  import {
38
38
  getSessionInfo
39
39
  } from "./chunk-FDSMCFV5.js";
@@ -43,13 +43,13 @@ import {
43
43
  getIsEnterprise,
44
44
  getOnboardingState,
45
45
  getUserCapabilities
46
- } from "./chunk-5ZCZTTYX.js";
47
- import "./chunk-GGBE6KJV.js";
46
+ } from "./chunk-LX4YRTYY.js";
48
47
  import {
49
48
  getGlobalSettings,
50
49
  getOfflineThresholdSettings,
51
50
  getUserSettings
52
51
  } from "./chunk-7QKCBSFU.js";
52
+ import "./chunk-GGBE6KJV.js";
53
53
  import {
54
54
  getIsServiceProvider
55
55
  } from "./chunk-3NOV7X4M.js";
@@ -59,7 +59,7 @@ import "./chunk-WR6RQKF5.js";
59
59
  import {
60
60
  getDevicesByStatus,
61
61
  getSortedFilteringAttributes
62
- } from "./chunk-MH5WPYQI.js";
62
+ } from "./chunk-X7NEALMI.js";
63
63
  import {
64
64
  getFeatures
65
65
  } from "./chunk-BYUPW7RA.js";
@@ -98,6 +98,7 @@ var featureFlags = [
98
98
  "hasFeedbackEnabled",
99
99
  "hasReporting",
100
100
  "hasMonitor",
101
+ "hasMCUEnabled",
101
102
  "isEnterprise"
102
103
  ];
103
104
  var environmentDatas = ["commit", "feedbackProbability", "hostAddress", "hostedAnnouncement", "recaptchaSiteKey", "sentry", "stripeAPIKey", "trackerCode"];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/storehooks.ts"],"sourcesContent":["// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { extractErrorMessage } from '@northern.tech/utils/helpers';\nimport dayjs from 'dayjs';\nimport durationDayJs from 'dayjs/plugin/duration.js';\nimport Cookies from 'universal-cookie';\n\nimport storeActions from './actions';\nimport { getSessionInfo } from './auth';\nimport { DEPLOYMENT_STATES, DEVICE_STATES, TIMEOUTS, timeUnits } from './constants';\nimport {\n getDevicesByStatus as getDevicesByStatusSelector,\n getFeatures,\n getGlobalSettings as getGlobalSettingsSelector,\n getIsEnterprise,\n getIsServiceProvider,\n getOfflineThresholdSettings,\n getOnboardingState as getOnboardingStateSelector,\n getSortedFilteringAttributes,\n getUserCapabilities,\n getUserSettings as getUserSettingsSelector\n} from './selectors';\nimport {\n getDeploymentsByStatus,\n getDeviceAttributes,\n getDeviceById,\n getDeviceLimits,\n getDevicesByStatus,\n getDynamicGroups,\n getGlobalSettings,\n getGroups,\n getIntegrations,\n getLatestReleaseInfo,\n getOnboardingState,\n getReleases,\n getRoles,\n getUserOrganization,\n getUserSettings,\n saveGlobalSettings,\n saveUserSettings\n} from './thunks';\nimport { getComparisonCompatibleVersion, stringToBoolean } from './utils';\n\nconst cookies = new Cookies();\ndayjs.extend(durationDayJs);\n\nconst { setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = storeActions;\n\nconst featureFlags = [\n 'hasAiEnabled',\n 'hasAuditlogs',\n 'hasMultitenancy',\n 'hasDeltaProgress',\n 'hasDeviceConfig',\n 'hasDeviceConnect',\n 'hasFeedbackEnabled',\n 'hasReporting',\n 'hasMonitor',\n 'isEnterprise'\n];\n\nconst environmentDatas = ['commit', 'feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', 'sentry', 'stripeAPIKey', 'trackerCode'];\n\nexport const parseEnvironmentInfo = () => (dispatch, getState) => {\n const state = getState();\n let onboardingComplete = state.onboarding.complete || !!JSON.parse(window.localStorage.getItem('onboardingComplete') ?? 'false');\n let demoArtifactPort = 85;\n let environmentData = {};\n let environmentFeatures = {};\n let versionInfo = {};\n if (mender_environment) {\n const {\n features = {},\n demoArtifactPort: port,\n disableOnboarding,\n integrationVersion,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion\n } = mender_environment;\n demoArtifactPort = port || demoArtifactPort;\n environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || state.app[flag] }), {});\n environmentFeatures = {\n ...featureFlags.reduce((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),\n isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes('hosted.mender.io')\n };\n onboardingComplete = !stringToBoolean(environmentFeatures.isHosted) || stringToBoolean(disableOnboarding) || onboardingComplete;\n versionInfo = {\n docs: isNaN(integrationVersion.charAt(0)) ? '' : integrationVersion.split('.').slice(0, 2).join('.'),\n remainder: {\n Integration: getComparisonCompatibleVersion(integrationVersion),\n 'Mender-Client': getComparisonCompatibleVersion(menderVersion),\n 'Mender-Artifact': menderArtifactVersion,\n 'Meta-Mender': metaMenderVersion\n }\n };\n }\n return Promise.all([\n dispatch(storeActions.successfullyLoggedIn(getSessionInfo())),\n dispatch(storeActions.setOnboardingComplete(onboardingComplete)),\n dispatch(storeActions.setDemoArtifactPort(demoArtifactPort)),\n dispatch(storeActions.setFeatures(environmentFeatures)),\n dispatch(storeActions.setVersionInformation({ ...versionInfo.remainder, docsVersion: versionInfo.docs })),\n dispatch(storeActions.setEnvironmentData(environmentData)),\n dispatch(getLatestReleaseInfo())\n ]);\n};\n\nconst maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tasks }) => {\n if (!onboardingState.showTips || onboardingState.complete) {\n return tasks;\n }\n // try to retrieve full device details for onboarding devices to ensure ips etc. are available\n // we only load the first few/ 20 devices, as it is possible the onboarding is left dangling\n // and a lot of devices are present and we don't want to flood the backend for this\n return devicesByStatus[DEVICE_STATES.accepted].deviceIds.reduce((accu, id) => {\n accu.push(dispatch(getDeviceById(id)));\n return accu;\n }, tasks);\n};\n\nexport const useAppInit = userId => {\n const dispatch = useDispatch();\n const [coreInitDone, setCoreInitDone] = useState(false);\n const isEnterprise = useSelector(getIsEnterprise);\n const { hasMultitenancy, isHosted } = useSelector(getFeatures);\n const devicesByStatus = useSelector(getDevicesByStatusSelector);\n const onboardingState = useSelector(getOnboardingStateSelector);\n const { columnSelection = [], trackingConsentGiven: hasTrackingEnabled, tooltips = {} } = useSelector(getUserSettingsSelector);\n const { canManageUsers } = useSelector(getUserCapabilities);\n const { interval, intervalUnit } = useSelector(getOfflineThresholdSettings);\n const { id_attribute } = useSelector(getGlobalSettingsSelector);\n const { identityAttributes } = useSelector(getSortedFilteringAttributes);\n const isServiceProvider = useSelector(getIsServiceProvider);\n const coreInitRunning = useRef(false);\n const fullInitRunning = useRef(false);\n\n const retrieveCoreData = useCallback(() => {\n const tasks = [\n dispatch(parseEnvironmentInfo()),\n dispatch(getUserSettings()),\n dispatch(getGlobalSettings()),\n dispatch(setFirstLoginAfterSignup(stringToBoolean(cookies.get('firstLoginAfterSignup'))))\n ];\n const multitenancy = hasMultitenancy || isHosted || isEnterprise;\n if (multitenancy) {\n tasks.push(dispatch(getUserOrganization()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isHosted, isEnterprise]);\n\n const retrieveAppData = useCallback(() => {\n if (isServiceProvider) {\n return Promise.resolve(dispatch(getRoles()));\n }\n const tasks = [\n dispatch(getDeviceAttributes()),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.finished, shouldSelect: false })),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.inprogress })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.accepted })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.pending })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.preauth })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.rejected })),\n dispatch(getDynamicGroups()),\n dispatch(getGroups()),\n dispatch(getIntegrations()),\n dispatch(getReleases())\n ];\n if (hasMultitenancy) {\n tasks.push(dispatch(getDeviceLimits()));\n tasks.push(dispatch(getRoles()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isServiceProvider]);\n\n const interpretAppData = useCallback(() => {\n const settings = {};\n if (cookies.get('_ga') && typeof hasTrackingEnabled === 'undefined') {\n settings.trackingConsentGiven = true;\n }\n let tasks = [\n dispatch(setDeviceListState({ selectedAttributes: columnSelection.map(column => ({ attribute: column.key, scope: column.scope })) })),\n dispatch(setTooltipsState(tooltips)), // tooltips read state is primarily trusted from the redux store, except on app init - here user settings are the reference\n dispatch(saveUserSettings(settings))\n ];\n // checks if user id is set and if cookie for helptips exists for that user\n tasks = maybeAddOnboardingTasks({ devicesByStatus, dispatch, tasks, onboardingState });\n\n if (canManageUsers && intervalUnit && intervalUnit !== timeUnits.days) {\n const duration = dayjs.duration(interval, intervalUnit);\n const days = duration.asDays();\n if (days < 1) {\n tasks.push(Promise.resolve(setTimeout(() => dispatch(setShowStartupNotification(true)), TIMEOUTS.fiveSeconds)));\n } else {\n const roundedDays = Math.max(1, Math.round(days));\n tasks.push(dispatch(saveGlobalSettings({ offlineThreshold: { interval: roundedDays, intervalUnit: timeUnits.days } })));\n }\n }\n\n // the following is used as a migration and initialization of the stored identity attribute\n // changing the default device attribute to the first non-deviceId attribute, unless a stored\n // id attribute setting exists\n const identityOptions = identityAttributes.filter(attribute => !['id', 'Device ID', 'status'].includes(attribute));\n if (!id_attribute && identityOptions.length) {\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute: identityOptions[0], scope: 'identity' } })));\n } else if (typeof id_attribute === 'string') {\n let attribute = id_attribute;\n if (attribute === 'Device ID') {\n attribute = 'id';\n }\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute, scope: 'identity' } })));\n }\n return Promise.all(tasks);\n }, [\n columnSelection,\n dispatch,\n identityAttributes,\n hasTrackingEnabled,\n canManageUsers,\n devicesByStatus,\n id_attribute,\n interval,\n intervalUnit,\n onboardingState,\n tooltips\n ]);\n\n const initializeAppData = useCallback(\n () =>\n retrieveAppData()\n .then(interpretAppData)\n // this is allowed to fail if no user information are available\n .catch(err => console.log(extractErrorMessage(err)))\n .then(() => dispatch(getOnboardingState())),\n [dispatch, retrieveAppData, interpretAppData]\n );\n\n useEffect(() => {\n if (!userId || coreInitRunning.current) {\n return;\n }\n coreInitRunning.current = true;\n retrieveCoreData().then(() => setCoreInitDone(true));\n }, [userId, retrieveCoreData]);\n\n useEffect(() => {\n if (fullInitRunning.current || !coreInitDone) {\n return;\n }\n fullInitRunning.current = true;\n initializeAppData();\n }, [initializeAppData, coreInitDone]);\n\n return { coreInitDone };\n};\n"],"mappings":"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","names":["getUserSettings","getGlobalSettings","getDevicesByStatus","getOnboardingState"]}
1
+ {"version":3,"sources":["../src/storehooks.ts"],"sourcesContent":["// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { extractErrorMessage } from '@northern.tech/utils/helpers';\nimport dayjs from 'dayjs';\nimport durationDayJs from 'dayjs/plugin/duration.js';\nimport Cookies from 'universal-cookie';\n\nimport storeActions from './actions';\nimport { getSessionInfo } from './auth';\nimport { DEPLOYMENT_STATES, DEVICE_STATES, TIMEOUTS, timeUnits } from './constants';\nimport {\n getDevicesByStatus as getDevicesByStatusSelector,\n getFeatures,\n getGlobalSettings as getGlobalSettingsSelector,\n getIsEnterprise,\n getIsServiceProvider,\n getOfflineThresholdSettings,\n getOnboardingState as getOnboardingStateSelector,\n getSortedFilteringAttributes,\n getUserCapabilities,\n getUserSettings as getUserSettingsSelector\n} from './selectors';\nimport {\n getDeploymentsByStatus,\n getDeviceAttributes,\n getDeviceById,\n getDeviceLimits,\n getDevicesByStatus,\n getDynamicGroups,\n getGlobalSettings,\n getGroups,\n getIntegrations,\n getLatestReleaseInfo,\n getOnboardingState,\n getReleases,\n getRoles,\n getUserOrganization,\n getUserSettings,\n saveGlobalSettings,\n saveUserSettings\n} from './thunks';\nimport { getComparisonCompatibleVersion, stringToBoolean } from './utils';\n\nconst cookies = new Cookies();\ndayjs.extend(durationDayJs);\n\nconst { setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = storeActions;\n\nconst featureFlags = [\n 'hasAiEnabled',\n 'hasAuditlogs',\n 'hasMultitenancy',\n 'hasDeltaProgress',\n 'hasDeviceConfig',\n 'hasDeviceConnect',\n 'hasFeedbackEnabled',\n 'hasReporting',\n 'hasMonitor',\n 'hasMCUEnabled',\n 'isEnterprise'\n];\n\nconst environmentDatas = ['commit', 'feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', 'sentry', 'stripeAPIKey', 'trackerCode'];\n\nexport const parseEnvironmentInfo = () => (dispatch, getState) => {\n const state = getState();\n let onboardingComplete = state.onboarding.complete || !!JSON.parse(window.localStorage.getItem('onboardingComplete') ?? 'false');\n let demoArtifactPort = 85;\n let environmentData = {};\n let environmentFeatures = {};\n let versionInfo = {};\n if (mender_environment) {\n const {\n features = {},\n demoArtifactPort: port,\n disableOnboarding,\n integrationVersion,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion\n } = mender_environment;\n demoArtifactPort = port || demoArtifactPort;\n environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || state.app[flag] }), {});\n environmentFeatures = {\n ...featureFlags.reduce((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),\n isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes('hosted.mender.io')\n };\n onboardingComplete = !stringToBoolean(environmentFeatures.isHosted) || stringToBoolean(disableOnboarding) || onboardingComplete;\n versionInfo = {\n docs: isNaN(integrationVersion.charAt(0)) ? '' : integrationVersion.split('.').slice(0, 2).join('.'),\n remainder: {\n Integration: getComparisonCompatibleVersion(integrationVersion),\n 'Mender-Client': getComparisonCompatibleVersion(menderVersion),\n 'Mender-Artifact': menderArtifactVersion,\n 'Meta-Mender': metaMenderVersion\n }\n };\n }\n return Promise.all([\n dispatch(storeActions.successfullyLoggedIn(getSessionInfo())),\n dispatch(storeActions.setOnboardingComplete(onboardingComplete)),\n dispatch(storeActions.setDemoArtifactPort(demoArtifactPort)),\n dispatch(storeActions.setFeatures(environmentFeatures)),\n dispatch(storeActions.setVersionInformation({ ...versionInfo.remainder, docsVersion: versionInfo.docs })),\n dispatch(storeActions.setEnvironmentData(environmentData)),\n dispatch(getLatestReleaseInfo())\n ]);\n};\n\nconst maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tasks }) => {\n if (!onboardingState.showTips || onboardingState.complete) {\n return tasks;\n }\n // try to retrieve full device details for onboarding devices to ensure ips etc. are available\n // we only load the first few/ 20 devices, as it is possible the onboarding is left dangling\n // and a lot of devices are present and we don't want to flood the backend for this\n return devicesByStatus[DEVICE_STATES.accepted].deviceIds.reduce((accu, id) => {\n accu.push(dispatch(getDeviceById(id)));\n return accu;\n }, tasks);\n};\n\nexport const useAppInit = userId => {\n const dispatch = useDispatch();\n const [coreInitDone, setCoreInitDone] = useState(false);\n const isEnterprise = useSelector(getIsEnterprise);\n const { hasMultitenancy, isHosted } = useSelector(getFeatures);\n const devicesByStatus = useSelector(getDevicesByStatusSelector);\n const onboardingState = useSelector(getOnboardingStateSelector);\n const { columnSelection = [], trackingConsentGiven: hasTrackingEnabled, tooltips = {} } = useSelector(getUserSettingsSelector);\n const { canManageUsers } = useSelector(getUserCapabilities);\n const { interval, intervalUnit } = useSelector(getOfflineThresholdSettings);\n const { id_attribute } = useSelector(getGlobalSettingsSelector);\n const { identityAttributes } = useSelector(getSortedFilteringAttributes);\n const isServiceProvider = useSelector(getIsServiceProvider);\n const coreInitRunning = useRef(false);\n const fullInitRunning = useRef(false);\n\n const retrieveCoreData = useCallback(() => {\n const tasks = [\n dispatch(parseEnvironmentInfo()),\n dispatch(getUserSettings()),\n dispatch(getGlobalSettings()),\n dispatch(setFirstLoginAfterSignup(stringToBoolean(cookies.get('firstLoginAfterSignup'))))\n ];\n const multitenancy = hasMultitenancy || isHosted || isEnterprise;\n if (multitenancy) {\n tasks.push(dispatch(getUserOrganization()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isHosted, isEnterprise]);\n\n const retrieveAppData = useCallback(() => {\n if (isServiceProvider) {\n return Promise.resolve(dispatch(getRoles()));\n }\n const tasks = [\n dispatch(getDeviceAttributes()),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.finished, shouldSelect: false })),\n dispatch(getDeploymentsByStatus({ status: DEPLOYMENT_STATES.inprogress })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.accepted })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.pending })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.preauth })),\n dispatch(getDevicesByStatus({ status: DEVICE_STATES.rejected })),\n dispatch(getDynamicGroups()),\n dispatch(getGroups()),\n dispatch(getIntegrations()),\n dispatch(getReleases())\n ];\n if (hasMultitenancy) {\n tasks.push(dispatch(getDeviceLimits()));\n tasks.push(dispatch(getRoles()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isServiceProvider]);\n\n const interpretAppData = useCallback(() => {\n const settings = {};\n if (cookies.get('_ga') && typeof hasTrackingEnabled === 'undefined') {\n settings.trackingConsentGiven = true;\n }\n let tasks = [\n dispatch(setDeviceListState({ selectedAttributes: columnSelection.map(column => ({ attribute: column.key, scope: column.scope })) })),\n dispatch(setTooltipsState(tooltips)), // tooltips read state is primarily trusted from the redux store, except on app init - here user settings are the reference\n dispatch(saveUserSettings(settings))\n ];\n // checks if user id is set and if cookie for helptips exists for that user\n tasks = maybeAddOnboardingTasks({ devicesByStatus, dispatch, tasks, onboardingState });\n\n if (canManageUsers && intervalUnit && intervalUnit !== timeUnits.days) {\n const duration = dayjs.duration(interval, intervalUnit);\n const days = duration.asDays();\n if (days < 1) {\n tasks.push(Promise.resolve(setTimeout(() => dispatch(setShowStartupNotification(true)), TIMEOUTS.fiveSeconds)));\n } else {\n const roundedDays = Math.max(1, Math.round(days));\n tasks.push(dispatch(saveGlobalSettings({ offlineThreshold: { interval: roundedDays, intervalUnit: timeUnits.days } })));\n }\n }\n\n // the following is used as a migration and initialization of the stored identity attribute\n // changing the default device attribute to the first non-deviceId attribute, unless a stored\n // id attribute setting exists\n const identityOptions = identityAttributes.filter(attribute => !['id', 'Device ID', 'status'].includes(attribute));\n if (!id_attribute && identityOptions.length) {\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute: identityOptions[0], scope: 'identity' } })));\n } else if (typeof id_attribute === 'string') {\n let attribute = id_attribute;\n if (attribute === 'Device ID') {\n attribute = 'id';\n }\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute, scope: 'identity' } })));\n }\n return Promise.all(tasks);\n }, [\n columnSelection,\n dispatch,\n identityAttributes,\n hasTrackingEnabled,\n canManageUsers,\n devicesByStatus,\n id_attribute,\n interval,\n intervalUnit,\n onboardingState,\n tooltips\n ]);\n\n const initializeAppData = useCallback(\n () =>\n retrieveAppData()\n .then(interpretAppData)\n // this is allowed to fail if no user information are available\n .catch(err => console.log(extractErrorMessage(err)))\n .then(() => dispatch(getOnboardingState())),\n [dispatch, retrieveAppData, interpretAppData]\n );\n\n useEffect(() => {\n if (!userId || coreInitRunning.current) {\n return;\n }\n coreInitRunning.current = true;\n retrieveCoreData().then(() => setCoreInitDone(true));\n }, [userId, retrieveCoreData]);\n\n useEffect(() => {\n if (fullInitRunning.current || !coreInitDone) {\n return;\n }\n fullInitRunning.current = true;\n initializeAppData();\n }, [initializeAppData, coreInitDone]);\n\n return { coreInitDone };\n};\n"],"mappings":"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","names":["getUserSettings","getGlobalSettings","getDevicesByStatus","getOnboardingState"]}
package/dist/thunks.cjs CHANGED
@@ -93,7 +93,6 @@ __export(thunks_exports, {
93
93
  getDeviceById: () => getDeviceById2,
94
94
  getDeviceConfig: () => getDeviceConfig,
95
95
  getDeviceConnect: () => getDeviceConnect,
96
- getDeviceCount: () => getDeviceCount,
97
96
  getDeviceDeployments: () => getDeviceDeployments,
98
97
  getDeviceFileDownloadLink: () => getDeviceFileDownloadLink,
99
98
  getDeviceInfo: () => getDeviceInfo,
@@ -959,6 +958,7 @@ var initialState = {
959
958
  hasDeviceConnect: false,
960
959
  hasFeedbackEnabled: false,
961
960
  hasMonitor: false,
961
+ hasMCUEnabled: false,
962
962
  hasReporting: false,
963
963
  isHosted: true,
964
964
  isEnterprise: false
@@ -1251,15 +1251,22 @@ var getDeviceIdentityAttributes = (0, import_toolkit4.createSelector)(
1251
1251
  );
1252
1252
  var getDeviceCountsByStatus = (0, import_toolkit4.createSelector)(
1253
1253
  [getDevicesByStatus],
1254
- (byStatus) => Object.values(import_constants5.DEVICE_STATES).reduce((accu, state) => {
1255
- accu[state] = byStatus[state].total || 0;
1256
- return accu;
1257
- }, {})
1254
+ (byStatus) => Object.values(import_constants5.DEVICE_STATES).reduce(
1255
+ (accu, deviceState) => {
1256
+ const { counts } = byStatus[deviceState];
1257
+ const { total, ...tieredCounts } = counts;
1258
+ const count = Object.values(tieredCounts).reduce((accu2, countPerTier) => accu2 + countPerTier, 0);
1259
+ accu[deviceState] = count;
1260
+ accu.total = accu.total + count;
1261
+ return accu;
1262
+ },
1263
+ { total: 0 }
1264
+ )
1258
1265
  );
1259
1266
  var getDeviceById = (0, import_toolkit4.createSelector)([getDevicesById, (_, deviceId) => deviceId], (devicesById, deviceId = "") => devicesById[deviceId] ?? {});
1260
1267
  var getSelectedGroupInfo = (0, import_toolkit4.createSelector)(
1261
- [getAcceptedDevices, getGroupsById, getSelectedGroup],
1262
- ({ total: acceptedDeviceTotal }, groupsById, selectedGroup) => {
1268
+ [getDeviceCountsByStatus, getGroupsById, getSelectedGroup],
1269
+ ({ accepted: acceptedDeviceTotal }, groupsById, selectedGroup) => {
1263
1270
  let groupCount = acceptedDeviceTotal;
1264
1271
  let groupFilters = [];
1265
1272
  if (selectedGroup && groupsById[selectedGroup]) {
@@ -1275,8 +1282,8 @@ var getCombinedLimit = (0, import_toolkit4.createSelector)(
1275
1282
  // limit might be -1 for unlimited devices
1276
1283
  );
1277
1284
  var getLimitMaxed = (0, import_toolkit4.createSelector)(
1278
- [getAcceptedDevices, getCombinedLimit],
1279
- ({ total: acceptedDevices = 0 }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices
1285
+ [getDeviceCountsByStatus, getCombinedLimit],
1286
+ ({ accepted: acceptedDevices }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices
1280
1287
  );
1281
1288
  var getGroupsByIdWithoutUngrouped = (0, import_toolkit4.createSelector)([getGroupsById], ({ [UNGROUPED_GROUP.id]: ungrouped, ...groups }) => groups);
1282
1289
  var getGroupData = (0, import_toolkit4.createSelector)([getGroupsByIdWithoutUngrouped], (groups) => {
@@ -1911,12 +1918,10 @@ var initialState3 = {
1911
1918
  // }
1912
1919
  },
1913
1920
  byStatus: {
1914
- [import_constants5.DEVICE_STATES.accepted]: { deviceIds: [], total: 0 },
1915
- active: { deviceIds: [], total: 0 },
1916
- inactive: { deviceIds: [], total: 0 },
1917
- [import_constants5.DEVICE_STATES.pending]: { deviceIds: [], total: 0 },
1918
- [import_constants5.DEVICE_STATES.preauth]: { deviceIds: [], total: 0 },
1919
- [import_constants5.DEVICE_STATES.rejected]: { deviceIds: [], total: 0 }
1921
+ [import_constants5.DEVICE_STATES.accepted]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1922
+ [import_constants5.DEVICE_STATES.pending]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1923
+ [import_constants5.DEVICE_STATES.preauth]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1924
+ [import_constants5.DEVICE_STATES.rejected]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } }
1920
1925
  },
1921
1926
  deviceList: {
1922
1927
  deviceIds: [],
@@ -2046,21 +2051,19 @@ var devicesSlice = (0, import_toolkit10.createSlice)({
2046
2051
  }
2047
2052
  state.filters = action.payload.filter((filter) => filter.key && filter.operator && filter.scope && typeof filter.value !== "undefined");
2048
2053
  },
2049
- setInactiveDevices: (state, action) => {
2050
- const { activeDeviceTotal, inactiveDeviceTotal } = action.payload;
2051
- state.byStatus.active.total = activeDeviceTotal;
2052
- state.byStatus.inactive.total = inactiveDeviceTotal;
2053
- },
2054
2054
  setDeviceReports: (state, action) => {
2055
2055
  state.reports = action.payload;
2056
2056
  },
2057
2057
  setDevicesByStatus: (state, action) => {
2058
- const { forceUpdate, status, total, deviceIds } = action.payload;
2059
- state.byStatus[status] = total || forceUpdate ? { deviceIds, total } : state.byStatus[status];
2058
+ const { status, total, deviceIds } = action.payload;
2059
+ if (total) {
2060
+ state.byStatus[status].deviceIds = deviceIds;
2061
+ state.byStatus[status].counts.total = total;
2062
+ }
2060
2063
  },
2061
2064
  setDevicesCountByStatus: (state, action) => {
2062
- const { count, status } = action.payload;
2063
- state.byStatus[status].total = count;
2065
+ const { countsPerTier, status } = action.payload;
2066
+ state.byStatus[status].counts = { ...countsPerTier, total: Object.values(countsPerTier).reduce((accu, tieredCount) => accu += tieredCount, 0) };
2064
2067
  },
2065
2068
  setDeviceLimits: (state, action) => {
2066
2069
  state.limits = action.payload;
@@ -2077,7 +2080,15 @@ var devicesSlice = (0, import_toolkit10.createSlice)({
2077
2080
  const hasMultipleAuthSets = authId && device.auth_sets ? device.auth_sets.filter((authset) => authset.id !== authId).length > 0 : false;
2078
2081
  if (!hasMultipleAuthSets && Object.values(import_constants5.DEVICE_STATES).includes(device.status)) {
2079
2082
  const deviceIds = state.byStatus[device.status].deviceIds.filter((id) => id !== deviceId);
2080
- state.byStatus[device.status] = { deviceIds, total: Math.max(0, state.byStatus[device.status].total - 1) };
2083
+ const deviceTier = device.attributes.tier || "standard";
2084
+ state.byStatus[device.status] = {
2085
+ deviceIds,
2086
+ counts: {
2087
+ ...state.byStatus[device.status].counts,
2088
+ [deviceTier]: Math.max(0, state.byStatus[device.status].counts[deviceTier] - 1),
2089
+ total: Math.max(0, state.byStatus[device.status].counts.total - 1)
2090
+ }
2091
+ };
2081
2092
  }
2082
2093
  }
2083
2094
  }
@@ -3509,21 +3520,13 @@ var getDeviceInfo = createAppAsyncThunk(`${sliceName3}/getDeviceInfo`, (deviceId
3509
3520
  }
3510
3521
  return Promise.all(tasks);
3511
3522
  });
3512
- var getDeviceCount = createAppAsyncThunk(
3513
- `${sliceName3}/getDeviceCount`,
3514
- (status, { dispatch, getState }) => general_api_default.post(getSearchEndpoint(getState()), {
3515
- page: 1,
3516
- per_page: 1,
3517
- filters: mapFiltersToTerms([{ key: "status", value: status, operator: import_constants5.DEVICE_FILTERING_OPTIONS.$eq.key, scope: "identity" }]),
3518
- attributes: defaultAttributes
3519
- }).then((response) => {
3520
- const count = Number(response.headers[import_constants5.headerNames.total]);
3521
- return dispatch(actions3.setDevicesCountByStatus({ count, status }));
3522
- })
3523
- );
3524
3523
  var getAllDeviceCounts = createAppAsyncThunk(
3525
3524
  `${sliceName3}/getAllDeviceCounts`,
3526
- (_, { dispatch }) => Promise.all([import_constants5.DEVICE_STATES.accepted, import_constants5.DEVICE_STATES.pending].map((status) => dispatch(getDeviceCount(status))))
3525
+ (_, { dispatch }) => general_api_default.get(`${import_constants5.inventoryApiUrlV2}/statistics`).then(({ data }) => {
3526
+ const { devices_by_status } = data;
3527
+ Object.entries(devices_by_status).map(([status, countsPerTier]) => dispatch(actions3.setDevicesCountByStatus({ countsPerTier, status })));
3528
+ return;
3529
+ })
3527
3530
  );
3528
3531
  var getDeviceLimits2 = createAppAsyncThunk(
3529
3532
  `${sliceName3}/getDeviceLimit`,
@@ -3595,7 +3598,7 @@ var getDevicesByStatus2 = createAppAsyncThunk(
3595
3598
  const state2 = getState();
3596
3599
  const deviceAccu = reduceReceivedDevices(response.data, [], state2, status);
3597
3600
  let total = !applicableFilters.length ? Number(response.headers[import_constants5.headerNames.total]) : 0;
3598
- if (status && state2.devices.byStatus[status].total === deviceAccu.ids.length) {
3601
+ if (status && state2.devices.byStatus[status].counts.total === deviceAccu.ids.length) {
3599
3602
  total = deviceAccu.ids.length;
3600
3603
  }
3601
3604
  const tasks = [dispatch(actions3.receivedDevices(deviceAccu.devicesById))];
@@ -3702,8 +3705,8 @@ var updateReportData = createAppAsyncThunk(`${sliceName3}/updateReportData`, (re
3702
3705
  const { group = "" } = report;
3703
3706
  const devicesById = getDevicesById(getState());
3704
3707
  const groups = getGroupsById(getState());
3705
- const acceptedDevices = getAcceptedDevices(getState());
3706
- const totalDeviceCount = groups[group] ? groups[group].total : acceptedDevices.total;
3708
+ const { accepted: acceptedDevicesCount } = getDeviceCountsByStatus(getState());
3709
+ const totalDeviceCount = groups[group] ? groups[group].total : acceptedDevicesCount;
3707
3710
  const reportsData = getDeviceReports(getState());
3708
3711
  const newReports = [...reportsData];
3709
3712
  newReports[reportIndex] = initializeDistributionData(report, groups, devicesById, totalDeviceCount);
@@ -3721,6 +3724,7 @@ var getReportDataWithoutBackendSupport = createAppAsyncThunk(
3721
3724
  const effectiveAttribute = software ? software : attribute;
3722
3725
  const devicesById = getDevicesById(getState());
3723
3726
  const acceptedDevices = getAcceptedDevices(getState());
3727
+ const { accepted: acceptedDevicesCount } = getDeviceCountsByStatus(getState());
3724
3728
  const groups = getGroupsById(getState());
3725
3729
  const { deviceIds = [], filters = [], total = 0 } = groups[group] || {};
3726
3730
  let groupDevicesRequest = Promise.resolve({
@@ -3728,7 +3732,7 @@ var getReportDataWithoutBackendSupport = createAppAsyncThunk(
3728
3732
  });
3729
3733
  if (group && (!(deviceIds.length && total) || deviceIds.length !== total || !deviceIds.every((id) => !!devicesById[id]))) {
3730
3734
  groupDevicesRequest = filters.length ? dispatch(getAllDynamicGroupDevices({ group, attribute: effectiveAttribute })).unwrap() : dispatch(getAllGroupDevices({ group, attribute: effectiveAttribute })).unwrap();
3731
- } else if (!group && (acceptedDevices.deviceIds.length !== acceptedDevices.total || !acceptedDevices.deviceIds.every((id) => !!devicesById[id]))) {
3735
+ } else if (!group && (acceptedDevices.deviceIds.length !== acceptedDevicesCount || !acceptedDevices.deviceIds.every((id) => !!devicesById[id]))) {
3732
3736
  groupDevicesRequest = dispatch(getAllDevicesByStatus({ status: import_constants5.DEVICE_STATES.accepted, attribute: effectiveAttribute })).unwrap();
3733
3737
  }
3734
3738
  return groupDevicesRequest.then(() => dispatch(updateReportData(reportIndex)));
@@ -5661,7 +5665,6 @@ var submitUserFeedback = createAppAsyncThunk(
5661
5665
  getDeviceById,
5662
5666
  getDeviceConfig,
5663
5667
  getDeviceConnect,
5664
- getDeviceCount,
5665
5668
  getDeviceDeployments,
5666
5669
  getDeviceFileDownloadLink,
5667
5670
  getDeviceInfo,