@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.
- package/dist/BillingProfile-ChP2_Sqw.d.cts +45 -0
- package/dist/BillingProfile-ChP2_Sqw.d.ts +45 -0
- package/dist/actions.cjs +2 -6
- package/dist/actions.cjs.map +1 -1
- package/dist/actions.js +12 -12
- package/dist/api/general-api.cjs.map +1 -1
- package/dist/api/general-api.js +5 -5
- package/dist/api/users-api.cjs.map +1 -1
- package/dist/api/users-api.js +6 -6
- package/dist/appSlice/constants.cjs.map +1 -1
- package/dist/appSlice/constants.d.cts +7 -7
- package/dist/appSlice/constants.d.ts +7 -7
- package/dist/appSlice/constants.js +1 -1
- package/dist/appSlice/index.cjs +1 -3
- package/dist/appSlice/index.cjs.map +1 -1
- package/dist/appSlice/index.js +4 -4
- package/dist/appSlice/thunks.cjs +16 -26
- package/dist/appSlice/thunks.cjs.map +1 -1
- package/dist/appSlice/thunks.js +28 -27
- package/dist/auth.cjs.map +1 -1
- package/dist/auth.js +4 -4
- package/dist/{chunk-LGNOTPUG.js → chunk-4RWZR3BN.js} +23 -25
- package/dist/{chunk-LGNOTPUG.js.map → chunk-4RWZR3BN.js.map} +1 -1
- package/dist/{chunk-TUACATJA.js → chunk-7YZCUAXZ.js} +2 -2
- package/dist/{chunk-7PVGDMNM.js → chunk-AFICTIVU.js} +3 -5
- package/dist/{chunk-7PVGDMNM.js.map → chunk-AFICTIVU.js.map} +1 -1
- package/dist/{chunk-YT73QWCN.js → chunk-AUBJUUP3.js} +3 -3
- package/dist/{chunk-VMNMD6KF.js → chunk-AVX7VVOK.js} +3 -3
- package/dist/{chunk-4B3IMP4I.js → chunk-BSN2TOQC.js} +1 -1
- package/dist/{chunk-4B3IMP4I.js.map → chunk-BSN2TOQC.js.map} +1 -1
- package/dist/{chunk-X7IEZBM4.js → chunk-DCEKU6UV.js} +2 -2
- package/dist/{chunk-HPBE6KYY.js → chunk-DGQKXSRI.js} +3 -3
- package/dist/{chunk-2JHFUQ6B.js → chunk-EQLHIPPR.js} +88 -85
- package/dist/chunk-EQLHIPPR.js.map +1 -0
- package/dist/{chunk-LTKOV26W.js → chunk-EYCORLYU.js} +30 -28
- package/dist/chunk-EYCORLYU.js.map +1 -0
- package/dist/{chunk-WXL7PVI5.js → chunk-FQDSV3NK.js} +4 -4
- package/dist/{chunk-TI2RL5P2.js → chunk-FRSA2YB5.js} +3 -3
- package/dist/{chunk-DCK2DBOA.js → chunk-FVCYB5OP.js} +22 -24
- package/dist/{chunk-DCK2DBOA.js.map → chunk-FVCYB5OP.js.map} +1 -1
- package/dist/{chunk-AMGWP7A4.js → chunk-GAI4VYRZ.js} +2 -2
- package/dist/{chunk-4XJMRVFI.js → chunk-GWJIY56H.js} +10 -12
- package/dist/chunk-GWJIY56H.js.map +1 -0
- package/dist/{chunk-2CYOM4BK.js → chunk-JO33IORF.js} +2 -2
- package/dist/chunk-K4MMUDYT.js +391 -0
- package/dist/chunk-K4MMUDYT.js.map +1 -0
- package/dist/{chunk-YDS36ALB.js → chunk-L3SY3J5M.js} +3 -3
- package/dist/{chunk-JAROCU6M.js → chunk-NCSKCF2S.js} +3 -3
- package/dist/{chunk-CYV6632F.js → chunk-NOQR3TE7.js} +2 -2
- package/dist/{chunk-C5NEDBJI.js → chunk-OEP2D6QL.js} +3 -3
- package/dist/{chunk-C5NEDBJI.js.map → chunk-OEP2D6QL.js.map} +1 -1
- package/dist/{chunk-LEMVXAYP.js → chunk-PAIB5V27.js} +15 -15
- package/dist/{chunk-FGKMJS3B.js → chunk-RX32WLVJ.js} +2 -4
- package/dist/chunk-RX32WLVJ.js.map +1 -0
- package/dist/{chunk-QRGTG4YB.js → chunk-X3GZILYD.js} +3 -3
- package/dist/{chunk-UWMYZNUB.js → chunk-Y575RZHR.js} +1 -1
- package/dist/{chunk-UWMYZNUB.js.map → chunk-Y575RZHR.js.map} +1 -1
- package/dist/{chunk-7JKWI5FK.js → chunk-ZWOAFHAR.js} +2 -2
- package/dist/{chunk-DAPAXWA5.js → chunk-ZZMFXRQK.js} +12 -12
- package/dist/commonConstants.cjs.map +1 -1
- package/dist/commonConstants.d.cts +1 -1
- package/dist/commonConstants.d.ts +1 -1
- package/dist/commonConstants.js +1 -1
- package/dist/commonSelectors.cjs +7 -11
- package/dist/commonSelectors.cjs.map +1 -1
- package/dist/commonSelectors.d.cts +12 -11
- package/dist/commonSelectors.d.ts +12 -11
- package/dist/commonSelectors.js +11 -11
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.js +3 -3
- package/dist/deploymentdevicehook.cjs +16 -26
- package/dist/deploymentdevicehook.cjs.map +1 -1
- package/dist/deploymentdevicehook.js +30 -29
- package/dist/deploymentdevicehook.js.map +1 -1
- package/dist/deploymentsSlice/constants.cjs.map +1 -1
- package/dist/deploymentsSlice/constants.js +3 -3
- package/dist/deploymentsSlice/index.cjs.map +1 -1
- package/dist/deploymentsSlice/index.js +4 -4
- package/dist/deploymentsSlice/selectors.cjs.map +1 -1
- package/dist/deploymentsSlice/selectors.js +4 -4
- package/dist/deploymentsSlice/thunks.cjs +16 -26
- package/dist/deploymentsSlice/thunks.cjs.map +1 -1
- package/dist/deploymentsSlice/thunks.js +28 -27
- package/dist/devicesSlice/constants.cjs.map +1 -1
- package/dist/devicesSlice/constants.js +3 -3
- package/dist/devicesSlice/index.cjs.map +1 -1
- package/dist/devicesSlice/index.js +4 -4
- package/dist/devicesSlice/selectors.cjs.map +1 -1
- package/dist/devicesSlice/selectors.js +4 -4
- package/dist/devicesSlice/thunks.cjs +16 -26
- package/dist/devicesSlice/thunks.cjs.map +1 -1
- package/dist/devicesSlice/thunks.js +28 -27
- package/dist/liststatehook.cjs +971 -0
- package/dist/liststatehook.cjs.map +1 -0
- package/dist/liststatehook.d.cts +246 -0
- package/dist/liststatehook.d.ts +246 -0
- package/dist/liststatehook.js +88 -0
- package/dist/liststatehook.js.map +1 -0
- package/dist/locationutils.cjs +942 -0
- package/dist/locationutils.cjs.map +1 -0
- package/dist/locationutils.d.cts +113 -0
- package/dist/locationutils.d.ts +113 -0
- package/dist/locationutils.js +46 -0
- package/dist/locationutils.js.map +1 -0
- package/dist/monitorSlice/constants.cjs.map +1 -1
- package/dist/monitorSlice/constants.js +3 -3
- package/dist/monitorSlice/index.cjs.map +1 -1
- package/dist/monitorSlice/index.js +4 -4
- package/dist/monitorSlice/thunks.cjs +15 -25
- package/dist/monitorSlice/thunks.cjs.map +1 -1
- package/dist/monitorSlice/thunks.js +24 -24
- package/dist/onboardingSlice/index.cjs +1 -3
- package/dist/onboardingSlice/index.cjs.map +1 -1
- package/dist/onboardingSlice/index.js +1 -1
- package/dist/onboardingSlice/thunks.cjs +22 -35
- package/dist/onboardingSlice/thunks.cjs.map +1 -1
- package/dist/onboardingSlice/thunks.d.cts +1 -2
- package/dist/onboardingSlice/thunks.d.ts +1 -2
- package/dist/onboardingSlice/thunks.js +28 -29
- package/dist/organizationSlice/constants.cjs.map +1 -1
- package/dist/organizationSlice/constants.js +3 -3
- package/dist/organizationSlice/index.cjs.map +1 -1
- package/dist/organizationSlice/index.d.cts +2 -1
- package/dist/organizationSlice/index.d.ts +2 -1
- package/dist/organizationSlice/index.js +4 -4
- package/dist/organizationSlice/selectors.cjs.map +1 -1
- package/dist/organizationSlice/selectors.d.cts +2 -1
- package/dist/organizationSlice/selectors.d.ts +2 -1
- package/dist/organizationSlice/selectors.js +4 -4
- package/dist/organizationSlice/thunks.cjs +38 -44
- package/dist/organizationSlice/thunks.cjs.map +1 -1
- package/dist/organizationSlice/thunks.d.cts +5 -5
- package/dist/organizationSlice/thunks.d.ts +5 -5
- package/dist/organizationSlice/thunks.js +28 -27
- package/dist/organizationSlice/types.cjs.map +1 -1
- package/dist/organizationSlice/types.d.cts +3 -112
- package/dist/organizationSlice/types.d.ts +3 -112
- package/dist/releasesSlice/index.cjs.map +1 -1
- package/dist/releasesSlice/index.js +4 -4
- package/dist/releasesSlice/selectors.cjs +6 -8
- package/dist/releasesSlice/selectors.cjs.map +1 -1
- package/dist/releasesSlice/selectors.js +5 -5
- package/dist/releasesSlice/thunks.cjs +51 -46
- package/dist/releasesSlice/thunks.cjs.map +1 -1
- package/dist/releasesSlice/thunks.js +25 -24
- package/dist/selectors.cjs +7 -11
- package/dist/selectors.cjs.map +1 -1
- package/dist/selectors.d.cts +2 -1
- package/dist/selectors.d.ts +2 -1
- package/dist/selectors.js +37 -37
- package/dist/sockethook.cjs +529 -0
- package/dist/sockethook.cjs.map +1 -0
- package/dist/sockethook.d.cts +10 -0
- package/dist/sockethook.d.ts +10 -0
- package/dist/sockethook.js +141 -0
- package/dist/sockethook.js.map +1 -0
- package/dist/store.cjs +2 -6
- package/dist/store.cjs.map +1 -1
- package/dist/store.d.cts +2 -1
- package/dist/store.d.ts +2 -1
- package/dist/store.js +14 -14
- package/dist/storehooks.cjs +86 -90
- package/dist/storehooks.cjs.map +1 -1
- package/dist/storehooks.js +37 -48
- package/dist/storehooks.js.map +1 -1
- package/dist/thunks.cjs +83 -79
- package/dist/thunks.cjs.map +1 -1
- package/dist/thunks.d.cts +2 -2
- package/dist/thunks.d.ts +2 -2
- package/dist/thunks.js +28 -29
- package/dist/types-DBj17FZO.d.cts +135 -0
- package/dist/types-DnfZa6xd.d.ts +135 -0
- package/dist/usersSlice/constants.cjs.map +1 -1
- package/dist/usersSlice/constants.d.cts +6 -6
- package/dist/usersSlice/constants.d.ts +6 -6
- package/dist/usersSlice/constants.js +3 -3
- package/dist/usersSlice/index.cjs.map +1 -1
- package/dist/usersSlice/index.js +4 -4
- package/dist/usersSlice/selectors.cjs.map +1 -1
- package/dist/usersSlice/selectors.js +5 -5
- package/dist/usersSlice/thunks.cjs +16 -26
- package/dist/usersSlice/thunks.cjs.map +1 -1
- package/dist/usersSlice/thunks.js +28 -27
- package/dist/utils.cjs +6 -8
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.js +4 -4
- package/package.json +6 -5
- package/dist/chunk-2JHFUQ6B.js.map +0 -1
- package/dist/chunk-4XJMRVFI.js.map +0 -1
- package/dist/chunk-FGKMJS3B.js.map +0 -1
- package/dist/chunk-LTKOV26W.js.map +0 -1
- /package/dist/{chunk-TUACATJA.js.map → chunk-7YZCUAXZ.js.map} +0 -0
- /package/dist/{chunk-YT73QWCN.js.map → chunk-AUBJUUP3.js.map} +0 -0
- /package/dist/{chunk-VMNMD6KF.js.map → chunk-AVX7VVOK.js.map} +0 -0
- /package/dist/{chunk-X7IEZBM4.js.map → chunk-DCEKU6UV.js.map} +0 -0
- /package/dist/{chunk-HPBE6KYY.js.map → chunk-DGQKXSRI.js.map} +0 -0
- /package/dist/{chunk-WXL7PVI5.js.map → chunk-FQDSV3NK.js.map} +0 -0
- /package/dist/{chunk-TI2RL5P2.js.map → chunk-FRSA2YB5.js.map} +0 -0
- /package/dist/{chunk-AMGWP7A4.js.map → chunk-GAI4VYRZ.js.map} +0 -0
- /package/dist/{chunk-2CYOM4BK.js.map → chunk-JO33IORF.js.map} +0 -0
- /package/dist/{chunk-YDS36ALB.js.map → chunk-L3SY3J5M.js.map} +0 -0
- /package/dist/{chunk-JAROCU6M.js.map → chunk-NCSKCF2S.js.map} +0 -0
- /package/dist/{chunk-CYV6632F.js.map → chunk-NOQR3TE7.js.map} +0 -0
- /package/dist/{chunk-LEMVXAYP.js.map → chunk-PAIB5V27.js.map} +0 -0
- /package/dist/{chunk-QRGTG4YB.js.map → chunk-X3GZILYD.js.map} +0 -0
- /package/dist/{chunk-7JKWI5FK.js.map → chunk-ZWOAFHAR.js.map} +0 -0
- /package/dist/{chunk-DAPAXWA5.js.map → chunk-ZZMFXRQK.js.map} +0 -0
package/dist/storehooks.js
CHANGED
|
@@ -15,82 +15,80 @@ import {
|
|
|
15
15
|
getUserSettings as getUserSettings2,
|
|
16
16
|
saveGlobalSettings,
|
|
17
17
|
saveUserSettings
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-EQLHIPPR.js";
|
|
19
19
|
import {
|
|
20
20
|
getReleases
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
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-
|
|
31
|
-
import "./chunk-
|
|
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-
|
|
51
|
+
} from "./chunk-FQDSV3NK.js";
|
|
37
52
|
import {
|
|
38
53
|
getIsServiceProvider
|
|
39
|
-
} from "./chunk-
|
|
40
|
-
import "./chunk-
|
|
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-
|
|
46
|
-
import "./chunk-YO22XLHI.js";
|
|
64
|
+
} from "./chunk-L3SY3J5M.js";
|
|
47
65
|
import {
|
|
48
66
|
getComparisonCompatibleVersion,
|
|
49
67
|
stringToBoolean
|
|
50
|
-
} from "./chunk-
|
|
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-
|
|
73
|
+
} from "./chunk-OEP2D6QL.js";
|
|
73
74
|
import "./chunk-CK6YE6AN.js";
|
|
74
|
-
import
|
|
75
|
-
|
|
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-
|
|
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 {
|
|
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;
|
package/dist/storehooks.js.map
CHANGED
|
@@ -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
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
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.
|
|
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
|
-
|
|
4247
|
-
(
|
|
4248
|
-
|
|
4249
|
-
|
|
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 =
|
|
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 =
|
|
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 ||
|
|
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:
|
|
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 =
|
|
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 >=
|
|
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)(
|
|
4480
|
-
|
|
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)(
|
|
4512
|
-
|
|
4513
|
-
|
|
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)(
|
|
4521
|
-
|
|
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)(
|
|
4530
|
-
|
|
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/
|
|
4637
|
+
// src/locationutils.ts
|
|
4646
4638
|
var import_helpers12 = require("@northern.tech/utils/helpers");
|
|
4647
|
-
var
|
|
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,
|
|
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(
|
|
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,
|
|
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,
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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(
|
|
5188
|
+
}, []).filter(import_helpers14.duplicateFilter);
|
|
5184
5189
|
if (Array.isArray(accu[area])) {
|
|
5185
|
-
accu[area] = [...accu[area], ...collector].filter(
|
|
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(
|
|
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,
|
|
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(
|
|
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(
|
|
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,
|