@northern.tech/store 0.11.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 (200) hide show
  1. package/dist/actions.cjs +22 -17
  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 +9 -9
  6. package/dist/api/general-api.js +1 -1
  7. package/dist/api/users-api.js +1 -1
  8. package/dist/appSlice/index.cjs.map +1 -1
  9. package/dist/appSlice/index.d.cts +1 -1
  10. package/dist/appSlice/index.d.ts +1 -1
  11. package/dist/appSlice/index.js +2 -2
  12. package/dist/appSlice/mocks.cjs.map +1 -1
  13. package/dist/appSlice/mocks.js +2 -2
  14. package/dist/appSlice/selectors.d.cts +34 -528
  15. package/dist/appSlice/selectors.d.ts +34 -528
  16. package/dist/appSlice/thunks.cjs +49 -42
  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 +18 -18
  21. package/dist/auth.js +1 -1
  22. package/dist/{chunk-QOFVCPRW.js → chunk-5PUF4LA5.js} +1 -1
  23. package/dist/chunk-5PUF4LA5.js.map +1 -0
  24. package/dist/{chunk-X3NF4KNC.js → chunk-6KAV62BW.js} +6 -6
  25. package/dist/{chunk-OFGCC3GM.js → chunk-7MTM3BDT.js} +1 -1
  26. package/dist/chunk-7MTM3BDT.js.map +1 -0
  27. package/dist/{chunk-4FNSLYK5.js → chunk-AR4FTKSL.js} +14 -14
  28. package/dist/{chunk-6KNRR7A5.js → chunk-BZAXFAGT.js} +4 -4
  29. package/dist/{chunk-ZNAJKEP2.js → chunk-CQXDAXQF.js} +1 -1
  30. package/dist/chunk-CQXDAXQF.js.map +1 -0
  31. package/dist/{chunk-I3H5EFZK.js → chunk-EOZ665GA.js} +15 -15
  32. package/dist/{chunk-NVNO3I3K.js → chunk-ETZVJXPD.js} +36 -41
  33. package/dist/chunk-ETZVJXPD.js.map +1 -0
  34. package/dist/{chunk-RFF52JYU.js → chunk-KJ4BPXMB.js} +3 -2
  35. package/dist/chunk-KJ4BPXMB.js.map +1 -0
  36. package/dist/{chunk-C2LGE3P6.js → chunk-OLKM53RL.js} +1 -1
  37. package/dist/chunk-OLKM53RL.js.map +1 -0
  38. package/dist/{chunk-HLX5L3IM.js → chunk-PVCHKW35.js} +1 -1
  39. package/dist/chunk-PVCHKW35.js.map +1 -0
  40. package/dist/{chunk-REZWSU22.js → chunk-VODRLEDP.js} +21 -17
  41. package/dist/chunk-VODRLEDP.js.map +1 -0
  42. package/dist/{chunk-MH5WPYQI.js → chunk-X7NEALMI.js} +16 -9
  43. package/dist/chunk-X7NEALMI.js.map +1 -0
  44. package/dist/{chunk-CUU3N6KW.js → chunk-YFAIYNQG.js} +16 -16
  45. package/dist/commonConstants.js +1 -1
  46. package/dist/commonSelectors.cjs +15 -8
  47. package/dist/commonSelectors.cjs.map +1 -1
  48. package/dist/commonSelectors.d.cts +178 -3523
  49. package/dist/commonSelectors.d.ts +178 -3523
  50. package/dist/commonSelectors.js +6 -6
  51. package/dist/constants.js +1 -1
  52. package/dist/deploymentsSlice/constants.js +1 -1
  53. package/dist/deploymentsSlice/index.cjs.map +1 -1
  54. package/dist/deploymentsSlice/index.d.cts +1 -1
  55. package/dist/deploymentsSlice/index.d.ts +1 -1
  56. package/dist/deploymentsSlice/index.js +2 -2
  57. package/dist/deploymentsSlice/mocks.cjs.map +1 -1
  58. package/dist/deploymentsSlice/mocks.js +2 -2
  59. package/dist/deploymentsSlice/selectors.d.cts +16 -138
  60. package/dist/deploymentsSlice/selectors.d.ts +16 -138
  61. package/dist/deploymentsSlice/selectors.js +1 -1
  62. package/dist/deploymentsSlice/thunks.cjs +49 -42
  63. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  64. package/dist/deploymentsSlice/thunks.d.cts +4 -2
  65. package/dist/deploymentsSlice/thunks.d.ts +4 -2
  66. package/dist/deploymentsSlice/thunks.js +18 -18
  67. package/dist/devicesSlice/constants.js +1 -1
  68. package/dist/devicesSlice/index.cjs +20 -16
  69. package/dist/devicesSlice/index.cjs.map +1 -1
  70. package/dist/devicesSlice/index.d.cts +11 -20
  71. package/dist/devicesSlice/index.d.ts +11 -20
  72. package/dist/devicesSlice/index.js +2 -2
  73. package/dist/devicesSlice/mocks.cjs +24 -22
  74. package/dist/devicesSlice/mocks.cjs.map +1 -1
  75. package/dist/devicesSlice/mocks.d.cts +20 -12
  76. package/dist/devicesSlice/mocks.d.ts +20 -12
  77. package/dist/devicesSlice/mocks.js +6 -8
  78. package/dist/devicesSlice/mocks.js.map +1 -1
  79. package/dist/devicesSlice/selectors.cjs +15 -8
  80. package/dist/devicesSlice/selectors.cjs.map +1 -1
  81. package/dist/devicesSlice/selectors.d.cts +207 -1730
  82. package/dist/devicesSlice/selectors.d.ts +207 -1730
  83. package/dist/devicesSlice/selectors.js +2 -2
  84. package/dist/devicesSlice/thunks.cjs +49 -44
  85. package/dist/devicesSlice/thunks.cjs.map +1 -1
  86. package/dist/devicesSlice/thunks.d.cts +12 -46
  87. package/dist/devicesSlice/thunks.d.ts +12 -46
  88. package/dist/devicesSlice/thunks.js +18 -20
  89. package/dist/liststatehook.js +1 -1
  90. package/dist/locationutils.js +1 -1
  91. package/dist/monitorSlice/index.cjs.map +1 -1
  92. package/dist/monitorSlice/index.d.cts +1 -1
  93. package/dist/monitorSlice/index.d.ts +1 -1
  94. package/dist/monitorSlice/index.js +2 -2
  95. package/dist/monitorSlice/mocks.cjs.map +1 -1
  96. package/dist/monitorSlice/mocks.js +2 -2
  97. package/dist/monitorSlice/thunks.cjs +37 -25
  98. package/dist/monitorSlice/thunks.cjs.map +1 -1
  99. package/dist/monitorSlice/thunks.d.cts +3 -2
  100. package/dist/monitorSlice/thunks.d.ts +3 -2
  101. package/dist/monitorSlice/thunks.js +16 -16
  102. package/dist/onboardingSlice/index.cjs.map +1 -1
  103. package/dist/onboardingSlice/index.d.cts +1 -1
  104. package/dist/onboardingSlice/index.d.ts +1 -1
  105. package/dist/onboardingSlice/index.js +1 -1
  106. package/dist/onboardingSlice/mocks.cjs.map +1 -1
  107. package/dist/onboardingSlice/mocks.js +1 -1
  108. package/dist/onboardingSlice/thunks.cjs +49 -42
  109. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  110. package/dist/onboardingSlice/thunks.d.cts +7 -15
  111. package/dist/onboardingSlice/thunks.d.ts +7 -15
  112. package/dist/onboardingSlice/thunks.js +18 -18
  113. package/dist/organizationSlice/constants.js +1 -1
  114. package/dist/organizationSlice/index.cjs.map +1 -1
  115. package/dist/organizationSlice/index.d.cts +41 -31
  116. package/dist/organizationSlice/index.d.ts +41 -31
  117. package/dist/organizationSlice/index.js +2 -2
  118. package/dist/organizationSlice/mocks.cjs.map +1 -1
  119. package/dist/organizationSlice/mocks.js +2 -2
  120. package/dist/organizationSlice/selectors.d.cts +42 -659
  121. package/dist/organizationSlice/selectors.d.ts +42 -659
  122. package/dist/organizationSlice/selectors.js +1 -1
  123. package/dist/organizationSlice/thunks.cjs +51 -44
  124. package/dist/organizationSlice/thunks.cjs.map +1 -1
  125. package/dist/organizationSlice/thunks.d.cts +4 -1
  126. package/dist/organizationSlice/thunks.d.ts +4 -1
  127. package/dist/organizationSlice/thunks.js +18 -18
  128. package/dist/organizationSlice/types.cjs.map +1 -1
  129. package/dist/organizationSlice/types.d.cts +2 -12
  130. package/dist/organizationSlice/types.d.ts +2 -12
  131. package/dist/releasesSlice/index.js +1 -1
  132. package/dist/releasesSlice/mocks.d.cts +7 -1
  133. package/dist/releasesSlice/mocks.d.ts +7 -1
  134. package/dist/releasesSlice/mocks.js +1 -1
  135. package/dist/releasesSlice/selectors.d.cts +155 -930
  136. package/dist/releasesSlice/selectors.d.ts +155 -930
  137. package/dist/releasesSlice/selectors.js +1 -1
  138. package/dist/releasesSlice/thunks.cjs +37 -25
  139. package/dist/releasesSlice/thunks.cjs.map +1 -1
  140. package/dist/releasesSlice/thunks.d.cts +4 -2
  141. package/dist/releasesSlice/thunks.d.ts +4 -2
  142. package/dist/releasesSlice/thunks.js +16 -16
  143. package/dist/selectors.cjs +15 -8
  144. package/dist/selectors.cjs.map +1 -1
  145. package/dist/selectors.d.cts +6 -3
  146. package/dist/selectors.d.ts +6 -3
  147. package/dist/selectors.js +33 -33
  148. package/dist/sockethook.cjs +1 -1
  149. package/dist/sockethook.cjs.map +1 -1
  150. package/dist/sockethook.js +2 -2
  151. package/dist/sockethook.js.map +1 -1
  152. package/dist/store.cjs +22 -17
  153. package/dist/store.cjs.map +1 -1
  154. package/dist/store.d.cts +40 -658
  155. package/dist/store.d.ts +40 -658
  156. package/dist/store.js +10 -10
  157. package/dist/storehooks.cjs +52 -45
  158. package/dist/storehooks.cjs.map +1 -1
  159. package/dist/storehooks.js +19 -19
  160. package/dist/thunks.cjs +49 -44
  161. package/dist/thunks.cjs.map +1 -1
  162. package/dist/thunks.d.cts +7 -5
  163. package/dist/thunks.d.ts +7 -5
  164. package/dist/thunks.js +18 -20
  165. package/dist/useDeploymentDevice.cjs +49 -42
  166. package/dist/useDeploymentDevice.cjs.map +1 -1
  167. package/dist/useDeploymentDevice.js +19 -19
  168. package/dist/usersSlice/constants.js +1 -1
  169. package/dist/usersSlice/index.cjs +2 -1
  170. package/dist/usersSlice/index.cjs.map +1 -1
  171. package/dist/usersSlice/index.d.cts +47 -46
  172. package/dist/usersSlice/index.d.ts +47 -46
  173. package/dist/usersSlice/index.js +2 -2
  174. package/dist/usersSlice/mocks.cjs +2 -1
  175. package/dist/usersSlice/mocks.cjs.map +1 -1
  176. package/dist/usersSlice/mocks.js +2 -2
  177. package/dist/usersSlice/selectors.d.cts +75 -1436
  178. package/dist/usersSlice/selectors.d.ts +75 -1436
  179. package/dist/usersSlice/selectors.js +1 -1
  180. package/dist/usersSlice/thunks.cjs +49 -42
  181. package/dist/usersSlice/thunks.cjs.map +1 -1
  182. package/dist/usersSlice/thunks.d.cts +3 -1
  183. package/dist/usersSlice/thunks.d.ts +3 -1
  184. package/dist/usersSlice/thunks.js +18 -18
  185. package/dist/utils.js +1 -1
  186. package/package.json +4 -4
  187. package/dist/chunk-C2LGE3P6.js.map +0 -1
  188. package/dist/chunk-HLX5L3IM.js.map +0 -1
  189. package/dist/chunk-MH5WPYQI.js.map +0 -1
  190. package/dist/chunk-NVNO3I3K.js.map +0 -1
  191. package/dist/chunk-OFGCC3GM.js.map +0 -1
  192. package/dist/chunk-QOFVCPRW.js.map +0 -1
  193. package/dist/chunk-REZWSU22.js.map +0 -1
  194. package/dist/chunk-RFF52JYU.js.map +0 -1
  195. package/dist/chunk-ZNAJKEP2.js.map +0 -1
  196. /package/dist/{chunk-X3NF4KNC.js.map → chunk-6KAV62BW.js.map} +0 -0
  197. /package/dist/{chunk-4FNSLYK5.js.map → chunk-AR4FTKSL.js.map} +0 -0
  198. /package/dist/{chunk-6KNRR7A5.js.map → chunk-BZAXFAGT.js.map} +0 -0
  199. /package/dist/{chunk-I3H5EFZK.js.map → chunk-EOZ665GA.js.map} +0 -0
  200. /package/dist/{chunk-CUU3N6KW.js.map → chunk-YFAIYNQG.js.map} +0 -0
