@northern.tech/store 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/dist/BillingProfile-ChP2_Sqw.d.cts +45 -0
  2. package/dist/BillingProfile-ChP2_Sqw.d.ts +45 -0
  3. package/dist/actions.cjs +2 -6
  4. package/dist/actions.cjs.map +1 -1
  5. package/dist/actions.js +12 -12
  6. package/dist/api/general-api.cjs.map +1 -1
  7. package/dist/api/general-api.js +5 -5
  8. package/dist/api/users-api.cjs.map +1 -1
  9. package/dist/api/users-api.js +6 -6
  10. package/dist/appSlice/constants.cjs.map +1 -1
  11. package/dist/appSlice/constants.d.cts +7 -7
  12. package/dist/appSlice/constants.d.ts +7 -7
  13. package/dist/appSlice/constants.js +1 -1
  14. package/dist/appSlice/index.cjs +1 -3
  15. package/dist/appSlice/index.cjs.map +1 -1
  16. package/dist/appSlice/index.js +4 -4
  17. package/dist/appSlice/thunks.cjs +16 -26
  18. package/dist/appSlice/thunks.cjs.map +1 -1
  19. package/dist/appSlice/thunks.js +28 -27
  20. package/dist/auth.cjs.map +1 -1
  21. package/dist/auth.js +4 -4
  22. package/dist/{chunk-LGNOTPUG.js → chunk-4RWZR3BN.js} +23 -25
  23. package/dist/{chunk-LGNOTPUG.js.map → chunk-4RWZR3BN.js.map} +1 -1
  24. package/dist/{chunk-TUACATJA.js → chunk-7YZCUAXZ.js} +2 -2
  25. package/dist/{chunk-7PVGDMNM.js → chunk-AFICTIVU.js} +3 -5
  26. package/dist/{chunk-7PVGDMNM.js.map → chunk-AFICTIVU.js.map} +1 -1
  27. package/dist/{chunk-YT73QWCN.js → chunk-AUBJUUP3.js} +3 -3
  28. package/dist/{chunk-VMNMD6KF.js → chunk-AVX7VVOK.js} +3 -3
  29. package/dist/{chunk-4B3IMP4I.js → chunk-BSN2TOQC.js} +1 -1
  30. package/dist/{chunk-4B3IMP4I.js.map → chunk-BSN2TOQC.js.map} +1 -1
  31. package/dist/{chunk-X7IEZBM4.js → chunk-DCEKU6UV.js} +2 -2
  32. package/dist/{chunk-HPBE6KYY.js → chunk-DGQKXSRI.js} +3 -3
  33. package/dist/{chunk-2JHFUQ6B.js → chunk-EQLHIPPR.js} +88 -85
  34. package/dist/chunk-EQLHIPPR.js.map +1 -0
  35. package/dist/{chunk-LTKOV26W.js → chunk-EYCORLYU.js} +30 -28
  36. package/dist/chunk-EYCORLYU.js.map +1 -0
  37. package/dist/{chunk-WXL7PVI5.js → chunk-FQDSV3NK.js} +4 -4
  38. package/dist/{chunk-TI2RL5P2.js → chunk-FRSA2YB5.js} +3 -3
  39. package/dist/{chunk-DCK2DBOA.js → chunk-FVCYB5OP.js} +22 -24
  40. package/dist/{chunk-DCK2DBOA.js.map → chunk-FVCYB5OP.js.map} +1 -1
  41. package/dist/{chunk-AMGWP7A4.js → chunk-GAI4VYRZ.js} +2 -2
  42. package/dist/{chunk-4XJMRVFI.js → chunk-GWJIY56H.js} +10 -12
  43. package/dist/chunk-GWJIY56H.js.map +1 -0
  44. package/dist/{chunk-2CYOM4BK.js → chunk-JO33IORF.js} +2 -2
  45. package/dist/chunk-K4MMUDYT.js +391 -0
  46. package/dist/chunk-K4MMUDYT.js.map +1 -0
  47. package/dist/{chunk-YDS36ALB.js → chunk-L3SY3J5M.js} +3 -3
  48. package/dist/{chunk-JAROCU6M.js → chunk-NCSKCF2S.js} +3 -3
  49. package/dist/{chunk-CYV6632F.js → chunk-NOQR3TE7.js} +2 -2
  50. package/dist/{chunk-C5NEDBJI.js → chunk-OEP2D6QL.js} +3 -3
  51. package/dist/{chunk-C5NEDBJI.js.map → chunk-OEP2D6QL.js.map} +1 -1
  52. package/dist/{chunk-LEMVXAYP.js → chunk-PAIB5V27.js} +15 -15
  53. package/dist/{chunk-FGKMJS3B.js → chunk-RX32WLVJ.js} +2 -4
  54. package/dist/chunk-RX32WLVJ.js.map +1 -0
  55. package/dist/{chunk-QRGTG4YB.js → chunk-X3GZILYD.js} +3 -3
  56. package/dist/{chunk-UWMYZNUB.js → chunk-Y575RZHR.js} +1 -1
  57. package/dist/{chunk-UWMYZNUB.js.map → chunk-Y575RZHR.js.map} +1 -1
  58. package/dist/{chunk-7JKWI5FK.js → chunk-ZWOAFHAR.js} +2 -2
  59. package/dist/{chunk-DAPAXWA5.js → chunk-ZZMFXRQK.js} +12 -12
  60. package/dist/commonConstants.cjs.map +1 -1
  61. package/dist/commonConstants.d.cts +1 -1
  62. package/dist/commonConstants.d.ts +1 -1
  63. package/dist/commonConstants.js +1 -1
  64. package/dist/commonSelectors.cjs +7 -11
  65. package/dist/commonSelectors.cjs.map +1 -1
  66. package/dist/commonSelectors.d.cts +12 -11
  67. package/dist/commonSelectors.d.ts +12 -11
  68. package/dist/commonSelectors.js +11 -11
  69. package/dist/constants.cjs.map +1 -1
  70. package/dist/constants.js +3 -3
  71. package/dist/deploymentdevicehook.cjs +16 -26
  72. package/dist/deploymentdevicehook.cjs.map +1 -1
  73. package/dist/deploymentdevicehook.js +30 -29
  74. package/dist/deploymentdevicehook.js.map +1 -1
  75. package/dist/deploymentsSlice/constants.cjs.map +1 -1
  76. package/dist/deploymentsSlice/constants.js +3 -3
  77. package/dist/deploymentsSlice/index.cjs.map +1 -1
  78. package/dist/deploymentsSlice/index.js +4 -4
  79. package/dist/deploymentsSlice/selectors.cjs.map +1 -1
  80. package/dist/deploymentsSlice/selectors.js +4 -4
  81. package/dist/deploymentsSlice/thunks.cjs +16 -26
  82. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  83. package/dist/deploymentsSlice/thunks.js +28 -27
  84. package/dist/devicesSlice/constants.cjs.map +1 -1
  85. package/dist/devicesSlice/constants.js +3 -3
  86. package/dist/devicesSlice/index.cjs.map +1 -1
  87. package/dist/devicesSlice/index.js +4 -4
  88. package/dist/devicesSlice/selectors.cjs.map +1 -1
  89. package/dist/devicesSlice/selectors.js +4 -4
  90. package/dist/devicesSlice/thunks.cjs +16 -26
  91. package/dist/devicesSlice/thunks.cjs.map +1 -1
  92. package/dist/devicesSlice/thunks.js +28 -27
  93. package/dist/liststatehook.cjs +971 -0
  94. package/dist/liststatehook.cjs.map +1 -0
  95. package/dist/liststatehook.d.cts +246 -0
  96. package/dist/liststatehook.d.ts +246 -0
  97. package/dist/liststatehook.js +88 -0
  98. package/dist/liststatehook.js.map +1 -0
  99. package/dist/locationutils.cjs +942 -0
  100. package/dist/locationutils.cjs.map +1 -0
  101. package/dist/locationutils.d.cts +113 -0
  102. package/dist/locationutils.d.ts +113 -0
  103. package/dist/locationutils.js +46 -0
  104. package/dist/locationutils.js.map +1 -0
  105. package/dist/monitorSlice/constants.cjs.map +1 -1
  106. package/dist/monitorSlice/constants.js +3 -3
  107. package/dist/monitorSlice/index.cjs.map +1 -1
  108. package/dist/monitorSlice/index.js +4 -4
  109. package/dist/monitorSlice/thunks.cjs +15 -25
  110. package/dist/monitorSlice/thunks.cjs.map +1 -1
  111. package/dist/monitorSlice/thunks.js +24 -24
  112. package/dist/onboardingSlice/index.cjs +1 -3
  113. package/dist/onboardingSlice/index.cjs.map +1 -1
  114. package/dist/onboardingSlice/index.js +1 -1
  115. package/dist/onboardingSlice/thunks.cjs +22 -35
  116. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  117. package/dist/onboardingSlice/thunks.d.cts +1 -2
  118. package/dist/onboardingSlice/thunks.d.ts +1 -2
  119. package/dist/onboardingSlice/thunks.js +28 -29
  120. package/dist/organizationSlice/constants.cjs.map +1 -1
  121. package/dist/organizationSlice/constants.js +3 -3
  122. package/dist/organizationSlice/index.cjs.map +1 -1
  123. package/dist/organizationSlice/index.d.cts +2 -1
  124. package/dist/organizationSlice/index.d.ts +2 -1
  125. package/dist/organizationSlice/index.js +4 -4
  126. package/dist/organizationSlice/selectors.cjs.map +1 -1
  127. package/dist/organizationSlice/selectors.d.cts +2 -1
  128. package/dist/organizationSlice/selectors.d.ts +2 -1
  129. package/dist/organizationSlice/selectors.js +4 -4
  130. package/dist/organizationSlice/thunks.cjs +38 -44
  131. package/dist/organizationSlice/thunks.cjs.map +1 -1
  132. package/dist/organizationSlice/thunks.d.cts +5 -5
  133. package/dist/organizationSlice/thunks.d.ts +5 -5
  134. package/dist/organizationSlice/thunks.js +28 -27
  135. package/dist/organizationSlice/types.cjs.map +1 -1
  136. package/dist/organizationSlice/types.d.cts +3 -112
  137. package/dist/organizationSlice/types.d.ts +3 -112
  138. package/dist/releasesSlice/index.cjs.map +1 -1
  139. package/dist/releasesSlice/index.js +4 -4
  140. package/dist/releasesSlice/selectors.cjs +6 -8
  141. package/dist/releasesSlice/selectors.cjs.map +1 -1
  142. package/dist/releasesSlice/selectors.js +5 -5
  143. package/dist/releasesSlice/thunks.cjs +51 -46
  144. package/dist/releasesSlice/thunks.cjs.map +1 -1
  145. package/dist/releasesSlice/thunks.js +25 -24
  146. package/dist/selectors.cjs +7 -11
  147. package/dist/selectors.cjs.map +1 -1
  148. package/dist/selectors.d.cts +2 -1
  149. package/dist/selectors.d.ts +2 -1
  150. package/dist/selectors.js +37 -37
  151. package/dist/sockethook.cjs +529 -0
  152. package/dist/sockethook.cjs.map +1 -0
  153. package/dist/sockethook.d.cts +10 -0
  154. package/dist/sockethook.d.ts +10 -0
  155. package/dist/sockethook.js +141 -0
  156. package/dist/sockethook.js.map +1 -0
  157. package/dist/store.cjs +2 -6
  158. package/dist/store.cjs.map +1 -1
  159. package/dist/store.d.cts +2 -1
  160. package/dist/store.d.ts +2 -1
  161. package/dist/store.js +14 -14
  162. package/dist/storehooks.cjs +86 -90
  163. package/dist/storehooks.cjs.map +1 -1
  164. package/dist/storehooks.js +37 -48
  165. package/dist/storehooks.js.map +1 -1
  166. package/dist/thunks.cjs +83 -79
  167. package/dist/thunks.cjs.map +1 -1
  168. package/dist/thunks.d.cts +2 -2
  169. package/dist/thunks.d.ts +2 -2
  170. package/dist/thunks.js +28 -29
  171. package/dist/types-DBj17FZO.d.cts +135 -0
  172. package/dist/types-DnfZa6xd.d.ts +135 -0
  173. package/dist/usersSlice/constants.cjs.map +1 -1
  174. package/dist/usersSlice/constants.d.cts +6 -6
  175. package/dist/usersSlice/constants.d.ts +6 -6
  176. package/dist/usersSlice/constants.js +3 -3
  177. package/dist/usersSlice/index.cjs.map +1 -1
  178. package/dist/usersSlice/index.js +4 -4
  179. package/dist/usersSlice/selectors.cjs.map +1 -1
  180. package/dist/usersSlice/selectors.js +5 -5
  181. package/dist/usersSlice/thunks.cjs +16 -26
  182. package/dist/usersSlice/thunks.cjs.map +1 -1
  183. package/dist/usersSlice/thunks.js +28 -27
  184. package/dist/utils.cjs +6 -8
  185. package/dist/utils.cjs.map +1 -1
  186. package/dist/utils.js +4 -4
  187. package/package.json +6 -5
  188. package/dist/chunk-2JHFUQ6B.js.map +0 -1
  189. package/dist/chunk-4XJMRVFI.js.map +0 -1
  190. package/dist/chunk-FGKMJS3B.js.map +0 -1
  191. package/dist/chunk-LTKOV26W.js.map +0 -1
  192. /package/dist/{chunk-TUACATJA.js.map → chunk-7YZCUAXZ.js.map} +0 -0
  193. /package/dist/{chunk-YT73QWCN.js.map → chunk-AUBJUUP3.js.map} +0 -0
  194. /package/dist/{chunk-VMNMD6KF.js.map → chunk-AVX7VVOK.js.map} +0 -0
  195. /package/dist/{chunk-X7IEZBM4.js.map → chunk-DCEKU6UV.js.map} +0 -0
  196. /package/dist/{chunk-HPBE6KYY.js.map → chunk-DGQKXSRI.js.map} +0 -0
  197. /package/dist/{chunk-WXL7PVI5.js.map → chunk-FQDSV3NK.js.map} +0 -0
  198. /package/dist/{chunk-TI2RL5P2.js.map → chunk-FRSA2YB5.js.map} +0 -0
  199. /package/dist/{chunk-AMGWP7A4.js.map → chunk-GAI4VYRZ.js.map} +0 -0
  200. /package/dist/{chunk-2CYOM4BK.js.map → chunk-JO33IORF.js.map} +0 -0
  201. /package/dist/{chunk-YDS36ALB.js.map → chunk-L3SY3J5M.js.map} +0 -0
  202. /package/dist/{chunk-JAROCU6M.js.map → chunk-NCSKCF2S.js.map} +0 -0
  203. /package/dist/{chunk-CYV6632F.js.map → chunk-NOQR3TE7.js.map} +0 -0
  204. /package/dist/{chunk-LEMVXAYP.js.map → chunk-PAIB5V27.js.map} +0 -0
  205. /package/dist/{chunk-QRGTG4YB.js.map → chunk-X3GZILYD.js.map} +0 -0
  206. /package/dist/{chunk-7JKWI5FK.js.map → chunk-ZWOAFHAR.js.map} +0 -0
  207. /package/dist/{chunk-DAPAXWA5.js.map → chunk-ZZMFXRQK.js.map} +0 -0
