@northern.tech/store 0.5.1 → 0.5.3
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.cjs +53 -3
- package/dist/actions.cjs.map +1 -1
- package/dist/actions.d.cts +6 -2
- package/dist/actions.d.ts +6 -2
- package/dist/actions.js +10 -10
- package/dist/api/general-api.cjs +1 -1
- package/dist/api/general-api.cjs.map +1 -1
- package/dist/api/general-api.d.cts +8 -8
- package/dist/api/general-api.d.ts +8 -8
- package/dist/api/general-api.js +4 -4
- package/dist/api/users-api.cjs +1 -1
- package/dist/api/users-api.cjs.map +1 -1
- package/dist/api/users-api.d.cts +1 -1
- package/dist/api/users-api.d.ts +1 -1
- package/dist/api/users-api.js +5 -5
- package/dist/appSlice/constants.cjs +1 -0
- package/dist/appSlice/constants.cjs.map +1 -1
- package/dist/appSlice/constants.d.cts +5 -0
- package/dist/appSlice/constants.d.ts +5 -0
- package/dist/appSlice/constants.js +1 -1
- package/dist/appSlice/index.cjs +7 -3
- package/dist/appSlice/index.cjs.map +1 -1
- package/dist/appSlice/index.js +3 -3
- package/dist/appSlice/mocks.cjs +7 -3
- package/dist/appSlice/mocks.cjs.map +1 -1
- package/dist/appSlice/mocks.js +3 -3
- package/dist/appSlice/thunks.cjs +82 -23
- package/dist/appSlice/thunks.cjs.map +1 -1
- package/dist/appSlice/thunks.js +25 -25
- package/dist/auth.cjs.map +1 -1
- package/dist/auth.js +3 -3
- package/dist/{chunk-MZNANSS2.js → chunk-4DOSYAJY.js} +2 -2
- package/dist/{chunk-4E7ZSEFL.js → chunk-4UJXT6RF.js} +3 -3
- package/dist/{chunk-VUFRP6P3.js → chunk-5HYHE4HO.js} +2 -2
- package/dist/chunk-5HYHE4HO.js.map +1 -0
- package/dist/{chunk-ZJW3QIPM.js → chunk-66NK2ZV2.js} +2 -2
- package/dist/{chunk-PGFVHKP5.js → chunk-AVCIWAZB.js} +2 -2
- package/dist/{chunk-RS37Y2PQ.js → chunk-BNSSPYCA.js} +4 -4
- package/dist/chunk-BNSSPYCA.js.map +1 -0
- package/dist/{chunk-QEKN5R7E.js → chunk-CEEXZF5E.js} +4 -4
- package/dist/chunk-CEEXZF5E.js.map +1 -0
- package/dist/{chunk-UGSLGUS6.js → chunk-CWZKWW74.js} +2 -2
- package/dist/{chunk-FQW72QFK.js → chunk-DE25YP6N.js} +62 -54
- package/dist/chunk-DE25YP6N.js.map +1 -0
- package/dist/{chunk-6KGTHJKC.js → chunk-DXJ2WS3N.js} +9 -5
- package/dist/chunk-DXJ2WS3N.js.map +1 -0
- package/dist/{chunk-ZIUUV35J.js → chunk-DYN7AU7R.js} +9 -9
- package/dist/{chunk-JXQUFKID.js → chunk-GRVTVLIZ.js} +7 -2
- package/dist/chunk-GRVTVLIZ.js.map +1 -0
- package/dist/{chunk-KC7SKI3U.js → chunk-HLTP624H.js} +8 -5
- package/dist/{chunk-KC7SKI3U.js.map → chunk-HLTP624H.js.map} +1 -1
- package/dist/{chunk-7PRZYHDP.js → chunk-I6JE3OLT.js} +8 -8
- package/dist/{chunk-ABJLRDCO.js → chunk-IY76MO6R.js} +2 -2
- package/dist/{chunk-MPYYSFPL.js → chunk-J74LNK6P.js} +11 -11
- package/dist/{chunk-YWHRAPDQ.js → chunk-JOK26PI7.js} +51 -18
- package/dist/chunk-JOK26PI7.js.map +1 -0
- package/dist/{chunk-KJNNEDRV.js → chunk-JZXNRDO2.js} +2 -2
- package/dist/{chunk-6XVREXI4.js → chunk-KGSJ7CSA.js} +12 -3
- package/dist/{chunk-6XVREXI4.js.map → chunk-KGSJ7CSA.js.map} +1 -1
- package/dist/{chunk-OOICURFL.js → chunk-KJJ47UIO.js} +48 -2
- package/dist/chunk-KJJ47UIO.js.map +1 -0
- package/dist/{chunk-7C4SQBEE.js → chunk-MRXTMI6O.js} +1 -1
- package/dist/chunk-MRXTMI6O.js.map +1 -0
- package/dist/{chunk-HFOTAPIJ.js → chunk-PY6ID7TL.js} +2 -1
- package/dist/chunk-PY6ID7TL.js.map +1 -0
- package/dist/{chunk-NQIP7VFB.js → chunk-VCTZ25Q5.js} +9 -9
- package/dist/{chunk-YY6SKZDF.js → chunk-W37ETKI6.js} +3 -12
- package/dist/chunk-W37ETKI6.js.map +1 -0
- package/dist/{chunk-QHK7GGV4.js → chunk-ZZ3YDCYZ.js} +3 -3
- package/dist/commonConstants.cjs.map +1 -1
- package/dist/commonConstants.d.cts +6 -5
- package/dist/commonConstants.d.ts +6 -5
- package/dist/commonConstants.js +2 -2
- package/dist/commonSelectors.cjs +8 -18
- package/dist/commonSelectors.cjs.map +1 -1
- package/dist/commonSelectors.js +9 -9
- package/dist/constants.cjs +1 -0
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +2 -2
- package/dist/deploymentsSlice/constants.js +2 -2
- package/dist/deploymentsSlice/index.cjs.map +1 -1
- package/dist/deploymentsSlice/index.d.cts +2 -2
- package/dist/deploymentsSlice/index.d.ts +2 -2
- package/dist/deploymentsSlice/index.js +3 -3
- package/dist/deploymentsSlice/mocks.cjs.map +1 -1
- package/dist/deploymentsSlice/mocks.js +3 -3
- package/dist/deploymentsSlice/selectors.cjs +6 -0
- package/dist/deploymentsSlice/selectors.cjs.map +1 -1
- package/dist/deploymentsSlice/selectors.d.cts +22 -1
- package/dist/deploymentsSlice/selectors.d.ts +22 -1
- package/dist/deploymentsSlice/selectors.js +5 -3
- package/dist/deploymentsSlice/thunks.cjs +84 -23
- package/dist/deploymentsSlice/thunks.cjs.map +1 -1
- package/dist/deploymentsSlice/thunks.d.cts +14 -1
- package/dist/deploymentsSlice/thunks.d.ts +14 -1
- package/dist/deploymentsSlice/thunks.js +27 -25
- package/dist/devicesSlice/constants.js +2 -2
- package/dist/devicesSlice/index.js +3 -3
- package/dist/devicesSlice/mocks.js +3 -3
- package/dist/devicesSlice/selectors.cjs.map +1 -1
- package/dist/devicesSlice/selectors.js +3 -3
- package/dist/devicesSlice/thunks.cjs +82 -23
- package/dist/devicesSlice/thunks.cjs.map +1 -1
- package/dist/devicesSlice/thunks.js +25 -25
- package/dist/liststatehook.cjs +6 -3
- package/dist/liststatehook.cjs.map +1 -1
- package/dist/liststatehook.d.cts +4 -2
- package/dist/liststatehook.d.ts +4 -2
- package/dist/liststatehook.js +3 -3
- package/dist/locationutils.cjs +6 -3
- package/dist/locationutils.cjs.map +1 -1
- package/dist/locationutils.d.cts +3 -1
- package/dist/locationutils.d.ts +3 -1
- package/dist/locationutils.js +3 -3
- package/dist/monitorSlice/index.js +3 -3
- package/dist/monitorSlice/mocks.js +3 -3
- package/dist/monitorSlice/thunks.cjs +62 -12
- package/dist/monitorSlice/thunks.cjs.map +1 -1
- package/dist/monitorSlice/thunks.js +21 -21
- package/dist/onboardingSlice/thunks.cjs +82 -23
- package/dist/onboardingSlice/thunks.cjs.map +1 -1
- package/dist/onboardingSlice/thunks.js +25 -25
- package/dist/organizationSlice/constants.js +2 -2
- package/dist/organizationSlice/index.js +3 -3
- package/dist/organizationSlice/mocks.js +3 -3
- package/dist/organizationSlice/selectors.cjs +0 -20
- package/dist/organizationSlice/selectors.cjs.map +1 -1
- package/dist/organizationSlice/selectors.d.cts +1 -155
- package/dist/organizationSlice/selectors.d.ts +1 -155
- package/dist/organizationSlice/selectors.js +3 -5
- package/dist/organizationSlice/thunks.cjs +105 -46
- 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 +25 -25
- package/dist/releasesSlice/index.cjs +46 -0
- package/dist/releasesSlice/index.cjs.map +1 -1
- package/dist/releasesSlice/index.d.cts +51 -3
- package/dist/releasesSlice/index.d.ts +51 -3
- package/dist/releasesSlice/index.js +3 -3
- package/dist/releasesSlice/mocks.cjs +46 -0
- package/dist/releasesSlice/mocks.cjs.map +1 -1
- package/dist/releasesSlice/mocks.d.cts +13 -0
- package/dist/releasesSlice/mocks.d.ts +13 -0
- package/dist/releasesSlice/mocks.js +3 -3
- package/dist/releasesSlice/selectors.cjs +13 -0
- package/dist/releasesSlice/selectors.cjs.map +1 -1
- package/dist/releasesSlice/selectors.d.cts +186 -1
- package/dist/releasesSlice/selectors.d.ts +186 -1
- package/dist/releasesSlice/selectors.js +12 -4
- package/dist/releasesSlice/thunks.cjs +105 -20
- package/dist/releasesSlice/thunks.cjs.map +1 -1
- package/dist/releasesSlice/thunks.d.cts +68 -3
- package/dist/releasesSlice/thunks.d.ts +68 -3
- package/dist/releasesSlice/thunks.js +26 -22
- package/dist/selectors.cjs +19 -20
- package/dist/selectors.cjs.map +1 -1
- package/dist/selectors.d.cts +5 -3
- package/dist/selectors.d.ts +5 -3
- package/dist/selectors.js +19 -11
- package/dist/sockethook.cjs.map +1 -1
- package/dist/sockethook.js +2 -2
- package/dist/store.cjs +53 -3
- package/dist/store.cjs.map +1 -1
- package/dist/store.d.cts +11 -110
- package/dist/store.d.ts +11 -110
- package/dist/store.js +12 -12
- package/dist/storehooks.cjs +149 -60
- package/dist/storehooks.cjs.map +1 -1
- package/dist/storehooks.js +27 -28
- package/dist/storehooks.js.map +1 -1
- package/dist/thunks.cjs +152 -56
- package/dist/thunks.cjs.map +1 -1
- package/dist/thunks.d.cts +3 -3
- package/dist/thunks.d.ts +3 -3
- package/dist/thunks.js +33 -27
- package/dist/useDeploymentDevice.cjs +82 -23
- package/dist/useDeploymentDevice.cjs.map +1 -1
- package/dist/useDeploymentDevice.js +25 -25
- package/dist/usersSlice/constants.js +2 -2
- package/dist/usersSlice/index.js +3 -3
- package/dist/usersSlice/mocks.js +3 -3
- package/dist/usersSlice/selectors.cjs.map +1 -1
- package/dist/usersSlice/selectors.js +4 -4
- package/dist/usersSlice/thunks.cjs +84 -25
- package/dist/usersSlice/thunks.cjs.map +1 -1
- package/dist/usersSlice/thunks.d.cts +18 -10
- package/dist/usersSlice/thunks.d.ts +18 -10
- package/dist/usersSlice/thunks.js +27 -27
- package/dist/utils.cjs +1 -1
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.js +3 -3
- package/package.json +5 -5
- package/dist/chunk-6KGTHJKC.js.map +0 -1
- package/dist/chunk-7C4SQBEE.js.map +0 -1
- package/dist/chunk-FQW72QFK.js.map +0 -1
- package/dist/chunk-HFOTAPIJ.js.map +0 -1
- package/dist/chunk-JXQUFKID.js.map +0 -1
- package/dist/chunk-OOICURFL.js.map +0 -1
- package/dist/chunk-QEKN5R7E.js.map +0 -1
- package/dist/chunk-RS37Y2PQ.js.map +0 -1
- package/dist/chunk-VUFRP6P3.js.map +0 -1
- package/dist/chunk-YWHRAPDQ.js.map +0 -1
- package/dist/chunk-YY6SKZDF.js.map +0 -1
- /package/dist/{chunk-MZNANSS2.js.map → chunk-4DOSYAJY.js.map} +0 -0
- /package/dist/{chunk-4E7ZSEFL.js.map → chunk-4UJXT6RF.js.map} +0 -0
- /package/dist/{chunk-ZJW3QIPM.js.map → chunk-66NK2ZV2.js.map} +0 -0
- /package/dist/{chunk-PGFVHKP5.js.map → chunk-AVCIWAZB.js.map} +0 -0
- /package/dist/{chunk-UGSLGUS6.js.map → chunk-CWZKWW74.js.map} +0 -0
- /package/dist/{chunk-ZIUUV35J.js.map → chunk-DYN7AU7R.js.map} +0 -0
- /package/dist/{chunk-7PRZYHDP.js.map → chunk-I6JE3OLT.js.map} +0 -0
- /package/dist/{chunk-ABJLRDCO.js.map → chunk-IY76MO6R.js.map} +0 -0
- /package/dist/{chunk-MPYYSFPL.js.map → chunk-J74LNK6P.js.map} +0 -0
- /package/dist/{chunk-KJNNEDRV.js.map → chunk-JZXNRDO2.js.map} +0 -0
- /package/dist/{chunk-NQIP7VFB.js.map → chunk-VCTZ25Q5.js.map} +0 -0
- /package/dist/{chunk-QHK7GGV4.js.map → chunk-ZZ3YDCYZ.js.map} +0 -0
package/dist/storehooks.js
CHANGED
|
@@ -15,68 +15,68 @@ import {
|
|
|
15
15
|
getUserSettings as getUserSettings2,
|
|
16
16
|
saveGlobalSettings,
|
|
17
17
|
saveUserSettings
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-DE25YP6N.js";
|
|
19
19
|
import {
|
|
20
20
|
getReleases
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import "./chunk-
|
|
21
|
+
} from "./chunk-JOK26PI7.js";
|
|
22
|
+
import "./chunk-DYN7AU7R.js";
|
|
23
|
+
import "./chunk-J74LNK6P.js";
|
|
24
|
+
import "./chunk-ZZ3YDCYZ.js";
|
|
25
|
+
import "./chunk-BNSSPYCA.js";
|
|
26
26
|
import {
|
|
27
27
|
actions_default
|
|
28
|
-
} from "./chunk-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-
|
|
28
|
+
} from "./chunk-I6JE3OLT.js";
|
|
29
|
+
import "./chunk-KJJ47UIO.js";
|
|
30
|
+
import "./chunk-CWZKWW74.js";
|
|
31
|
+
import "./chunk-4DOSYAJY.js";
|
|
32
|
+
import "./chunk-AVCIWAZB.js";
|
|
33
33
|
import "./chunk-VANBSJS5.js";
|
|
34
|
-
import "./chunk-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
34
|
+
import "./chunk-5HYHE4HO.js";
|
|
35
|
+
import "./chunk-DXJ2WS3N.js";
|
|
36
|
+
import "./chunk-IY76MO6R.js";
|
|
37
37
|
import {
|
|
38
38
|
getSessionInfo
|
|
39
|
-
} from "./chunk-
|
|
40
|
-
import "./chunk-
|
|
39
|
+
} from "./chunk-66NK2ZV2.js";
|
|
40
|
+
import "./chunk-HLTP624H.js";
|
|
41
41
|
import "./chunk-NMAXZ3ZY.js";
|
|
42
42
|
import {
|
|
43
43
|
getIsEnterprise,
|
|
44
44
|
getOnboardingState,
|
|
45
45
|
getUserCapabilities
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import "./chunk-
|
|
46
|
+
} from "./chunk-VCTZ25Q5.js";
|
|
47
|
+
import "./chunk-KGSJ7CSA.js";
|
|
48
48
|
import {
|
|
49
49
|
getGlobalSettings,
|
|
50
50
|
getOfflineThresholdSettings,
|
|
51
51
|
getUserSettings
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-4UJXT6RF.js";
|
|
53
53
|
import {
|
|
54
54
|
getIsServiceProvider
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-W37ETKI6.js";
|
|
56
56
|
import "./chunk-YO22XLHI.js";
|
|
57
57
|
import "./chunk-JIS4PA3R.js";
|
|
58
58
|
import {
|
|
59
59
|
getDevicesByStatus,
|
|
60
60
|
getSortedFilteringAttributes
|
|
61
|
-
} from "./chunk-
|
|
62
|
-
import "./chunk-
|
|
61
|
+
} from "./chunk-JZXNRDO2.js";
|
|
62
|
+
import "./chunk-GRVTVLIZ.js";
|
|
63
63
|
import {
|
|
64
64
|
getFeatures
|
|
65
65
|
} from "./chunk-BYUPW7RA.js";
|
|
66
66
|
import {
|
|
67
67
|
getComparisonCompatibleVersion,
|
|
68
68
|
stringToBoolean
|
|
69
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-CEEXZF5E.js";
|
|
70
70
|
import {
|
|
71
71
|
DEPLOYMENT_STATES,
|
|
72
72
|
DEVICE_STATES,
|
|
73
73
|
TIMEOUTS,
|
|
74
74
|
timeUnits
|
|
75
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-MRXTMI6O.js";
|
|
76
76
|
import "./chunk-2DYA3X77.js";
|
|
77
77
|
import "./chunk-FAJ3I2UQ.js";
|
|
78
78
|
import "./chunk-ZKAH3APE.js";
|
|
79
|
-
import "./chunk-
|
|
79
|
+
import "./chunk-PY6ID7TL.js";
|
|
80
80
|
|
|
81
81
|
// src/storehooks.ts
|
|
82
82
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
@@ -89,6 +89,7 @@ var cookies = new Cookies();
|
|
|
89
89
|
dayjs.extend(durationDayJs);
|
|
90
90
|
var { setDeviceListState, setFirstLoginAfterSignup, setTooltipsState, setShowStartupNotification } = actions_default;
|
|
91
91
|
var featureFlags = [
|
|
92
|
+
"hasAiEnabled",
|
|
92
93
|
"hasAuditlogs",
|
|
93
94
|
"hasMultitenancy",
|
|
94
95
|
"hasDeltaProgress",
|
|
@@ -113,7 +114,6 @@ var parseEnvironmentInfo = () => (dispatch, getState) => {
|
|
|
113
114
|
demoArtifactPort: port,
|
|
114
115
|
disableOnboarding,
|
|
115
116
|
integrationVersion,
|
|
116
|
-
isDemoMode,
|
|
117
117
|
menderVersion,
|
|
118
118
|
menderArtifactVersion,
|
|
119
119
|
metaMenderVersion
|
|
@@ -122,8 +122,7 @@ var parseEnvironmentInfo = () => (dispatch, getState) => {
|
|
|
122
122
|
environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || state.app[flag] }), {});
|
|
123
123
|
environmentFeatures = {
|
|
124
124
|
...featureFlags.reduce((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),
|
|
125
|
-
isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes("hosted.mender.io")
|
|
126
|
-
isDemoMode: stringToBoolean(isDemoMode || features.isDemoMode)
|
|
125
|
+
isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes("hosted.mender.io")
|
|
127
126
|
};
|
|
128
127
|
onboardingComplete = !stringToBoolean(environmentFeatures.isHosted) || stringToBoolean(disableOnboarding) || onboardingComplete;
|
|
129
128
|
versionInfo = {
|
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 dayjs from 'dayjs';\nimport durationDayJs from 'dayjs/plugin/duration.js';\nimport Cookies from 'universal-cookie';\n\nimport storeActions from './actions';\nimport { getSessionInfo } from './auth';\nimport { DEPLOYMENT_STATES, DEVICE_STATES, TIMEOUTS, timeUnits } from './constants';\nimport {\n getDevicesByStatus as getDevicesByStatusSelector,\n getFeatures,\n getGlobalSettings as getGlobalSettingsSelector,\n getIsEnterprise,\n getIsServiceProvider,\n getOfflineThresholdSettings,\n getOnboardingState as getOnboardingStateSelector,\n getSortedFilteringAttributes,\n getUserCapabilities,\n getUserSettings as getUserSettingsSelector\n} from './selectors';\nimport {\n getDeploymentsByStatus,\n getDeviceAttributes,\n getDeviceById,\n 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 = ['commit', 'feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', 'sentry', 'stripeAPIKey', 'trackerCode'];\n\nexport const parseEnvironmentInfo = () => (dispatch, getState) => {\n const state = getState();\n let onboardingComplete = state.onboarding.complete || !!JSON.parse(window.localStorage.getItem('onboardingComplete') ?? 'false');\n let demoArtifactPort = 85;\n let environmentData = {};\n let environmentFeatures = {};\n let versionInfo = {};\n if (mender_environment) {\n const {\n features = {},\n demoArtifactPort: port,\n disableOnboarding,\n integrationVersion,\n isDemoMode,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion\n } = mender_environment;\n demoArtifactPort = port || demoArtifactPort;\n environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || state.app[flag] }), {});\n environmentFeatures = {\n ...featureFlags.reduce((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),\n isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes('hosted.mender.io'),\n isDemoMode: stringToBoolean(isDemoMode || features.isDemoMode)\n };\n onboardingComplete = !stringToBoolean(environmentFeatures.isHosted) || stringToBoolean(disableOnboarding) || onboardingComplete;\n versionInfo = {\n docs: isNaN(integrationVersion.charAt(0)) ? '' : integrationVersion.split('.').slice(0, 2).join('.'),\n remainder: {\n Integration: getComparisonCompatibleVersion(integrationVersion),\n 'Mender-Client': getComparisonCompatibleVersion(menderVersion),\n 'Mender-Artifact': menderArtifactVersion,\n 'Meta-Mender': metaMenderVersion\n }\n };\n }\n return Promise.all([\n dispatch(storeActions.successfullyLoggedIn(getSessionInfo())),\n dispatch(storeActions.setOnboardingComplete(onboardingComplete)),\n dispatch(storeActions.setDemoArtifactPort(demoArtifactPort)),\n dispatch(storeActions.setFeatures(environmentFeatures)),\n dispatch(storeActions.setVersionInformation({ ...versionInfo.remainder, docsVersion: versionInfo.docs })),\n dispatch(storeActions.setEnvironmentData(environmentData)),\n dispatch(getLatestReleaseInfo())\n ]);\n};\n\nconst maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tasks }) => {\n if (!onboardingState.showTips || onboardingState.complete) {\n return tasks;\n }\n // try to retrieve full device details for onboarding devices to ensure ips etc. are available\n // we only load the first few/ 20 devices, as it is possible the onboarding is left dangling\n // and a lot of devices are present and we don't want to flood the backend for this\n return devicesByStatus[DEVICE_STATES.accepted].deviceIds.reduce((accu, id) => {\n accu.push(dispatch(getDeviceById(id)));\n return accu;\n }, tasks);\n};\n\nexport const useAppInit = userId => {\n const dispatch = useDispatch();\n const [coreInitDone, setCoreInitDone] = useState(false);\n const isEnterprise = useSelector(getIsEnterprise);\n const { hasMultitenancy, isHosted } = useSelector(getFeatures);\n const devicesByStatus = useSelector(getDevicesByStatusSelector);\n const onboardingState = useSelector(getOnboardingStateSelector);\n const { columnSelection = [], trackingConsentGiven: hasTrackingEnabled, tooltips = {} } = useSelector(getUserSettingsSelector);\n const { canManageUsers } = useSelector(getUserCapabilities);\n const { interval, intervalUnit } = useSelector(getOfflineThresholdSettings);\n const { id_attribute } = useSelector(getGlobalSettingsSelector);\n const { identityAttributes } = useSelector(getSortedFilteringAttributes);\n const isServiceProvider = useSelector(getIsServiceProvider);\n const coreInitRunning = useRef(false);\n const fullInitRunning = useRef(false);\n\n const retrieveCoreData = useCallback(() => {\n const tasks = [\n dispatch(parseEnvironmentInfo()),\n dispatch(getUserSettings()),\n dispatch(getGlobalSettings()),\n dispatch(setFirstLoginAfterSignup(stringToBoolean(cookies.get('firstLoginAfterSignup'))))\n ];\n const multitenancy = hasMultitenancy || isHosted || isEnterprise;\n if (multitenancy) {\n tasks.push(dispatch(getUserOrganization()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isHosted, isEnterprise]);\n\n const retrieveAppData = useCallback(() => {\n if (isServiceProvider) {\n return Promise.resolve(dispatch(getRoles()));\n }\n 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 const settings = {};\n if (cookies.get('_ga') && typeof hasTrackingEnabled === 'undefined') {\n settings.trackingConsentGiven = true;\n }\n let tasks = [\n dispatch(setDeviceListState({ selectedAttributes: columnSelection.map(column => ({ attribute: column.key, scope: column.scope })) })),\n dispatch(setTooltipsState(tooltips)), // tooltips read state is primarily trusted from the redux store, except on app init - here user settings are the reference\n dispatch(saveUserSettings(settings))\n ];\n // checks if user id is set and if cookie for helptips exists for that user\n tasks = maybeAddOnboardingTasks({ devicesByStatus, dispatch, tasks, onboardingState });\n\n if (canManageUsers && intervalUnit && intervalUnit !== timeUnits.days) {\n const duration = dayjs.duration(interval, intervalUnit);\n const days = duration.asDays();\n if (days < 1) {\n tasks.push(Promise.resolve(setTimeout(() => dispatch(setShowStartupNotification(true)), TIMEOUTS.fiveSeconds)));\n } else {\n const roundedDays = Math.max(1, Math.round(days));\n tasks.push(dispatch(saveGlobalSettings({ offlineThreshold: { interval: roundedDays, intervalUnit: timeUnits.days } })));\n }\n }\n\n // the following is used as a migration and initialization of the stored identity attribute\n // changing the default device attribute to the first non-deviceId attribute, unless a stored\n // id attribute setting exists\n const identityOptions = identityAttributes.filter(attribute => !['id', 'Device ID', 'status'].includes(attribute));\n if (!id_attribute && identityOptions.length) {\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute: identityOptions[0], scope: 'identity' } })));\n } else if (typeof id_attribute === 'string') {\n let attribute = id_attribute;\n if (attribute === 'Device ID') {\n attribute = 'id';\n }\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute, scope: 'identity' } })));\n }\n return Promise.all(tasks);\n }, [\n columnSelection,\n dispatch,\n identityAttributes,\n hasTrackingEnabled,\n canManageUsers,\n devicesByStatus,\n id_attribute,\n interval,\n intervalUnit,\n onboardingState,\n tooltips\n ]);\n\n const initializeAppData = useCallback(\n () =>\n retrieveAppData()\n .then(interpretAppData)\n // this is allowed to fail if no user information are available\n .catch(err => console.log(extractErrorMessage(err)))\n .then(() => dispatch(getOnboardingState())),\n [dispatch, retrieveAppData, interpretAppData]\n );\n\n useEffect(() => {\n if (!userId || coreInitRunning.current) {\n return;\n }\n coreInitRunning.current = true;\n retrieveCoreData().then(() => setCoreInitDone(true));\n }, [userId, retrieveCoreData]);\n\n useEffect(() => {\n if (fullInitRunning.current || !coreInitDone) {\n return;\n }\n fullInitRunning.current = true;\n initializeAppData();\n }, [initializeAppData, coreInitDone]);\n\n return { coreInitDone };\n};\n"],"mappings":"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","names":["getUserSettings","getGlobalSettings","getDevicesByStatus","getOnboardingState"]}
|
|
1
|
+
{"version":3,"sources":["../src/storehooks.ts"],"sourcesContent":["// Copyright 2024 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// @ts-nocheck\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { extractErrorMessage } from '@northern.tech/utils/helpers';\nimport dayjs from 'dayjs';\nimport durationDayJs from 'dayjs/plugin/duration.js';\nimport Cookies from 'universal-cookie';\n\nimport storeActions from './actions';\nimport { getSessionInfo } from './auth';\nimport { DEPLOYMENT_STATES, DEVICE_STATES, TIMEOUTS, timeUnits } from './constants';\nimport {\n getDevicesByStatus as getDevicesByStatusSelector,\n getFeatures,\n getGlobalSettings as getGlobalSettingsSelector,\n getIsEnterprise,\n getIsServiceProvider,\n getOfflineThresholdSettings,\n getOnboardingState as getOnboardingStateSelector,\n getSortedFilteringAttributes,\n getUserCapabilities,\n getUserSettings as getUserSettingsSelector\n} from './selectors';\nimport {\n getDeploymentsByStatus,\n getDeviceAttributes,\n getDeviceById,\n 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 'hasAiEnabled',\n 'hasAuditlogs',\n 'hasMultitenancy',\n 'hasDeltaProgress',\n 'hasDeviceConfig',\n 'hasDeviceConnect',\n 'hasFeedbackEnabled',\n 'hasReporting',\n 'hasMonitor',\n 'isEnterprise'\n];\n\nconst environmentDatas = ['commit', 'feedbackProbability', 'hostAddress', 'hostedAnnouncement', 'recaptchaSiteKey', 'sentry', 'stripeAPIKey', 'trackerCode'];\n\nexport const parseEnvironmentInfo = () => (dispatch, getState) => {\n const state = getState();\n let onboardingComplete = state.onboarding.complete || !!JSON.parse(window.localStorage.getItem('onboardingComplete') ?? 'false');\n let demoArtifactPort = 85;\n let environmentData = {};\n let environmentFeatures = {};\n let versionInfo = {};\n if (mender_environment) {\n const {\n features = {},\n demoArtifactPort: port,\n disableOnboarding,\n integrationVersion,\n menderVersion,\n menderArtifactVersion,\n metaMenderVersion\n } = mender_environment;\n demoArtifactPort = port || demoArtifactPort;\n environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || state.app[flag] }), {});\n environmentFeatures = {\n ...featureFlags.reduce((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),\n isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes('hosted.mender.io')\n };\n onboardingComplete = !stringToBoolean(environmentFeatures.isHosted) || stringToBoolean(disableOnboarding) || onboardingComplete;\n versionInfo = {\n docs: isNaN(integrationVersion.charAt(0)) ? '' : integrationVersion.split('.').slice(0, 2).join('.'),\n remainder: {\n Integration: getComparisonCompatibleVersion(integrationVersion),\n 'Mender-Client': getComparisonCompatibleVersion(menderVersion),\n 'Mender-Artifact': menderArtifactVersion,\n 'Meta-Mender': metaMenderVersion\n }\n };\n }\n return Promise.all([\n dispatch(storeActions.successfullyLoggedIn(getSessionInfo())),\n dispatch(storeActions.setOnboardingComplete(onboardingComplete)),\n dispatch(storeActions.setDemoArtifactPort(demoArtifactPort)),\n dispatch(storeActions.setFeatures(environmentFeatures)),\n dispatch(storeActions.setVersionInformation({ ...versionInfo.remainder, docsVersion: versionInfo.docs })),\n dispatch(storeActions.setEnvironmentData(environmentData)),\n dispatch(getLatestReleaseInfo())\n ]);\n};\n\nconst maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tasks }) => {\n if (!onboardingState.showTips || onboardingState.complete) {\n return tasks;\n }\n // try to retrieve full device details for onboarding devices to ensure ips etc. are available\n // we only load the first few/ 20 devices, as it is possible the onboarding is left dangling\n // and a lot of devices are present and we don't want to flood the backend for this\n return devicesByStatus[DEVICE_STATES.accepted].deviceIds.reduce((accu, id) => {\n accu.push(dispatch(getDeviceById(id)));\n return accu;\n }, tasks);\n};\n\nexport const useAppInit = userId => {\n const dispatch = useDispatch();\n const [coreInitDone, setCoreInitDone] = useState(false);\n const isEnterprise = useSelector(getIsEnterprise);\n const { hasMultitenancy, isHosted } = useSelector(getFeatures);\n const devicesByStatus = useSelector(getDevicesByStatusSelector);\n const onboardingState = useSelector(getOnboardingStateSelector);\n const { columnSelection = [], trackingConsentGiven: hasTrackingEnabled, tooltips = {} } = useSelector(getUserSettingsSelector);\n const { canManageUsers } = useSelector(getUserCapabilities);\n const { interval, intervalUnit } = useSelector(getOfflineThresholdSettings);\n const { id_attribute } = useSelector(getGlobalSettingsSelector);\n const { identityAttributes } = useSelector(getSortedFilteringAttributes);\n const isServiceProvider = useSelector(getIsServiceProvider);\n const coreInitRunning = useRef(false);\n const fullInitRunning = useRef(false);\n\n const retrieveCoreData = useCallback(() => {\n const tasks = [\n dispatch(parseEnvironmentInfo()),\n dispatch(getUserSettings()),\n dispatch(getGlobalSettings()),\n dispatch(setFirstLoginAfterSignup(stringToBoolean(cookies.get('firstLoginAfterSignup'))))\n ];\n const multitenancy = hasMultitenancy || isHosted || isEnterprise;\n if (multitenancy) {\n tasks.push(dispatch(getUserOrganization()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isHosted, isEnterprise]);\n\n const retrieveAppData = useCallback(() => {\n if (isServiceProvider) {\n return Promise.resolve(dispatch(getRoles()));\n }\n 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 const settings = {};\n if (cookies.get('_ga') && typeof hasTrackingEnabled === 'undefined') {\n settings.trackingConsentGiven = true;\n }\n let tasks = [\n dispatch(setDeviceListState({ selectedAttributes: columnSelection.map(column => ({ attribute: column.key, scope: column.scope })) })),\n dispatch(setTooltipsState(tooltips)), // tooltips read state is primarily trusted from the redux store, except on app init - here user settings are the reference\n dispatch(saveUserSettings(settings))\n ];\n // checks if user id is set and if cookie for helptips exists for that user\n tasks = maybeAddOnboardingTasks({ devicesByStatus, dispatch, tasks, onboardingState });\n\n if (canManageUsers && intervalUnit && intervalUnit !== timeUnits.days) {\n const duration = dayjs.duration(interval, intervalUnit);\n const days = duration.asDays();\n if (days < 1) {\n tasks.push(Promise.resolve(setTimeout(() => dispatch(setShowStartupNotification(true)), TIMEOUTS.fiveSeconds)));\n } else {\n const roundedDays = Math.max(1, Math.round(days));\n tasks.push(dispatch(saveGlobalSettings({ offlineThreshold: { interval: roundedDays, intervalUnit: timeUnits.days } })));\n }\n }\n\n // the following is used as a migration and initialization of the stored identity attribute\n // changing the default device attribute to the first non-deviceId attribute, unless a stored\n // id attribute setting exists\n const identityOptions = identityAttributes.filter(attribute => !['id', 'Device ID', 'status'].includes(attribute));\n if (!id_attribute && identityOptions.length) {\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute: identityOptions[0], scope: 'identity' } })));\n } else if (typeof id_attribute === 'string') {\n let attribute = id_attribute;\n if (attribute === 'Device ID') {\n attribute = 'id';\n }\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute, scope: 'identity' } })));\n }\n return Promise.all(tasks);\n }, [\n columnSelection,\n dispatch,\n identityAttributes,\n hasTrackingEnabled,\n canManageUsers,\n devicesByStatus,\n id_attribute,\n interval,\n intervalUnit,\n onboardingState,\n tooltips\n ]);\n\n const initializeAppData = useCallback(\n () =>\n retrieveAppData()\n .then(interpretAppData)\n // this is allowed to fail if no user information are available\n .catch(err => console.log(extractErrorMessage(err)))\n .then(() => dispatch(getOnboardingState())),\n [dispatch, retrieveAppData, interpretAppData]\n );\n\n useEffect(() => {\n if (!userId || coreInitRunning.current) {\n return;\n }\n coreInitRunning.current = true;\n retrieveCoreData().then(() => setCoreInitDone(true));\n }, [userId, retrieveCoreData]);\n\n useEffect(() => {\n if (fullInitRunning.current || !coreInitDone) {\n return;\n }\n fullInitRunning.current = true;\n initializeAppData();\n }, [initializeAppData, coreInitDone]);\n\n return { coreInitDone };\n};\n"],"mappings":"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","names":["getUserSettings","getGlobalSettings","getDevicesByStatus","getOnboardingState"]}
|
package/dist/thunks.cjs
CHANGED
|
@@ -68,6 +68,7 @@ __export(thunks_exports, {
|
|
|
68
68
|
editTenantDeviceLimit: () => editTenantDeviceLimit,
|
|
69
69
|
editUser: () => editUser,
|
|
70
70
|
enableUser2fa: () => enableUser2fa,
|
|
71
|
+
generateDeploymentLogAnalysis: () => generateDeploymentLogAnalysis,
|
|
71
72
|
generateToken: () => generateToken,
|
|
72
73
|
get2FAQRCode: () => get2FAQRCode,
|
|
73
74
|
getAllDeviceCounts: () => getAllDeviceCounts,
|
|
@@ -81,6 +82,8 @@ __export(thunks_exports, {
|
|
|
81
82
|
getBillingPreview: () => getBillingPreview,
|
|
82
83
|
getCurrentCard: () => getCurrentCard,
|
|
83
84
|
getCurrentSubscription: () => getCurrentSubscription,
|
|
85
|
+
getDeltaGenerationJobDetails: () => getDeltaGenerationJobDetails,
|
|
86
|
+
getDeltaGenerationJobs: () => getDeltaGenerationJobs,
|
|
84
87
|
getDeploymentDevices: () => getDeploymentDevices,
|
|
85
88
|
getDeploymentsByStatus: () => getDeploymentsByStatus2,
|
|
86
89
|
getDeploymentsConfig: () => getDeploymentsConfig,
|
|
@@ -183,7 +186,7 @@ __export(thunks_exports, {
|
|
|
183
186
|
startCardUpdate: () => startCardUpdate,
|
|
184
187
|
startUpgrade: () => startUpgrade,
|
|
185
188
|
storeSsoConfig: () => storeSsoConfig,
|
|
186
|
-
|
|
189
|
+
submitUserFeedback: () => submitUserFeedback,
|
|
187
190
|
switchUserOrganization: () => switchUserOrganization,
|
|
188
191
|
tenantDataDivergedMessage: () => tenantDataDivergedMessage,
|
|
189
192
|
triggerDeviceUpdate: () => triggerDeviceUpdate,
|
|
@@ -225,6 +228,7 @@ var emptyChartSelection = { software: "", group: "", chartType: chartTypes.bar.k
|
|
|
225
228
|
var defaultReportType = "distribution";
|
|
226
229
|
var defaultReports = [{ ...emptyChartSelection, group: null, attribute: "artifact_name", type: defaultReportType }];
|
|
227
230
|
var locations = {
|
|
231
|
+
cn: { key: "cn", title: "China", location: "cn.hosted.mender.io" },
|
|
228
232
|
eu: { key: "eu", title: "EU", location: "eu.hosted.mender.io" },
|
|
229
233
|
us: { key: "us", title: "US", location: "hosted.mender.io" }
|
|
230
234
|
};
|
|
@@ -947,6 +951,7 @@ var initialState = {
|
|
|
947
951
|
},
|
|
948
952
|
// return boolean rather than organization details
|
|
949
953
|
features: {
|
|
954
|
+
hasAiEnabled: false,
|
|
950
955
|
hasAuditlogs: false,
|
|
951
956
|
hasDeltaProgress: false,
|
|
952
957
|
hasMultitenancy: false,
|
|
@@ -955,7 +960,6 @@ var initialState = {
|
|
|
955
960
|
hasFeedbackEnabled: false,
|
|
956
961
|
hasMonitor: false,
|
|
957
962
|
hasReporting: false,
|
|
958
|
-
isDemoMode: false,
|
|
959
963
|
isHosted: true,
|
|
960
964
|
isEnterprise: false
|
|
961
965
|
},
|
|
@@ -1006,8 +1010,12 @@ var appSlice = (0, import_toolkit.createSlice)({
|
|
|
1006
1010
|
};
|
|
1007
1011
|
},
|
|
1008
1012
|
setSnackbar: (state, { payload }) => {
|
|
1009
|
-
if (typeof payload === "string") {
|
|
1010
|
-
state.snackbar
|
|
1013
|
+
if (typeof payload === "string" || payload instanceof String) {
|
|
1014
|
+
state.snackbar = {
|
|
1015
|
+
...initialState.snackbar,
|
|
1016
|
+
message: payload,
|
|
1017
|
+
open: !!payload
|
|
1018
|
+
};
|
|
1011
1019
|
return;
|
|
1012
1020
|
}
|
|
1013
1021
|
const { message, autoHideDuration, action, preventClickToCopy = false } = payload;
|
|
@@ -1107,7 +1115,7 @@ var cleanUp = () => {
|
|
|
1107
1115
|
|
|
1108
1116
|
// src/api/general-api.ts
|
|
1109
1117
|
var unauthorizedRedirect = (error) => {
|
|
1110
|
-
if (!(0, import_axios.isCancel)(error) && error.response?.status === 401 && getToken()) {
|
|
1118
|
+
if (!(0, import_axios.isCancel)(error) && error.response?.status === 401 && getToken() && !window.location.pathname.endsWith("/subscription")) {
|
|
1111
1119
|
cleanUp();
|
|
1112
1120
|
window.location.replace("/ui/");
|
|
1113
1121
|
}
|
|
@@ -1167,6 +1175,10 @@ var getDeploymentsById = (state) => state.deployments.byId;
|
|
|
1167
1175
|
var getDeploymentsByStatus = (state) => state.deployments.byStatus;
|
|
1168
1176
|
var getSelectedDeploymentDeviceIds = (state) => state.deployments.selectedDeviceIds;
|
|
1169
1177
|
var getDeploymentsSelectionState = (state) => state.deployments.selectionState;
|
|
1178
|
+
var getDeploymentById = (0, import_toolkit3.createSelector)(
|
|
1179
|
+
[getDeploymentsById, (_, deploymentId) => deploymentId],
|
|
1180
|
+
(deploymentsById, deploymentId = "") => deploymentsById[deploymentId]
|
|
1181
|
+
);
|
|
1170
1182
|
var getMappedDeploymentSelection = (0, import_toolkit3.createSelector)(
|
|
1171
1183
|
[getDeploymentsSelectionState, (_, deploymentsState) => deploymentsState, getDeploymentsById],
|
|
1172
1184
|
(selectionState, deploymentsState, deploymentsById) => {
|
|
@@ -1316,8 +1328,6 @@ var getOnboarding = (state) => state.onboarding;
|
|
|
1316
1328
|
|
|
1317
1329
|
// src/organizationSlice/selectors.ts
|
|
1318
1330
|
var import_toolkit5 = require("@reduxjs/toolkit");
|
|
1319
|
-
var import_dayjs = __toESM(require("dayjs"), 1);
|
|
1320
|
-
var import_relativeTime = __toESM(require("dayjs/plugin/relativeTime.js"), 1);
|
|
1321
1331
|
var getOrganization = (state) => state.organization.organization;
|
|
1322
1332
|
var getExternalIntegrations = (state) => state.organization.externalDeviceIntegrations;
|
|
1323
1333
|
var getAuditlogState = (state) => state.organization.auditlog.selectionState;
|
|
@@ -1346,12 +1356,6 @@ var getAuditLogEntry = (0, import_toolkit5.createSelector)([getAuditLog, getAudi
|
|
|
1346
1356
|
const [eventAction, eventTime] = atob(selectedId).split("|");
|
|
1347
1357
|
return events.find((item) => item.action === eventAction && item.time === eventTime);
|
|
1348
1358
|
});
|
|
1349
|
-
import_dayjs.default.extend(import_relativeTime.default);
|
|
1350
|
-
var newPricingIntroduction = (0, import_dayjs.default)("2025-06-03T00:00");
|
|
1351
|
-
var getHasCurrentPricing = (0, import_toolkit5.createSelector)(
|
|
1352
|
-
[getOrganization],
|
|
1353
|
-
({ id }) => !!id && (0, import_dayjs.default)(parseInt(id.substring(0, 8), 16) * 1e3) >= newPricingIntroduction
|
|
1354
|
-
);
|
|
1355
1359
|
|
|
1356
1360
|
// src/releasesSlice/selectors.ts
|
|
1357
1361
|
var import_toolkit6 = require("@reduxjs/toolkit");
|
|
@@ -1502,6 +1506,10 @@ var getHasReleases = (0, import_toolkit6.createSelector)(
|
|
|
1502
1506
|
);
|
|
1503
1507
|
var getSelectedRelease = (0, import_toolkit6.createSelector)([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id || ""] ?? {});
|
|
1504
1508
|
var getSelectedReleases = (0, import_toolkit6.createSelector)([getReleaseListState, getReleasesList], ({ selection }, releases) => selection.map((index) => releases[index]));
|
|
1509
|
+
var getDeltaJobsById = (state) => state.releases.deltaJobs;
|
|
1510
|
+
var getDeltaJobById = (0, import_toolkit6.createSelector)([getDeltaJobsById, (_, jobId) => jobId], (byId, jobId) => byId[jobId]);
|
|
1511
|
+
var getSelectedJobId = (state) => state.releases.selectedJob;
|
|
1512
|
+
var getSelectedJob = (0, import_toolkit6.createSelector)([getDeltaJobsById, getSelectedJobId], (byId, jobId) => byId[jobId || ""]);
|
|
1505
1513
|
|
|
1506
1514
|
// src/usersSlice/selectors.ts
|
|
1507
1515
|
var import_toolkit7 = require("@reduxjs/toolkit");
|
|
@@ -2298,6 +2306,23 @@ var initialState7 = {
|
|
|
2298
2306
|
}
|
|
2299
2307
|
*/
|
|
2300
2308
|
},
|
|
2309
|
+
deltaJobs: {
|
|
2310
|
+
/*
|
|
2311
|
+
[jobId]: {
|
|
2312
|
+
id: '',
|
|
2313
|
+
...
|
|
2314
|
+
}
|
|
2315
|
+
*/
|
|
2316
|
+
},
|
|
2317
|
+
deltaJobsList: {
|
|
2318
|
+
...import_constants5.DEVICE_LIST_DEFAULTS,
|
|
2319
|
+
jobIds: [],
|
|
2320
|
+
total: 0,
|
|
2321
|
+
sort: {
|
|
2322
|
+
direction: import_constants5.SORTING_OPTIONS.desc,
|
|
2323
|
+
key: "started"
|
|
2324
|
+
}
|
|
2325
|
+
},
|
|
2301
2326
|
releasesList: {
|
|
2302
2327
|
...import_constants5.DEVICE_LIST_DEFAULTS,
|
|
2303
2328
|
searchedIds: [],
|
|
@@ -2316,6 +2341,7 @@ var initialState7 = {
|
|
|
2316
2341
|
},
|
|
2317
2342
|
tags: [],
|
|
2318
2343
|
updateTypes: [],
|
|
2344
|
+
selectedJob: null,
|
|
2319
2345
|
/*
|
|
2320
2346
|
* Return single release with corresponding Artifacts
|
|
2321
2347
|
*/
|
|
@@ -2348,6 +2374,34 @@ var releaseSlice = (0, import_toolkit14.createSlice)({
|
|
|
2348
2374
|
},
|
|
2349
2375
|
setReleaseListState: (state, action) => {
|
|
2350
2376
|
state.releasesList = action.payload;
|
|
2377
|
+
},
|
|
2378
|
+
receivedDeltaJobs: (state, action) => {
|
|
2379
|
+
const { jobs, total } = action.payload;
|
|
2380
|
+
state.deltaJobs = jobs.reduce(
|
|
2381
|
+
(accu, job) => {
|
|
2382
|
+
accu[job.id] = {
|
|
2383
|
+
...accu[job.id],
|
|
2384
|
+
...job
|
|
2385
|
+
};
|
|
2386
|
+
return accu;
|
|
2387
|
+
},
|
|
2388
|
+
{ ...state.deltaJobs }
|
|
2389
|
+
);
|
|
2390
|
+
state.deltaJobsList.jobIds = jobs.map((job) => job.id);
|
|
2391
|
+
state.deltaJobsList.total = total;
|
|
2392
|
+
},
|
|
2393
|
+
receivedDeltaJobDetails: (state, action) => {
|
|
2394
|
+
const job = action.payload;
|
|
2395
|
+
state.deltaJobs[job.id] = {
|
|
2396
|
+
...state.deltaJobs[job.id],
|
|
2397
|
+
...job
|
|
2398
|
+
};
|
|
2399
|
+
},
|
|
2400
|
+
setDeltaJobsListState: (state, action) => {
|
|
2401
|
+
state.deltaJobsList = { ...state.deltaJobsList, ...action.payload };
|
|
2402
|
+
},
|
|
2403
|
+
setSelectedJob: (state, action) => {
|
|
2404
|
+
state.selectedJob = action.payload;
|
|
2351
2405
|
}
|
|
2352
2406
|
}
|
|
2353
2407
|
});
|
|
@@ -3049,6 +3103,15 @@ var saveDeltaDeploymentsConfig = createAppAsyncThunk(
|
|
|
3049
3103
|
});
|
|
3050
3104
|
}
|
|
3051
3105
|
);
|
|
3106
|
+
var generateDeploymentLogAnalysis = createAppAsyncThunk(
|
|
3107
|
+
`${sliceName2}/generateDeploymentLogAnalysis`,
|
|
3108
|
+
({ deploymentId, deviceId }, { dispatch, rejectWithValue }) => general_api_default.get(`${import_constants5.apiRoot}/v1alpha1/deployments/deployments/${deploymentId}/devices/${deviceId}/log/explain`).then(({ data: result }) => Promise.resolve(result)).catch((err) => {
|
|
3109
|
+
if (err.response.status === 429) {
|
|
3110
|
+
return rejectWithValue(err.response);
|
|
3111
|
+
}
|
|
3112
|
+
commonErrorHandler(err, "There was an error analysing the deployment log:", dispatch);
|
|
3113
|
+
})
|
|
3114
|
+
);
|
|
3052
3115
|
|
|
3053
3116
|
// src/devicesSlice/thunks.tsx
|
|
3054
3117
|
var import_react_router_dom = require("react-router-dom");
|
|
@@ -3128,15 +3191,15 @@ var removeDevicesFromGroup = createAppAsyncThunk(
|
|
|
3128
3191
|
)
|
|
3129
3192
|
);
|
|
3130
3193
|
var getGroupNotification = (newGroup, selectedGroup) => {
|
|
3131
|
-
const
|
|
3194
|
+
const successMessage = "The group was updated successfully";
|
|
3132
3195
|
if (newGroup === selectedGroup) {
|
|
3133
|
-
return { message:
|
|
3196
|
+
return { message: successMessage, autoHideDuration: TIMEOUTS.fiveSeconds };
|
|
3134
3197
|
}
|
|
3135
3198
|
return {
|
|
3136
3199
|
action: "",
|
|
3137
3200
|
autoHideDuration: TIMEOUTS.fiveSeconds,
|
|
3138
3201
|
message: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
|
|
3139
|
-
|
|
3202
|
+
successMessage,
|
|
3140
3203
|
" - ",
|
|
3141
3204
|
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_router_dom.Link, { to: `/devices?inventory=group:eq:${newGroup}`, children: "click here" }),
|
|
3142
3205
|
" to see it."
|
|
@@ -3668,9 +3731,10 @@ var getDeviceConnect = createAppAsyncThunk(
|
|
|
3668
3731
|
var updateTypeMap = { deploymentUpdate: "check-update", inventoryUpdate: "send-inventory" };
|
|
3669
3732
|
var triggerDeviceUpdate = createAppAsyncThunk(
|
|
3670
3733
|
`${sliceName3}/triggerDeviceUpdate`,
|
|
3671
|
-
({ id, type }, { dispatch }) => general_api_default.post(`${import_constants5.deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).then(
|
|
3672
|
-
(
|
|
3673
|
-
|
|
3734
|
+
({ id, type }, { dispatch }) => general_api_default.post(`${import_constants5.deviceConnect}/devices/${id}/${updateTypeMap[type] ?? updateTypeMap.deploymentUpdate}`).catch((err) => commonErrorHandler(err, `The request couldn\u2019t be sent.`, dispatch)).then(() => {
|
|
3735
|
+
dispatch(setSnackbar3("Request has been sent."));
|
|
3736
|
+
return new Promise((resolve) => setTimeout(() => resolve(dispatch(getDeviceById2(id))), TIMEOUTS.threeSeconds));
|
|
3737
|
+
})
|
|
3674
3738
|
);
|
|
3675
3739
|
var getSessionDetails = createAppAsyncThunk(
|
|
3676
3740
|
`${sliceName3}/getSessionDetails`,
|
|
@@ -4106,13 +4170,13 @@ var advanceOnboarding = createAppAsyncThunk(`${sliceName5}/advanceOnboarding`, (
|
|
|
4106
4170
|
// src/organizationSlice/thunks.ts
|
|
4107
4171
|
var import_MenderTypes2 = require("@northern.tech/types/MenderTypes");
|
|
4108
4172
|
var import_helpers11 = require("@northern.tech/utils/helpers");
|
|
4109
|
-
var
|
|
4173
|
+
var import_dayjs = __toESM(require("dayjs"), 1);
|
|
4110
4174
|
var import_utc = __toESM(require("dayjs/plugin/utc.js"), 1);
|
|
4111
4175
|
var import_jwt_decode = require("jwt-decode");
|
|
4112
4176
|
var import_md5 = __toESM(require("md5"), 1);
|
|
4113
4177
|
var import_universal_cookie4 = __toESM(require("universal-cookie"), 1);
|
|
4114
4178
|
var cookies4 = new import_universal_cookie4.default();
|
|
4115
|
-
|
|
4179
|
+
import_dayjs.default.extend(import_utc.default);
|
|
4116
4180
|
var { setAnnouncement, setSnackbar: setSnackbar4 } = actions_default;
|
|
4117
4181
|
var { page: defaultPage4, perPage: defaultPerPage4 } = import_constants5.DEVICE_LIST_DEFAULTS;
|
|
4118
4182
|
var cancelRequest = createAppAsyncThunk(`${sliceName6}/cancelRequest`, (reason, { dispatch, getState }) => {
|
|
@@ -4139,10 +4203,12 @@ var createOrganizationTrial = createAppAsyncThunk(`${sliceName6}/createOrganizat
|
|
|
4139
4203
|
const targetLocation = getTargetLocation(key);
|
|
4140
4204
|
const target = `${targetLocation}${import_constants5.tenantadmApiUrlv2}/tenants/trial`;
|
|
4141
4205
|
return general_api_default.postUnauthorized(target, data).catch((err) => {
|
|
4142
|
-
if (err.response
|
|
4206
|
+
if (err.response?.status >= 400 && err.response?.status < 500) {
|
|
4143
4207
|
dispatch(setSnackbar4({ message: err.response.data.error, autoHideDuration: TIMEOUTS.fiveSeconds }));
|
|
4144
|
-
|
|
4208
|
+
} else {
|
|
4209
|
+
dispatch(setSnackbar4({ message: "There was an error creating your account", autoHideDuration: TIMEOUTS.fiveSeconds }));
|
|
4145
4210
|
}
|
|
4211
|
+
return Promise.reject(err);
|
|
4146
4212
|
}).then(({ headers }) => {
|
|
4147
4213
|
cookies4.remove("oauth");
|
|
4148
4214
|
cookies4.remove("externalID");
|
|
@@ -4324,32 +4390,29 @@ var getUserOrganization = createAppAsyncThunk(
|
|
|
4324
4390
|
);
|
|
4325
4391
|
var getUserBilling = createAppAsyncThunk(
|
|
4326
4392
|
`${sliceName6}/getUserBilling`,
|
|
4327
|
-
(_, { dispatch }) => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/profile`).then((res) => dispatch(actions6.setBillingProfile(res.data)))
|
|
4393
|
+
(_, { dispatch }) => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/profile`).catch((err) => commonErrorHandler(err, "There was an error getting your billing profile:", dispatch, commonErrorFallback)).then((res) => dispatch(actions6.setBillingProfile(res.data)))
|
|
4328
4394
|
);
|
|
4329
|
-
var getUserSubscription = createAppAsyncThunk(`${sliceName6}/getUserSubscription`, (_, { dispatch }) => {
|
|
4330
|
-
const
|
|
4331
|
-
|
|
4395
|
+
var getUserSubscription = createAppAsyncThunk(`${sliceName6}/getUserSubscription`, async (_, { dispatch }) => {
|
|
4396
|
+
const currentSubscription = await dispatch(getCurrentSubscription()).unwrap();
|
|
4397
|
+
const currentPreview = await dispatch(getBillingPreview({ preview_mode: import_MenderTypes2.PreviewRequest.preview_mode.NEXT })).unwrap();
|
|
4398
|
+
return dispatch(actions6.setSubscription({ ...currentPreview, ...currentSubscription }));
|
|
4332
4399
|
});
|
|
4333
4400
|
var getBillingPreview = createAppAsyncThunk(
|
|
4334
4401
|
`${sliceName6}/getBillingPreview`,
|
|
4335
|
-
(order) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription/invoices/preview`, order).then(
|
|
4336
|
-
({ data }) => order.preview_mode === "recurring" ? { ...parseSubscriptionPreview(data.lines), total: data.total } : data
|
|
4337
|
-
)
|
|
4402
|
+
(order, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription/invoices/preview`, order).catch((err) => commonErrorHandler(err, "There was an error getting your billing information:", dispatch, commonErrorFallback)).then(({ data }) => order.preview_mode === "recurring" ? { ...parseSubscriptionPreview(data.lines), total: data.total } : data)
|
|
4338
4403
|
);
|
|
4339
4404
|
var getCurrentSubscription = createAppAsyncThunk(
|
|
4340
4405
|
`${sliceName6}/getCurrentSubscription`,
|
|
4341
|
-
() => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`).then((res) => res.data)
|
|
4406
|
+
(_, { dispatch }) => general_api_default.get(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`).then((res) => res.data).catch((err) => {
|
|
4407
|
+
if (err.response && err.response.status === 404) {
|
|
4408
|
+
throw new Error("Request failed with status code 404");
|
|
4409
|
+
}
|
|
4410
|
+
return commonErrorHandler(err, "There was an error retrieving your current subscription", dispatch, commonErrorFallback);
|
|
4411
|
+
})
|
|
4342
4412
|
);
|
|
4343
|
-
var successMessage = (planId) => `Thank you! You have successfully subscribed to the ${PLANS[planId].name} plan. You can view and edit your billing details on the Organization and billing page.`;
|
|
4344
4413
|
var requestPlanUpgrade = createAppAsyncThunk(
|
|
4345
4414
|
`${sliceName6}/requestPlanUpgrade`,
|
|
4346
|
-
(order, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`, order).catch((err) => commonErrorHandler(err, "There was an error sending your request", dispatch, commonErrorFallback)).then(
|
|
4347
|
-
() => Promise.all([
|
|
4348
|
-
dispatch(setSnackbar4(successMessage(order.plan))),
|
|
4349
|
-
setTimeout(() => dispatch(getDeviceLimit2()), TIMEOUTS.threeSeconds),
|
|
4350
|
-
dispatch(getUserOrganization())
|
|
4351
|
-
])
|
|
4352
|
-
)
|
|
4415
|
+
(order, { dispatch }) => general_api_default.post(`${import_constants5.tenantadmApiUrlv2}/billing/subscription`, order).catch((err) => commonErrorHandler(err, "There was an error sending your request", dispatch, commonErrorFallback)).then(() => Promise.all([setTimeout(() => dispatch(getDeviceLimit2()), TIMEOUTS.threeSeconds), dispatch(getUserOrganization())]))
|
|
4353
4416
|
);
|
|
4354
4417
|
var sendSupportMessage = createAppAsyncThunk(
|
|
4355
4418
|
`${sliceName6}/sendSupportMessage`,
|
|
@@ -4466,7 +4529,7 @@ var commonFields = {
|
|
|
4466
4529
|
issues: { parse: void 0, select: defaultSelector, target: "selectedIssues" },
|
|
4467
4530
|
open: { parse: Boolean, select: defaultSelector, target: "open" }
|
|
4468
4531
|
};
|
|
4469
|
-
var formatReleases = ({ pageState: { searchTerm, selectedTags = [], tab, type } }) => Object.entries({ name: searchTerm, tab, type }).reduce(
|
|
4532
|
+
var formatReleases = ({ pageState: { id, searchTerm, selectedTags = [], tab, type } }) => Object.entries({ name: searchTerm, tab, type, id }).reduce(
|
|
4470
4533
|
(accu, [key, value]) => value ? [...accu, `${key}=${value}`] : accu,
|
|
4471
4534
|
selectedTags.map((tag) => `tag=${tag}`)
|
|
4472
4535
|
).join("&");
|
|
@@ -4562,6 +4625,18 @@ var getArtifactUrl = createAppAsyncThunk(
|
|
|
4562
4625
|
return dispatch(actions7.receiveRelease(release));
|
|
4563
4626
|
})
|
|
4564
4627
|
);
|
|
4628
|
+
var pollLocation = async (location, attempt = 1, maxAttempts = 5, delay = TIMEOUTS.oneSecond) => {
|
|
4629
|
+
try {
|
|
4630
|
+
await general_api_default.get(location);
|
|
4631
|
+
return Promise.resolve();
|
|
4632
|
+
} catch {
|
|
4633
|
+
if (attempt >= maxAttempts) {
|
|
4634
|
+
throw new Error(`Couldn't get ${location} after ${maxAttempts} attempts`);
|
|
4635
|
+
}
|
|
4636
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
4637
|
+
return pollLocation(location, attempt + 1, maxAttempts, delay);
|
|
4638
|
+
}
|
|
4639
|
+
};
|
|
4565
4640
|
var createArtifact = createAppAsyncThunk(`${sliceName7}/createArtifact`, ({ file, meta }, { dispatch }) => {
|
|
4566
4641
|
const formData = Object.entries(meta).reduce((accu, [key, value]) => {
|
|
4567
4642
|
if (Array.isArray(value)) {
|
|
@@ -4586,13 +4661,18 @@ var createArtifact = createAppAsyncThunk(`${sliceName7}/createArtifact`, ({ file
|
|
|
4586
4661
|
(e) => dispatch(uploadProgress3({ id: uploadId, progress: progress(e) })),
|
|
4587
4662
|
cancelSource.signal
|
|
4588
4663
|
)
|
|
4589
|
-
]).then(() => {
|
|
4590
|
-
|
|
4591
|
-
|
|
4592
|
-
|
|
4593
|
-
|
|
4594
|
-
|
|
4595
|
-
|
|
4664
|
+
]).then((tasks) => {
|
|
4665
|
+
const generateResponse = tasks[tasks.length - 1];
|
|
4666
|
+
const generateLocation = generateResponse.headers[import_constants5.headerNames.location];
|
|
4667
|
+
const location = generateLocation.replace("/generate", "");
|
|
4668
|
+
return pollLocation(location);
|
|
4669
|
+
}).then(
|
|
4670
|
+
() => Promise.all([
|
|
4671
|
+
dispatch(getReleases()),
|
|
4672
|
+
dispatch(selectRelease(meta.name)),
|
|
4673
|
+
dispatch(setSnackbar5({ message: "Upload successful", autoHideDuration: TIMEOUTS.fiveSeconds }))
|
|
4674
|
+
])
|
|
4675
|
+
).catch((err) => {
|
|
4596
4676
|
if ((0, import_axios3.isCancel)(err)) {
|
|
4597
4677
|
return dispatch(setSnackbar5({ message: "The artifact generation has been cancelled", autoHideDuration: TIMEOUTS.fiveSeconds }));
|
|
4598
4678
|
}
|
|
@@ -4815,6 +4895,20 @@ var getUpdateTypes = createAppAsyncThunk(
|
|
|
4815
4895
|
`${sliceName7}/getReleaseTypes`,
|
|
4816
4896
|
(_, { dispatch }) => general_api_default.get(`${import_constants5.deploymentsApiUrlV2}/releases/all/types`).catch((err) => commonErrorHandler(err, `Existing update types couldn't be retrieved.`, dispatch)).then(({ data: types }) => Promise.resolve(dispatch(actions7.receiveReleaseTypes(types))))
|
|
4817
4897
|
);
|
|
4898
|
+
var getDeltaGenerationJobs = createAppAsyncThunk(`${sliceName7}/getDeltaGenerationJobs`, (options = {}, { dispatch }) => {
|
|
4899
|
+
const { page = defaultPage5, perPage = defaultPerPage5, sort = {} } = options;
|
|
4900
|
+
const { key: sortKey, direction: sortDirection } = sort;
|
|
4901
|
+
const sortParam = sortKey && sortDirection ? `&sort=${sortKey}:${sortDirection}` : "";
|
|
4902
|
+
return general_api_default.get(`${import_constants5.deploymentsApiUrlV2}/deployments/releases/delta/jobs?page=${page}&per_page=${perPage}${sortParam}`).then(({ data, headers }) => {
|
|
4903
|
+
const total = Number(headers[import_constants5.headerNames.total]) || data.length;
|
|
4904
|
+
const result = { jobs: data, total };
|
|
4905
|
+
return Promise.all([dispatch(actions7.receivedDeltaJobs(result)), result]);
|
|
4906
|
+
}).catch((err) => commonErrorHandler(err, "There was an error retrieving delta generation jobs:", dispatch));
|
|
4907
|
+
});
|
|
4908
|
+
var getDeltaGenerationJobDetails = createAppAsyncThunk(
|
|
4909
|
+
`${sliceName7}/getDeltaGenerationJobDetails`,
|
|
4910
|
+
(jobId, { dispatch }) => general_api_default.get(`${import_constants5.deploymentsApiUrlV2}/deployments/releases/delta/jobs/${jobId}`).then(({ data }) => dispatch(actions7.receivedDeltaJobDetails(data))).catch((err) => commonErrorHandler(err, "There was an error retrieving delta generation job details:", dispatch))
|
|
4911
|
+
);
|
|
4818
4912
|
|
|
4819
4913
|
// src/usersSlice/thunks.ts
|
|
4820
4914
|
var import_helpers14 = require("@northern.tech/utils/helpers");
|
|
@@ -5469,15 +5563,14 @@ var setAllTooltipsReadState = createAppAsyncThunk(
|
|
|
5469
5563
|
return Promise.resolve(dispatch(actions8.setTooltipsState(updatedTips))).then(() => dispatch(saveUserSettings()));
|
|
5470
5564
|
}
|
|
5471
5565
|
);
|
|
5472
|
-
var
|
|
5566
|
+
var submitUserFeedback = createAppAsyncThunk(
|
|
5473
5567
|
`${sliceName8}/submitFeedback`,
|
|
5474
|
-
({
|
|
5475
|
-
|
|
5476
|
-
|
|
5477
|
-
|
|
5478
|
-
|
|
5479
|
-
|
|
5480
|
-
setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
|
|
5568
|
+
({ formId, feedback }, { dispatch }) => general_api_default.post(`${import_constants5.useradmApiUrlv2}/support/feedback/${formId}`, feedback).then(() => {
|
|
5569
|
+
if (formId === "product") {
|
|
5570
|
+
const today = /* @__PURE__ */ new Date();
|
|
5571
|
+
dispatch(saveUserSettings({ feedbackCollectedAt: today.toISOString().split("T")[0] }));
|
|
5572
|
+
setTimeout(() => dispatch(actions8.setShowFeedbackDialog(false)), TIMEOUTS.threeSeconds);
|
|
5573
|
+
}
|
|
5481
5574
|
})
|
|
5482
5575
|
);
|
|
5483
5576
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -5520,6 +5613,7 @@ var submitFeedback = createAppAsyncThunk(
|
|
|
5520
5613
|
editTenantDeviceLimit,
|
|
5521
5614
|
editUser,
|
|
5522
5615
|
enableUser2fa,
|
|
5616
|
+
generateDeploymentLogAnalysis,
|
|
5523
5617
|
generateToken,
|
|
5524
5618
|
get2FAQRCode,
|
|
5525
5619
|
getAllDeviceCounts,
|
|
@@ -5533,6 +5627,8 @@ var submitFeedback = createAppAsyncThunk(
|
|
|
5533
5627
|
getBillingPreview,
|
|
5534
5628
|
getCurrentCard,
|
|
5535
5629
|
getCurrentSubscription,
|
|
5630
|
+
getDeltaGenerationJobDetails,
|
|
5631
|
+
getDeltaGenerationJobs,
|
|
5536
5632
|
getDeploymentDevices,
|
|
5537
5633
|
getDeploymentsByStatus,
|
|
5538
5634
|
getDeploymentsConfig,
|
|
@@ -5635,7 +5731,7 @@ var submitFeedback = createAppAsyncThunk(
|
|
|
5635
5731
|
startCardUpdate,
|
|
5636
5732
|
startUpgrade,
|
|
5637
5733
|
storeSsoConfig,
|
|
5638
|
-
|
|
5734
|
+
submitUserFeedback,
|
|
5639
5735
|
switchUserOrganization,
|
|
5640
5736
|
tenantDataDivergedMessage,
|
|
5641
5737
|
triggerDeviceUpdate,
|