@northern.tech/store 0.36.2 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions.d.cts +2 -1
- package/dist/actions.d.ts +2 -1
- package/dist/api/general-api.cjs +3 -3
- package/dist/api/general-api.cjs.map +1 -1
- package/dist/api/users-api.cjs +2 -2
- package/dist/api/users-api.cjs.map +1 -1
- package/dist/api/users-api.js.map +1 -1
- package/dist/appSlice/index.cjs +1 -0
- package/dist/appSlice/index.cjs.map +1 -1
- package/dist/appSlice/index.js +1 -0
- package/dist/appSlice/index.js.map +1 -1
- package/dist/appSlice/selectors.cjs +2 -4
- package/dist/appSlice/selectors.cjs.map +1 -1
- package/dist/appSlice/selectors.d.cts +4 -51
- package/dist/appSlice/selectors.d.ts +4 -51
- package/dist/appSlice/selectors.js +3 -4
- package/dist/appSlice/selectors.js.map +1 -1
- package/dist/appSlice/thunks.d.cts +1 -1
- package/dist/appSlice/thunks.d.ts +1 -1
- package/dist/auth.cjs +2 -2
- package/dist/auth.cjs.map +1 -1
- package/dist/auth.js.map +1 -1
- package/dist/commonSelectors.cjs +2 -2
- package/dist/commonSelectors.cjs.map +1 -1
- package/dist/commonSelectors.d.cts +10 -2
- package/dist/commonSelectors.d.ts +10 -2
- package/dist/commonSelectors.js.map +1 -1
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/deploymentsSlice/index.cjs.map +1 -1
- package/dist/deploymentsSlice/index.js.map +1 -1
- package/dist/deploymentsSlice/selectors.cjs.map +1 -1
- package/dist/deploymentsSlice/selectors.d.cts +2 -2
- package/dist/deploymentsSlice/selectors.d.ts +2 -2
- package/dist/deploymentsSlice/selectors.js.map +1 -1
- package/dist/deploymentsSlice/thunks.cjs +1 -0
- package/dist/deploymentsSlice/thunks.d.cts +9 -4
- package/dist/deploymentsSlice/thunks.d.ts +9 -4
- package/dist/deploymentsSlice/thunks.js +2 -2
- package/dist/devicesSlice/index.cjs +4 -0
- package/dist/devicesSlice/index.cjs.map +1 -1
- package/dist/devicesSlice/index.d.cts +1 -1
- package/dist/devicesSlice/index.d.ts +1 -1
- package/dist/devicesSlice/index.js +4 -0
- package/dist/devicesSlice/index.js.map +1 -1
- package/dist/devicesSlice/mocks.d.cts +1 -0
- package/dist/devicesSlice/mocks.d.ts +1 -0
- package/dist/devicesSlice/selectors.cjs +2 -0
- package/dist/devicesSlice/selectors.cjs.map +1 -1
- package/dist/devicesSlice/selectors.d.cts +4 -3
- package/dist/devicesSlice/selectors.d.ts +4 -3
- package/dist/devicesSlice/selectors.js +2 -1
- package/dist/devicesSlice/selectors.js.map +1 -1
- package/dist/devicesSlice/thunks.cjs +2 -0
- package/dist/devicesSlice/thunks.d.cts +68 -3
- package/dist/devicesSlice/thunks.d.ts +68 -3
- package/dist/devicesSlice/thunks.js +2 -2
- package/dist/{index-CPdMUfRr.d.ts → index-BqJuhvO_.d.ts} +4 -1
- package/dist/{index-DbfM03Gj.d.cts → index-Doc_1P_Y.d.cts} +4 -1
- package/dist/liststatehook.cjs.map +1 -1
- package/dist/liststatehook.js.map +1 -1
- package/dist/locationutils.cjs.map +1 -1
- package/dist/locationutils.d.cts +1 -1
- package/dist/locationutils.d.ts +1 -1
- package/dist/locationutils.js.map +1 -1
- package/dist/monitorSlice/index.cjs.map +1 -1
- package/dist/monitorSlice/index.js.map +1 -1
- package/dist/monitorSlice/mocks.cjs.map +1 -1
- package/dist/monitorSlice/mocks.js.map +1 -1
- package/dist/monitorSlice/selectors.d.cts +1 -1
- package/dist/monitorSlice/selectors.d.ts +1 -1
- package/dist/monitorSlice/thunks.cjs.map +1 -1
- package/dist/monitorSlice/thunks.d.cts +2 -2
- package/dist/monitorSlice/thunks.d.ts +2 -2
- package/dist/monitorSlice/thunks.js.map +1 -1
- package/dist/onboardingSlice/index.cjs.map +1 -1
- package/dist/onboardingSlice/mocks.cjs.map +1 -1
- package/dist/onboardingSlice/selectors.d.cts +1 -1
- package/dist/onboardingSlice/selectors.d.ts +1 -1
- package/dist/onboardingSlice/thunks.d.cts +1 -1
- package/dist/onboardingSlice/thunks.d.ts +1 -1
- package/dist/organizationSlice/index.cjs.map +1 -1
- package/dist/organizationSlice/selectors.cjs.map +1 -1
- package/dist/organizationSlice/selectors.d.cts +2 -2
- package/dist/organizationSlice/selectors.d.ts +2 -2
- package/dist/organizationSlice/selectors.js.map +1 -1
- package/dist/organizationSlice/thunks.d.cts +4 -41
- package/dist/organizationSlice/thunks.d.ts +4 -41
- package/dist/releasesSlice/index.cjs.map +1 -1
- package/dist/releasesSlice/selectors.cjs.map +1 -1
- package/dist/releasesSlice/selectors.d.cts +2 -2
- package/dist/releasesSlice/selectors.d.ts +2 -2
- package/dist/releasesSlice/selectors.js.map +1 -1
- package/dist/releasesSlice/thunks.cjs +39 -16
- package/dist/releasesSlice/thunks.cjs.map +1 -1
- package/dist/releasesSlice/thunks.d.cts +3 -9
- package/dist/releasesSlice/thunks.d.ts +3 -9
- package/dist/releasesSlice/thunks.js +38 -15
- package/dist/releasesSlice/thunks.js.map +1 -1
- package/dist/selectors.cjs +1 -1
- package/dist/selectors.d.cts +3 -3
- package/dist/selectors.d.ts +3 -3
- package/dist/selectors.js +3 -3
- package/dist/sockethook.cjs +3 -3
- package/dist/sockethook.cjs.map +1 -1
- package/dist/sockethook.js.map +1 -1
- package/dist/{store-Co2ptTSm.d.ts → store-BzrMxxAO.d.ts} +112 -4
- package/dist/{store-Dd0Y2JCN.d.cts → store-xV2zaXAc.d.cts} +112 -4
- package/dist/store.cjs.map +1 -1
- package/dist/store.d.cts +1 -2
- package/dist/store.d.ts +1 -2
- package/dist/store.js.map +1 -1
- package/dist/storehooks.cjs +5 -4
- package/dist/storehooks.cjs.map +1 -1
- package/dist/storehooks.d.cts +1 -1
- package/dist/storehooks.d.ts +1 -1
- package/dist/storehooks.js +1 -0
- package/dist/storehooks.js.map +1 -1
- package/dist/thunks.cjs +85 -25
- 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 +76 -19
- package/dist/thunks.js.map +1 -1
- package/dist/useDeploymentDevice.cjs +2 -2
- package/dist/useDeploymentDevice.cjs.map +1 -1
- package/dist/useDeploymentDevice.js.map +1 -1
- package/dist/usersSlice/index.cjs.map +1 -1
- package/dist/usersSlice/selectors.cjs.map +1 -1
- package/dist/usersSlice/selectors.d.cts +2 -2
- package/dist/usersSlice/selectors.d.ts +2 -2
- package/dist/usersSlice/selectors.js.map +1 -1
- package/dist/usersSlice/thunks.d.cts +1 -1
- package/dist/usersSlice/thunks.d.ts +1 -1
- package/dist/utils.cjs +2 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +2 -2
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +3 -2
- package/dist/utils.js.map +1 -1
- package/package.json +4 -4
- package/dist/utils-C_9XEfi_.d.ts +0 -104
- package/dist/utils-DbXmZmGq.d.cts +0 -104
- /package/dist/{chunk-D6vf50IK.cjs → rolldown-runtime-D6vf50IK.cjs} +0 -0
package/dist/storehooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storehooks.js","names":["storeActions","getOnboardingStateSelector","getDevicesByStatusSelector","getUserSettingsSelector","getGlobalSettingsSelector","getUserSettings","getGlobalSettings","getDevicesByStatus","getOnboardingState"],"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.\nimport { useCallback, useEffect, useRef, useState } from 'react';\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 type { DeviceSliceType } from './devicesSlice';\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 { createAppAsyncThunk, useAppDispatch, useAppSelector } from './store';\nimport type { AppDispatch } from './store';\nimport {\n getAllDeviceCounts,\n getDeploymentsByStatus,\n getDeviceAttributes,\n getDeviceById,\n getDeviceLimits,\n getDevicesByStatus,\n getDynamicGroups,\n getGlobalSettings,\n getGroups,\n getIntegrations,\n getOnboardingState,\n getReleases,\n getRoles,\n getUserOrganization,\n getUserSettings,\n saveGlobalSettings,\n saveUserSettings\n} from './thunks';\nimport type { UserSettings, UserSliceType } from './usersSlice';\nimport { 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 'hasManifestsEnabled',\n 'hasMonitor',\n 'hasMCUEnabled',\n 'isEnterprise'\n] as const;\n\nconst environmentDatas = [\n 'commit',\n 'feedbackProbability',\n 'hostAddress',\n 'hostedAnnouncement',\n 'recaptchaSiteKey',\n 'sentry',\n 'stripeAPIKey',\n 'trackerCode'\n] as const;\n\ntype VersionInfo = {\n docsVersion?: string;\n version?: string;\n};\n\ntype FeatureFlagsState = Record<string, boolean>;\n\nexport const parseEnvironmentInfo = createAppAsyncThunk(`app/parseEnvironmentInfo`, (_, { dispatch, getState }) => {\n const state = getState();\n let onboardingComplete = getOnboardingStateSelector(state).complete || !!JSON.parse(window.localStorage.getItem('onboardingComplete') ?? 'false');\n let demoArtifactPort = 85;\n let environmentData: Record<string, unknown> = {};\n let environmentFeatures: FeatureFlagsState = {};\n let versionInfo: VersionInfo = {};\n const mender_environment = window.mender_environment;\n if (mender_environment) {\n const { features = {}, demoArtifactPort: port, disableOnboarding, version } = mender_environment;\n demoArtifactPort = Number(port) || demoArtifactPort;\n const appState = state.app;\n environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || appState[flag as keyof typeof appState] }), {});\n environmentFeatures = {\n ...featureFlags.reduce<FeatureFlagsState>((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),\n isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes('hosted.mender.io')\n };\n onboardingComplete = !environmentFeatures.isHosted || stringToBoolean(disableOnboarding) || onboardingComplete;\n versionInfo = {\n docsVersion: isNaN(parseInt(version.charAt(0))) ? '' : version.split('.').slice(0, 2).join('.'),\n version\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)),\n dispatch(storeActions.setEnvironmentData(environmentData))\n ]);\n});\n\ntype OnboardingState = {\n complete?: boolean;\n showTips?: boolean | null;\n};\n\ntype MaybeAddOnboardingTasksParams = {\n devicesByStatus: DeviceSliceType['byStatus'];\n dispatch: AppDispatch;\n onboardingState: OnboardingState;\n tasks: Promise<unknown>[];\n};\n\nconst maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tasks }: MaybeAddOnboardingTasksParams): Promise<unknown>[] => {\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<Promise<unknown>[]>((accu, id) => {\n accu.push(dispatch(getDeviceById(id)));\n return accu;\n }, tasks);\n};\n\nexport const useAppInit = (userId: string | undefined): { coreInitDone: boolean } => {\n const dispatch = useAppDispatch();\n const [coreInitDone, setCoreInitDone] = useState(false);\n const isEnterprise = useAppSelector(getIsEnterprise);\n const { hasMultitenancy, isHosted } = useAppSelector(getFeatures);\n const devicesByStatus = useAppSelector(getDevicesByStatusSelector);\n const onboardingState = useAppSelector(getOnboardingStateSelector);\n const { columnSelection = [], trackingConsentGiven: hasTrackingEnabled, tooltips = {} } = useAppSelector(getUserSettingsSelector);\n const { canManageUsers } = useAppSelector(getUserCapabilities);\n const { interval, intervalUnit } = useAppSelector(getOfflineThresholdSettings);\n const { id_attribute } = useAppSelector(getGlobalSettingsSelector);\n const { identityAttributes } = useAppSelector(getSortedFilteringAttributes);\n const isServiceProvider = useAppSelector(getIsServiceProvider);\n const coreInitRunning = useRef(false);\n const fullInitRunning = useRef(false);\n\n const retrieveCoreData = useCallback((): Promise<unknown[]> => {\n const tasks: Promise<unknown>[] = [\n dispatch(parseEnvironmentInfo()).unwrap(),\n dispatch(getUserSettings()).unwrap(),\n dispatch(getGlobalSettings()).unwrap(),\n Promise.resolve(dispatch(setFirstLoginAfterSignup(stringToBoolean(cookies.get('firstLoginAfterSignup')))))\n ];\n const multitenancy = hasMultitenancy || isHosted || isEnterprise;\n if (multitenancy) {\n tasks.push(dispatch(getUserOrganization()).unwrap());\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isHosted, isEnterprise]);\n\n const retrieveAppData = useCallback((): Promise<unknown[] | unknown> => {\n if (isServiceProvider) {\n return Promise.resolve(dispatch(getRoles()));\n }\n const tasks: Promise<unknown>[] = [\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(getAllDeviceCounts()).unwrap()\n ];\n if (hasMultitenancy) {\n tasks.push(dispatch(getDeviceLimits()));\n tasks.push(dispatch(getRoles()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isServiceProvider]);\n\n const interpretAppData = useCallback((): Promise<unknown[]> => {\n const settings: Partial<UserSettings> = {};\n if (cookies.get('_ga') && typeof hasTrackingEnabled === 'undefined') {\n settings.trackingConsentGiven = true;\n }\n let tasks: Promise<unknown>[] = [\n Promise.resolve(dispatch(setDeviceListState({ selectedAttributes: columnSelection.map(column => ({ attribute: column.key, scope: column.scope })) }))),\n Promise.resolve(dispatch(setTooltipsState(tooltips as UserSliceType['tooltips']['byId']))), // tooltips read state is primarily trusted from the redux store, except on app init - here user settings are the reference\n dispatch(saveUserSettings(settings)).unwrap()\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 as keyof typeof timeUnits);\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 // Legacy migration path: id_attribute used to be a plain string\n let attribute: string = id_attribute;\n if (attribute === 'Device ID') {\n attribute = 'id';\n }\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute, scope: 'identity' } })));\n }\n tasks.push(Promise.resolve(dispatch(storeActions.setAppInitDone())));\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 (): Promise<unknown> =>\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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"}
|
|
1
|
+
{"version":3,"file":"storehooks.js","names":["storeActions","getOnboardingStateSelector","getDevicesByStatusSelector","getUserSettingsSelector","getGlobalSettingsSelector","getUserSettings","getGlobalSettings","getDevicesByStatus","getOnboardingState"],"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.\nimport { useCallback, useEffect, useRef, useState } from 'react';\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 type { DeviceSliceType } from './devicesSlice';\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 { createAppAsyncThunk, useAppDispatch, useAppSelector } from './store';\nimport type { AppDispatch } from './store';\nimport {\n getAllDeviceCounts,\n getDeploymentsByStatus,\n getDeviceAttributes,\n getDeviceById,\n getDeviceLimits,\n getDevicesByStatus,\n getDynamicGroups,\n getGlobalSettings,\n getGroups,\n getIntegrations,\n getOnboardingState,\n getReleases,\n getRoles,\n getUserOrganization,\n getUserSettings,\n saveGlobalSettings,\n saveUserSettings\n} from './thunks';\nimport type { UserSettings, UserSliceType } from './usersSlice';\nimport { 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 'hasDeviceFlags',\n 'hasFeedbackEnabled',\n 'hasManifestsEnabled',\n 'hasMonitor',\n 'hasMCUEnabled',\n 'isEnterprise'\n] as const;\n\nconst environmentDatas = [\n 'commit',\n 'feedbackProbability',\n 'hostAddress',\n 'hostedAnnouncement',\n 'recaptchaSiteKey',\n 'sentry',\n 'stripeAPIKey',\n 'trackerCode'\n] as const;\n\ntype VersionInfo = {\n docsVersion?: string;\n version?: string;\n};\n\ntype FeatureFlagsState = Record<string, boolean>;\n\nexport const parseEnvironmentInfo = createAppAsyncThunk(`app/parseEnvironmentInfo`, (_, { dispatch, getState }) => {\n const state = getState();\n let onboardingComplete = getOnboardingStateSelector(state).complete || !!JSON.parse(window.localStorage.getItem('onboardingComplete') ?? 'false');\n let demoArtifactPort = 85;\n let environmentData: Record<string, unknown> = {};\n let environmentFeatures: FeatureFlagsState = {};\n let versionInfo: VersionInfo = {};\n const mender_environment = window.mender_environment;\n if (mender_environment) {\n const { features = {}, demoArtifactPort: port, disableOnboarding, version } = mender_environment;\n demoArtifactPort = Number(port) || demoArtifactPort;\n const appState = state.app;\n environmentData = environmentDatas.reduce((accu, flag) => ({ ...accu, [flag]: mender_environment[flag] || appState[flag as keyof typeof appState] }), {});\n environmentFeatures = {\n ...featureFlags.reduce<FeatureFlagsState>((accu, flag) => ({ ...accu, [flag]: stringToBoolean(features[flag]) }), {}),\n isHosted: stringToBoolean(features.isHosted) || window.location.hostname.includes('hosted.mender.io')\n };\n onboardingComplete = !environmentFeatures.isHosted || stringToBoolean(disableOnboarding) || onboardingComplete;\n versionInfo = {\n docsVersion: isNaN(parseInt(version.charAt(0))) ? '' : version.split('.').slice(0, 2).join('.'),\n version\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)),\n dispatch(storeActions.setEnvironmentData(environmentData))\n ]);\n});\n\ntype OnboardingState = {\n complete?: boolean;\n showTips?: boolean | null;\n};\n\ntype MaybeAddOnboardingTasksParams = {\n devicesByStatus: DeviceSliceType['byStatus'];\n dispatch: AppDispatch;\n onboardingState: OnboardingState;\n tasks: Promise<unknown>[];\n};\n\nconst maybeAddOnboardingTasks = ({ devicesByStatus, dispatch, onboardingState, tasks }: MaybeAddOnboardingTasksParams): Promise<unknown>[] => {\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<Promise<unknown>[]>((accu, id) => {\n accu.push(dispatch(getDeviceById(id)));\n return accu;\n }, tasks);\n};\n\nexport const useAppInit = (userId: string | undefined): { coreInitDone: boolean } => {\n const dispatch = useAppDispatch();\n const [coreInitDone, setCoreInitDone] = useState(false);\n const isEnterprise = useAppSelector(getIsEnterprise);\n const { hasMultitenancy, isHosted } = useAppSelector(getFeatures);\n const devicesByStatus = useAppSelector(getDevicesByStatusSelector);\n const onboardingState = useAppSelector(getOnboardingStateSelector);\n const { columnSelection = [], trackingConsentGiven: hasTrackingEnabled, tooltips = {} } = useAppSelector(getUserSettingsSelector);\n const { canManageUsers } = useAppSelector(getUserCapabilities);\n const { interval, intervalUnit } = useAppSelector(getOfflineThresholdSettings);\n const { id_attribute } = useAppSelector(getGlobalSettingsSelector);\n const { identityAttributes } = useAppSelector(getSortedFilteringAttributes);\n const isServiceProvider = useAppSelector(getIsServiceProvider);\n const coreInitRunning = useRef(false);\n const fullInitRunning = useRef(false);\n\n const retrieveCoreData = useCallback((): Promise<unknown[]> => {\n const tasks: Promise<unknown>[] = [\n dispatch(parseEnvironmentInfo()).unwrap(),\n dispatch(getUserSettings()).unwrap(),\n dispatch(getGlobalSettings()).unwrap(),\n Promise.resolve(dispatch(setFirstLoginAfterSignup(stringToBoolean(cookies.get('firstLoginAfterSignup')))))\n ];\n const multitenancy = hasMultitenancy || isHosted || isEnterprise;\n if (multitenancy) {\n tasks.push(dispatch(getUserOrganization()).unwrap());\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isHosted, isEnterprise]);\n\n const retrieveAppData = useCallback((): Promise<unknown[] | unknown> => {\n if (isServiceProvider) {\n return Promise.resolve(dispatch(getRoles()));\n }\n const tasks: Promise<unknown>[] = [\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(getAllDeviceCounts()).unwrap()\n ];\n if (hasMultitenancy) {\n tasks.push(dispatch(getDeviceLimits()));\n tasks.push(dispatch(getRoles()));\n }\n return Promise.all(tasks);\n }, [dispatch, hasMultitenancy, isServiceProvider]);\n\n const interpretAppData = useCallback((): Promise<unknown[]> => {\n const settings: Partial<UserSettings> = {};\n if (cookies.get('_ga') && typeof hasTrackingEnabled === 'undefined') {\n settings.trackingConsentGiven = true;\n }\n let tasks: Promise<unknown>[] = [\n Promise.resolve(dispatch(setDeviceListState({ selectedAttributes: columnSelection.map(column => ({ attribute: column.key, scope: column.scope })) }))),\n Promise.resolve(dispatch(setTooltipsState(tooltips as UserSliceType['tooltips']['byId']))), // tooltips read state is primarily trusted from the redux store, except on app init - here user settings are the reference\n dispatch(saveUserSettings(settings)).unwrap()\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 as keyof typeof timeUnits);\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 // Legacy migration path: id_attribute used to be a plain string\n let attribute: string = id_attribute;\n if (attribute === 'Device ID') {\n attribute = 'id';\n }\n tasks.push(dispatch(saveGlobalSettings({ id_attribute: { attribute, scope: 'identity' } })));\n }\n tasks.push(Promise.resolve(dispatch(storeActions.setAppInitDone())));\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 (): Promise<unknown> =>\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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"}
|
package/dist/thunks.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const
|
|
2
|
+
const require_rolldown_runtime = require("./rolldown-runtime-D6vf50IK.cjs");
|
|
3
3
|
const require_appSlice_constants = require("./appSlice/constants.cjs");
|
|
4
4
|
const require_onboardingSlice_constants = require("./onboardingSlice/constants.cjs");
|
|
5
5
|
const require_releasesSlice_constants = require("./releasesSlice/constants.cjs");
|
|
@@ -27,22 +27,22 @@ const require_api_users_api = require("./api/users-api.cjs");
|
|
|
27
27
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
28
28
|
let _northern_tech_utils_helpers = require("@northern.tech/utils/helpers");
|
|
29
29
|
let universal_cookie = require("universal-cookie");
|
|
30
|
-
universal_cookie =
|
|
30
|
+
universal_cookie = require_rolldown_runtime.__toESM(universal_cookie, 1);
|
|
31
31
|
let dayjs = require("dayjs");
|
|
32
|
-
dayjs =
|
|
32
|
+
dayjs = require_rolldown_runtime.__toESM(dayjs, 1);
|
|
33
33
|
let react_router = require("react-router");
|
|
34
34
|
let _northern_tech_utils_tracking = require("@northern.tech/utils/tracking");
|
|
35
|
-
_northern_tech_utils_tracking =
|
|
35
|
+
_northern_tech_utils_tracking = require_rolldown_runtime.__toESM(_northern_tech_utils_tracking, 1);
|
|
36
36
|
let validator = require("validator");
|
|
37
|
-
validator =
|
|
37
|
+
validator = require_rolldown_runtime.__toESM(validator, 1);
|
|
38
38
|
let axios = require("axios");
|
|
39
39
|
let pluralize = require("pluralize");
|
|
40
|
-
pluralize =
|
|
40
|
+
pluralize = require_rolldown_runtime.__toESM(pluralize, 1);
|
|
41
41
|
let uuid = require("uuid");
|
|
42
42
|
let dayjs_plugin_utc_js = require("dayjs/plugin/utc.js");
|
|
43
|
-
dayjs_plugin_utc_js =
|
|
43
|
+
dayjs_plugin_utc_js = require_rolldown_runtime.__toESM(dayjs_plugin_utc_js, 1);
|
|
44
44
|
let md5 = require("md5");
|
|
45
|
-
md5 =
|
|
45
|
+
md5 = require_rolldown_runtime.__toESM(md5, 1);
|
|
46
46
|
let _northern_tech_utils_retrytimer = require("@northern.tech/utils/retrytimer");
|
|
47
47
|
let _northern_tech_utils_constants = require("@northern.tech/utils/constants");
|
|
48
48
|
//#region src/appSlice/thunks.ts
|
|
@@ -108,6 +108,13 @@ const { isUUID } = validator.default;
|
|
|
108
108
|
const { receivedDevice, setSnackbar: setSnackbar$3 } = require_actions;
|
|
109
109
|
const { page: defaultPage$2, perPage: defaultPerPage$2 } = _northern_tech_utils_constants.DEVICE_LIST_DEFAULTS;
|
|
110
110
|
const deriveDeploymentGroup = ({ filter, group, groups = [], name }) => group || groups.length === 1 && !isUUID(name) ? groups[0] : filter?.name;
|
|
111
|
+
const decodeDeploymentName = (name) => {
|
|
112
|
+
try {
|
|
113
|
+
return decodeURIComponent(name);
|
|
114
|
+
} catch {
|
|
115
|
+
return name;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
111
118
|
const transformDeployments = (deployments, deploymentsById) => deployments.sort((0, _northern_tech_utils_helpers.customSort)(true, "created")).reduce((accu, item) => {
|
|
112
119
|
const filter = item.filter;
|
|
113
120
|
let deployment = {
|
|
@@ -119,7 +126,7 @@ const transformDeployments = (deployments, deploymentsById) => deployments.sort(
|
|
|
119
126
|
name: filter.name ?? filter.id,
|
|
120
127
|
filters: require_utils.mapTermsToFilters(filter.terms)
|
|
121
128
|
} : void 0,
|
|
122
|
-
name:
|
|
129
|
+
name: decodeDeploymentName(item.name)
|
|
123
130
|
};
|
|
124
131
|
deployment = {
|
|
125
132
|
...deployment,
|
|
@@ -891,6 +898,23 @@ const getAllDeviceCounts = require_store.createAppAsyncThunk(`${require_devicesS
|
|
|
891
898
|
})));
|
|
892
899
|
}));
|
|
893
900
|
const getDeviceLimits = require_store.createAppAsyncThunk(`${require_devicesSlice_index.sliceName}/getDeviceLimit`, (_, { dispatch }) => require_api_general_api.default.get(`${_northern_tech_utils_constants.deviceAuthV2}/limits/devices`).then((res) => dispatch(require_devicesSlice_index.actions.setDeviceLimits(res.data))));
|
|
901
|
+
const getTestDeviceCount = require_store.createAppAsyncThunk(`${require_devicesSlice_index.sliceName}/getTestDeviceCount`, async (_, { dispatch }) => {
|
|
902
|
+
const res = await require_api_general_api.default.post(`${_northern_tech_utils_constants.inventoryApiUrlV2}/filters/search`, {
|
|
903
|
+
page: 1,
|
|
904
|
+
per_page: 1,
|
|
905
|
+
filters: [{
|
|
906
|
+
scope: "system",
|
|
907
|
+
attribute: "test_device",
|
|
908
|
+
type: _northern_tech_utils_constants.DEVICE_FILTERING_OPTIONS.$eq.key,
|
|
909
|
+
value: "true"
|
|
910
|
+
}],
|
|
911
|
+
attributes: [{
|
|
912
|
+
scope: "identity",
|
|
913
|
+
attribute: "status"
|
|
914
|
+
}]
|
|
915
|
+
}).catch((err) => require_store.commonErrorHandler(err, `Retrieving test device count failed:`, dispatch, require_store.commonErrorFallback));
|
|
916
|
+
return dispatch(require_devicesSlice_index.actions.setTestDeviceCount(Number(res.headers[_northern_tech_utils_constants.headerNames.total])));
|
|
917
|
+
});
|
|
894
918
|
const setDeviceListState = require_store.createAppAsyncThunk(`${require_devicesSlice_index.sliceName}/setDeviceListState`, ({ shouldSelectDevices = true, forceRefresh, fetchAuth = true, ...selectionState }, { dispatch, getState }) => {
|
|
895
919
|
const currentState = require_devicesSlice_selectors.getDeviceListState(getState());
|
|
896
920
|
const refreshTrigger = forceRefresh ? !currentState.refreshTrigger : selectionState.refreshTrigger;
|
|
@@ -1058,7 +1082,7 @@ const initializeDistributionData = (report, groups, devices, totalDeviceCount) =
|
|
|
1058
1082
|
const { deviceIds, total = 0 } = groups[group] || {};
|
|
1059
1083
|
const distributionByAttribute = (deviceIds ? deviceIds.map((id) => devices[id]) : Object.values(devices)).reduce((accu, item) => {
|
|
1060
1084
|
if (!item.attributes || item.status !== _northern_tech_utils_constants.DEVICE_STATES.accepted) return accu;
|
|
1061
|
-
const attributeValue = item.attributes[effectiveAttribute];
|
|
1085
|
+
const attributeValue = item.attributes[effectiveAttribute] ?? "";
|
|
1062
1086
|
if (!accu[attributeValue]) accu[attributeValue] = 0;
|
|
1063
1087
|
accu[attributeValue] = accu[attributeValue] + 1;
|
|
1064
1088
|
return accu;
|
|
@@ -1095,6 +1119,7 @@ const getReportDataWithoutBackendSupport = require_store.createAppAsyncThunk(`${
|
|
|
1095
1119
|
const acceptedDevices = require_devicesSlice_selectors.getAcceptedDevices(getState());
|
|
1096
1120
|
const { accepted: acceptedDevicesCount } = require_devicesSlice_selectors.getDeviceCountsByStatus(getState());
|
|
1097
1121
|
const { deviceIds = [], filters = [], total = 0 } = require_devicesSlice_selectors.getGroupsById(getState())[group] || {};
|
|
1122
|
+
const hasAttributeData = (group ? deviceIds : acceptedDevices.deviceIds).every((id) => devicesById[id]?.attributes?.[effectiveAttribute] !== void 0);
|
|
1098
1123
|
let groupDevicesRequest = Promise.resolve({ payload: {
|
|
1099
1124
|
groupName: "",
|
|
1100
1125
|
group: {
|
|
@@ -1102,14 +1127,14 @@ const getReportDataWithoutBackendSupport = require_store.createAppAsyncThunk(`${
|
|
|
1102
1127
|
total: Object.keys(devicesById).length
|
|
1103
1128
|
}
|
|
1104
1129
|
} });
|
|
1105
|
-
if (group && (!(deviceIds.length && total) || deviceIds.length !== total || !deviceIds.every((id) => !!devicesById[id]))) groupDevicesRequest = filters.length ? dispatch(getAllDynamicGroupDevices({
|
|
1130
|
+
if (group && (!(deviceIds.length && total) || deviceIds.length !== total || !deviceIds.every((id) => !!devicesById[id]) || !hasAttributeData)) groupDevicesRequest = filters.length ? dispatch(getAllDynamicGroupDevices({
|
|
1106
1131
|
group,
|
|
1107
1132
|
attribute: effectiveAttribute
|
|
1108
1133
|
})).unwrap() : dispatch(getAllGroupDevices({
|
|
1109
1134
|
group,
|
|
1110
1135
|
attribute: effectiveAttribute
|
|
1111
1136
|
})).unwrap();
|
|
1112
|
-
else if (!group && (acceptedDevices.deviceIds.length !== acceptedDevicesCount || !acceptedDevices.deviceIds.every((id) => !!devicesById[id]))) groupDevicesRequest = dispatch(getAllDevicesByStatus({
|
|
1137
|
+
else if (!group && (acceptedDevices.deviceIds.length !== acceptedDevicesCount || !acceptedDevices.deviceIds.every((id) => !!devicesById[id]) || !hasAttributeData)) groupDevicesRequest = dispatch(getAllDevicesByStatus({
|
|
1113
1138
|
status: _northern_tech_utils_constants.DEVICE_STATES.accepted,
|
|
1114
1139
|
attribute: effectiveAttribute
|
|
1115
1140
|
})).unwrap();
|
|
@@ -1254,7 +1279,12 @@ const applyDeviceConfig = require_store.createAppAsyncThunk(`${require_devicesSl
|
|
|
1254
1279
|
...device.config,
|
|
1255
1280
|
deployment_id: data.deployment_id
|
|
1256
1281
|
}
|
|
1257
|
-
})))
|
|
1282
|
+
})))];
|
|
1283
|
+
require_utils.dispatchDelayed({
|
|
1284
|
+
action: getSingleDeployment(data.deployment_id),
|
|
1285
|
+
delay: require_constants.TIMEOUTS.oneSecond,
|
|
1286
|
+
dispatch
|
|
1287
|
+
});
|
|
1258
1288
|
if (isDefault && canManageUsers) {
|
|
1259
1289
|
const { previous } = require_usersSlice_selectors.getGlobalSettings(getState()).defaultDeviceConfig ?? {};
|
|
1260
1290
|
tasks.push(dispatch(saveGlobalSettings({ defaultDeviceConfig: {
|
|
@@ -1277,6 +1307,15 @@ const setDeviceTags = require_store.createAppAsyncThunk(`${require_devicesSlice_
|
|
|
1277
1307
|
tags
|
|
1278
1308
|
})), dispatch(setSnackbar$2(`Device ${tagList.length === 1 && isNameChange ? "name" : "tags"} changed`))]));
|
|
1279
1309
|
}));
|
|
1310
|
+
const setTestDeviceStatus = require_store.createAppAsyncThunk(`${require_devicesSlice_index.sliceName}/setTestDeviceStatus`, ({ deviceId, test_device }, { dispatch }) => require_api_general_api.default.put(`${_northern_tech_utils_constants.deviceAuthV2}/devices/${deviceId}/flags`, { test_device }).catch((err) => require_store.commonErrorHandler(err, `There was an error setting test status for device ${deviceId}.`, dispatch, "Please check your connection.")).then(() => Promise.all([
|
|
1311
|
+
dispatch(setSnackbar$2("Device updated successfully")),
|
|
1312
|
+
dispatch(require_devicesSlice_index.actions.receivedDevice({
|
|
1313
|
+
id: deviceId,
|
|
1314
|
+
flags: { test_device }
|
|
1315
|
+
})),
|
|
1316
|
+
dispatch(getDeviceById(deviceId)),
|
|
1317
|
+
dispatch(getTestDeviceCount())
|
|
1318
|
+
])));
|
|
1280
1319
|
const getDeviceTwin = require_store.createAppAsyncThunk(`${require_devicesSlice_index.sliceName}/getDeviceTwin`, ({ deviceId, integration }, { dispatch, getState }) => {
|
|
1281
1320
|
let providerResult = {};
|
|
1282
1321
|
return require_api_general_api.default.get(`${_northern_tech_utils_constants.iotManagerBaseURL}/devices/${deviceId}/state`).then(({ data }) => {
|
|
@@ -1711,7 +1750,14 @@ const addTenant = require_store.createAppAsyncThunk(`${require_organizationSlice
|
|
|
1711
1750
|
return require_api_general_api.default.post(`${_northern_tech_utils_constants.tenantadmApiUrlv2}/tenants`, {
|
|
1712
1751
|
...rest,
|
|
1713
1752
|
device_limits
|
|
1714
|
-
}).then(() =>
|
|
1753
|
+
}).then(() => {
|
|
1754
|
+
dispatch(setSnackbar$1("Tenant was created successfully."));
|
|
1755
|
+
require_utils.dispatchDelayed({
|
|
1756
|
+
action: getTenants(),
|
|
1757
|
+
delay: require_constants.TIMEOUTS.oneSecond,
|
|
1758
|
+
dispatch
|
|
1759
|
+
});
|
|
1760
|
+
}).catch((err) => require_store.commonErrorHandler(err, "There was an error creating tenant", dispatch, require_store.commonErrorFallback));
|
|
1715
1761
|
});
|
|
1716
1762
|
const tenantListRetrieval = async (config) => {
|
|
1717
1763
|
const { page, perPage } = config;
|
|
@@ -1754,19 +1800,27 @@ const editTenant = require_store.createAppAsyncThunk(`${require_organizationSlic
|
|
|
1754
1800
|
return require_api_general_api.default.put(`${_northern_tech_utils_constants.tenantadmApiUrlv2}/tenants/${id}/child`, {
|
|
1755
1801
|
device_limits,
|
|
1756
1802
|
name
|
|
1757
|
-
}).catch((err) => require_store.commonErrorHandler(err, `Device Limit cannot be changed`, dispatch)).then(() =>
|
|
1758
|
-
dispatch(setSnackbar$1("Tenant was changed successfully"))
|
|
1759
|
-
dispatch(getUserOrganization())
|
|
1760
|
-
|
|
1761
|
-
|
|
1803
|
+
}).catch((err) => require_store.commonErrorHandler(err, `Device Limit cannot be changed`, dispatch)).then(() => {
|
|
1804
|
+
dispatch(setSnackbar$1("Tenant was changed successfully"));
|
|
1805
|
+
dispatch(getUserOrganization());
|
|
1806
|
+
require_utils.dispatchDelayed({
|
|
1807
|
+
action: getTenants(),
|
|
1808
|
+
delay: require_constants.TIMEOUTS.oneSecond,
|
|
1809
|
+
dispatch
|
|
1810
|
+
});
|
|
1811
|
+
});
|
|
1762
1812
|
});
|
|
1763
1813
|
const editBillingProfile = require_store.createAppAsyncThunk(`${require_organizationSlice_index.sliceName}/editBillingProfileEmail`, ({ billingProfile }, { dispatch }) => require_api_general_api.default.patch(`${_northern_tech_utils_constants.tenantadmApiUrlv2}/billing/profile`, billingProfile).catch((err) => require_store.commonErrorHandler(err, `Failed to change billing profile`, dispatch)).then(() => Promise.all([dispatch(setSnackbar$1("Billing Profile was changed successfully")), dispatch(getUserBilling())])));
|
|
1764
1814
|
const createBillingProfile = require_store.createAppAsyncThunk(`${require_organizationSlice_index.sliceName}/createBillingProfileEmail`, ({ billingProfile }, { dispatch }) => require_api_general_api.default.post(`${_northern_tech_utils_constants.tenantadmApiUrlv2}/billing/profile`, billingProfile).catch((err) => require_store.commonErrorHandler(err, `Failed to create billing profile`, dispatch)).then(() => Promise.all([dispatch(setSnackbar$1("Billing Profile was created successfully")), dispatch(getUserBilling())])));
|
|
1765
|
-
const removeTenant = require_store.createAppAsyncThunk(`${require_organizationSlice_index.sliceName}/editDeviceLimit`, ({ id }, { dispatch }) => require_api_general_api.default.post(`${_northern_tech_utils_constants.tenantadmApiUrlv2}/tenants/${id}/remove/start`).catch((err) => require_store.commonErrorHandler(err, `There was an error removing the tenant`, dispatch)).then(() =>
|
|
1766
|
-
dispatch(setSnackbar$1("The tenant was removed successfully"))
|
|
1767
|
-
dispatch(getUserOrganization())
|
|
1768
|
-
|
|
1769
|
-
|
|
1815
|
+
const removeTenant = require_store.createAppAsyncThunk(`${require_organizationSlice_index.sliceName}/editDeviceLimit`, ({ id }, { dispatch }) => require_api_general_api.default.post(`${_northern_tech_utils_constants.tenantadmApiUrlv2}/tenants/${id}/remove/start`).catch((err) => require_store.commonErrorHandler(err, `There was an error removing the tenant`, dispatch)).then(async () => {
|
|
1816
|
+
dispatch(setSnackbar$1("The tenant was removed successfully"));
|
|
1817
|
+
await dispatch(getUserOrganization()).unwrap();
|
|
1818
|
+
require_utils.dispatchDelayed({
|
|
1819
|
+
action: getTenants(),
|
|
1820
|
+
delay: require_constants.TIMEOUTS.oneSecond,
|
|
1821
|
+
dispatch
|
|
1822
|
+
});
|
|
1823
|
+
}));
|
|
1770
1824
|
const getUserOrganization = require_store.createAppAsyncThunk(`${require_organizationSlice_index.sliceName}/getUserOrganization`, (_, { dispatch, getState }) => require_api_general_api.default.get(`${_northern_tech_utils_constants.tenantadmApiUrlv1}/user/tenant?tiers=true`).then((res) => {
|
|
1771
1825
|
const { addons, plan, trial } = res.data;
|
|
1772
1826
|
const { addons: currentAddons, id: currentId, plan: currentPlan, trial: currentTrial } = require_organizationSlice_selectors.getOrganization(getState());
|
|
@@ -2465,7 +2519,10 @@ const setAllTooltipsReadState = require_store.createAppAsyncThunk(`${require_use
|
|
|
2465
2519
|
const submitUserFeedback = require_store.createAppAsyncThunk(`${require_usersSlice_index.sliceName}/submitFeedback`, ({ formId, feedback }, { dispatch }) => require_api_general_api.default.post(`${_northern_tech_utils_constants.useradmApiUrlv2}/support/feedback/${formId}`, feedback).then(() => {
|
|
2466
2520
|
if (formId === "product") {
|
|
2467
2521
|
dispatch(saveUserSettings({ feedbackCollectedAt: (/* @__PURE__ */ new Date()).toISOString().split("T")[0] }));
|
|
2468
|
-
|
|
2522
|
+
require_utils.dispatchDelayed({
|
|
2523
|
+
action: require_usersSlice_index.actions.setShowFeedbackDialog(false),
|
|
2524
|
+
dispatch
|
|
2525
|
+
});
|
|
2469
2526
|
}
|
|
2470
2527
|
}));
|
|
2471
2528
|
//#endregion
|
|
@@ -2573,6 +2630,7 @@ exports.getSsoConfigs = getSsoConfigs;
|
|
|
2573
2630
|
exports.getSystemDevices = getSystemDevices;
|
|
2574
2631
|
exports.getTargetLocation = getTargetLocation;
|
|
2575
2632
|
exports.getTenants = getTenants;
|
|
2633
|
+
exports.getTestDeviceCount = getTestDeviceCount;
|
|
2576
2634
|
exports.getTokens = getTokens;
|
|
2577
2635
|
exports.getUpdateTypes = require_releasesSlice_thunks.getUpdateTypes;
|
|
2578
2636
|
exports.getUser = getUser;
|
|
@@ -2635,6 +2693,7 @@ exports.setSearchState = setSearchState;
|
|
|
2635
2693
|
exports.setSingleReleaseTags = require_releasesSlice_thunks.setSingleReleaseTags;
|
|
2636
2694
|
exports.setSoftwareListState = require_releasesSlice_thunks.setSoftwareListState;
|
|
2637
2695
|
exports.setTenantsListState = setTenantsListState;
|
|
2696
|
+
exports.setTestDeviceStatus = setTestDeviceStatus;
|
|
2638
2697
|
exports.setTooltipReadState = setTooltipReadState;
|
|
2639
2698
|
exports.startCardUpdate = startCardUpdate;
|
|
2640
2699
|
exports.startUpgrade = startUpgrade;
|
|
@@ -2642,6 +2701,7 @@ exports.storeSsoConfig = storeSsoConfig;
|
|
|
2642
2701
|
exports.submitUserFeedback = submitUserFeedback;
|
|
2643
2702
|
exports.switchUserOrganization = switchUserOrganization;
|
|
2644
2703
|
exports.tenantDataDivergedMessage = tenantDataDivergedMessage;
|
|
2704
|
+
exports.transformDeployments = transformDeployments;
|
|
2645
2705
|
exports.transformProductResponse = transformProductResponse;
|
|
2646
2706
|
exports.triggerDeviceUpdate = triggerDeviceUpdate;
|
|
2647
2707
|
exports.updateDeploymentControlMap = updateDeploymentControlMap;
|