@@ -15,82 +15,80 @@ import {
15
15
  getUserSettings as getUserSettings2,
16
16
  saveGlobalSettings,
17
17
  saveUserSettings
18
- } from "./chunk-2JHFUQ6B.js";
18
+ } from "./chunk-EQLHIPPR.js";
19
19
  import {
20
20
  getReleases
21
- } from "./chunk-LTKOV26W.js";
22
- import "./chunk-LGNOTPUG.js";
23
- import "./chunk-JAROCU6M.js";
24
- import "./chunk-YT73QWCN.js";
21
+ } from "./chunk-EYCORLYU.js";
22
+ import "./chunk-4RWZR3BN.js";
23
+ import "./chunk-NCSKCF2S.js";
24
+ import "./chunk-AUBJUUP3.js";
25
25
  import "./chunk-NMAXZ3ZY.js";
26
+ import "./chunk-PAIB5V27.js";
27
+ import {
28
+ actions_default
29
+ } from "./chunk-ZZMFXRQK.js";
30
+ import "./chunk-DGQKXSRI.js";
31
+ import "./chunk-7YZCUAXZ.js";
32
+ import "./chunk-FRSA2YB5.js";
33
+ import "./chunk-NOQR3TE7.js";
34
+ import "./chunk-AVX7VVOK.js";
35
+ import "./chunk-RX32WLVJ.js";
36
+ import "./chunk-X3GZILYD.js";
37
+ import "./chunk-AFICTIVU.js";
38
+ import {
39
+ getSessionInfo
40
+ } from "./chunk-GAI4VYRZ.js";
26
41
  import {
27
42
  getIsEnterprise,
28
43
  getOnboardingState,
29
44
  getUserCapabilities
30
- } from "./chunk-DCK2DBOA.js";
31
- import "./chunk-X7IEZBM4.js";
45
+ } from "./chunk-FVCYB5OP.js";
46
+ import "./chunk-ZWOAFHAR.js";
32
47
  import {
33
48
  getGlobalSettings,
34
49
  getOfflineThresholdSettings,
35
50
  getUserSettings
36
- } from "./chunk-WXL7PVI5.js";
51
+ } from "./chunk-FQDSV3NK.js";
37
52
  import {
38
53
  getIsServiceProvider
39
- } from "./chunk-2CYOM4BK.js";
40
- import "./chunk-7JKWI5FK.js";
54
+ } from "./chunk-JO33IORF.js";
55
+ import "./chunk-DCEKU6UV.js";
56
+ import "./chunk-YO22XLHI.js";
41
57
  import "./chunk-JIS4PA3R.js";