@@ -1,25 +1,27 @@
1
- import * as _northern_tech_utils_constants from '@northern.tech/utils/constants';
2
- import { ReadState } from '../usersSlice/constants.js';
3
- import { User, UserSession, CustomColumn, GlobalSettings, UserSettings } from '../usersSlice/index.js';
1
+ import { UserSliceType } from '../usersSlice/index.js';
4
2
  import { ReleaseSliceType } from '../releasesSlice/index.js';
5
- import { OrganizationState } from '../organizationSlice/types.js';
6
- import { OnboardingApproach } from '../onboardingSlice/index.js';
7
- import * as _northern_tech_types_types_gen from '@northern.tech/types/types.gen';
3
+ import { OrganizationSliceType } from '../organizationSlice/index.js';
4
+ import { OnboardingSliceType } from '../onboardingSlice/index.js';
5
+ import { MonitorSliceType } from '../monitorSlice/index.js';
8
6
  import { DeviceSliceType } from '../devicesSlice/index.js';
9
- import { SearchState, SentryConfig, SnackbarContent, Upload } from '../appSlice/index.js';
7
+ import { AppSliceType } from '../appSlice/index.js';
10
8
  import * as reselect from 'reselect';
11
- import { Deployment, DeploymentByStatus, SelectionState, DeploymentConfig } from './index.js';
9
+ import { Deployment, DeploymentByStatus, SelectionState, DeploymentsSliceType } from './index.js';
12
10
  import { RootState } from '../store.js';
