@northern.tech/store 0.2.0 → 0.2.1
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.
- package/dist/actions.js +183 -129
- package/dist/actions.js.map +1 -1
- package/dist/actions.mjs +13 -13
- package/dist/api/general-api.js +42 -55
- package/dist/api/general-api.js.map +1 -1
- package/dist/api/general-api.mjs +6 -6
- package/dist/api/users-api.js +44 -70
- package/dist/api/users-api.js.map +1 -1
- package/dist/api/users-api.mjs +7 -7
- package/dist/appSlice/constants.js +1 -39
- package/dist/appSlice/constants.js.map +1 -1
- package/dist/appSlice/constants.mjs +2 -2
- package/dist/appSlice/index.js +51 -68
- package/dist/appSlice/index.js.map +1 -1
- package/dist/appSlice/index.mjs +5 -5
- package/dist/appSlice/selectors.js +1 -43
- package/dist/appSlice/selectors.js.map +1 -1
- package/dist/appSlice/selectors.mjs +2 -2
- package/dist/appSlice/thunks.js +563 -544
- package/dist/appSlice/thunks.js.map +1 -1
- package/dist/appSlice/thunks.mjs +28 -28
- package/dist/auth.js +39 -55
- package/dist/auth.js.map +1 -1
- package/dist/auth.mjs +5 -5
- package/dist/{chunk-C2YZYTJ6.mjs → chunk-2Z3RFYW4.mjs} +2 -11
- package/dist/{chunk-C2YZYTJ6.mjs.map → chunk-2Z3RFYW4.mjs.map} +1 -1
- package/dist/{chunk-OWHFMKTA.mjs → chunk-3ORTTLIB.mjs} +19 -16
- package/dist/{chunk-OWHFMKTA.mjs.map → chunk-3ORTTLIB.mjs.map} +1 -1
- package/dist/{chunk-NCI6JV5R.mjs → chunk-4SDUITD4.mjs} +6 -12
- package/dist/{chunk-NCI6JV5R.mjs.map → chunk-4SDUITD4.mjs.map} +1 -1
- package/dist/{chunk-BOSBROA3.mjs → chunk-5VNQCCAQ.mjs} +2 -7
- package/dist/{chunk-BOSBROA3.mjs.map → chunk-5VNQCCAQ.mjs.map} +1 -1
- package/dist/{chunk-2P4VECEE.mjs → chunk-65YIOCCD.mjs} +6 -11
- package/dist/{chunk-2P4VECEE.mjs.map → chunk-65YIOCCD.mjs.map} +1 -1
- package/dist/{chunk-QG4PT5WK.mjs → chunk-6CSGHZ3E.mjs} +9 -21
- package/dist/{chunk-QG4PT5WK.mjs.map → chunk-6CSGHZ3E.mjs.map} +1 -1
- package/dist/{chunk-X65NMDPS.mjs → chunk-AZRVRNXT.mjs} +40 -30
- package/dist/{chunk-X65NMDPS.mjs.map → chunk-AZRVRNXT.mjs.map} +1 -1
- package/dist/{chunk-M4U5R7A4.mjs → chunk-B42NUKMZ.mjs} +2 -6
- package/dist/{chunk-M4U5R7A4.mjs.map → chunk-B42NUKMZ.mjs.map} +1 -1
- package/dist/{chunk-BWFTQHNM.mjs → chunk-CHUCIHMY.mjs} +3 -4
- package/dist/{chunk-BWFTQHNM.mjs.map → chunk-CHUCIHMY.mjs.map} +1 -1
- package/dist/{chunk-UPMSYTWW.mjs → chunk-DIZJVB6M.mjs} +306 -291
- package/dist/{chunk-UPMSYTWW.mjs.map → chunk-DIZJVB6M.mjs.map} +1 -1
- package/dist/chunk-H5UCKQWK.mjs +41 -0
- package/dist/{chunk-ENLZPHTQ.mjs.map → chunk-H5UCKQWK.mjs.map} +1 -1
- package/dist/{chunk-MQIKQKSW.mjs → chunk-IFWKT27G.mjs} +37 -33
- package/dist/{chunk-MQIKQKSW.mjs.map → chunk-IFWKT27G.mjs.map} +1 -1
- package/dist/{chunk-EM2HUGUY.mjs → chunk-JA27QXVB.mjs} +37 -28
- package/dist/{chunk-EM2HUGUY.mjs.map → chunk-JA27QXVB.mjs.map} +1 -1
- package/dist/{chunk-2HCZYULZ.mjs → chunk-K2NZL5V4.mjs} +3 -6
- package/dist/{chunk-2HCZYULZ.mjs.map → chunk-K2NZL5V4.mjs.map} +1 -1
- package/dist/{chunk-Y47SYXII.mjs → chunk-KJAZNKV2.mjs} +43 -52
- package/dist/{chunk-Y47SYXII.mjs.map → chunk-KJAZNKV2.mjs.map} +1 -1
- package/dist/{chunk-U6YTBIDT.mjs → chunk-KPPU6OWF.mjs} +27 -39
- package/dist/{chunk-U6YTBIDT.mjs.map → chunk-KPPU6OWF.mjs.map} +1 -1
- package/dist/{chunk-EFHEROXZ.mjs → chunk-KZSTW27Q.mjs} +30 -18
- package/dist/{chunk-EFHEROXZ.mjs.map → chunk-KZSTW27Q.mjs.map} +1 -1
- package/dist/chunk-LZOMFHX3.mjs +38 -0
- package/dist/{chunk-RWYS5MKN.mjs → chunk-NJNSCJEY.mjs} +22 -26
- package/dist/{chunk-RWYS5MKN.mjs.map → chunk-NJNSCJEY.mjs.map} +1 -1
- package/dist/{chunk-ZLRZO4EY.mjs → chunk-O6TYYKSD.mjs} +62 -60
- package/dist/chunk-O6TYYKSD.mjs.map +1 -0
- package/dist/{chunk-OGAMVFPS.mjs → chunk-QQBUNZHA.mjs} +2 -6
- package/dist/{chunk-OGAMVFPS.mjs.map → chunk-QQBUNZHA.mjs.map} +1 -1
- package/dist/{chunk-WS3YYLTJ.mjs → chunk-R7LXL3KJ.mjs} +14 -13
- package/dist/{chunk-WS3YYLTJ.mjs.map → chunk-R7LXL3KJ.mjs.map} +1 -1
- package/dist/{chunk-MJW4632R.mjs → chunk-WCUGLHYM.mjs} +16 -20
- package/dist/{chunk-MJW4632R.mjs.map → chunk-WCUGLHYM.mjs.map} +1 -1
- package/dist/chunk-WYHJFSMQ.mjs +25 -0
- package/dist/{chunk-L4HIW3KB.mjs.map → chunk-WYHJFSMQ.mjs.map} +1 -1
- package/dist/{chunk-XJNI62IP.mjs → chunk-XC5UXEIB.mjs} +4 -11
- package/dist/{chunk-XJNI62IP.mjs.map → chunk-XC5UXEIB.mjs.map} +1 -1
- package/dist/{chunk-4U4X4KAC.mjs → chunk-XD7INCM4.mjs} +11 -17
- package/dist/{chunk-4U4X4KAC.mjs.map → chunk-XD7INCM4.mjs.map} +1 -1
- package/dist/{chunk-ZZ6VIQ3U.mjs → chunk-ZE7R2XXE.mjs} +10 -12
- package/dist/{chunk-ZZ6VIQ3U.mjs.map → chunk-ZE7R2XXE.mjs.map} +1 -1
- package/dist/{chunk-4C6IY46N.mjs → chunk-ZK4W5T53.mjs} +7 -11
- package/dist/{chunk-4C6IY46N.mjs.map → chunk-ZK4W5T53.mjs.map} +1 -1
- package/dist/commonConstants.js +1 -35
- package/dist/commonConstants.js.map +1 -1
- package/dist/commonConstants.mjs +2 -2
- package/dist/commonSelectors.js +73 -135
- package/dist/commonSelectors.js.map +1 -1
- package/dist/commonSelectors.mjs +12 -12
- package/dist/constants.js +36 -153
- package/dist/constants.js.map +1 -1
- package/dist/constants.mjs +14 -14
- package/dist/deploymentsSlice/constants.js +34 -59
- package/dist/deploymentsSlice/constants.js.map +1 -1
- package/dist/deploymentsSlice/constants.mjs +4 -4
- package/dist/deploymentsSlice/index.js +68 -79
- package/dist/deploymentsSlice/index.js.map +1 -1
- package/dist/deploymentsSlice/index.mjs +5 -5
- package/dist/deploymentsSlice/selectors.js +35 -52
- package/dist/deploymentsSlice/selectors.js.map +1 -1
- package/dist/deploymentsSlice/selectors.mjs +5 -5
- package/dist/deploymentsSlice/thunks.js +563 -553
- package/dist/deploymentsSlice/thunks.js.map +1 -1
- package/dist/deploymentsSlice/thunks.mjs +28 -28
- package/dist/devicesSlice/constants.js +34 -58
- package/dist/devicesSlice/constants.js.map +1 -1
- package/dist/devicesSlice/constants.mjs +4 -4
- package/dist/devicesSlice/index.js +71 -81
- package/dist/devicesSlice/index.js.map +1 -1
- package/dist/devicesSlice/index.mjs +5 -5
- package/dist/devicesSlice/selectors.js +40 -89
- package/dist/devicesSlice/selectors.js.map +1 -1
- package/dist/devicesSlice/selectors.mjs +5 -5
- package/dist/devicesSlice/thunks.js +563 -589
- package/dist/devicesSlice/thunks.js.map +1 -1
- package/dist/devicesSlice/thunks.mjs +28 -28
- package/dist/monitorSlice/constants.js +34 -45
- package/dist/monitorSlice/constants.js.map +1 -1
- package/dist/monitorSlice/constants.mjs +4 -4
- package/dist/monitorSlice/index.js +41 -52
- package/dist/monitorSlice/index.js.map +1 -1
- package/dist/monitorSlice/index.mjs +5 -5
- package/dist/monitorSlice/selectors.js +0 -4
- package/dist/monitorSlice/selectors.mjs +1 -1
- package/dist/monitorSlice/thunks.js +249 -232
- package/dist/monitorSlice/thunks.js.map +1 -1
- package/dist/monitorSlice/thunks.mjs +25 -25
- package/dist/onboardingSlice/constants.js +0 -5
- package/dist/onboardingSlice/constants.mjs +1 -1
- package/dist/onboardingSlice/index.js +1 -22
- package/dist/onboardingSlice/index.js.map +1 -1
- package/dist/onboardingSlice/index.mjs +2 -2
- package/dist/onboardingSlice/selectors.js +0 -4
- package/dist/onboardingSlice/selectors.mjs +1 -1
- package/dist/onboardingSlice/thunks.js +563 -547
- package/dist/onboardingSlice/thunks.js.map +1 -1
- package/dist/onboardingSlice/thunks.mjs +28 -28
- package/dist/organizationSlice/constants.js +34 -56
- package/dist/organizationSlice/constants.js.map +1 -1
- package/dist/organizationSlice/constants.mjs +4 -4
- package/dist/organizationSlice/index.js +45 -53
- package/dist/organizationSlice/index.js.map +1 -1
- package/dist/organizationSlice/index.mjs +5 -5
- package/dist/organizationSlice/selectors.js +35 -61
- package/dist/organizationSlice/selectors.js.map +1 -1
- package/dist/organizationSlice/selectors.mjs +5 -5
- package/dist/organizationSlice/thunks.js +563 -572
- package/dist/organizationSlice/thunks.js.map +1 -1
- package/dist/organizationSlice/thunks.mjs +28 -28
- package/dist/releasesSlice/constants.js +0 -7
- package/dist/releasesSlice/constants.mjs +1 -1
- package/dist/releasesSlice/index.js +38 -64
- package/dist/releasesSlice/index.js.map +1 -1
- package/dist/releasesSlice/index.mjs +5 -5
- package/dist/releasesSlice/selectors.js +37 -57
- package/dist/releasesSlice/selectors.js.map +1 -1
- package/dist/releasesSlice/selectors.mjs +6 -6
- package/dist/releasesSlice/thunks.js +293 -281
- package/dist/releasesSlice/thunks.js.map +1 -1
- package/dist/releasesSlice/thunks.mjs +25 -25
- package/dist/selectors.js +73 -207
- package/dist/selectors.js.map +1 -1
- package/dist/selectors.mjs +43 -43
- package/dist/store.js +194 -151
- package/dist/store.js.map +1 -1
- package/dist/store.mjs +16 -16
- package/dist/storehooks.js +568 -547
- package/dist/storehooks.js.map +1 -1
- package/dist/storehooks.mjs +38 -41
- package/dist/storehooks.mjs.map +1 -1
- package/dist/thunks.js +563 -702
- package/dist/thunks.js.map +1 -1
- package/dist/thunks.mjs +28 -28
- package/dist/usersSlice/constants.js +36 -66
- package/dist/usersSlice/constants.js.map +1 -1
- package/dist/usersSlice/constants.mjs +4 -4
- package/dist/usersSlice/index.js +62 -71
- package/dist/usersSlice/index.js.map +1 -1
- package/dist/usersSlice/index.mjs +5 -5
- package/dist/usersSlice/selectors.js +41 -66
- package/dist/usersSlice/selectors.js.map +1 -1
- package/dist/usersSlice/selectors.mjs +6 -6
- package/dist/usersSlice/thunks.js +563 -576
- package/dist/usersSlice/thunks.js.map +1 -1
- package/dist/usersSlice/thunks.mjs +28 -28
- package/dist/utils.js +57 -93
- package/dist/utils.js.map +1 -1
- package/dist/utils.mjs +5 -5
- package/package.json +66 -1
- package/dist/chunk-ENLZPHTQ.mjs +0 -35
- package/dist/chunk-L4HIW3KB.mjs +0 -36
- package/dist/chunk-XWBD7VOK.mjs +0 -93
- package/dist/chunk-ZLRZO4EY.mjs.map +0 -1
- /package/dist/{chunk-XWBD7VOK.mjs.map → chunk-LZOMFHX3.mjs.map} +0 -0
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
import {
|
|
2
2
|
v4_default
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-O6TYYKSD.mjs";
|
|
4
4
|
import {
|
|
5
5
|
getDeviceMonitorConfig,
|
|
6
6
|
getLatestDeviceAlerts
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WCUGLHYM.mjs";
|
|
8
8
|
import {
|
|
9
9
|
users_api_default
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-WYHJFSMQ.mjs";
|
|
11
11
|
import {
|
|
12
12
|
general_api_default
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-65YIOCCD.mjs";
|
|
14
14
|
import {
|
|
15
15
|
getAttrsEndpoint,
|
|
16
16
|
getOnboardingState,
|
|
17
17
|
getSearchEndpoint,
|
|
18
18
|
getTenantCapabilities,
|
|
19
19
|
getUserCapabilities
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-KJAZNKV2.mjs";
|
|
21
|
+
import {
|
|
22
|
+
getFeatures,
|
|
23
|
+
getSearchState
|
|
24
|
+
} from "./chunk-2Z3RFYW4.mjs";
|
|
25
|
+
import {
|
|
26
|
+
getAuditlogState,
|
|
27
|
+
getDeviceTwinIntegrations,
|
|
28
|
+
getOrganization,
|
|
29
|
+
getTenantsList
|
|
30
|
+
} from "./chunk-K2NZL5V4.mjs";
|
|
21
31
|
import {
|
|
22
32
|
getCurrentSession,
|
|
23
33
|
getCurrentUser,
|
|
@@ -27,17 +37,7 @@ import {
|
|
|
27
37
|
getRolesById,
|
|
28
38
|
getTooltipsState,
|
|
29
39
|
getUserSettings
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import {
|
|
32
|
-
getAuditlogState,
|
|
33
|
-
getDeviceTwinIntegrations,
|
|
34
|
-
getOrganization,
|
|
35
|
-
getTenantsList
|
|
36
|
-
} from "./chunk-2HCZYULZ.mjs";
|
|
37
|
-
import {
|
|
38
|
-
getDeploymentsById,
|
|
39
|
-
getDeploymentsByStatus
|
|
40
|
-
} from "./chunk-BWFTQHNM.mjs";
|
|
40
|
+
} from "./chunk-XD7INCM4.mjs";
|
|
41
41
|
import {
|
|
42
42
|
getDeviceById,
|
|
43
43
|
getDeviceFilters,
|
|
@@ -46,48 +46,48 @@ import {
|
|
|
46
46
|
getGroups,
|
|
47
47
|
getGroupsById,
|
|
48
48
|
getSelectedGroup
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-6CSGHZ3E.mjs";
|
|
50
50
|
import {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
} from "./chunk-
|
|
51
|
+
getDeploymentsById,
|
|
52
|
+
getDeploymentsByStatus
|
|
53
|
+
} from "./chunk-CHUCIHMY.mjs";
|
|
54
54
|
import {
|
|
55
55
|
commonErrorFallback,
|
|
56
56
|
commonErrorHandler
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-NJNSCJEY.mjs";
|
|
58
58
|
import {
|
|
59
59
|
actions_default
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-H5UCKQWK.mjs";
|
|
61
61
|
import {
|
|
62
|
-
actions
|
|
63
|
-
sliceName
|
|
64
|
-
} from "./chunk-
|
|
62
|
+
actions,
|
|
63
|
+
sliceName
|
|
64
|
+
} from "./chunk-3ORTTLIB.mjs";
|
|
65
65
|
import {
|
|
66
66
|
actions as actions5,
|
|
67
67
|
sliceName as sliceName5
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-R7LXL3KJ.mjs";
|
|
69
|
+
import {
|
|
70
|
+
actions as actions6,
|
|
71
|
+
sliceName as sliceName6
|
|
72
|
+
} from "./chunk-KZSTW27Q.mjs";
|
|
73
|
+
import {
|
|
74
|
+
actions as actions3,
|
|
75
|
+
sliceName as sliceName3
|
|
76
|
+
} from "./chunk-AZRVRNXT.mjs";
|
|
69
77
|
import {
|
|
70
78
|
actions as actions4,
|
|
71
79
|
sliceName as sliceName4
|
|
72
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-B42NUKMZ.mjs";
|
|
73
81
|
import {
|
|
74
82
|
actions as actions2,
|
|
75
83
|
sliceName as sliceName2
|
|
76
|
-
} from "./chunk-
|
|
77
|
-
import {
|
|
78
|
-
actions as actions3,
|
|
79
|
-
sliceName as sliceName3
|
|
80
|
-
} from "./chunk-X65NMDPS.mjs";
|
|
81
|
-
import {
|
|
82
|
-
actions,
|
|
83
|
-
sliceName
|
|
84
|
-
} from "./chunk-OWHFMKTA.mjs";
|
|
84
|
+
} from "./chunk-JA27QXVB.mjs";
|
|
85
85
|
import {
|
|
86
86
|
cleanUp,
|
|
87
87
|
getSessionInfo,
|
|
88
88
|
maxSessionAge,
|
|
89
89
|
setSessionInfo
|
|
90
|
-
} from "./chunk-
|
|
90
|
+
} from "./chunk-ZK4W5T53.mjs";
|
|
91
91
|
import {
|
|
92
92
|
convertDeviceListStateToFilters,
|
|
93
93
|
extractErrorMessage,
|
|
@@ -99,7 +99,7 @@ import {
|
|
|
99
99
|
mergePermissions,
|
|
100
100
|
preformatWithRequestID,
|
|
101
101
|
progress
|
|
102
|
-
} from "./chunk-
|
|
102
|
+
} from "./chunk-KPPU6OWF.mjs";
|
|
103
103
|
import {
|
|
104
104
|
ALL_DEVICE_STATES,
|
|
105
105
|
DEPLOYMENT_ROUTES,
|
|
@@ -138,14 +138,7 @@ import {
|
|
|
138
138
|
uiPermissionsById,
|
|
139
139
|
useradmApiUrlv1,
|
|
140
140
|
useradmApiUrlv2
|
|
141
|
-
} from "./chunk-
|
|
142
|
-
import {
|
|
143
|
-
rootfsImageVersion
|
|
144
|
-
} from "./chunk-G4FGNSV3.mjs";
|
|
145
|
-
import {
|
|
146
|
-
onboardingSteps,
|
|
147
|
-
orderedOnboardingSteps
|
|
148
|
-
} from "./chunk-IU4OXOPA.mjs";
|
|
141
|
+
} from "./chunk-IFWKT27G.mjs";
|
|
149
142
|
import {
|
|
150
143
|
APPLICATION_JSON_CONTENT_TYPE,
|
|
151
144
|
APPLICATION_JWT_CONTENT_TYPE,
|
|
@@ -153,7 +146,14 @@ import {
|
|
|
153
146
|
defaultReports,
|
|
154
147
|
headerNames,
|
|
155
148
|
locations
|
|
156
|
-
} from "./chunk-
|
|
149
|
+
} from "./chunk-5VNQCCAQ.mjs";
|
|
150
|
+
import {
|
|
151
|
+
rootfsImageVersion
|
|
152
|
+
} from "./chunk-G4FGNSV3.mjs";
|
|
153
|
+
import {
|
|
154
|
+
onboardingSteps,
|
|
155
|
+
orderedOnboardingSteps
|
|
156
|
+
} from "./chunk-IU4OXOPA.mjs";
|
|
157
157
|
import {
|
|
158
158
|
ALL_DEVICES,
|
|
159
159
|
ALL_RELEASES,
|
|
@@ -166,16 +166,12 @@ import {
|
|
|
166
166
|
UNGROUPED_GROUP,
|
|
167
167
|
emptyRole,
|
|
168
168
|
emptyUiPermissions
|
|
169
|
-
} from "./chunk-
|
|
169
|
+
} from "./chunk-QQBUNZHA.mjs";
|
|
170
170
|
import {
|
|
171
|
-
__async,
|
|
172
171
|
__commonJS,
|
|
173
|
-
__objRest,
|
|
174
172
|
__require,
|
|
175
|
-
__spreadProps,
|
|
176
|
-
__spreadValues,
|
|
177
173
|
__toESM
|
|
178
|
-
} from "./chunk-
|
|
174
|
+
} from "./chunk-LZOMFHX3.mjs";
|
|
179
175
|
|
|
180
176
|
// ../../node_modules/pluralize/pluralize.js
|
|
181
177
|
var require_pluralize = __commonJS({
|
|
@@ -538,13 +534,15 @@ var { page: defaultPage, perPage: defaultPerPage } = DEVICE_LIST_DEFAULTS;
|
|
|
538
534
|
var deriveDeploymentGroup = ({ filter = {}, group, groups = [], name }) => group || groups.length === 1 && !isUUID(name) ? groups[0] : filter.name;
|
|
539
535
|
var transformDeployments = (deployments, deploymentsById) => deployments.sort(startTimeSort).reduce(
|
|
540
536
|
(accu, item) => {
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
537
|
+
const filter = item.filter ?? {};
|
|
538
|
+
let deployment = {
|
|
539
|
+
...deploymentPrototype,
|
|
540
|
+
...deploymentsById[item.id],
|
|
541
|
+
...item,
|
|
542
|
+
filter: item.filter ? { ...filter, name: filter.name ?? filter.id, filters: mapTermsToFilters(filter.terms) } : void 0,
|
|
545
543
|
name: decodeURIComponent(item.name)
|
|
546
|
-
}
|
|
547
|
-
deployment =
|
|
544
|
+
};
|
|
545
|
+
deployment = { ...deployment, group: deriveDeploymentGroup(deployment) };
|
|
548
546
|
accu.deployments[item.id] = deployment;
|
|
549
547
|
accu.deploymentIds.push(item.id);
|
|
550
548
|
return accu;
|
|
@@ -598,11 +596,12 @@ var createDeployment = createAsyncThunk(`${sliceName2}/createDeployment`, ({ new
|
|
|
598
596
|
return request.catch((err) => commonErrorHandler(err, "Error creating deployment.", dispatch)).then((data) => {
|
|
599
597
|
const lastslashindex = data.headers.location.lastIndexOf("/");
|
|
600
598
|
const deploymentId = data.headers.location.substring(lastslashindex + 1);
|
|
601
|
-
const deployment =
|
|
599
|
+
const deployment = {
|
|
600
|
+
...newDeployment,
|
|
602
601
|
id: deploymentId,
|
|
603
602
|
devices: newDeployment.devices ? newDeployment.devices.map((id) => ({ id, status: "pending" })) : [],
|
|
604
603
|
statistics: { status: {} }
|
|
605
|
-
}
|
|
604
|
+
};
|
|
606
605
|
let tasks = [
|
|
607
606
|
dispatch(actions2.createdDeployment(deployment)),
|
|
608
607
|
dispatch(getSingleDeployment(deploymentId)),
|
|
@@ -745,14 +744,23 @@ var updateDeploymentControlMap = createAsyncThunk(
|
|
|
745
744
|
({ deploymentId, updateControlMap }, { dispatch }) => general_api_default.patch(`${deploymentsApiUrl}/deployments/${deploymentId}`, { update_control_map: updateControlMap }).catch((err) => commonErrorHandler(err, "There was an error while updating the deployment status:", dispatch)).then(() => Promise.resolve(dispatch(getSingleDeployment(deploymentId))))
|
|
746
745
|
);
|
|
747
746
|
var setDeploymentsState = createAsyncThunk(`${sliceName2}/setDeploymentsState`, (selection, { dispatch, getState }) => {
|
|
748
|
-
const
|
|
747
|
+
const { page, perPage, ...selectionState } = selection;
|
|
749
748
|
const currentState = getState().deployments.selectionState;
|
|
750
|
-
let nextState =
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
749
|
+
let nextState = {
|
|
750
|
+
...currentState,
|
|
751
|
+
...selectionState,
|
|
752
|
+
...Object.keys(DEPLOYMENT_STATES).reduce((accu, item) => {
|
|
753
|
+
accu[item] = {
|
|
754
|
+
...currentState[item],
|
|
755
|
+
...selectionState[item]
|
|
756
|
+
};
|
|
757
|
+
return accu;
|
|
758
|
+
}, {}),
|
|
759
|
+
general: {
|
|
760
|
+
...currentState.general,
|
|
761
|
+
...selectionState.general
|
|
762
|
+
}
|
|
763
|
+
};
|
|
756
764
|
let tasks = [dispatch(actions2.setDeploymentsState(nextState))];
|
|
757
765
|
if (nextState.selectedId && currentState.selectedId !== nextState.selectedId) {
|
|
758
766
|
tasks.push(dispatch(getSingleDeployment(nextState.selectedId)));
|
|
@@ -782,15 +790,20 @@ var getDeploymentsConfig = createAsyncThunk(
|
|
|
782
790
|
const { binary_delta = {}, binary_delta_limits = {} } = delta;
|
|
783
791
|
const { xdelta_args = {}, timeout: timeoutConfig = oldConfig.binaryDelta.timeout } = binary_delta;
|
|
784
792
|
const { xdelta_args_limits = {}, timeout: timeoutLimit = oldConfig.binaryDeltaLimits.timeout } = binary_delta_limits;
|
|
785
|
-
const config =
|
|
793
|
+
const config = {
|
|
794
|
+
...oldConfig,
|
|
786
795
|
hasDelta: Boolean(delta.enabled),
|
|
787
|
-
binaryDelta:
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
796
|
+
binaryDelta: {
|
|
797
|
+
...oldConfig.binaryDelta,
|
|
798
|
+
timeout: timeoutConfig,
|
|
799
|
+
...mapExternalDeltaConfig(xdelta_args)
|
|
800
|
+
},
|
|
801
|
+
binaryDeltaLimits: {
|
|
802
|
+
...oldConfig.binaryDeltaLimits,
|
|
803
|
+
timeout: timeoutLimit,
|
|
804
|
+
...mapExternalDeltaConfig(xdelta_args_limits)
|
|
805
|
+
}
|
|
806
|
+
};
|
|
794
807
|
return Promise.resolve(dispatch(actions2.setDeploymentsConfig(config)));
|
|
795
808
|
})
|
|
796
809
|
);
|
|
@@ -800,7 +813,7 @@ var deepClean = (source) => Object.entries(source).reduce((accu, [key, value]) =
|
|
|
800
813
|
if (cleanedValue === void 0 || typeof cleanedValue === "object" && isEmpty(cleanedValue)) {
|
|
801
814
|
return accu;
|
|
802
815
|
}
|
|
803
|
-
accu =
|
|
816
|
+
accu = { ...accu ?? {}, [key]: cleanedValue };
|
|
804
817
|
}
|
|
805
818
|
return accu;
|
|
806
819
|
}, void 0);
|
|
@@ -820,9 +833,13 @@ var saveDeltaDeploymentsConfig = createAsyncThunk(`${sliceName2}/saveDeltaDeploy
|
|
|
820
833
|
}
|
|
821
834
|
return general_api_default.put(`${deploymentsApiUrl}/config/binary_delta`, result).catch((err) => commonErrorHandler(err, "There was a problem storing your delta artifact generation configuration.", dispatch)).then(() => {
|
|
822
835
|
const oldConfig = getState().deployments.config;
|
|
823
|
-
const newConfig =
|
|
824
|
-
|
|
825
|
-
|
|
836
|
+
const newConfig = {
|
|
837
|
+
...oldConfig,
|
|
838
|
+
binaryDelta: {
|
|
839
|
+
...oldConfig.binaryDelta,
|
|
840
|
+
...config
|
|
841
|
+
}
|
|
842
|
+
};
|
|
826
843
|
return Promise.all([dispatch(actions2.setDeploymentsConfig(newConfig)), dispatch(setSnackbar("Settings saved successfully"))]);
|
|
827
844
|
});
|
|
828
845
|
});
|
|
@@ -855,14 +872,13 @@ var getGroups2 = createAsyncThunk2(
|
|
|
855
872
|
(_, { dispatch, getState }) => general_api_default.get(`${inventoryApiUrl}/groups`).then((res) => {
|
|
856
873
|
const state = getGroupsById(getState());
|
|
857
874
|
const dynamicGroups = Object.entries(state).reduce((accu, [id, group]) => {
|
|
858
|
-
|
|
859
|
-
if (group.id || ((_a = group.filters) == null ? void 0 : _a.length) && id !== UNGROUPED_GROUP.id) {
|
|
875
|
+
if (group.id || group.filters?.length && id !== UNGROUPED_GROUP.id) {
|
|
860
876
|
accu[id] = group;
|
|
861
877
|
}
|
|
862
878
|
return accu;
|
|
863
879
|
}, {});
|
|
864
880
|
const groups = res.data.reduce((accu, group) => {
|
|
865
|
-
accu[group] =
|
|
881
|
+
accu[group] = { deviceIds: [], filters: [], total: 0, ...state[group] };
|
|
866
882
|
return accu;
|
|
867
883
|
}, dynamicGroups);
|
|
868
884
|
const filters = [{ key: "group", value: res.data, operator: DEVICE_FILTERING_OPTIONS.$nin.key, scope: "system" }];
|
|
@@ -920,7 +936,7 @@ var addStaticGroup = createAsyncThunk2(
|
|
|
920
936
|
() => Promise.resolve(
|
|
921
937
|
dispatch(
|
|
922
938
|
actions3.addGroup({
|
|
923
|
-
group:
|
|
939
|
+
group: { deviceIds: [], total: 0, filters: [], ...getState().devices.groups.byId[group] },
|
|
924
940
|
groupName: group
|
|
925
941
|
})
|
|
926
942
|
)
|
|
@@ -948,20 +964,19 @@ var getDynamicGroups = createAsyncThunk2(
|
|
|
948
964
|
(_, { dispatch, getState }) => general_api_default.get(`${inventoryApiUrlV2}/filters?per_page=${MAX_PAGE_SIZE}`).then(({ data: filters }) => {
|
|
949
965
|
const state = getGroupsById(getState());
|
|
950
966
|
const staticGroups = Object.entries(state).reduce((accu, [id, group]) => {
|
|
951
|
-
|
|
952
|
-
if (!(group.id || ((_a = group.filters) == null ? void 0 : _a.length))) {
|
|
967
|
+
if (!(group.id || group.filters?.length)) {
|
|
953
968
|
accu[id] = group;
|
|
954
969
|
}
|
|
955
970
|
return accu;
|
|
956
971
|
}, {});
|
|
957
972
|
const groups = (filters || []).reduce((accu, filter) => {
|
|
958
|
-
accu[filter.name] =
|
|
973
|
+
accu[filter.name] = {
|
|
959
974
|
deviceIds: [],
|
|
960
|
-
total: 0
|
|
961
|
-
|
|
975
|
+
total: 0,
|
|
976
|
+
...state[filter.name],
|
|
962
977
|
id: filter.id,
|
|
963
978
|
filters: mapTermsToFilters(filter.terms)
|
|
964
|
-
}
|
|
979
|
+
};
|
|
965
980
|
return accu;
|
|
966
981
|
}, staticGroups);
|
|
967
982
|
return Promise.resolve(dispatch(actions3.receivedGroups(groups)));
|
|
@@ -1001,10 +1016,9 @@ var removeDynamicGroup = createAsyncThunk2(`${sliceName3}/removeDynamicGroup`, (
|
|
|
1001
1016
|
);
|
|
1002
1017
|
});
|
|
1003
1018
|
var getGroupFilters = (group, groupsState, filters = []) => {
|
|
1004
|
-
var _a;
|
|
1005
1019
|
const groupName = group === UNGROUPED_GROUP.id || group === UNGROUPED_GROUP.name ? UNGROUPED_GROUP.id : group;
|
|
1006
1020
|
const selectedGroup = groupsState.byId[groupName];
|
|
1007
|
-
const groupFilterLength =
|
|
1021
|
+
const groupFilterLength = selectedGroup?.filters?.length || 0;
|
|
1008
1022
|
const cleanedFilters = groupFilterLength ? [...filters, ...selectedGroup.filters].filter(filtersFilter) : filters;
|
|
1009
1023
|
return { cleanedFilters, groupName, selectedGroup, groupFilterLength };
|
|
1010
1024
|
};
|
|
@@ -1027,7 +1041,6 @@ var selectGroup = createAsyncThunk2(`${sliceName3}/selectGroup`, ({ group, filte
|
|
|
1027
1041
|
var getEarliestTs = (dateA = "", dateB = "") => !dateA || !dateB ? dateA || dateB : dateA < dateB ? dateA : dateB;
|
|
1028
1042
|
var reduceReceivedDevices = (devices, ids, state, status) => devices.reduce(
|
|
1029
1043
|
(accu, device) => {
|
|
1030
|
-
var _a, _b, _c;
|
|
1031
1044
|
const stateDevice = getDeviceById(state, device.id);
|
|
1032
1045
|
const {
|
|
1033
1046
|
attributes: storedAttributes = {},
|
|
@@ -1037,29 +1050,29 @@ var reduceReceivedDevices = (devices, ids, state, status) => devices.reduce(
|
|
|
1037
1050
|
group: storedGroup
|
|
1038
1051
|
} = stateDevice;
|
|
1039
1052
|
const { identity, inventory, monitor, system = {}, tags } = mapDeviceAttributes(device.attributes);
|
|
1040
|
-
device.tags =
|
|
1041
|
-
device.group =
|
|
1042
|
-
device.monitor =
|
|
1043
|
-
device.identity_data =
|
|
1053
|
+
device.tags = { ...storedTags, ...tags };
|
|
1054
|
+
device.group = system.group ?? storedGroup;
|
|
1055
|
+
device.monitor = { ...storedMonitor, ...monitor };
|
|
1056
|
+
device.identity_data = { ...storedIdentity, ...identity, ...device.identity_data ? device.identity_data : {} };
|
|
1044
1057
|
device.status = status ? status : device.status || identity.status;
|
|
1045
|
-
device.check_in_time_rounded =
|
|
1046
|
-
device.check_in_time_exact =
|
|
1058
|
+
device.check_in_time_rounded = system.check_in_time ?? stateDevice.check_in_time_rounded;
|
|
1059
|
+
device.check_in_time_exact = device.check_in_time ?? stateDevice.check_in_time_exact;
|
|
1047
1060
|
device.created_ts = getEarliestTs(getEarliestTs(system.created_ts, device.created_ts), stateDevice.created_ts);
|
|
1048
1061
|
device.updated_ts = device.attributes ? device.updated_ts : stateDevice.updated_ts;
|
|
1049
1062
|
device.isNew = new Date(device.created_ts) > new Date(state.app.newThreshold);
|
|
1050
1063
|
device.isOffline = new Date(device.check_in_time_rounded) < new Date(state.app.offlineThreshold) || device.check_in_time_rounded === void 0;
|
|
1051
|
-
device.attributes = device.attributes ?
|
|
1052
|
-
accu.devicesById[device.id] =
|
|
1064
|
+
device.attributes = device.attributes ? { ...storedAttributes, ...inventory } : storedAttributes;
|
|
1065
|
+
accu.devicesById[device.id] = { ...stateDevice, ...device };
|
|
1053
1066
|
accu.ids.push(device.id);
|
|
1054
1067
|
return accu;
|
|
1055
1068
|
},
|
|
1056
1069
|
{ ids, devicesById: {} }
|
|
1057
1070
|
);
|
|
1058
1071
|
var getGroupDevices = createAsyncThunk2(`${sliceName3}/getGroupDevices`, (options, { dispatch, getState }) => {
|
|
1059
|
-
const
|
|
1072
|
+
const { group, shouldIncludeAllStates, ...remainder } = options;
|
|
1060
1073
|
const { cleanedFilters: filterSelection } = getGroupFilters(group, getState().devices.groups);
|
|
1061
1074
|
return Promise.resolve(
|
|
1062
|
-
dispatch(getDevicesByStatus(
|
|
1075
|
+
dispatch(getDevicesByStatus({ ...remainder, filterSelection, group, status: shouldIncludeAllStates ? void 0 : DEVICE_STATES.accepted }))
|
|
1063
1076
|
).unwrap().then((results) => {
|
|
1064
1077
|
if (!group) {
|
|
1065
1078
|
return Promise.resolve();
|
|
@@ -1073,7 +1086,7 @@ var getGroupDevices = createAsyncThunk2(`${sliceName3}/getGroupDevices`, (option
|
|
|
1073
1086
|
dispatch(
|
|
1074
1087
|
actions3.addGroup({
|
|
1075
1088
|
group: {
|
|
1076
|
-
deviceIds: deviceAccu.ids.length === total || deviceAccu.ids.length >
|
|
1089
|
+
deviceIds: deviceAccu.ids.length === total || deviceAccu.ids.length > stateGroup?.deviceIds ? deviceAccu.ids : stateGroup.deviceIds,
|
|
1077
1090
|
total
|
|
1078
1091
|
},
|
|
1079
1092
|
groupName: group
|
|
@@ -1222,27 +1235,26 @@ var getDeviceLimit = createAsyncThunk2(
|
|
|
1222
1235
|
);
|
|
1223
1236
|
var setDeviceListState = createAsyncThunk2(
|
|
1224
1237
|
`${sliceName3}/setDeviceListState`,
|
|
1225
|
-
(
|
|
1226
|
-
var _b = _a, { shouldSelectDevices = true, forceRefresh, fetchAuth = true } = _b, selectionState = __objRest(_b, ["shouldSelectDevices", "forceRefresh", "fetchAuth"]);
|
|
1227
|
-
var _c;
|
|
1238
|
+
({ shouldSelectDevices = true, forceRefresh, fetchAuth = true, ...selectionState }, { dispatch, getState }) => {
|
|
1228
1239
|
const currentState = getDeviceListState(getState());
|
|
1229
1240
|
const refreshTrigger = forceRefresh ? !currentState.refreshTrigger : selectionState.refreshTrigger;
|
|
1230
|
-
let nextState =
|
|
1241
|
+
let nextState = {
|
|
1242
|
+
...currentState,
|
|
1231
1243
|
setOnly: false,
|
|
1232
|
-
refreshTrigger
|
|
1233
|
-
|
|
1234
|
-
sort:
|
|
1235
|
-
}
|
|
1244
|
+
refreshTrigger,
|
|
1245
|
+
...selectionState,
|
|
1246
|
+
sort: { ...currentState.sort, ...selectionState.sort }
|
|
1247
|
+
};
|
|
1236
1248
|
let tasks = [];
|
|
1237
|
-
const
|
|
1238
|
-
const
|
|
1249
|
+
const { isLoading: currentLoading, deviceIds: currentDevices, selection: currentSelection, ...currentRequestState } = currentState;
|
|
1250
|
+
const { isLoading: nextLoading, deviceIds: nextDevices, selection: nextSelection, ...nextRequestState } = nextState;
|
|
1239
1251
|
if (!nextState.setOnly && !deepCompare2(currentRequestState, nextRequestState)) {
|
|
1240
|
-
const { direction: sortDown = SORTING_OPTIONS.desc, key: sortCol, scope: sortScope } =
|
|
1252
|
+
const { direction: sortDown = SORTING_OPTIONS.desc, key: sortCol, scope: sortScope } = nextState.sort ?? {};
|
|
1241
1253
|
const sortBy = sortCol ? [{ attribute: sortCol, order: sortDown, scope: sortScope }] : void 0;
|
|
1242
1254
|
const applicableSelectedState = nextState.state === ALL_DEVICE_STATES ? void 0 : nextState.state;
|
|
1243
1255
|
nextState.isLoading = true;
|
|
1244
1256
|
tasks.push(
|
|
1245
|
-
dispatch(getDevicesByStatus(
|
|
1257
|
+
dispatch(getDevicesByStatus({ ...nextState, status: applicableSelectedState, sortOptions: sortBy, fetchAuth })).unwrap().then((results) => {
|
|
1246
1258
|
const { deviceAccu, total } = results[results.length - 1];
|
|
1247
1259
|
const devicesState = shouldSelectDevices ? { deviceIds: deviceAccu.ids, total, isLoading: false } : { isLoading: false };
|
|
1248
1260
|
return Promise.resolve(dispatch(actions3.setDeviceListState(devicesState)));
|
|
@@ -1267,8 +1279,8 @@ var getDevicesByStatus = createAsyncThunk2(`${sliceName3}/getDevicesByStatus`, (
|
|
|
1267
1279
|
} = options;
|
|
1268
1280
|
const state = getState();
|
|
1269
1281
|
const { applicableFilters, filterTerms } = convertDeviceListStateToFilters({
|
|
1270
|
-
filters: filterSelection
|
|
1271
|
-
group: group
|
|
1282
|
+
filters: filterSelection ?? getDeviceFilters(state),
|
|
1283
|
+
group: group ?? getSelectedGroup(state),
|
|
1272
1284
|
groups: state.devices.groups,
|
|
1273
1285
|
offlineThreshold: state.app.offlineThreshold,
|
|
1274
1286
|
selectedIssues,
|
|
@@ -1329,7 +1341,7 @@ var getAllDevicesByStatus = createAsyncThunk2(`${sliceName3}/getAllDevicesByStat
|
|
|
1329
1341
|
});
|
|
1330
1342
|
var searchDevices = createAsyncThunk2(`${sliceName3}/searchDevices`, (passedOptions = {}, { dispatch, getState }) => {
|
|
1331
1343
|
const state = getState();
|
|
1332
|
-
let options =
|
|
1344
|
+
let options = { ...state.app.searchState, ...passedOptions };
|
|
1333
1345
|
const { page = defaultPage2, searchTerm, sortOptions = [] } = options;
|
|
1334
1346
|
const { columnSelection = [] } = getUserSettings(state);
|
|
1335
1347
|
const selectedAttributes = columnSelection.map((column) => ({ attribute: column.key, scope: column.scope }));
|
|
@@ -1464,8 +1476,7 @@ var getSessionDetails = createAsyncThunk2(`${sliceName3}/getSessionDetails`, ({
|
|
|
1464
1476
|
({ data: auditLogEntries }) => {
|
|
1465
1477
|
const { start, end } = auditLogEntries.reduce(
|
|
1466
1478
|
(accu, item) => {
|
|
1467
|
-
|
|
1468
|
-
if ((_b = (_a = item.meta) == null ? void 0 : _a.session_id) == null ? void 0 : _b.includes(sessionId)) {
|
|
1479
|
+
if (item.meta?.session_id?.includes(sessionId)) {
|
|
1469
1480
|
accu.start = new Date(item.action.startsWith("open") ? item.time : accu.start);
|
|
1470
1481
|
accu.end = new Date(item.action.startsWith("close") ? item.time : accu.end);
|
|
1471
1482
|
}
|
|
@@ -1572,8 +1583,7 @@ var decommissionDevice = createAsyncThunk2(
|
|
|
1572
1583
|
var getDeviceConfig = createAsyncThunk2(
|
|
1573
1584
|
`${sliceName3}/getDeviceConfig`,
|
|
1574
1585
|
(deviceId, { dispatch }) => general_api_default.get(`${deviceConfig}/${deviceId}`).then(({ data }) => Promise.all([dispatch(actions3.receivedDevice({ id: deviceId, config: data })), Promise.resolve(data)])).catch((err) => {
|
|
1575
|
-
|
|
1576
|
-
if (((_b = (_a = err.response) == null ? void 0 : _a.data) == null ? void 0 : _b.error.status_code) !== 404) {
|
|
1586
|
+
if (err.response?.data?.error.status_code !== 404) {
|
|
1577
1587
|
return commonErrorHandler(err, `There was an error retrieving the configuration for device ${deviceId}.`, dispatch, commonErrorFallback);
|
|
1578
1588
|
}
|
|
1579
1589
|
})
|
|
@@ -1585,15 +1595,14 @@ var setDeviceConfig = createAsyncThunk2(
|
|
|
1585
1595
|
var applyDeviceConfig = createAsyncThunk2(
|
|
1586
1596
|
`${sliceName3}/applyDeviceConfig`,
|
|
1587
1597
|
({ deviceId, configDeploymentConfiguration, isDefault, config }, { dispatch, getState }) => general_api_default.post(`${deviceConfig}/${deviceId}/deploy`, configDeploymentConfiguration).catch((err) => commonErrorHandler(err, `There was an error deploying the configuration to device ${deviceId}.`, dispatch, commonErrorFallback)).then(({ data }) => {
|
|
1588
|
-
var _a;
|
|
1589
1598
|
const device = getDeviceById(getState(), deviceId);
|
|
1590
1599
|
const { canManageUsers } = getUserCapabilities(getState());
|
|
1591
1600
|
let tasks = [
|
|
1592
|
-
dispatch(actions3.receivedDevice(
|
|
1601
|
+
dispatch(actions3.receivedDevice({ ...device, config: { ...device.config, deployment_id: data.deployment_id } })),
|
|
1593
1602
|
new Promise((resolve) => setTimeout(() => resolve(dispatch(getSingleDeployment(data.deployment_id))), TIMEOUTS.oneSecond))
|
|
1594
1603
|
];
|
|
1595
1604
|
if (isDefault && canManageUsers) {
|
|
1596
|
-
const { previous } =
|
|
1605
|
+
const { previous } = getGlobalSettings(getState()).defaultDeviceConfig ?? {};
|
|
1597
1606
|
tasks.push(dispatch(saveGlobalSettings({ defaultDeviceConfig: { current: config, previous } })));
|
|
1598
1607
|
}
|
|
1599
1608
|
return Promise.all(tasks);
|
|
@@ -1609,21 +1618,21 @@ var setDeviceTags = createAsyncThunk2(
|
|
|
1609
1618
|
`${inventoryApiUrl}/devices/${deviceId}/tags`,
|
|
1610
1619
|
Object.entries(tags).map(([name, value]) => ({ name, value })),
|
|
1611
1620
|
{ headers }
|
|
1612
|
-
).catch((err) => commonErrorHandler(err, `There was an error setting tags for device ${deviceId}.`, dispatch, "Please check your connection.")).then(() => Promise.all([dispatch(actions3.receivedDevice(
|
|
1621
|
+
).catch((err) => commonErrorHandler(err, `There was an error setting tags for device ${deviceId}.`, dispatch, "Please check your connection.")).then(() => Promise.all([dispatch(actions3.receivedDevice({ ...device, id: deviceId, tags })), dispatch(setSnackbar2("Device name changed"))]));
|
|
1613
1622
|
})
|
|
1614
1623
|
)
|
|
1615
1624
|
);
|
|
1616
1625
|
var getDeviceTwin = createAsyncThunk2(`${sliceName3}/getDeviceTwin`, ({ deviceId, integration }, { dispatch, getState }) => {
|
|
1617
1626
|
let providerResult = {};
|
|
1618
1627
|
return general_api_default.get(`${iotManagerBaseURL}/devices/${deviceId}/state`).then(({ data }) => {
|
|
1619
|
-
providerResult =
|
|
1628
|
+
providerResult = { ...data, twinError: "" };
|
|
1620
1629
|
}).catch((err) => {
|
|
1621
1630
|
providerResult = {
|
|
1622
1631
|
twinError: `There was an error getting the ${EXTERNAL_PROVIDER[integration.provider].twinTitle.toLowerCase()} for device ${deviceId}. ${err}`
|
|
1623
1632
|
};
|
|
1624
1633
|
}).finally(() => {
|
|
1625
1634
|
const device = getDeviceById(getState(), deviceId);
|
|
1626
|
-
Promise.resolve(dispatch(actions3.receivedDevice(
|
|
1635
|
+
Promise.resolve(dispatch(actions3.receivedDevice({ ...device, twinsByIntegration: { ...device.twinsByIntegration, ...providerResult } })));
|
|
1627
1636
|
});
|
|
1628
1637
|
});
|
|
1629
1638
|
var setDeviceTwin = createAsyncThunk2(
|
|
@@ -1639,7 +1648,7 @@ var setDeviceTwin = createAsyncThunk2(
|
|
|
1639
1648
|
const { twinsByIntegration = {} } = device;
|
|
1640
1649
|
const { [integration.id]: currentState = {} } = twinsByIntegration;
|
|
1641
1650
|
return Promise.resolve(
|
|
1642
|
-
dispatch(actions3.receivedDevice(
|
|
1651
|
+
dispatch(actions3.receivedDevice({ ...device, twinsByIntegration: { ...twinsByIntegration, [integration.id]: { ...currentState, desired: settings } } }))
|
|
1643
1652
|
);
|
|
1644
1653
|
})
|
|
1645
1654
|
);
|
|
@@ -1660,8 +1669,8 @@ var getSystemDevices = createAsyncThunk2(`${sliceName3}/getSystemDevices`, (opti
|
|
|
1660
1669
|
const { attributes: deviceAttributes = {} } = getDeviceById(state, id);
|
|
1661
1670
|
const { mender_gateway_system_id = "" } = deviceAttributes;
|
|
1662
1671
|
const filters = [
|
|
1663
|
-
|
|
1664
|
-
|
|
1672
|
+
{ ...emptyFilter, key: "mender_is_gateway", operator: DEVICE_FILTERING_OPTIONS.$ne.key, value: "true", scope: "inventory" },
|
|
1673
|
+
{ ...emptyFilter, key: "mender_gateway_system_id", value: mender_gateway_system_id, scope: "inventory" }
|
|
1665
1674
|
];
|
|
1666
1675
|
const { attributes, filterTerms } = prepareSearchArguments({ filters, state });
|
|
1667
1676
|
return general_api_default.post(getSearchEndpoint(getState()), {
|
|
@@ -1673,11 +1682,12 @@ var getSystemDevices = createAsyncThunk2(`${sliceName3}/getSystemDevices`, (opti
|
|
|
1673
1682
|
}).catch((err) => commonErrorHandler(err, `There was an error getting system devices device ${id}.`, dispatch, "Please check your connection.")).then(({ data, headers }) => {
|
|
1674
1683
|
const state2 = getState();
|
|
1675
1684
|
const { devicesById, ids } = reduceReceivedDevices(data, [], state2);
|
|
1676
|
-
const device =
|
|
1685
|
+
const device = {
|
|
1686
|
+
...getDeviceById(state2, id),
|
|
1677
1687
|
systemDeviceIds: ids,
|
|
1678
1688
|
systemDeviceTotal: Number(headers[headerNames.total])
|
|
1679
|
-
}
|
|
1680
|
-
return Promise.resolve(dispatch(actions3.receivedDevices(
|
|
1689
|
+
};
|
|
1690
|
+
return Promise.resolve(dispatch(actions3.receivedDevices({ ...devicesById, [id]: device })));
|
|
1681
1691
|
});
|
|
1682
1692
|
});
|
|
1683
1693
|
var getGatewayDevices = createAsyncThunk2(`${sliceName3}/getGatewayDevices`, (deviceId, { dispatch, getState }) => {
|
|
@@ -1685,9 +1695,9 @@ var getGatewayDevices = createAsyncThunk2(`${sliceName3}/getGatewayDevices`, (de
|
|
|
1685
1695
|
const { attributes = {} } = getDeviceById(state, deviceId);
|
|
1686
1696
|
const { mender_gateway_system_id = "" } = attributes;
|
|
1687
1697
|
const filters = [
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1698
|
+
{ ...emptyFilter, key: "id", operator: DEVICE_FILTERING_OPTIONS.$ne.key, value: deviceId, scope: "identity" },
|
|
1699
|
+
{ ...emptyFilter, key: "mender_is_gateway", value: "true", scope: "inventory" },
|
|
1700
|
+
{ ...emptyFilter, key: "mender_gateway_system_id", value: mender_gateway_system_id, scope: "inventory" }
|
|
1691
1701
|
];
|
|
1692
1702
|
const { attributes: attributeSelection, filterTerms } = prepareSearchArguments({ filters, state });
|
|
1693
1703
|
return general_api_default.post(getSearchEndpoint(getState()), {
|
|
@@ -1749,21 +1759,21 @@ var determineProgress = (acceptedDevices, pendingDevices, releases, pastDeployme
|
|
|
1749
1759
|
return steps[progress2];
|
|
1750
1760
|
};
|
|
1751
1761
|
var deductOnboardingState = ({ devicesById, devicesByStatus, onboardingState, pastDeployments, releases, userCapabilities, userId }) => {
|
|
1752
|
-
var _a;
|
|
1753
1762
|
const { canDeploy, canManageDevices, canReadDeployments, canReadDevices, canReadReleases, canUploadReleases } = userCapabilities;
|
|
1754
1763
|
const userCookie = cookies.get(`${userId}-onboarded`);
|
|
1755
1764
|
const acceptedDevices = devicesByStatus[DEVICE_STATES.accepted].deviceIds;
|
|
1756
1765
|
const pendingDevices = devicesByStatus[DEVICE_STATES.pending].deviceIds;
|
|
1757
|
-
let deviceType =
|
|
1766
|
+
let deviceType = onboardingState.deviceType ?? [];
|
|
1758
1767
|
deviceType = !deviceType.length && acceptedDevices.length && devicesById[acceptedDevices[0]].hasOwnProperty("attributes") ? devicesById[acceptedDevices[0]].attributes.device_type : deviceType;
|
|
1759
1768
|
const progress2 = applyOnboardingFallbacks(onboardingState.progress || determineProgress(acceptedDevices, pendingDevices, releases, pastDeployments));
|
|
1760
|
-
return
|
|
1769
|
+
return {
|
|
1770
|
+
...onboardingState,
|
|
1761
1771
|
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)),
|
|
1762
1772
|
showTips: onboardingState.showTips != null ? onboardingState.showTips : true,
|
|
1763
1773
|
deviceType,
|
|
1764
1774
|
approach: onboardingState.approach || (deviceType.some((type) => type.startsWith("qemu")) ? "virtual" : "physical"),
|
|
1765
1775
|
progress: progress2
|
|
1766
|
-
}
|
|
1776
|
+
};
|
|
1767
1777
|
};
|
|
1768
1778
|
var getOnboardingState2 = createAsyncThunk3(`${sliceName4}/getOnboardingState`, (_, { dispatch, getState }) => {
|
|
1769
1779
|
const state = getState();
|
|
@@ -1821,7 +1831,7 @@ var advanceOnboarding = createAsyncThunk3(`${sliceName4}/advanceOnboarding`, (st
|
|
|
1821
1831
|
return;
|
|
1822
1832
|
}
|
|
1823
1833
|
const madeProgress = steps[stepIndex + 1];
|
|
1824
|
-
const state =
|
|
1834
|
+
const state = { ...getOnboardingState(getState()), progress: madeProgress };
|
|
1825
1835
|
state.complete = stepIndex + 1 >= steps.findIndex((step) => step === onboardingSteps.DEPLOYMENTS_PAST_COMPLETED_FAILURE) ? true : state.complete;
|
|
1826
1836
|
return Promise.all([dispatch(actions4.setOnboardingProgress(madeProgress)), dispatch(saveUserSettings({ onboarding: state }))]);
|
|
1827
1837
|
});
|
|
@@ -1904,8 +1914,8 @@ var completeUpgrade = createAsyncThunk4(
|
|
|
1904
1914
|
({ tenantId, plan }, { dispatch }) => general_api_default.post(`${tenantadmApiUrlv2}/tenants/${tenantId}/upgrade/complete`, { plan }).catch((err) => commonErrorHandler(err, `There was an error upgrading your account:`, dispatch)).then(() => Promise.resolve(dispatch(getUserOrganization())))
|
|
1905
1915
|
);
|
|
1906
1916
|
var prepareAuditlogQuery = ({ startDate, endDate, user: userFilter, type, detail: detailFilter, sort = {} }) => {
|
|
1907
|
-
const userId =
|
|
1908
|
-
const detail =
|
|
1917
|
+
const userId = userFilter?.id || userFilter;
|
|
1918
|
+
const detail = detailFilter?.id || detailFilter;
|
|
1909
1919
|
const createdAfter = startDate ? `&created_after=${Math.round(Date.parse(startDate) / 1e3)}` : "";
|
|
1910
1920
|
const createdBefore = endDate ? `&created_before=${Math.round(Date.parse(endDate) / 1e3)}` : "";
|
|
1911
1921
|
const typeSearch = type ? `&object_type=${type.value}`.toLowerCase() : "";
|
|
@@ -1932,12 +1942,14 @@ var getAuditLogsCsvLink = createAsyncThunk4(
|
|
|
1932
1942
|
);
|
|
1933
1943
|
var setAuditlogsState = createAsyncThunk4(`${sliceName5}/setAuditlogsState`, (selectionState, { dispatch, getState }) => {
|
|
1934
1944
|
const currentState = getAuditlogState(getState());
|
|
1935
|
-
let nextState =
|
|
1936
|
-
|
|
1937
|
-
|
|
1945
|
+
let nextState = {
|
|
1946
|
+
...currentState,
|
|
1947
|
+
...selectionState,
|
|
1948
|
+
sort: { ...currentState.sort, ...selectionState.sort }
|
|
1949
|
+
};
|
|
1938
1950
|
let tasks = [];
|
|
1939
|
-
const
|
|
1940
|
-
const
|
|
1951
|
+
const { isLoading: currentLoading, selectedIssue: currentIssue, ...currentRequestState } = currentState;
|
|
1952
|
+
const { isLoading: selectionLoading, selectedIssue: selectionIssue, ...selectionRequestState } = nextState;
|
|
1941
1953
|
if (!deepCompare3(currentRequestState, selectionRequestState)) {
|
|
1942
1954
|
nextState.isLoading = true;
|
|
1943
1955
|
tasks.push(dispatch(getAuditLogs(nextState)).finally(() => dispatch(actions5.setAuditLogState({ isLoading: false }))));
|
|
@@ -1949,27 +1961,30 @@ var tenantDataDivergedMessage = "The system detected there is a change in your p
|
|
|
1949
1961
|
var addTenant = createAsyncThunk4(`${sliceName5}/createTenant`, (selectionState, { dispatch }) => {
|
|
1950
1962
|
return general_api_default.post(`${tenantadmApiUrlv2}/tenants`, selectionState).then(() => Promise.all([dispatch(getTenants()), dispatch(setSnackbar3("Tenant was created successfully."))])).catch((err) => commonErrorHandler(err, "There was an error creating tenant", dispatch, commonErrorFallback));
|
|
1951
1963
|
});
|
|
1952
|
-
var tenantListRetrieval = (config) =>
|
|
1964
|
+
var tenantListRetrieval = async (config) => {
|
|
1953
1965
|
const { page, perPage } = config;
|
|
1954
1966
|
const params = new URLSearchParams({ page, per_page: perPage }).toString();
|
|
1955
|
-
const tenantList =
|
|
1967
|
+
const tenantList = await general_api_default.get(`${tenantadmApiUrlv2}/tenants?${params}`);
|
|
1956
1968
|
const totalCount = tenantList.headers[headerNames.total] || TENANT_LIST_DEFAULT.perPage;
|
|
1957
1969
|
return [tenantList.data, Number(totalCount)];
|
|
1958
|
-
}
|
|
1959
|
-
var getTenants = createAsyncThunk4(`${sliceName5}/getTenants`,
|
|
1970
|
+
};
|
|
1971
|
+
var getTenants = createAsyncThunk4(`${sliceName5}/getTenants`, async (_, { dispatch, getState }) => {
|
|
1960
1972
|
const currentState = getTenantsList(getState());
|
|
1961
|
-
const [tenants, pageCount] =
|
|
1962
|
-
dispatch(actions5.setTenantListState(
|
|
1963
|
-
})
|
|
1964
|
-
var setTenantsListState = createAsyncThunk4(`${sliceName5}/setTenantsListState`,
|
|
1973
|
+
const [tenants, pageCount] = await tenantListRetrieval(currentState);
|
|
1974
|
+
dispatch(actions5.setTenantListState({ ...currentState, total: pageCount, tenants }));
|
|
1975
|
+
});
|
|
1976
|
+
var setTenantsListState = createAsyncThunk4(`${sliceName5}/setTenantsListState`, async (selectionState, { dispatch, getState }) => {
|
|
1965
1977
|
const currentState = getTenantsList(getState());
|
|
1966
|
-
const nextState =
|
|
1978
|
+
const nextState = {
|
|
1979
|
+
...currentState,
|
|
1980
|
+
...selectionState
|
|
1981
|
+
};
|
|
1967
1982
|
if (!deepCompare3(currentState, selectionState)) {
|
|
1968
|
-
const [tenants, pageCount] =
|
|
1969
|
-
return dispatch(actions5.setTenantListState(
|
|
1983
|
+
const [tenants, pageCount] = await tenantListRetrieval(nextState);
|
|
1984
|
+
return dispatch(actions5.setTenantListState({ ...nextState, tenants, total: pageCount }));
|
|
1970
1985
|
}
|
|
1971
|
-
return dispatch(actions5.setTenantListState(
|
|
1972
|
-
})
|
|
1986
|
+
return dispatch(actions5.setTenantListState({ ...nextState }));
|
|
1987
|
+
});
|
|
1973
1988
|
var editTenantDeviceLimit = createAsyncThunk4(`${sliceName5}/editDeviceLimit`, ({ newLimit, id, name }, { dispatch }) => {
|
|
1974
1989
|
return general_api_default.put(`${tenantadmApiUrlv2}/tenants/${id}/child`, { device_limit: newLimit, name }).catch((err) => commonErrorHandler(err, `Device Limit cannot be changed`, dispatch)).then(() => {
|
|
1975
1990
|
const tasks = [Promise.resolve(dispatch(setSnackbar3("Device Limit was changed successfully")))];
|
|
@@ -2012,10 +2027,7 @@ var downloadLicenseReport = createAsyncThunk4(
|
|
|
2012
2027
|
);
|
|
2013
2028
|
var createIntegration = createAsyncThunk4(
|
|
2014
2029
|
`${sliceName5}/createIntegration`,
|
|
2015
|
-
(
|
|
2016
|
-
var _b = _a, { id } = _b, integration = __objRest(_b, ["id"]);
|
|
2017
|
-
return general_api_default.post(`${iotManagerBaseURL}/integrations`, integration).catch((err) => commonErrorHandler(err, "There was an error creating the integration", dispatch, commonErrorFallback)).then(() => Promise.all([dispatch(setSnackbar3("The integration was set up successfully")), dispatch(getIntegrations())]));
|
|
2018
|
-
}
|
|
2030
|
+
({ id, ...integration }, { dispatch }) => general_api_default.post(`${iotManagerBaseURL}/integrations`, integration).catch((err) => commonErrorHandler(err, "There was an error creating the integration", dispatch, commonErrorFallback)).then(() => Promise.all([dispatch(setSnackbar3("The integration was set up successfully")), dispatch(getIntegrations())]))
|
|
2019
2031
|
);
|
|
2020
2032
|
var changeIntegration = createAsyncThunk4(
|
|
2021
2033
|
`${sliceName5}/changeIntegration`,
|
|
@@ -2036,9 +2048,8 @@ var getIntegrations = createAsyncThunk4(
|
|
|
2036
2048
|
(_, { dispatch, getState }) => general_api_default.get(`${iotManagerBaseURL}/integrations`).catch((err) => commonErrorHandler(err, "There was an error retrieving the integration", dispatch, commonErrorFallback)).then(({ data }) => {
|
|
2037
2049
|
const existingIntegrations = getState().organization.externalDeviceIntegrations;
|
|
2038
2050
|
const integrations = data.reduce((accu, item) => {
|
|
2039
|
-
|
|
2040
|
-
const
|
|
2041
|
-
const integration = __spreadValues(__spreadValues({}, existingIntegration), item);
|
|
2051
|
+
const existingIntegration = existingIntegrations.find((integration2) => item.id === integration2.id) ?? {};
|
|
2052
|
+
const integration = { ...existingIntegration, ...item };
|
|
2042
2053
|
accu.push(integration);
|
|
2043
2054
|
return accu;
|
|
2044
2055
|
}, []);
|
|
@@ -2090,7 +2101,7 @@ var getSsoConfigById = createAsyncThunk4(
|
|
|
2090
2101
|
`${sliceName5}/getSsoConfigById`,
|
|
2091
2102
|
(config, { dispatch }) => general_api_default.get(`${ssoIdpApiUrlv1}/${config.id}`).catch((err) => dispatch(ssoConfigActionErrorHandler(err, "read"))).then(({ data, headers }) => {
|
|
2092
2103
|
const sso = Object.values(SSO_TYPES).find(({ contentType }) => contentType === headers["content-type"]);
|
|
2093
|
-
return sso ? Promise.resolve(
|
|
2104
|
+
return sso ? Promise.resolve({ ...config, config: data, type: sso.id }) : Promise.reject("Unsupported SSO config content type.");
|
|
2094
2105
|
})
|
|
2095
2106
|
);
|
|
2096
2107
|
var getSsoConfigs = createAsyncThunk4(
|
|
@@ -2123,43 +2134,40 @@ var handleLoginError = (err, { token2fa: has2FA, password }, rejectWithValue) =>
|
|
|
2123
2134
|
};
|
|
2124
2135
|
var loginUser = createAsyncThunk5(
|
|
2125
2136
|
`${sliceName6}/loginUser`,
|
|
2126
|
-
(
|
|
2127
|
-
|
|
2128
|
-
return
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
Promise.
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
window.
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
);
|
|
2161
|
-
});
|
|
2162
|
-
}
|
|
2137
|
+
({ stayLoggedIn, ...userData }, { dispatch, rejectWithValue }) => users_api_default.postLogin(`${useradmApiUrlv1}/auth/login`, { ...userData, no_expiry: stayLoggedIn }).catch((err) => {
|
|
2138
|
+
cleanUp();
|
|
2139
|
+
return Promise.reject(dispatch(handleLoginError(err, userData, rejectWithValue)));
|
|
2140
|
+
}).then(({ text: response, contentType }) => {
|
|
2141
|
+
if (contentType.includes(APPLICATION_JSON_CONTENT_TYPE)) {
|
|
2142
|
+
const { id, kind } = response;
|
|
2143
|
+
const type = kind.split("/")[1];
|
|
2144
|
+
const ssoLoginUrl = SSO_TYPES[type].getStartUrl(id);
|
|
2145
|
+
window.location.replace(ssoLoginUrl);
|
|
2146
|
+
return;
|
|
2147
|
+
}
|
|
2148
|
+
const token = response;
|
|
2149
|
+
if (contentType !== APPLICATION_JWT_CONTENT_TYPE || !token) {
|
|
2150
|
+
return;
|
|
2151
|
+
}
|
|
2152
|
+
let now = /* @__PURE__ */ new Date();
|
|
2153
|
+
now.setSeconds(now.getSeconds() + maxSessionAge);
|
|
2154
|
+
const expiresAt = stayLoggedIn ? void 0 : now.toISOString();
|
|
2155
|
+
setSessionInfo({ token, expiresAt });
|
|
2156
|
+
cookies3.remove("JWT", { path: "/" });
|
|
2157
|
+
return (
|
|
2158
|
+
// @ts-ignore
|
|
2159
|
+
Promise.resolve(dispatch(getUser(OWN_USER_ID))).unwrap().catch((e) => {
|
|
2160
|
+
cleanUp();
|
|
2161
|
+
return Promise.reject(dispatch(setSnackbar4(extractErrorMessage(e))));
|
|
2162
|
+
}).then(() => {
|
|
2163
|
+
window.sessionStorage.removeItem("pendings-redirect");
|
|
2164
|
+
if (window.location.pathname !== "/ui/") {
|
|
2165
|
+
window.location.replace("/ui/");
|
|
2166
|
+
}
|
|
2167
|
+
return Promise.resolve(dispatch(actions6.successfullyLoggedIn({ expiresAt, token })));
|
|
2168
|
+
})
|
|
2169
|
+
);
|
|
2170
|
+
})
|
|
2163
2171
|
);
|
|
2164
2172
|
var logoutUser = createAsyncThunk5(`${sliceName6}/logoutUser`, (_, { dispatch, getState }) => {
|
|
2165
2173
|
if (Object.keys(getState().app.uploadsById).length) {
|
|
@@ -2176,7 +2184,7 @@ var switchUserOrganization = createAsyncThunk5(`${sliceName6}/switchUserOrganiza
|
|
|
2176
2184
|
return Promise.reject();
|
|
2177
2185
|
}
|
|
2178
2186
|
return general_api_default.get(`${useradmApiUrlv1}/users/tenants/${tenantId}/token`).then(({ data: token }) => {
|
|
2179
|
-
setSessionInfo(
|
|
2187
|
+
setSessionInfo({ ...getSessionInfo(), token });
|
|
2180
2188
|
window.location.reload();
|
|
2181
2189
|
});
|
|
2182
2190
|
});
|
|
@@ -2239,13 +2247,13 @@ var getUser = createAsyncThunk5(
|
|
|
2239
2247
|
);
|
|
2240
2248
|
var initializeSelf = createAsyncThunk5(`${sliceName6}/initializeSelf`, (_, { dispatch }) => dispatch(getUser(OWN_USER_ID)));
|
|
2241
2249
|
var updateUserColumnSettings = createAsyncThunk5(`${sliceName6}/updateUserColumnSettings`, ({ columns, currentUserId }, { dispatch, getState }) => {
|
|
2242
|
-
const userId = currentUserId
|
|
2250
|
+
const userId = currentUserId ?? getCurrentUser(getState()).id;
|
|
2243
2251
|
const storageKey = `${userId}-column-widths`;
|
|
2244
2252
|
let customColumns = [];
|
|
2245
2253
|
if (!columns) {
|
|
2246
2254
|
try {
|
|
2247
2255
|
customColumns = JSON.parse(window.localStorage.getItem(storageKey)) || customColumns;
|
|
2248
|
-
} catch
|
|
2256
|
+
} catch {
|
|
2249
2257
|
}
|
|
2250
2258
|
} else {
|
|
2251
2259
|
customColumns = columns;
|
|
@@ -2274,10 +2282,7 @@ var userActions = {
|
|
|
2274
2282
|
var userActionErrorHandler = (err, type, dispatch) => commonErrorHandler(err, `There was an error ${userActions[type].errorMessage} the user.`, dispatch);
|
|
2275
2283
|
var createUser = createAsyncThunk5(
|
|
2276
2284
|
`${sliceName6}/createUser`,
|
|
2277
|
-
(
|
|
2278
|
-
var _b = _a, { shouldResetPassword } = _b, userData = __objRest(_b, ["shouldResetPassword"]);
|
|
2279
|
-
return general_api_default.post(`${useradmApiUrlv1}/users`, __spreadProps(__spreadValues({}, userData), { send_reset_password: shouldResetPassword })).then(() => Promise.all([dispatch(actions6.createdUser(userData)), dispatch(getUserList()), dispatch(setSnackbar4(userActions.create.successMessage))])).catch((err) => userActionErrorHandler(err, "create", dispatch));
|
|
2280
|
-
}
|
|
2285
|
+
({ shouldResetPassword, ...userData }, { dispatch }) => general_api_default.post(`${useradmApiUrlv1}/users`, { ...userData, send_reset_password: shouldResetPassword }).then(() => Promise.all([dispatch(actions6.createdUser(userData)), dispatch(getUserList()), dispatch(setSnackbar4(userActions.create.successMessage))])).catch((err) => userActionErrorHandler(err, "create", dispatch))
|
|
2281
2286
|
);
|
|
2282
2287
|
var removeUser = createAsyncThunk5(
|
|
2283
2288
|
`${sliceName6}/removeUser`,
|
|
@@ -2288,15 +2293,12 @@ var removeUser = createAsyncThunk5(
|
|
|
2288
2293
|
);
|
|
2289
2294
|
var editUser = createAsyncThunk5(
|
|
2290
2295
|
`${sliceName6}/editUser`,
|
|
2291
|
-
(
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
()
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
])
|
|
2298
|
-
);
|
|
2299
|
-
}
|
|
2296
|
+
({ id, ...userData }, { dispatch, getState }) => general_api_default.put(`${useradmApiUrlv1}/users/${id}`, userData).then(
|
|
2297
|
+
() => Promise.all([
|
|
2298
|
+
dispatch(actions6.updatedUser({ ...userData, id: id === OWN_USER_ID ? getCurrentUser(getState()).id : id })),
|
|
2299
|
+
dispatch(setSnackbar4(userActions.edit.successMessage))
|
|
2300
|
+
])
|
|
2301
|
+
)
|
|
2300
2302
|
);
|
|
2301
2303
|
var addUserToCurrentTenant = createAsyncThunk5(`${sliceName6}/addUserToTenant`, (userId, { dispatch, getState }) => {
|
|
2302
2304
|
const { id } = getOrganization(getState());
|
|
@@ -2331,7 +2333,7 @@ var mapHttpPermission = (permission) => Object.entries(uiPermissionsByArea).redu
|
|
|
2331
2333
|
}
|
|
2332
2334
|
return accu;
|
|
2333
2335
|
},
|
|
2334
|
-
|
|
2336
|
+
{ ...emptyUiPermissions }
|
|
2335
2337
|
);
|
|
2336
2338
|
var permissionActionTypes = {
|
|
2337
2339
|
any: mapHttpPermission,
|
|
@@ -2354,20 +2356,21 @@ var combinePermissions = (existingPermissions, additionalPermissions = {}) => Ob
|
|
|
2354
2356
|
}, existingPermissions);
|
|
2355
2357
|
var tryParseCustomPermission = (permission) => {
|
|
2356
2358
|
const uiPermissions = permissionActionTypes[permission.action](permission.object);
|
|
2357
|
-
const result = mergePermissions(
|
|
2359
|
+
const result = mergePermissions({ ...emptyUiPermissions }, uiPermissions);
|
|
2358
2360
|
return { isCustom: true, permission, result };
|
|
2359
2361
|
};
|
|
2360
2362
|
var customPermissionHandler = (accu, permission) => {
|
|
2361
2363
|
let processor = tryParseCustomPermission(permission);
|
|
2362
|
-
return
|
|
2364
|
+
return {
|
|
2365
|
+
...accu,
|
|
2363
2366
|
isCustom: accu.isCustom || processor.isCustom,
|
|
2364
2367
|
uiPermissions: mergePermissions(accu.uiPermissions, processor.result)
|
|
2365
|
-
}
|
|
2368
|
+
};
|
|
2366
2369
|
};
|
|
2367
2370
|
var mapPermissionSet = (permissionSetName, names, scope, existingGroupsPermissions = {}) => {
|
|
2368
2371
|
const permission = Object.values(uiPermissionsById).find((permission2) => permission2.permissionSets[scope] === permissionSetName).value;
|
|
2369
2372
|
const scopedPermissions = names.reduce((accu, name) => combinePermissions(accu, { [name]: [permission] }), existingGroupsPermissions);
|
|
2370
|
-
return Object.entries(scopedPermissions).reduce((accu, [key, permissions]) =>
|
|
2373
|
+
return Object.entries(scopedPermissions).reduce((accu, [key, permissions]) => ({ ...accu, [key]: deriveImpliedAreaPermissions(scope, permissions) }), {});
|
|
2371
2374
|
};
|
|
2372
2375
|
var isEmptyPermissionSet = (permissionSet) => !Object.values(permissionSet).reduce((accu, permissions) => {
|
|
2373
2376
|
if (Array.isArray(permissions)) {
|
|
@@ -2382,60 +2385,59 @@ var parseRolePermissions = ({ permission_sets_with_scope = [], permissions = []
|
|
|
2382
2385
|
if (!processor) {
|
|
2383
2386
|
return accu;
|
|
2384
2387
|
}
|
|
2385
|
-
const scope = Object.keys(scopedPermissionAreas).find((scope2) =>
|
|
2386
|
-
var _a;
|
|
2387
|
-
return uiPermissionsByArea[scope2].scope === ((_a = permissionSet.scope) == null ? void 0 : _a.type);
|
|
2388
|
-
});
|
|
2388
|
+
const scope = Object.keys(scopedPermissionAreas).find((scope2) => uiPermissionsByArea[scope2].scope === permissionSet.scope?.type);
|
|
2389
2389
|
if (scope) {
|
|
2390
2390
|
const result = mapPermissionSet(permissionSet.name, permissionSet.scope.value, scope, accu.uiPermissions[scope]);
|
|
2391
|
-
return
|
|
2391
|
+
return { ...accu, uiPermissions: { ...accu.uiPermissions, [scope]: result } };
|
|
2392
2392
|
} else if (isEmptyPermissionSet(processor.result)) {
|
|
2393
2393
|
return processor.permissions.reduce(customPermissionHandler, accu);
|
|
2394
2394
|
}
|
|
2395
|
-
return
|
|
2395
|
+
return {
|
|
2396
|
+
...accu,
|
|
2396
2397
|
isCustom: accu.isCustom || processor.isCustom,
|
|
2397
2398
|
uiPermissions: mergePermissions(accu.uiPermissions, processor.result)
|
|
2398
|
-
}
|
|
2399
|
+
};
|
|
2399
2400
|
},
|
|
2400
|
-
{ isCustom: false, uiPermissions:
|
|
2401
|
+
{ isCustom: false, uiPermissions: { ...emptyUiPermissions, groups: {}, releases: {} } }
|
|
2401
2402
|
);
|
|
2402
2403
|
return permissions.reduce(customPermissionHandler, preliminaryResult);
|
|
2403
2404
|
};
|
|
2404
2405
|
var normalizeRbacRoles = (roles, rolesById2, permissionSets) => roles.reduce(
|
|
2405
2406
|
(accu, role) => {
|
|
2406
|
-
var _a;
|
|
2407
2407
|
let normalizedPermissions;
|
|
2408
2408
|
let isCustom = false;
|
|
2409
2409
|
if (rolesById2[role.name]) {
|
|
2410
|
-
normalizedPermissions =
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2410
|
+
normalizedPermissions = {
|
|
2411
|
+
...rolesById2[role.name].uiPermissions,
|
|
2412
|
+
groups: { ...rolesById2[role.name].uiPermissions.groups },
|
|
2413
|
+
releases: { ...rolesById2[role.name].uiPermissions.releases }
|
|
2414
|
+
};
|
|
2414
2415
|
} else {
|
|
2415
2416
|
const result = parseRolePermissions(role, permissionSets);
|
|
2416
2417
|
normalizedPermissions = result.uiPermissions;
|
|
2417
2418
|
isCustom = result.isCustom;
|
|
2418
2419
|
}
|
|
2419
|
-
const roleState =
|
|
2420
|
-
accu[role.name] =
|
|
2420
|
+
const roleState = accu[role.name] ?? { ...emptyRole };
|
|
2421
|
+
accu[role.name] = {
|
|
2422
|
+
...roleState,
|
|
2423
|
+
...role,
|
|
2421
2424
|
description: roleState.description ? roleState.description : role.description,
|
|
2422
2425
|
editable: !rolesById[role.name] && !isCustom && (typeof roleState.editable !== "undefined" ? roleState.editable : true),
|
|
2423
2426
|
isCustom,
|
|
2424
2427
|
name: roleState.name ? roleState.name : role.name,
|
|
2425
2428
|
uiPermissions: normalizedPermissions
|
|
2426
|
-
}
|
|
2429
|
+
};
|
|
2427
2430
|
return accu;
|
|
2428
2431
|
},
|
|
2429
|
-
|
|
2432
|
+
{ ...rolesById2 }
|
|
2430
2433
|
);
|
|
2431
2434
|
var getPermissionSets = createAsyncThunk5(
|
|
2432
2435
|
`${sliceName6}/getPermissionSets`,
|
|
2433
2436
|
(_, { dispatch, getState }) => general_api_default.get(`${useradmApiUrlv2}/permission_sets?per_page=500`).then(({ data }) => {
|
|
2434
2437
|
const permissionSets = data.reduce(
|
|
2435
2438
|
(accu, permissionSet) => {
|
|
2436
|
-
|
|
2437
|
-
|
|
2438
|
-
let permissionSetObject = __spreadValues(__spreadValues({}, permissionSetState), permissionSet);
|
|
2439
|
+
const permissionSetState = accu[permissionSet.name] ?? {};
|
|
2440
|
+
let permissionSetObject = { ...permissionSetState, ...permissionSet };
|
|
2439
2441
|
permissionSetObject.result = Object.values(uiPermissionsById).reduce(
|
|
2440
2442
|
(accu2, item) => Object.entries(item.permissionSets).reduce((collector, [area, permissionSet2]) => {
|
|
2441
2443
|
if (scopedPermissionAreas[area]) {
|
|
@@ -2446,11 +2448,10 @@ var getPermissionSets = createAsyncThunk5(
|
|
|
2446
2448
|
}
|
|
2447
2449
|
return collector;
|
|
2448
2450
|
}, accu2),
|
|
2449
|
-
|
|
2451
|
+
{ ...emptyUiPermissions, ...permissionSetObject.result ?? {} }
|
|
2450
2452
|
);
|
|
2451
2453
|
const scopes = Object.values(scopedPermissionAreas).reduce((accu2, { key, scopeType }) => {
|
|
2452
|
-
|
|
2453
|
-
if (((_a2 = permissionSetObject.supported_scope_types) == null ? void 0 : _a2.includes(key)) || ((_b2 = permissionSetObject.supported_scope_types) == null ? void 0 : _b2.includes(scopeType))) {
|
|
2454
|
+
if (permissionSetObject.supported_scope_types?.includes(key) || permissionSetObject.supported_scope_types?.includes(scopeType)) {
|
|
2454
2455
|
accu2.push(key);
|
|
2455
2456
|
}
|
|
2456
2457
|
return accu2;
|
|
@@ -2463,7 +2464,7 @@ var getPermissionSets = createAsyncThunk5(
|
|
|
2463
2464
|
return accu;
|
|
2464
2465
|
},
|
|
2465
2466
|
// @ts-ignore
|
|
2466
|
-
|
|
2467
|
+
{ ...getState().users.permissionSetsById }
|
|
2467
2468
|
);
|
|
2468
2469
|
return Promise.all([dispatch(actions6.receivedPermissionSets(permissionSets)), permissionSets]);
|
|
2469
2470
|
}).catch(() => console.log("Permission set retrieval failed - likely accessing a non-RBAC backend"))
|
|
@@ -2496,28 +2497,27 @@ var transformAreaRoleDataToScopedPermissionsSets = (area, areaPermissions, exces
|
|
|
2496
2497
|
const skipPermissions = scopedPermissionAreas.releases.key === area && item !== ALL_RELEASES ? [uiPermissionsById.upload.value] : [];
|
|
2497
2498
|
const impliedPermissions = deriveImpliedAreaPermissions(area, uiPermissions, skipPermissions);
|
|
2498
2499
|
accu = impliedPermissions.reduce((itemPermissionAccu, impliedPermission) => {
|
|
2499
|
-
|
|
2500
|
-
const permissionSetState = (_a = itemPermissionAccu[uiPermissionsById[impliedPermission].permissionSets[area]]) != null ? _a : {
|
|
2500
|
+
const permissionSetState = itemPermissionAccu[uiPermissionsById[impliedPermission].permissionSets[area]] ?? {
|
|
2501
2501
|
type: uiPermissionsByArea[area].scope,
|
|
2502
2502
|
value: []
|
|
2503
2503
|
};
|
|
2504
|
-
itemPermissionAccu[uiPermissionsById[impliedPermission].permissionSets[area]] =
|
|
2504
|
+
itemPermissionAccu[uiPermissionsById[impliedPermission].permissionSets[area]] = {
|
|
2505
|
+
...permissionSetState,
|
|
2505
2506
|
value: [...permissionSetState.value, item]
|
|
2506
|
-
}
|
|
2507
|
+
};
|
|
2507
2508
|
return itemPermissionAccu;
|
|
2508
2509
|
}, accu);
|
|
2509
2510
|
return accu;
|
|
2510
2511
|
}, {});
|
|
2511
|
-
return Object.entries(permissionSetObject).map((
|
|
2512
|
-
var [name, _b] = _a, _c = _b, { value } = _c, scope = __objRest(_c, ["value"]);
|
|
2512
|
+
return Object.entries(permissionSetObject).map(([name, { value, ...scope }]) => {
|
|
2513
2513
|
if (value.includes(excessiveAccessSelector)) {
|
|
2514
2514
|
return { name };
|
|
2515
2515
|
}
|
|
2516
|
-
return { name, scope:
|
|
2516
|
+
return { name, scope: { ...scope, value: value.filter(duplicateFilter) } };
|
|
2517
2517
|
});
|
|
2518
2518
|
};
|
|
2519
2519
|
var transformRoleDataToRole = (roleData, roleState = {}) => {
|
|
2520
|
-
const role =
|
|
2520
|
+
const role = { ...roleState, ...roleData };
|
|
2521
2521
|
const { description = "", name, uiPermissions = emptyUiPermissions } = role;
|
|
2522
2522
|
const { maybeUiPermissions, remainderKeys } = Object.entries(emptyUiPermissions).reduce(
|
|
2523
2523
|
(accu, [key, emptyPermissions]) => {
|
|
@@ -2553,12 +2553,17 @@ var transformRoleDataToRole = (roleData, roleState = {}) => {
|
|
|
2553
2553
|
}, []);
|
|
2554
2554
|
return {
|
|
2555
2555
|
permissionSetsWithScope: [...permissionSetsWithScope, ...scopedPermissionSets],
|
|
2556
|
-
role:
|
|
2556
|
+
role: {
|
|
2557
|
+
...emptyRole,
|
|
2557
2558
|
name,
|
|
2558
2559
|
// @ts-ignore
|
|
2559
2560
|
description: description ? description : roleState.description,
|
|
2560
|
-
uiPermissions:
|
|
2561
|
-
|
|
2561
|
+
uiPermissions: {
|
|
2562
|
+
...emptyUiPermissions,
|
|
2563
|
+
...roleUiPermissions,
|
|
2564
|
+
...maybeUiPermissions
|
|
2565
|
+
}
|
|
2566
|
+
}
|
|
2562
2567
|
};
|
|
2563
2568
|
};
|
|
2564
2569
|
var roleActions = {
|
|
@@ -2609,13 +2614,12 @@ var getGlobalSettings2 = createAsyncThunk5(
|
|
|
2609
2614
|
var saveGlobalSettings = createAsyncThunk5(
|
|
2610
2615
|
`${sliceName6}/saveGlobalSettings`,
|
|
2611
2616
|
// @ts-ignore
|
|
2612
|
-
(
|
|
2613
|
-
var _b = _a, { beOptimistic = false, notify = false } = _b, settings = __objRest(_b, ["beOptimistic", "notify"]);
|
|
2617
|
+
({ beOptimistic = false, notify = false, ...settings }, { dispatch, getState }) => {
|
|
2614
2618
|
if (!window.sessionStorage.getItem(settingsKeys.initialized) && !beOptimistic) {
|
|
2615
2619
|
return;
|
|
2616
2620
|
}
|
|
2617
2621
|
return dispatch(getGlobalSettings2()).unwrap().then((result) => {
|
|
2618
|
-
let updatedSettings =
|
|
2622
|
+
let updatedSettings = { ...getState().users.globalSettings, ...settings };
|
|
2619
2623
|
if (getCurrentUser(getState()).verified) {
|
|
2620
2624
|
updatedSettings["2fa"] = twoFAStates.enabled;
|
|
2621
2625
|
} else {
|
|
@@ -2653,10 +2657,17 @@ var saveUserSettings = createAsyncThunk5(`${sliceName6}/saveUserSettings`, (sett
|
|
|
2653
2657
|
const userSettings = getUserSettings(getState());
|
|
2654
2658
|
const onboardingState = getOnboardingState(getState());
|
|
2655
2659
|
const tooltipState = getTooltipsState(getState());
|
|
2656
|
-
const updatedSettings =
|
|
2657
|
-
|
|
2660
|
+
const updatedSettings = {
|
|
2661
|
+
...userSettings,
|
|
2662
|
+
// @ts-ignore
|
|
2663
|
+
...settings,
|
|
2664
|
+
onboarding: {
|
|
2665
|
+
...onboardingState,
|
|
2666
|
+
// @ts-ignore
|
|
2667
|
+
...settings.onboarding
|
|
2668
|
+
},
|
|
2658
2669
|
tooltips: tooltipState
|
|
2659
|
-
}
|
|
2670
|
+
};
|
|
2660
2671
|
const headers = result[result.length - 1] ? { "If-Match": result[result.length - 1] } : {};
|
|
2661
2672
|
return Promise.all([
|
|
2662
2673
|
Promise.resolve(dispatch(actions6.setUserSettings(updatedSettings))),
|
|
@@ -2682,9 +2693,10 @@ var getTokens = createAsyncThunk5(
|
|
|
2682
2693
|
`${sliceName6}/getTokens`,
|
|
2683
2694
|
(_, { dispatch, getState }) => general_api_default.get(`${useradmApiUrlv1}/settings/tokens`).then(({ data: tokens }) => {
|
|
2684
2695
|
const user = getCurrentUser(getState());
|
|
2685
|
-
const updatedUser =
|
|
2696
|
+
const updatedUser = {
|
|
2697
|
+
...user,
|
|
2686
2698
|
tokens
|
|
2687
|
-
}
|
|
2699
|
+
};
|
|
2688
2700
|
return Promise.resolve(dispatch(actions6.updatedUser(updatedUser)));
|
|
2689
2701
|
})
|
|
2690
2702
|
);
|
|
@@ -2700,8 +2712,7 @@ var revokeToken = createAsyncThunk5(
|
|
|
2700
2712
|
general_api_default.delete(`${useradmApiUrlv1}/settings/tokens/${token.id}`).then(() => Promise.resolve(dispatch(getTokens())))
|
|
2701
2713
|
)
|
|
2702
2714
|
);
|
|
2703
|
-
var setTooltipReadState = createAsyncThunk5(`${sliceName6}/setTooltipReadState`, (
|
|
2704
|
-
var _b = _a, { persist } = _b, remainder = __objRest(_b, ["persist"]);
|
|
2715
|
+
var setTooltipReadState = createAsyncThunk5(`${sliceName6}/setTooltipReadState`, ({ persist, ...remainder }, { dispatch }) => {
|
|
2705
2716
|
let tasks = [dispatch(actions6.setTooltipState(remainder))];
|
|
2706
2717
|
if (persist) {
|
|
2707
2718
|
tasks.push(dispatch(saveUserSettings()));
|
|
@@ -2709,14 +2720,13 @@ var setTooltipReadState = createAsyncThunk5(`${sliceName6}/setTooltipReadState`,
|
|
|
2709
2720
|
return Promise.all(tasks);
|
|
2710
2721
|
});
|
|
2711
2722
|
var setAllTooltipsReadState = createAsyncThunk5(`${sliceName6}/toggleHelptips`, ({ readState = READ_STATES.read, tooltips }, { dispatch }) => {
|
|
2712
|
-
const updatedTips = tooltips.reduce((accu, id) =>
|
|
2723
|
+
const updatedTips = tooltips.reduce((accu, id) => ({ ...accu, [id]: { readState } }), {});
|
|
2713
2724
|
return Promise.resolve(dispatch(actions6.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
|
|
2714
2725
|
});
|
|
2715
2726
|
var submitFeedback = createAsyncThunk5(
|
|
2716
2727
|
`${sliceName6}/submitFeedback`,
|
|
2717
2728
|
// @ts-ignore
|
|
2718
|
-
(
|
|
2719
|
-
var _b = _a, { satisfaction, feedback } = _b, meta = __objRest(_b, ["satisfaction", "feedback"]);
|
|
2729
|
+
({ satisfaction, feedback, ...meta }, { dispatch }) => {
|
|
2720
2730
|
return general_api_default.post(`${tenantadmApiUrlv2}/contact/support`, {
|
|
2721
2731
|
subject: "feedback submission",
|
|
2722
2732
|
body: JSON.stringify({ feedback, satisfaction, meta })
|
|
@@ -2742,17 +2752,16 @@ var dateFunctionMap = {
|
|
|
2742
2752
|
setDays: "setDate"
|
|
2743
2753
|
};
|
|
2744
2754
|
var setOfflineThreshold = createAsyncThunk6(`${sliceName}/setOfflineThreshold`, (_, { dispatch, getState }) => {
|
|
2745
|
-
var _a, _b;
|
|
2746
2755
|
const { interval, intervalUnit } = getOfflineThresholdSettings(getState());
|
|
2747
2756
|
const today = /* @__PURE__ */ new Date();
|
|
2748
2757
|
const intervalName = `${intervalUnit.charAt(0).toUpperCase()}${intervalUnit.substring(1)}`;
|
|
2749
|
-
const setter =
|
|
2750
|
-
const getter =
|
|
2758
|
+
const setter = dateFunctionMap[`set${intervalName}`] ?? `set${intervalName}`;
|
|
2759
|
+
const getter = dateFunctionMap[`get${intervalName}`] ?? `get${intervalName}`;
|
|
2751
2760
|
today[setter](today[getter]() - interval);
|
|
2752
2761
|
let value;
|
|
2753
2762
|
try {
|
|
2754
2763
|
value = today.toISOString();
|
|
2755
|
-
} catch
|
|
2764
|
+
} catch {
|
|
2756
2765
|
return Promise.resolve(dispatch(actions.setSnackbar("There was an error saving the offline threshold, please check your settings.")));
|
|
2757
2766
|
}
|
|
2758
2767
|
return Promise.resolve(dispatch(actions.setOfflineThreshold(value)));
|
|
@@ -2793,37 +2802,43 @@ var getLatestReleaseInfo = createAsyncThunk6(`${sliceName}/getLatestReleaseInfo`
|
|
|
2793
2802
|
accu.latestRepos[item.name] = getComparisonCompatibleVersion(item.version);
|
|
2794
2803
|
return accu;
|
|
2795
2804
|
},
|
|
2796
|
-
{ latestVersions:
|
|
2805
|
+
{ latestVersions: { ...getState().app.versionInformation }, latestRepos: {} }
|
|
2797
2806
|
);
|
|
2798
2807
|
const info = deductSaasState(latestRelease, guiTags, saas);
|
|
2799
2808
|
return Promise.resolve(
|
|
2800
2809
|
dispatch(
|
|
2801
|
-
actions.setVersionInformation(
|
|
2810
|
+
actions.setVersionInformation({
|
|
2811
|
+
...latestVersions,
|
|
2802
2812
|
backend: info,
|
|
2803
2813
|
GUI: info,
|
|
2804
2814
|
latestRelease: {
|
|
2805
2815
|
releaseDate: latestRelease.release_date,
|
|
2806
2816
|
repos: latestRepos
|
|
2807
2817
|
}
|
|
2808
|
-
})
|
|
2818
|
+
})
|
|
2809
2819
|
)
|
|
2810
2820
|
);
|
|
2811
2821
|
});
|
|
2812
2822
|
});
|
|
2813
2823
|
var setSearchState = createAsyncThunk6(`${sliceName}/setSearchState`, (searchState, { dispatch, getState }) => {
|
|
2814
2824
|
const currentState = getSearchState(getState());
|
|
2815
|
-
let nextState =
|
|
2816
|
-
|
|
2817
|
-
|
|
2825
|
+
let nextState = {
|
|
2826
|
+
...currentState,
|
|
2827
|
+
...searchState,
|
|
2828
|
+
sort: {
|
|
2829
|
+
...currentState.sort,
|
|
2830
|
+
...searchState.sort
|
|
2831
|
+
}
|
|
2832
|
+
};
|
|
2818
2833
|
let tasks = [];
|
|
2819
|
-
const
|
|
2820
|
-
const
|
|
2834
|
+
const { isSearching: currentSearching, deviceIds: currentDevices, searchTotal: currentTotal, ...currentRequestState } = currentState;
|
|
2835
|
+
const { isSearching: nextSearching, deviceIds: nextDevices, searchTotal: nextTotal, ...nextRequestState } = nextState;
|
|
2821
2836
|
if (nextRequestState.searchTerm && !deepCompare4(currentRequestState, nextRequestState)) {
|
|
2822
2837
|
nextState.isSearching = true;
|
|
2823
2838
|
tasks.push(
|
|
2824
2839
|
dispatch(searchDevices(nextState)).unwrap().then((results) => {
|
|
2825
2840
|
const searchResult = results[results.length - 1];
|
|
2826
|
-
return dispatch(actions.setSearchState(
|
|
2841
|
+
return dispatch(actions.setSearchState({ ...searchResult, isSearching: false }));
|
|
2827
2842
|
}).catch(() => dispatch(actions.setSearchState({ isSearching: false, searchTotal: 0 })))
|
|
2828
2843
|
);
|
|
2829
2844
|
}
|
|
@@ -2974,4 +2989,4 @@ export {
|
|
|
2974
2989
|
setAllTooltipsReadState,
|
|
2975
2990
|
submitFeedback
|
|
2976
2991
|
};
|
|
2977
|
-
//# sourceMappingURL=chunk-
|
|
2992
|
+
//# sourceMappingURL=chunk-DIZJVB6M.mjs.map
|