58
+ import {
59
+ getFeatures
60
+ } from "./chunk-LIJIIRON.js";
42
61
  import {
43
62
  getDevicesByStatus,
44
63
  getSortedFilteringAttributes
45
- } from "./chunk-YDS36ALB.js";
46
- import "./chunk-YO22XLHI.js";
64
+ } from "./chunk-L3SY3J5M.js";
47
65
  import {
48
66
  getComparisonCompatibleVersion,
49
67
  stringToBoolean
50
- } from "./chunk-4XJMRVFI.js";
51
- import {
52
- getFeatures
53
- } from "./chunk-LIJIIRON.js";
54
- import "./chunk-LEMVXAYP.js";
55
- import {
56
- actions_default
57
- } from "./chunk-DAPAXWA5.js";
58
- import "./chunk-TUACATJA.js";
59
- import "./chunk-TI2RL5P2.js";
60
- import "./chunk-CYV6632F.js";
61
- import "./chunk-HPBE6KYY.js";
62
- import "./chunk-FGKMJS3B.js";
63
- import "./chunk-QRGTG4YB.js";
64
- import "./chunk-VMNMD6KF.js";
65
- import "./chunk-7PVGDMNM.js";
66
- import {
67
- getSessionInfo
68
- } from "./chunk-AMGWP7A4.js";
68
+ } from "./chunk-GWJIY56H.js";
69
+ import "./chunk-K4MMUDYT.js";
69
70
  import {
70
71
  DEPLOYMENT_STATES,
71
72
  DEVICE_STATES
72
- } from "./chunk-C5NEDBJI.js";
73
+ } from "./chunk-OEP2D6QL.js";
73
74
  import "./chunk-CK6YE6AN.js";
74
- import {
75
- onboardingSteps
76
- } from "./chunk-MRCFLG45.js";
77
- import "./chunk-UWMYZNUB.js";
75
+ import "./chunk-MRCFLG45.js";
76
+ import "./chunk-Y575RZHR.js";
78
77
  import {
79
78
  TIMEOUTS,
80
79
  timeUnits
81
- } from "./chunk-4B3IMP4I.js";
80
+ } from "./chunk-BSN2TOQC.js";
82
81
 
83
82
  // src/storehooks.ts
84
83
  import { useCallback, useEffect, useRef, useState } from "react";
85
84
  import { useDispatch, useSelector } from "react-redux";
86
85
  import { extractErrorMessage } from "@northern.tech/utils/helpers";
87
- import { getOnboardingComponentFor } from "@northern.tech/utils/onboardingManager";
88
86
  import dayjs from "dayjs";
89
87
  import durationDayJs from "dayjs/plugin/duration";
90
88
  import Cookies from "universal-cookie";
91
89
  var cookies = new Cookies();
92
90
  dayjs.extend(durationDayJs);