13
11
  import 'redux';
14
12
  import '@reduxjs/toolkit';
15
13
  import 'immer';
16
14
  import '@northern.tech/types/MenderTypes';
15
+ import '@northern.tech/utils/constants';
17
16
  import '../commonConstants.js';
18
17
  import 'react/jsx-runtime';
18
+ import '../usersSlice/constants.js';
19
+ import '../organizationSlice/types.js';
19
20
  import '../appSlice/constants.js';
20
21
  import '@mui/material/OverridableComponent';
21
22
  import '@mui/material';
22
23
  import '../organizationSlice/constants.js';
24
+ import '../monitorSlice/constants.js';
23
25
  import '../devicesSlice/constants.js';
24
26
  import 'redux-thunk';
25
27
 
@@ -71,138 +73,14 @@ declare const getMappedDeploymentSelection: ((state: any, deploymentsState: any)
71
73
  };
72
74
  declare const DEPLOYMENT_CUTOFF = 3;
73
75
  declare const getRecentDeployments: ((state: {
74
- app: {
75
- cancelSource: any;
76
- commit: string;
77
- demoArtifactLink: string;
78
- docsVersion: string;
79
- features: Record<string, boolean>;
80
- feedbackProbability: number;
81
- firstLoginAfterSignup: boolean;
82
- hostAddress: string | null;
83
- hostedAnnouncement: string;
84
- newThreshold: string;
85
- offlineThreshold: string;
86
- recaptchaSiteKey: string;
87
- searchState: SearchState;
88
- sentry: SentryConfig;
89
- snackbar: SnackbarContent;
90
- stripeAPIKey: string;
91
- trackerCode: string;
92
- uploadsById: Record<string, Upload>;
93
- versionInformation: {
94
- [key: string]: string | {
95
- releaseDate: string;
96
- repos: Record<string, string>;
97
- } | undefined;
98
- backend?: string;
99
- GUI?: string;
100
- latestRelease?: {
101
- releaseDate: string;
102
- repos: Record<string, string>;
103
- };
104
- };
105
- yesterday?: string;
106
- };
76
+ app: AppSliceType;
107
77
  devices: DeviceSliceType;
108
- deployments: {
109
- byId: Record<string, Deployment>;
110
- byStatus: DeploymentByStatus;
111
- config: DeploymentConfig;
112
- deploymentDeviceLimit: number;
113
- selectedDeviceIds: string[];
114
- selectionState: SelectionState;
115
- };
116
- monitor: {
117
- alerts: {
118
- alertList: {
119
- page: number;
120
- perPage: number;
121
- total: number;
122
- };
123
- byDeviceId: {
124
- alerts?: Record<string, _northern_tech_types_types_gen.Alert & {
125
- fullName?: string;
126
- }>;
127
- latest?: Record<string, _northern_tech_types_types_gen.Alert & {
128
- fullName?: string;
129
- }>;
130
- };
131
- };
132
- issueCounts: {
133
- byType: {
134
- issues: {
135
- filtered: number;
136
- total: number;
137
- };
138
- offline: {
139
- filtered: number;
140
- total: number;
141
- };
142
- failedLastUpdate: {
143
- filtered: number;
144
- total: number;
145
- };
146
- monitoring: {
147
- filtered: number;
148
- total: number;
149
- };
150
- authRequests: {
151
- filtered: number;
152
- total: number;
153
- };
154
- gatewayDevices: {
155
- filtered: number;
156
- total: number;
157
- };
158
- };
159
- };
160
- settings: {
161
- global: {
162
- channels: {
163
- email: {
164
- enabled: boolean;
165
- };
166
- };
167
- };
168
- };
169
- };
170
- onboarding: {
171
- address?: string;
172
- approach: OnboardingApproach | null;
173
- complete: boolean;
174
- demoArtifactPort: number;
175
- deviceConnection?: string;
176
- deviceType: string[] | string | null;
177
- progress: string | null;
178
- showTips: boolean | null;
179
- showTipsDialog: boolean;
180
- };
181
- organization: OrganizationState;
78
+ deployments: DeploymentsSliceType;
79
+ monitor: MonitorSliceType;
80
+ onboarding: OnboardingSliceType;
81
+ organization: OrganizationSliceType;
182
82
  releases: ReleaseSliceType;
183
- users: {
184
- activationCode?: string;
185
- byId: Record<string, User>;
186
- currentSession?: UserSession | object;
187
- currentUser: string | null;
188
- customColumns: CustomColumn[];
189
- globalSettings: GlobalSettings;
190
- permissionSetsById: Record<string, _northern_tech_utils_constants.PermissionSet>;
191
- qrCode: string | null;
192
- rolesById: Record<string, _northern_tech_utils_constants.Role>;
193
- rolesInitialized: boolean;
194
- settingsInitialized: boolean;
195
- showConnectDeviceDialog: boolean;
196
- showFeedbackDialog: boolean;
197
- showStartupNotification: boolean;
198
- tooltips: {
199
- byId: Record<string, {
200
- readState: ReadState;
201
- }>;
202
- };
203
- userSettings: UserSettings;
204
- userSettingsInitialized: boolean;
205
- };
83
+ users: UserSliceType;
206
84
  }) => {
207
85
  total: number;
208
86
  }) & {
@@ -10,8 +10,8 @@ import {
10
10
  } from "../chunk-WR6RQKF5.js";
11
11
  import "../chunk-WWED74SG.js";
12
12
  import "../chunk-2DYA3X77.js";
13
- import "../chunk-ZKAH3APE.js";
14
13
  import "../chunk-FAJ3I2UQ.js";
14
+ import "../chunk-ZKAH3APE.js";
15
15
  import "../chunk-OWWCFJZ5.js";
16
16
  export {
17
17
  DEPLOYMENT_CUTOFF,
@@ -1043,12 +1043,10 @@ var initialState3 = {
1043
1043
  // }
1044
1044
  },
1045
1045
  byStatus: {
1046
- [import_constants5.DEVICE_STATES.accepted]: { deviceIds: [], total: 0 },
1047
- active: { deviceIds: [], total: 0 },
1048
- inactive: { deviceIds: [], total: 0 },
1049
- [import_constants5.DEVICE_STATES.pending]: { deviceIds: [], total: 0 },
1050
- [import_constants5.DEVICE_STATES.preauth]: { deviceIds: [], total: 0 },
1051
- [import_constants5.DEVICE_STATES.rejected]: { deviceIds: [], total: 0 }
1046
+ [import_constants5.DEVICE_STATES.accepted]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1047
+ [import_constants5.DEVICE_STATES.pending]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1048
+ [import_constants5.DEVICE_STATES.preauth]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },
1049
+ [import_constants5.DEVICE_STATES.rejected]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } }
1052
1050
  },
1053
1051
  deviceList: {
1054
1052
  deviceIds: [],
@@ -1178,21 +1176,19 @@ var devicesSlice = (0, import_toolkit3.createSlice)({
1178
1176
  }
1179
1177
  state.filters = action.payload.filter((filter) => filter.key && filter.operator && filter.scope && typeof filter.value !== "undefined");
1180
1178
  },
1181
- setInactiveDevices: (state, action) => {
1182
- const { activeDeviceTotal, inactiveDeviceTotal } = action.payload;
1183
- state.byStatus.active.total = activeDeviceTotal;
1184
- state.byStatus.inactive.total = inactiveDeviceTotal;
1185
- },
1186
1179
  setDeviceReports: (state, action) => {
1187
1180
  state.reports = action.payload;
1188
1181
  },
1189
1182
  setDevicesByStatus: (state, action) => {
1190
- const { forceUpdate, status, total, deviceIds } = action.payload;
1191
- state.byStatus[status] = total || forceUpdate ? { deviceIds, total } : state.byStatus[status];
1183
+ const { status, total, deviceIds } = action.payload;
1184
+ if (total) {
1185
+ state.byStatus[status].deviceIds = deviceIds;
1186
+ state.byStatus[status].counts.total = total;
1187
+ }
1192
1188
  },
1193
1189
  setDevicesCountByStatus: (state, action) => {
1194
- const { count, status } = action.payload;
1195
- state.byStatus[status].total = count;
1190
+ const { countsPerTier, status } = action.payload;
1191
+ state.byStatus[status].counts = { ...countsPerTier, total: Object.values(countsPerTier).reduce((accu, tieredCount) => accu += tieredCount, 0) };
1196
1192
  },
1197
1193
  setDeviceLimits: (state, action) => {
1198
1194
  state.limits = action.payload;
@@ -1209,7 +1205,15 @@ var devicesSlice = (0, import_toolkit3.createSlice)({
1209
1205
  const hasMultipleAuthSets = authId && device.auth_sets ? device.auth_sets.filter((authset) => authset.id !== authId).length > 0 : false;
1210
1206
  if (!hasMultipleAuthSets && Object.values(import_constants5.DEVICE_STATES).includes(device.status)) {
1211
1207
  const deviceIds = state.byStatus[device.status].deviceIds.filter((id) => id !== deviceId);
1212
- state.byStatus[device.status] = { deviceIds, total: Math.max(0, state.byStatus[device.status].total - 1) };
1208
+ const deviceTier = device.attributes.tier || "standard";
1209
+ state.byStatus[device.status] = {
1210
+ deviceIds,
1211
+ counts: {
1212
+ ...state.byStatus[device.status].counts,
1213
+ [deviceTier]: Math.max(0, state.byStatus[device.status].counts[deviceTier] - 1),
1214
+ total: Math.max(0, state.byStatus[device.status].counts.total - 1)
1215
+ }
1216
+ };
1213
1217
  }
1214
1218
  }
1215
1219
  }
@@ -1585,7 +1589,8 @@ var initialState8 = {
1585
1589
  },
1586
1590
  userSettings: {
1587
1591
  columnSelection: [],
1588
- onboarding: {}
1592
+ onboarding: {},
1593
+ firstLoginTimestamp: null
1589
1594
  },
1590
1595
  userSettingsInitialized: false
1591
1596
  };
@@ -1875,15 +1880,22 @@ var getDeviceIdentityAttributes = (0, import_toolkit11.createSelector)(
1875
1880
  );
1876
1881
  var getDeviceCountsByStatus = (0, import_toolkit11.createSelector)(
1877
1882
  [getDevicesByStatus],
1878
- (byStatus) => Object.values(import_constants5.DEVICE_STATES).reduce((accu, state) => {
1879
- accu[state] = byStatus[state].total || 0;
1880
- return accu;
1881
- }, {})
1883
+ (byStatus) => Object.values(import_constants5.DEVICE_STATES).reduce(
1884
+ (accu, deviceState) => {
1885
+ const { counts } = byStatus[deviceState];
1886
+ const { total, ...tieredCounts } = counts;
1887
+ const count = Object.values(tieredCounts).reduce((accu2, countPerTier) => accu2 + countPerTier, 0);
1888
+ accu[deviceState] = count;
1889
+ accu.total = accu.total + count;
1890
+ return accu;
1891
+ },
1892
+ { total: 0 }
1893
+ )
1882
1894
  );
1883
1895
  var getDeviceById = (0, import_toolkit11.createSelector)([getDevicesById, (_, deviceId) => deviceId], (devicesById, deviceId = "") => devicesById[deviceId] ?? {});
1884
1896
  var getSelectedGroupInfo = (0, import_toolkit11.createSelector)(
1885
- [getAcceptedDevices, getGroupsById, getSelectedGroup],
1886
- ({ total: acceptedDeviceTotal }, groupsById, selectedGroup) => {
1897
+ [getDeviceCountsByStatus, getGroupsById, getSelectedGroup],
1898
+ ({ accepted: acceptedDeviceTotal }, groupsById, selectedGroup) => {
1887
1899
  let groupCount = acceptedDeviceTotal;
1888
1900
  let groupFilters = [];
1889
1901
  if (selectedGroup && groupsById[selectedGroup]) {
@@ -1899,8 +1911,8 @@ var getCombinedLimit = (0, import_toolkit11.createSelector)(
1899
1911
  // limit might be -1 for unlimited devices
1900
1912
  );
1901
1913
  var getLimitMaxed = (0, import_toolkit11.createSelector)(
1902
- [getAcceptedDevices, getCombinedLimit],
1903
- ({ total: acceptedDevices = 0 }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices
1914
+ [getDeviceCountsByStatus, getCombinedLimit],
1915
+ ({ accepted: acceptedDevices }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices
1904
1916
  );
1905
1917
  var getGroupsByIdWithoutUngrouped = (0, import_toolkit11.createSelector)([getGroupsById], ({ [UNGROUPED_GROUP.id]: ungrouped, ...groups }) => groups);
1906
1918
  var getGroupData = (0, import_toolkit11.createSelector)([getGroupsByIdWithoutUngrouped], (groups) => {
@@ -2959,21 +2971,13 @@ var getDeviceInfo = createAppAsyncThunk(`${sliceName3}/getDeviceInfo`, (deviceId
2959
2971
  }
2960
2972
  return Promise.all(tasks);
2961
2973
  });
2962
- var getDeviceCount = createAppAsyncThunk(
2963
- `${sliceName3}/getDeviceCount`,
2964
- (status, { dispatch, getState }) => general_api_default.post(getSearchEndpoint(getState()), {
2965
- page: 1,
2966
- per_page: 1,
2967
- filters: mapFiltersToTerms([{ key: "status", value: status, operator: import_constants5.DEVICE_FILTERING_OPTIONS.$eq.key, scope: "identity" }]),
2968
- attributes: defaultAttributes
2969
- }).then((response) => {
2970
- const count = Number(response.headers[import_constants5.headerNames.total]);
2971
- return dispatch(actions3.setDevicesCountByStatus({ count, status }));
2972
- })
2973
- );
2974
2974
  var getAllDeviceCounts = createAppAsyncThunk(
2975
2975
  `${sliceName3}/getAllDeviceCounts`,
2976
- (_, { dispatch }) => Promise.all([import_constants5.DEVICE_STATES.accepted, import_constants5.DEVICE_STATES.pending].map((status) => dispatch(getDeviceCount(status))))
2976
+ (_, { dispatch }) => general_api_default.get(`${import_constants5.inventoryApiUrlV2}/statistics`).then(({ data }) => {
2977
+ const { devices_by_status } = data;
2978
+ Object.entries(devices_by_status).map(([status, countsPerTier]) => dispatch(actions3.setDevicesCountByStatus({ countsPerTier, status })));
2979
+ return;
2980
+ })
2977
2981
  );
2978
2982
  var getDeviceLimits2 = createAppAsyncThunk(
2979
2983
  `${sliceName3}/getDeviceLimit`,
@@ -3045,7 +3049,7 @@ var getDevicesByStatus2 = createAppAsyncThunk(
3045
3049
  const state2 = getState();
3046
3050
  const deviceAccu = reduceReceivedDevices(response.data, [], state2, status);
3047
3051
  let total = !applicableFilters.length ? Number(response.headers[import_constants5.headerNames.total]) : 0;
3048
- if (status && state2.devices.byStatus[status].total === deviceAccu.ids.length) {
3052
+ if (status && state2.devices.byStatus[status].counts.total === deviceAccu.ids.length) {
3049
3053
  total = deviceAccu.ids.length;
3050
3054
  }
3051
3055
  const tasks = [dispatch(actions3.receivedDevices(deviceAccu.devicesById))];
@@ -3152,8 +3156,8 @@ var updateReportData = createAppAsyncThunk(`${sliceName3}/updateReportData`, (re
3152
3156
  const { group = "" } = report;
3153
3157
  const devicesById = getDevicesById(getState());
3154
3158
  const groups = getGroupsById(getState());
3155
- const acceptedDevices = getAcceptedDevices(getState());
3156
- const totalDeviceCount = groups[group] ? groups[group].total : acceptedDevices.total;
3159
+ const { accepted: acceptedDevicesCount } = getDeviceCountsByStatus(getState());
3160
+ const totalDeviceCount = groups[group] ? groups[group].total : acceptedDevicesCount;
3157
3161
  const reportsData = getDeviceReports(getState());
3158
3162
  const newReports = [...reportsData];
3159
3163
  newReports[reportIndex] = initializeDistributionData(report, groups, devicesById, totalDeviceCount);
@@ -3171,6 +3175,7 @@ var getReportDataWithoutBackendSupport = createAppAsyncThunk(
3171
3175
  const effectiveAttribute = software ? software : attribute;
3172
3176
  const devicesById = getDevicesById(getState());
3173
3177
  const acceptedDevices = getAcceptedDevices(getState());
3178
+ const { accepted: acceptedDevicesCount } = getDeviceCountsByStatus(getState());
3174
3179
  const groups = getGroupsById(getState());
3175
3180
  const { deviceIds = [], filters = [], total = 0 } = groups[group] || {};
3176
3181
  let groupDevicesRequest = Promise.resolve({
@@ -3178,7 +3183,7 @@ var getReportDataWithoutBackendSupport = createAppAsyncThunk(
3178
3183
  });
3179
3184
  if (group && (!(deviceIds.length && total) || deviceIds.length !== total || !deviceIds.every((id) => !!devicesById[id]))) {
3180
3185
  groupDevicesRequest = filters.length ? dispatch(getAllDynamicGroupDevices({ group, attribute: effectiveAttribute })).unwrap() : dispatch(getAllGroupDevices({ group, attribute: effectiveAttribute })).unwrap();
3181
- } else if (!group && (acceptedDevices.deviceIds.length !== acceptedDevices.total || !acceptedDevices.deviceIds.every((id) => !!devicesById[id]))) {
3186
+ } else if (!group && (acceptedDevices.deviceIds.length !== acceptedDevicesCount || !acceptedDevices.deviceIds.every((id) => !!devicesById[id]))) {
3182
3187
  groupDevicesRequest = dispatch(getAllDevicesByStatus({ status: import_constants5.DEVICE_STATES.accepted, attribute: effectiveAttribute })).unwrap();
3183
3188
  }
3184
3189
  return groupDevicesRequest.then(() => dispatch(updateReportData(reportIndex)));
@@ -3533,6 +3538,7 @@ var changeNotificationSetting = createAppAsyncThunk(
3533
3538
  // src/usersSlice/thunks.ts
3534
3539
  var import_helpers9 = require("@northern.tech/utils/helpers");
3535
3540
  var import_retrytimer = require("@northern.tech/utils/retrytimer");
3541
+ var import_dayjs = __toESM(require("dayjs"), 1);
3536
3542
  var import_md5 = __toESM(require("md5"), 1);
3537
3543
  var import_universal_cookie3 = __toESM(require("universal-cookie"), 1);
3538
3544
 
@@ -4117,6 +4123,7 @@ var saveUserSettings = createAppAsyncThunk(
4117
4123
  const updatedSettings = {
4118
4124
  ...userSettings,
4119
4125
  ...settings,
4126
+ firstLoginTimestamp: userSettings.firstLoginTimestamp ?? (0, import_dayjs.default)().format(),
4120
4127
  onboarding: {
4121
4128
  ...onboardingState,
4122
4129
  ...settings.onboarding