93
- var { setSnackbar, setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = actions_default;
91
+ var { setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = actions_default;
94
92
  var featureFlags = [
95
93
  "hasAuditlogs",
96
94
  "hasMultitenancy",
@@ -158,15 +156,6 @@ var maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tas
158
156
  if (!onboardingState.showTips || onboardingState.complete) {
159
157
  return tasks;
160
158
  }
161
- const welcomeTip = getOnboardingComponentFor(onboardingSteps.ONBOARDING_START, {
162
- progress: onboardingState.progress,
163
- complete: onboardingState.complete,
164
- showTips: onboardingState.showTips
165
- });
166
- if (welcomeTip) {
167
- tasks.push(dispatch(setSnackbar({ message: "open", autoHideDuration: TIMEOUTS.refreshDefault, children: welcomeTip, onClick: () => {
168
- }, onClose: true })));
169
- }
170
159
  return devicesByStatus[DEVICE_STATES.accepted].deviceIds.reduce((accu, id) => {
171
160
  accu.push(dispatch(getDeviceById(id)));
172
161
  return accu;
@@ -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 { getOnboardingComponentFor } from '@northern.tech/utils/onboardingManager';\nimport dayjs from 'dayjs';\nimport durationDayJs from 'dayjs/plugin/duration';\nimport Cookies from 'universal-cookie';\n\nimport storeActions from './actions';\nimport { getSessionInfo } from './auth';\nimport { DEPLOYMENT_STATES, DEVICE_STATES, TIMEOUTS, onboardingSteps, 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 getDeviceLimit,\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 { setSnackbar, setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = storeActions;\n\nconst featureFlags = [\n 'hasAuditlogs',\n 'hasMultitenancy',\n 'hasDeltaProgress',\n 'hasDeviceConfig',\n 'hasDeviceConnect',\n 'hasFeedbackEnabled',\n 'hasReporting',\n 'hasMonitor',\n 'isEnterprise'\n];\n\nconst environmentDatas = ['feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', '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 isDemoMode,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion,\n services = {}\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: features.isHosted || window.location.hostname.includes('hosted.mender.io'),\n isDemoMode: stringToBoolean(isDemoMode || features.isDemoMode)\n };\n onboardingComplete = !stringToBoolean(features.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 Deployments: services.deploymentsVersion,\n Deviceauth: services.deviceauthVersion,\n Inventory: services.inventoryVersion,\n GUI: services.guiVersion\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 const welcomeTip = getOnboardingComponentFor(onboardingSteps.ONBOARDING_START, {\n progress: onboardingState.progress,\n complete: onboardingState.complete,\n showTips: onboardingState.showTips\n });\n if (welcomeTip) {\n tasks.push(dispatch(setSnackbar({ message: 'open', autoHideDuration: TIMEOUTS.refreshDefault, children: welcomeTip, onClick: () => {}, onClose: true })));\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 let { 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 let 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 return Promise.all([\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 dispatch(getDeviceLimit()),\n dispatch(getRoles())\n ]);\n }, [dispatch, isServiceProvider]);\n\n const interpretAppData = useCallback(() => {\n let 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';\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 getDeviceLimit,\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 'hasAuditlogs',\n 'hasMultitenancy',\n 'hasDeltaProgress',\n 'hasDeviceConfig',\n 'hasDeviceConnect',\n 'hasFeedbackEnabled',\n 'hasReporting',\n 'hasMonitor',\n 'isEnterprise'\n];\n\nconst environmentDatas = ['feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', '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 isDemoMode,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion,\n services = {}\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: features.isHosted || window.location.hostname.includes('hosted.mender.io'),\n isDemoMode: stringToBoolean(isDemoMode || features.isDemoMode)\n };\n onboardingComplete = !stringToBoolean(features.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 Deployments: services.deploymentsVersion,\n Deviceauth: services.deviceauthVersion,\n Inventory: services.inventoryVersion,\n GUI: services.guiVersion\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 let { 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 let 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 return Promise.all([\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 dispatch(getDeviceLimit()),\n dispatch(getRoles())\n ]);\n }, [dispatch, isServiceProvider]);\n\n const interpretAppData = useCallback(() => {\n let 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
@@ -38,7 +38,6 @@ __export(thunks_exports, {
38
38
  addUserToCurrentTenant: () => addUserToCurrentTenant,
39
39
  advanceOnboarding: () => advanceOnboarding,
40
40
  applyDeviceConfig: () => applyDeviceConfig,
41
- applyOnboardingFallbacks: () => applyOnboardingFallbacks,
42
41
  cancelFileUpload: () => cancelFileUpload,
43
42
  cancelRequest: () => cancelRequest,
44
43
  cancelUpgrade: () => cancelUpgrade,
@@ -1569,14 +1568,12 @@ var filtersFilter = (item, index, array) => {
1569
1568
  const firstIndex = array.findIndex((filter) => filterCompare(filter, item));
1570
1569
  return firstIndex === index;
1571
1570
  };
1572
- var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => {
1573
- return ids.slice(0, cutOffSize).reduce((accu, id) => {
1574
- if (id && byId[id]) {
1575
- accu.push({ ...defaultObject, ...byId[id] });
1576
- }
1577
- return accu;
1578
- }, []);
1579
- };
1571
+ var listItemMapper = (byId, ids, { defaultObject = {}, cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH }) => ids.slice(0, cutOffSize).reduce((accu, id) => {
1572
+ if (id && byId[id]) {
1573
+ accu.push({ ...defaultObject, ...byId[id] });
1574
+ }
1575
+ return accu;
1576
+ }, []);
1580
1577
  var mergePermissions = (existingPermissions = { ...emptyUiPermissions }, addedPermissions) => Object.entries(existingPermissions).reduce(
1581
1578
  (accu, [key, value]) => {
1582
1579
  let values;
@@ -1857,9 +1854,7 @@ var getGroupNames = (0, import_toolkit7.createSelector)([getGroupsById, getUserR
1857
1854
  });
1858
1855
  var getDeviceReportsForUser = (0, import_toolkit7.createSelector)(
1859
1856
  [getUserSettings, getCurrentUser, getGlobalSettings, getDevicesById],
1860
- ({ reports }, { id: currentUserId }, globalSettings, devicesById) => {
1861
- return reports || globalSettings[`${currentUserId}-reports`] || (Object.keys(devicesById).length ? defaultReports : []);
1862
- }
1857
+ ({ reports }, { id: currentUserId }, globalSettings, devicesById) => reports || globalSettings[`${currentUserId}-reports`] || (Object.keys(devicesById).length ? defaultReports : [])
1863
1858
  );
1864
1859
  var listTypeDeviceIdMap = {
1865
1860
  deviceList: getListedDevices,
@@ -2034,9 +2029,7 @@ var appSlice = (0, import_toolkit8.createSlice)({
2034
2029
  ...action.payload
2035
2030
  };
2036
2031
  },
2037
- setEnvironmentData: (state, action) => {
2038
- return { ...state, ...action.payload };
2039
- }
2032
+ setEnvironmentData: (state, action) => ({ ...state, ...action.payload })
2040
2033
  }
2041
2034
  });
2042
2035
  var actions = appSlice.actions;
@@ -2516,9 +2509,7 @@ var onboardingSlice = (0, import_toolkit13.createSlice)({
2516
2509
  name: sliceName5,
2517
2510
  initialState: initialState5,
2518
2511
  reducers: {
2519
- setOnboardingState: (state, action) => {
2520
- return { ...state, ...action.payload };
2521
- },
2512
+ setOnboardingState: (state, action) => ({ ...state, ...action.payload }),
2522
2513
  setDemoArtifactPort: (state, action) => {
2523
2514
  state.demoArtifactPort = action.payload;
2524
2515
  },
@@ -2946,7 +2937,7 @@ var import_validator = require("validator");
2946
2937
  var { receivedDevice, setSnackbar: setSnackbar2 } = actions_default;
2947
2938
  var { page: defaultPage, perPage: defaultPerPage } = DEVICE_LIST_DEFAULTS;
2948
2939
  var deriveDeploymentGroup = ({ filter = {}, group, groups = [], name }) => group || groups.length === 1 && !(0, import_validator.isUUID)(name) ? groups[0] : filter.name;
2949
- var transformDeployments = (deployments, deploymentsById) => deployments.sort(import_helpers8.startTimeSort).reduce(
2940
+ var transformDeployments = (deployments, deploymentsById) => deployments.sort((0, import_helpers8.customSort)(true, "created")).reduce(
2950
2941
  (accu, item) => {
2951
2942
  const filter = item.filter ?? {};
2952
2943
  let deployment = {
@@ -4242,32 +4233,29 @@ var getDeviceMonitorConfig = (0, import_toolkit20.createAsyncThunk)(
4242
4233
  );
4243
4234
  var changeNotificationSetting = (0, import_toolkit20.createAsyncThunk)(
4244
4235
  `${sliceName4}/changeNotificationSetting`,
4245
- ({ enabled, channel = alertChannels.email }, { dispatch }) => {
4246
- return general_api_default.put(`${monitorApiUrlv1}/settings/global/channel/alerts/${channel}/status`, { enabled }).catch((err) => commonErrorHandler(err, `${enabled ? "En" : "Dis"}abling ${channel} alerts failed:`, dispatch)).then(
4247
- () => Promise.all([
4248
- dispatch(actions4.changeAlertChannel({ channel, enabled })),
4249
- dispatch(actions_default.setSnackbar(`Successfully ${enabled ? "en" : "dis"}abled ${channel} alerts`, TIMEOUTS.fiveSeconds))
4250
- ])
4251
- );
4252
- }
4236
+ ({ enabled, channel = alertChannels.email }, { dispatch }) => general_api_default.put(`${monitorApiUrlv1}/settings/global/channel/alerts/${channel}/status`, { enabled }).catch((err) => commonErrorHandler(err, `${enabled ? "En" : "Dis"}abling ${channel} alerts failed:`, dispatch)).then(
4237
+ () => Promise.all([
4238
+ dispatch(actions4.changeAlertChannel({ channel, enabled })),
4239
+ dispatch(actions_default.setSnackbar(`Successfully ${enabled ? "en" : "dis"}abled ${channel} alerts`, TIMEOUTS.fiveSeconds))
4240
+ ])
4241
+ )
4253
4242
  );
4254
4243
 
4255
4244
  // src/onboardingSlice/thunks.ts
4256
4245
  var import_helpers10 = require("@northern.tech/utils/helpers");
4257
- var import_onboardingManager = require("@northern.tech/utils/onboardingManager");
4258
4246
  var import_tracking2 = __toESM(require("@northern.tech/utils/tracking"), 1);
4259
4247
  var import_toolkit21 = require("@reduxjs/toolkit");
4260
4248
  var import_universal_cookie3 = __toESM(require("universal-cookie"), 1);
4261
4249
  var cookies3 = new import_universal_cookie3.default();
4262
4250
  var applyOnboardingFallbacks = (progress2) => {
4263
- const step = import_onboardingManager.onboardingSteps[progress2];
4251
+ const step = orderedOnboardingSteps[progress2];
4264
4252
  if (step && step.fallbackStep) {
4265
4253
  return step.fallbackStep;
4266
4254
  }
4267
4255
  return progress2;
4268
4256
  };
4269
4257
  var determineProgress = (acceptedDevices, pendingDevices, releases, pastDeployments) => {
4270
- const steps = Object.keys(import_onboardingManager.onboardingSteps);
4258
+ const steps = orderedOnboardingSteps;
4271
4259
  let progress2 = -1;
4272
4260
  progress2 = pendingDevices.length > 1 ? steps.findIndex((step) => step === onboardingSteps.DEVICES_PENDING_ACCEPTING_ONBOARDING) : progress2;
4273
4261
  progress2 = acceptedDevices.length >= 1 ? steps.findIndex((step) => step === onboardingSteps.DEVICES_ACCEPTED_ONBOARDING) : progress2;
@@ -4284,7 +4272,7 @@ var deductOnboardingState = ({ devicesById, devicesByStatus, onboardingState, pa
4284
4272
  const progress2 = applyOnboardingFallbacks(onboardingState.progress || determineProgress(acceptedDevices, pendingDevices, releases, pastDeployments));
4285
4273
  return {
4286
4274
  ...onboardingState,
4287
- complete: !!(Boolean(userCookie) || onboardingState.complete || acceptedDevices.length > 1 && pendingDevices.length > 0 && releases.length > 1 && pastDeployments.length > 1 || acceptedDevices.length >= 1 && releases.length >= 2 && pastDeployments.length > 2 || acceptedDevices.length >= 1 && pendingDevices.length > 0 && releases.length >= 2 && pastDeployments.length >= 2 || Object.keys(import_onboardingManager.onboardingSteps).findIndex((step) => step === progress2) >= Object.keys(import_onboardingManager.onboardingSteps).length - 1 || onboardingState.disable || ![canDeploy, canManageDevices, canReadDeployments, canReadDevices, canReadReleases, canUploadReleases].every((i) => i)),
4275
+ complete: !!(Boolean(userCookie) || onboardingState.complete || acceptedDevices.length > 1 && pendingDevices.length > 0 && releases.length > 1 && pastDeployments.length > 1 || acceptedDevices.length >= 1 && releases.length >= 2 && pastDeployments.length > 2 || acceptedDevices.length >= 1 && pendingDevices.length > 0 && releases.length >= 2 && pastDeployments.length >= 2 || orderedOnboardingSteps.findIndex((step) => step === progress2) >= orderedOnboardingSteps.length - 1 || onboardingState.disable || ![canDeploy, canManageDevices, canReadDeployments, canReadDevices, canReadReleases, canUploadReleases].every((i) => i)),
4288
4276
  showTips: onboardingState.showTips != null ? onboardingState.showTips : true,
4289
4277
  deviceType,
4290
4278
  approach: onboardingState.approach || (deviceType.some((type) => type.startsWith("qemu")) ? "virtual" : "physical"),
@@ -4337,10 +4325,10 @@ var setOnboardingCanceled = (0, import_toolkit21.createAsyncThunk)(
4337
4325
  Promise.resolve(dispatch(actions5.setShowOnboardingHelp(false))),
4338
4326
  Promise.resolve(dispatch(actions5.setShowDismissOnboardingTipsDialog(false))),
4339
4327
  Promise.resolve(dispatch(actions5.setOnboardingComplete(true)))
4340
- ]).then(() => dispatch(advanceOnboarding(onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE))).then(() => import_tracking2.default.event({ category: "onboarding", action: import_onboardingManager.onboardingSteps.ONBOARDING_CANCELED }))
4328
+ ]).then(() => dispatch(advanceOnboarding(onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE))).then(() => import_tracking2.default.event({ category: "onboarding", action: onboardingSteps.ONBOARDING_CANCELED }))
4341
4329
  );
4342
4330
  var advanceOnboarding = (0, import_toolkit21.createAsyncThunk)(`${sliceName5}/advanceOnboarding`, (stepId, { dispatch, getState }) => {
4343
- const steps = Object.keys(import_onboardingManager.onboardingSteps);
4331
+ const steps = orderedOnboardingSteps;
4344
4332
  const progress2 = steps.findIndex((step) => step === getState().onboarding.progress);
4345
4333
  const stepIndex = steps.findIndex((step) => step === stepId);
4346
4334
  if (progress2 > stepIndex || getState().onboarding.progress === null) {
@@ -4348,7 +4336,7 @@ var advanceOnboarding = (0, import_toolkit21.createAsyncThunk)(`${sliceName5}/ad
4348
4336
  }
4349
4337
  const madeProgress = steps[stepIndex + 1];
4350
4338
  const state = { ...getOnboardingState(getState()), progress: madeProgress };
4351
- state.complete = stepIndex + 1 >= Object.keys(import_onboardingManager.onboardingSteps).findIndex((step) => step === onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE) ? true : state.complete;
4339
+ state.complete = stepIndex + 1 >= orderedOnboardingSteps.findIndex((step) => step === onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE) ? true : state.complete;
4352
4340
  import_tracking2.default.event({ category: "onboarding", action: stepId });
4353
4341
  return Promise.all([dispatch(actions5.setOnboardingProgress(madeProgress)), dispatch(saveUserSettings({ onboarding: state }))]);
4354
4342
  });
@@ -4476,14 +4464,15 @@ var setAuditlogsState = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/se
4476
4464
  return Promise.all(tasks);
4477
4465
  });
4478
4466
  var tenantDataDivergedMessage = "The system detected there is a change in your plan or purchased add-ons. Please log out and log in again";
4479
- var addTenant = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/createTenant`, (selectionState, { dispatch }) => {
4480
- return general_api_default.post(`${tenantadmApiUrlv2}/tenants`, selectionState).then(
4467
+ var addTenant = (0, import_toolkit22.createAsyncThunk)(
4468
+ `${sliceName6}/createTenant`,
4469
+ (selectionState, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/tenants`, selectionState).then(
4481
4470
  () => Promise.all([
4482
4471
  dispatch(setSnackbar4("Tenant was created successfully.")),
4483
4472
  new Promise((resolve) => setTimeout(() => resolve(dispatch(getTenants())), TIMEOUTS.oneSecond))
4484
4473
  ])
4485
- ).catch((err) => commonErrorHandler(err, "There was an error creating tenant", dispatch, commonErrorFallback));
4486
- });
4474
+ ).catch((err) => commonErrorHandler(err, "There was an error creating tenant", dispatch, commonErrorFallback))
4475
+ );
4487
4476
  var tenantListRetrieval = async (config) => {
4488
4477
  const { page, perPage } = config;
4489
4478
  const params = new URLSearchParams({ page, per_page: perPage }).toString();
@@ -4508,26 +4497,29 @@ var setTenantsListState = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/
4508
4497
  }
4509
4498
  return dispatch(actions6.setTenantListState({ ...nextState }));
4510
4499
  });
4511
- var editTenantDeviceLimit = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/editDeviceLimit`, ({ newLimit, id, name }, { dispatch }) => {
4512
- return general_api_default.put(`${tenantadmApiUrlv2}/tenants/${id}/child`, { device_limit: newLimit, name }).catch((err) => commonErrorHandler(err, `Device Limit cannot be changed`, dispatch)).then(() => {
4513
- return Promise.all([
4500
+ var editTenantDeviceLimit = (0, import_toolkit22.createAsyncThunk)(
4501
+ `${sliceName6}/editDeviceLimit`,
4502
+ ({ newLimit, id, name }, { dispatch }) => general_api_default.put(`${tenantadmApiUrlv2}/tenants/${id}/child`, { device_limit: newLimit, name }).catch((err) => commonErrorHandler(err, `Device Limit cannot be changed`, dispatch)).then(
4503
+ () => Promise.all([
4514
4504
  dispatch(setSnackbar4("Device Limit was changed successfully")),
4515
4505
  dispatch(getUserOrganization()),
4516
4506
  new Promise((resolve) => setTimeout(() => resolve(dispatch(getTenants())), TIMEOUTS.oneSecond))
4517
- ]);
4518
- });
4519
- });
4520
- var removeTenant = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/editDeviceLimit`, ({ id }, { dispatch }) => {
4521
- return general_api_default.post(`${tenantadmApiUrlv2}/tenants/${id}/remove/start`).catch((err) => commonErrorHandler(err, `There was an error removing the tenant`, dispatch)).then(
4507
+ ])
4508
+ )
4509
+ );
4510
+ var removeTenant = (0, import_toolkit22.createAsyncThunk)(
4511
+ `${sliceName6}/editDeviceLimit`,
4512
+ ({ id }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/tenants/${id}/remove/start`).catch((err) => commonErrorHandler(err, `There was an error removing the tenant`, dispatch)).then(
4522
4513
  () => Promise.all([
4523
4514
  dispatch(setSnackbar4("The tenant was removed successfully")),
4524
4515
  dispatch(getUserOrganization()),
4525
4516
  new Promise((resolve) => setTimeout(() => resolve(dispatch(getTenants())), TIMEOUTS.oneSecond))
4526
4517
  ])
4527
- );
4528
- });
4529
- var getUserOrganization = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/getUserOrganization`, (_, { dispatch, getState }) => {
4530
- return general_api_default.get(`${tenantadmApiUrlv1}/user/tenant`).then((res) => {
4518
+ )
4519
+ );
4520
+ var getUserOrganization = (0, import_toolkit22.createAsyncThunk)(
4521
+ `${sliceName6}/getUserOrganization`,
4522
+ (_, { dispatch, getState }) => general_api_default.get(`${tenantadmApiUrlv1}/user/tenant`).then((res) => {
4531
4523
  let tasks = [dispatch(actions6.setOrganization(res.data))];
4532
4524
  const { addons, plan, trial } = res.data;
4533
4525
  const { token } = getCurrentSession(getState());
@@ -4539,8 +4531,8 @@ var getUserOrganization = (0, import_toolkit22.createAsyncThunk)(`${sliceName6}/
4539
4531
  tasks.push(dispatch(setAnnouncement(tenantDataDivergedMessage)));
4540
4532
  }
4541
4533
  return Promise.all(tasks);
4542
- });
4543
- });
4534
+ })
4535
+ );
4544
4536
  var sendSupportMessage = (0, import_toolkit22.createAsyncThunk)(
4545
4537
  `${sliceName6}/sendSupportMessage`,
4546
4538
  (content, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, content).catch((err) => commonErrorHandler(err, "There was an error sending your request", dispatch, commonErrorFallback)).then(() => Promise.resolve(dispatch(setSnackbar4({ message: "Your request was sent successfully", autoHideDuration: TIMEOUTS.fiveSeconds }))))
@@ -4642,9 +4634,22 @@ var getSsoConfigs = (0, import_toolkit22.createAsyncThunk)(
4642
4634
  )
4643
4635
  );
4644
4636
 
4645
- // src/releasesSlice/thunks.ts
4637
+ // src/locationutils.ts
4646
4638
  var import_helpers12 = require("@northern.tech/utils/helpers");
4647
- var import_locationutils = require("@northern.tech/utils/locationutils");
4639
+ var defaultSelector = (result) => result[0];
4640
+ var commonFields = {
4641
+ ...Object.keys(DEVICE_LIST_DEFAULTS).reduce((accu, key) => ({ ...accu, [key]: { parse: Number, select: defaultSelector, target: key } }), {}),
4642
+ id: { parse: String, select: (i) => i, target: "id" },
4643
+ issues: { parse: void 0, select: defaultSelector, target: "selectedIssues" },
4644
+ open: { parse: Boolean, select: defaultSelector, target: "open" }
4645
+ };
4646
+ var formatReleases = ({ pageState: { searchTerm, selectedTags = [], tab, type } }) => Object.entries({ name: searchTerm, tab, type }).reduce(
4647
+ (accu, [key, value]) => value ? [...accu, `${key}=${value}`] : accu,
4648
+ selectedTags.map((tag) => `tag=${tag}`)
4649
+ ).join("&");
4650
+
4651
+ // src/releasesSlice/thunks.ts
4652
+ var import_helpers13 = require("@northern.tech/utils/helpers");
4648
4653
  var import_toolkit23 = require("@reduxjs/toolkit");
4649
4654
  var import_axios3 = require("axios");
4650
4655
  var import_uuid2 = require("uuid");
@@ -4652,7 +4657,7 @@ var { setSnackbar: setSnackbar5, initUpload: initUpload2, uploadProgress: upload
4652
4657
  var { page: defaultPage5, perPage: defaultPerPage5 } = DEVICE_LIST_DEFAULTS;
4653
4658
  var sortingDefaults = { direction: SORTING_OPTIONS.desc, key: "modified" };
4654
4659
  var flattenRelease = (release, stateRelease) => {
4655
- const updatedArtifacts = release.artifacts?.sort((0, import_helpers12.customSort)(1, "modified")) || [];
4660
+ const updatedArtifacts = release.artifacts?.sort((0, import_helpers13.customSort)(true, "modified")) || [];
4656
4661
  const { artifacts, deviceTypes, modified } = updatedArtifacts.reduce(
4657
4662
  (accu, item) => {
4658
4663
  accu.deviceTypes.push(...item.device_types_compatible);
@@ -4666,7 +4671,7 @@ var flattenRelease = (release, stateRelease) => {
4666
4671
  },
4667
4672
  { artifacts: [], deviceTypes: [], modified: void 0 }
4668
4673
  );
4669
- return { ...stateRelease, ...release, artifacts, device_types_compatible: deviceTypes.filter(import_helpers12.duplicateFilter), modified };
4674
+ return { ...stateRelease, ...release, artifacts, device_types_compatible: deviceTypes.filter(import_helpers13.duplicateFilter), modified };
4670
4675
  };
4671
4676
  var reduceReceivedReleases = (releases, stateReleasesById) => releases.reduce((accu, release) => {
4672
4677
  const stateRelease = stateReleasesById[release.name] || {};
@@ -4690,7 +4695,7 @@ var getArtifactInstallCount = (0, import_toolkit23.createAsyncThunk)(`${sliceNam
4690
4695
  }
4691
4696
  const releaseArtifacts = [...release.artifacts];
4692
4697
  const artifact = releaseArtifacts[index];
4693
- const { key, name, version } = (0, import_helpers12.extractSoftwareItem)(artifact.artifact_provides) ?? {};
4698
+ const { key, name, version } = (0, import_helpers13.extractSoftwareItem)(artifact.artifact_provides) ?? {};
4694
4699
  const attribute = `${key}${name ? `.${name}` : ""}.version`;
4695
4700
  const { filterTerms } = convertDeviceListStateToFilters({
4696
4701
  filters: [{ ...emptyFilter, key: attribute, value: version, scope: "inventory" }]
@@ -4866,7 +4871,7 @@ var setReleasesListState = (0, import_toolkit23.createAsyncThunk)(`${sliceName7}
4866
4871
  let tasks = [];
4867
4872
  const { isLoading: currentLoading, ...currentRequestState } = currentState;
4868
4873
  const { isLoading: selectionLoading, ...selectionRequestState } = nextState;
4869
- if (!(0, import_helpers12.deepCompare)(currentRequestState, selectionRequestState)) {
4874
+ if (!(0, import_helpers13.deepCompare)(currentRequestState, selectionRequestState)) {
4870
4875
  nextState.isLoading = true;
4871
4876
  tasks.push(dispatch(getReleases(nextState)).finally(() => dispatch(setReleasesListState({ isLoading: false }))));
4872
4877
  }
@@ -4876,7 +4881,7 @@ var setReleasesListState = (0, import_toolkit23.createAsyncThunk)(`${sliceName7}
4876
4881
  var releaseListRetrieval = (config) => {
4877
4882
  const { searchTerm = "", page = defaultPage5, perPage = defaultPerPage5, sort = sortingDefaults, selectedTags = [], type = "" } = config;
4878
4883
  const { key: attribute, direction } = sort;
4879
- const filterQuery = (0, import_locationutils.formatReleases)({ pageState: { searchTerm, selectedTags } });
4884
+ const filterQuery = formatReleases({ pageState: { searchTerm, selectedTags } });
4880
4885
  const updateType = type ? `update_type=${type}` : "";
4881
4886
  const sorting = attribute ? `sort=${attribute}:${direction}`.toLowerCase() : "";
4882
4887
  return general_api_default.get(
@@ -4886,7 +4891,7 @@ var releaseListRetrieval = (config) => {
4886
4891
  var deductSearchState = (receivedReleases, config, total, state) => {
4887
4892
  let releaseListState = { ...state.releasesList };
4888
4893
  const { searchTerm, searchOnly, sort = {}, selectedTags = [], type } = config;
4889
- const flattenedReleases = Object.values(receivedReleases).sort((0, import_helpers12.customSort)(sort.direction === SORTING_OPTIONS.desc, sort.key));
4894
+ const flattenedReleases = Object.values(receivedReleases).sort((0, import_helpers13.customSort)(sort.direction === SORTING_OPTIONS.desc, sort.key));
4890
4895
  const releaseIds = flattenedReleases.map((item) => item.name);
4891
4896
  const isFiltering = !!(selectedTags.length || type || searchTerm);
4892
4897
  if (searchOnly) {
@@ -4925,21 +4930,21 @@ var getRelease = (0, import_toolkit23.createAsyncThunk)(`${sliceName7}/getReleas
4925
4930
  });
4926
4931
  var updateReleaseInfo = (0, import_toolkit23.createAsyncThunk)(
4927
4932
  `${sliceName7}/updateReleaseInfo`,
4928
- ({ name, info }, { dispatch, getState }) => general_api_default.patch(`${deploymentsApiUrlV2}/deployments/releases/${name}`, info).catch((err) => commonErrorHandler(err, `Release details couldn't be updated.`, dispatch)).then(() => {
4929
- return Promise.all([
4933
+ ({ name, info }, { dispatch, getState }) => general_api_default.patch(`${deploymentsApiUrlV2}/deployments/releases/${name}`, info).catch((err) => commonErrorHandler(err, `Release details couldn't be updated.`, dispatch)).then(
4934
+ () => Promise.all([
4930
4935
  dispatch(actions7.receiveRelease({ ...getReleasesById(getState())[name], ...info, name })),
4931
4936
  dispatch(setSnackbar5("Release details were updated successfully.", TIMEOUTS.fiveSeconds, ""))
4932
- ]);
4933
- })
4937
+ ])
4938
+ )
4934
4939
  );
4935
4940
  var setReleaseTags = (0, import_toolkit23.createAsyncThunk)(
4936
4941
  `${sliceName7}/setReleaseTags`,
4937
- ({ name, tags = [] }, { dispatch, getState }) => general_api_default.put(`${deploymentsApiUrlV2}/deployments/releases/${name}/tags`, tags).catch((err) => commonErrorHandler(err, `Release tags couldn't be set.`, dispatch)).then(() => {
4938
- return Promise.all([
4942
+ ({ name, tags = [] }, { dispatch, getState }) => general_api_default.put(`${deploymentsApiUrlV2}/deployments/releases/${name}/tags`, tags).catch((err) => commonErrorHandler(err, `Release tags couldn't be set.`, dispatch)).then(
4943
+ () => Promise.all([
4939
4944
  dispatch(actions7.receiveRelease({ ...getReleasesById(getState())[name], name, tags })),
4940
4945
  dispatch(setSnackbar5("Release tags were set successfully.", TIMEOUTS.fiveSeconds, ""))
4941
- ]);
4942
- })
4946
+ ])
4947
+ )
4943
4948
  );
4944
4949
  var getExistingReleaseTags = (0, import_toolkit23.createAsyncThunk)(
4945
4950
  `${sliceName7}/getReleaseTags`,
@@ -4968,7 +4973,7 @@ var Api2 = {
4968
4973
  var users_api_default = Api2;
4969
4974
 
4970
4975
  // src/usersSlice/thunks.ts
4971
- var import_helpers13 = require("@northern.tech/utils/helpers");
4976
+ var import_helpers14 = require("@northern.tech/utils/helpers");
4972
4977
  var import_retrytimer = require("@northern.tech/utils/retrytimer");
4973
4978
  var import_toolkit24 = require("@reduxjs/toolkit");
4974
4979
  var import_md52 = __toESM(require("md5"), 1);
@@ -4976,7 +4981,7 @@ var import_universal_cookie5 = __toESM(require("universal-cookie"), 1);
4976
4981
  var cookies5 = new import_universal_cookie5.default();
4977
4982
  var { setAnnouncement: setAnnouncement2, setSnackbar: setSnackbar6 } = actions_default;
4978
4983
  var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) => (dispatch) => {
4979
- const errorText = (0, import_helpers13.extractErrorMessage)(err);
4984
+ const errorText = (0, import_helpers14.extractErrorMessage)(err);
4980
4985
  const is2FABackend = errorText.includes("2fa");
4981
4986
  if (is2FABackend && !has2FA) {
4982
4987
  return rejectWithValue({ error: "2fa code missing" });
@@ -4986,7 +4991,7 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
4986
4991
  }
4987
4992
  const twoFAError = is2FABackend ? " and verification code" : "";
4988
4993
  const errorMessage = `There was a problem logging in. Please check your email${twoFAError ? "," : " and"} password${twoFAError}. If you still have problems, contact an administrator.`;
4989
- return Promise.reject(dispatch(setSnackbar6({ message: (0, import_helpers13.preformatWithRequestID)(err.response, errorMessage), action: "Copy to clipboard" })));
4994
+ return Promise.reject(dispatch(setSnackbar6({ message: (0, import_helpers14.preformatWithRequestID)(err.response, errorMessage), action: "Copy to clipboard" })));
4990
4995
  };
4991
4996
  var loginUser = (0, import_toolkit24.createAsyncThunk)(
4992
4997
  `${sliceName8}/loginUser`,
@@ -5012,7 +5017,7 @@ var loginUser = (0, import_toolkit24.createAsyncThunk)(
5012
5017
  cookies5.remove("JWT", { path: "/" });
5013
5018
  return dispatch(getUser(OWN_USER_ID)).unwrap().catch((e) => {
5014
5019
  cleanUp();
5015
- return Promise.reject(dispatch(setSnackbar6((0, import_helpers13.extractErrorMessage)(e))));
5020
+ return Promise.reject(dispatch(setSnackbar6((0, import_helpers14.extractErrorMessage)(e))));
5016
5021
  }).then(() => {
5017
5022
  window.sessionStorage.removeItem("pendings-redirect");
5018
5023
  if (window.location.pathname !== "/ui/") {
@@ -5180,9 +5185,9 @@ var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).redu
5180
5185
  permissionsAccu.push(uiPermission.value);
5181
5186
  }
5182
5187
  return permissionsAccu;
5183
- }, []).filter(import_helpers13.duplicateFilter);
5188
+ }, []).filter(import_helpers14.duplicateFilter);
5184
5189
  if (Array.isArray(accu[area])) {
5185
- accu[area] = [...accu[area], ...collector].filter(import_helpers13.duplicateFilter);
5190
+ accu[area] = [...accu[area], ...collector].filter(import_helpers14.duplicateFilter);
5186
5191
  } else {
5187
5192
  accu[area] = mergePermissions(accu[area], { [scopedPermissionAreas[area].excessiveAccessSelector]: collector });
5188
5193
  }
@@ -5207,7 +5212,7 @@ var permissionActionTypes = {
5207
5212
  };
5208
5213
  var combinePermissions = (existingPermissions, additionalPermissions = {}) => Object.entries(additionalPermissions).reduce((accu, [name, permissions]) => {
5209
5214
  let maybeExistingPermissions = accu[name] || [];
5210
- accu[name] = [...permissions, ...maybeExistingPermissions].filter(import_helpers13.duplicateFilter);
5215
+ accu[name] = [...permissions, ...maybeExistingPermissions].filter(import_helpers14.duplicateFilter);
5211
5216
  return accu;
5212
5217
  }, existingPermissions);
5213
5218
  var tryParseCustomPermission = (permission) => {
@@ -5232,7 +5237,7 @@ var isEmptyPermissionSet = (permissionSet) => !Object.values(permissionSet).redu
5232
5237
  if (Array.isArray(permissions)) {
5233
5238
  return accu || !!permissions.length;
5234
5239
  }
5235
- return accu || !(0, import_helpers13.isEmpty)(permissions);
5240
+ return accu || !(0, import_helpers14.isEmpty)(permissions);
5236
5241
  }, false);
5237
5242
  var parseRolePermissions = ({ permission_sets_with_scope = [], permissions = [] }, permissionSets) => {
5238
5243
  const preliminaryResult = permission_sets_with_scope.reduce(
@@ -5300,7 +5305,7 @@ var getPermissionSets = (0, import_toolkit24.createAsyncThunk)(
5300
5305
  return collector;
5301
5306
  }
5302
5307
  if (permissionSet2 === permissionSetObject.name) {
5303
- collector[area] = [...collector[area], item.value].filter(import_helpers13.duplicateFilter);
5308
+ collector[area] = [...collector[area], item.value].filter(import_helpers14.duplicateFilter);
5304
5309
  }
5305
5310
  return collector;
5306
5311
  }, accu2),
@@ -5368,7 +5373,7 @@ var transformAreaRoleDataToScopedPermissionsSets = (area, areaPermissions, exces
5368
5373
  if (value.includes(excessiveAccessSelector)) {
5369
5374
  return { name };
5370
5375
  }
5371
- return { name, scope: { ...scope, value: value.filter(import_helpers13.duplicateFilter) } };
5376
+ return { name, scope: { ...scope, value: value.filter(import_helpers14.duplicateFilter) } };
5372
5377
  });
5373
5378
  };
5374
5379
  var transformRoleDataToRole = (roleData, roleState = {}) => {
@@ -5589,7 +5594,6 @@ var submitFeedback = (0, import_toolkit24.createAsyncThunk)(
5589
5594
  addUserToCurrentTenant,
5590
5595
  advanceOnboarding,
5591
5596
  applyDeviceConfig,
5592
- applyOnboardingFallbacks,
5593
5597
  cancelFileUpload,
5594
5598
  cancelRequest,
5595
5599
  cancelUpgrade,