@northern.tech/store 0.24.0 → 0.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/actions.js +4 -4
  2. package/dist/api/general-api.js +1 -1
  3. package/dist/api/users-api.js +1 -1
  4. package/dist/appSlice/index.js +1 -1
  5. package/dist/appSlice/mocks.js +1 -1
  6. package/dist/appSlice/thunks.cjs.map +1 -1
  7. package/dist/appSlice/thunks.js +13 -13
  8. package/dist/auth.js +1 -1
  9. package/dist/{chunk-CEO2PODV.js → chunk-DOT4GDYO.js} +7 -7
  10. package/dist/{chunk-IS4RSIX5.js → chunk-E2X525PA.js} +2 -2
  11. package/dist/{chunk-KIKY6LHH.js → chunk-E7PTHNNO.js} +12 -12
  12. package/dist/{chunk-WTVM2QSK.js → chunk-EZRW3IQG.js} +8 -8
  13. package/dist/{chunk-NKS5ASWX.js → chunk-IDKMS5RA.js} +2 -2
  14. package/dist/{chunk-OH4CWUIK.js → chunk-PKPTJ6XM.js} +6 -6
  15. package/dist/{chunk-UTBSK7B6.js → chunk-S7XYEGLR.js} +9 -2
  16. package/dist/{chunk-UTBSK7B6.js.map → chunk-S7XYEGLR.js.map} +1 -1
  17. package/dist/{chunk-QSTJRY3C.js → chunk-T2BICNAM.js} +5 -5
  18. package/dist/{chunk-4LXBO2FO.js → chunk-XAAJ4NVG.js} +21 -18
  19. package/dist/chunk-XAAJ4NVG.js.map +1 -0
  20. package/dist/commonConstants.js +1 -1
  21. package/dist/commonSelectors.cjs.map +1 -1
  22. package/dist/commonSelectors.js +6 -6
  23. package/dist/constants.js +1 -1
  24. package/dist/deploymentsSlice/constants.js +1 -1
  25. package/dist/deploymentsSlice/index.js +1 -1
  26. package/dist/deploymentsSlice/mocks.js +1 -1
  27. package/dist/deploymentsSlice/selectors.js +1 -1
  28. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  29. package/dist/deploymentsSlice/thunks.js +13 -13
  30. package/dist/devicesSlice/constants.js +1 -1
  31. package/dist/devicesSlice/index.js +1 -1
  32. package/dist/devicesSlice/mocks.js +1 -1
  33. package/dist/devicesSlice/selectors.js +1 -1
  34. package/dist/devicesSlice/thunks.cjs.map +1 -1
  35. package/dist/devicesSlice/thunks.js +13 -13
  36. package/dist/liststatehook.js +1 -1
  37. package/dist/locationutils.js +1 -1
  38. package/dist/monitorSlice/index.js +1 -1
  39. package/dist/monitorSlice/mocks.js +1 -1
  40. package/dist/monitorSlice/thunks.cjs.map +1 -1
  41. package/dist/monitorSlice/thunks.js +11 -11
  42. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  43. package/dist/onboardingSlice/thunks.js +13 -13
  44. package/dist/organizationSlice/constants.js +1 -1
  45. package/dist/organizationSlice/index.js +1 -1
  46. package/dist/organizationSlice/mocks.js +1 -1
  47. package/dist/organizationSlice/selectors.js +1 -1
  48. package/dist/organizationSlice/thunks.cjs +12 -5
  49. package/dist/organizationSlice/thunks.cjs.map +1 -1
  50. package/dist/organizationSlice/thunks.d.cts +3 -1
  51. package/dist/organizationSlice/thunks.d.ts +3 -1
  52. package/dist/organizationSlice/thunks.js +13 -13
  53. package/dist/releasesSlice/index.js +1 -1
  54. package/dist/releasesSlice/mocks.js +1 -1
  55. package/dist/releasesSlice/selectors.cjs.map +1 -1
  56. package/dist/releasesSlice/selectors.js +3 -3
  57. package/dist/releasesSlice/thunks.cjs.map +1 -1
  58. package/dist/releasesSlice/thunks.js +11 -11
  59. package/dist/selectors.cjs.map +1 -1
  60. package/dist/selectors.js +42 -42
  61. package/dist/sockethook.js +1 -1
  62. package/dist/store.js +5 -5
  63. package/dist/storehooks.cjs +12 -5
  64. package/dist/storehooks.cjs.map +1 -1
  65. package/dist/storehooks.js +16 -16
  66. package/dist/thunks.cjs +12 -5
  67. package/dist/thunks.cjs.map +1 -1
  68. package/dist/thunks.js +19 -19
  69. package/dist/useDeploymentDevice.cjs.map +1 -1
  70. package/dist/useDeploymentDevice.js +13 -13
  71. package/dist/usersSlice/constants.js +1 -1
  72. package/dist/usersSlice/index.js +1 -1
  73. package/dist/usersSlice/mocks.js +1 -1
  74. package/dist/usersSlice/selectors.cjs.map +1 -1
  75. package/dist/usersSlice/selectors.js +3 -3
  76. package/dist/usersSlice/thunks.cjs.map +1 -1
  77. package/dist/usersSlice/thunks.js +13 -13
  78. package/dist/utils.cjs +8 -0
  79. package/dist/utils.cjs.map +1 -1
  80. package/dist/utils.d.cts +2 -1
  81. package/dist/utils.d.ts +2 -1
  82. package/dist/utils.js +4 -2
  83. package/package.json +1 -1
  84. package/dist/chunk-4LXBO2FO.js.map +0 -1
  85. /package/dist/{chunk-CEO2PODV.js.map → chunk-DOT4GDYO.js.map} +0 -0
  86. /package/dist/{chunk-IS4RSIX5.js.map → chunk-E2X525PA.js.map} +0 -0
  87. /package/dist/{chunk-KIKY6LHH.js.map → chunk-E7PTHNNO.js.map} +0 -0
  88. /package/dist/{chunk-WTVM2QSK.js.map → chunk-EZRW3IQG.js.map} +0 -0
  89. /package/dist/{chunk-NKS5ASWX.js.map → chunk-IDKMS5RA.js.map} +0 -0
  90. /package/dist/{chunk-OH4CWUIK.js.map → chunk-PKPTJ6XM.js.map} +0 -0
  91. /package/dist/{chunk-QSTJRY3C.js.map → chunk-T2BICNAM.js.map} +0 -0
@@ -3,38 +3,38 @@ import {
3
3
  setFirstLoginAfterSignup,
4
4
  setOfflineThreshold,
5
5
  setSearchState
6
- } from "../chunk-4LXBO2FO.js";
7
- import "../chunk-OH4CWUIK.js";
8
- import "../chunk-QSTJRY3C.js";
9
- import "../chunk-WTVM2QSK.js";
6
+ } from "../chunk-XAAJ4NVG.js";
7
+ import "../chunk-T2BICNAM.js";
8
+ import "../chunk-PKPTJ6XM.js";
9
+ import "../chunk-EZRW3IQG.js";
10
10
  import "../chunk-3IXBQAMO.js";
11
11
  import "../chunk-6NLGT2LD.js";
12
- import "../chunk-CEO2PODV.js";
13
- import "../chunk-NRHTBY6E.js";
12
+ import "../chunk-DOT4GDYO.js";
14
13
  import "../chunk-4NG7EGAG.js";
14
+ import "../chunk-NRHTBY6E.js";
15
15
  import "../chunk-IJ6KKUA2.js";
16
- import "../chunk-NYDBCHD7.js";
17
16
  import "../chunk-CQXDAXQF.js";
17
+ import "../chunk-NYDBCHD7.js";
18
18
  import "../chunk-GLIQTGWN.js";
19
19
  import "../chunk-JKLFEHCF.js";
20
20
  import "../chunk-F2ADELYA.js";
21
21
  import "../chunk-WKXBJVZ7.js";
22
22
  import "../chunk-X4TGUR22.js";
23
23
  import "../chunk-NMAXZ3ZY.js";
24
- import "../chunk-KIKY6LHH.js";
25
- import "../chunk-IS4RSIX5.js";
26
- import "../chunk-NKS5ASWX.js";
24
+ import "../chunk-E7PTHNNO.js";
27
25
  import "../chunk-X6AM6P6X.js";
28
- import "../chunk-YO22XLHI.js";
26
+ import "../chunk-IDKMS5RA.js";
27
+ import "../chunk-E2X525PA.js";
29
28
  import "../chunk-JIS4PA3R.js";
29
+ import "../chunk-YO22XLHI.js";
30
30
  import "../chunk-CXRORJR5.js";
31
31
  import "../chunk-2AGBXDGF.js";
32
32
  import "../chunk-4BHM6WVX.js";
33
- import "../chunk-UTBSK7B6.js";
33
+ import "../chunk-S7XYEGLR.js";
34
34
  import "../chunk-AERWBWRM.js";
35
35
  import "../chunk-2DYA3X77.js";
36
- import "../chunk-FAJ3I2UQ.js";
37
36
  import "../chunk-ZKAH3APE.js";
37
+ import "../chunk-FAJ3I2UQ.js";
38
38
  import "../chunk-DBBE6D36.js";
39
39
  export {
40
40
  getLatestReleaseInfo,
package/dist/auth.js CHANGED
@@ -7,8 +7,8 @@ import {
7
7
  } from "./chunk-WKXBJVZ7.js";
8
8
  import "./chunk-AERWBWRM.js";
9
9
  import "./chunk-2DYA3X77.js";
10
- import "./chunk-FAJ3I2UQ.js";
11
10
  import "./chunk-ZKAH3APE.js";
11
+ import "./chunk-FAJ3I2UQ.js";
12
12
  import "./chunk-DBBE6D36.js";
13
13
  export {
14
14
  cleanUp,
@@ -1,18 +1,18 @@
1
- import {
2
- actions as actions7
3
- } from "./chunk-NRHTBY6E.js";
4
1
  import {
5
2
  actions as actions8
6
3
  } from "./chunk-4NG7EGAG.js";
4
+ import {
5
+ actions as actions7
6
+ } from "./chunk-NRHTBY6E.js";
7
7
  import {
8
8
  actions as actions6
9
9
  } from "./chunk-IJ6KKUA2.js";
10
- import {
11
- actions as actions4
12
- } from "./chunk-NYDBCHD7.js";
13
10
  import {
14
11
  actions as actions5
15
12
  } from "./chunk-CQXDAXQF.js";
13
+ import {
14
+ actions as actions4
15
+ } from "./chunk-NYDBCHD7.js";
16
16
  import {
17
17
  actions as actions3
18
18
  } from "./chunk-GLIQTGWN.js";
@@ -38,4 +38,4 @@ var actions_default = {
38
38
  export {
39
39
  actions_default
40
40
  };
41
- //# sourceMappingURL=chunk-CEO2PODV.js.map
41
+ //# sourceMappingURL=chunk-DOT4GDYO.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listItemMapper
3
- } from "./chunk-UTBSK7B6.js";
3
+ } from "./chunk-S7XYEGLR.js";
4
4
 
5
5
  // src/releasesSlice/selectors.ts
6
6
  import { createSelector } from "@reduxjs/toolkit";
@@ -41,4 +41,4 @@ export {
41
41
  getDeltaJobById,
42
42
  getSelectedJob
43
43
  };
44
- //# sourceMappingURL=chunk-IS4RSIX5.js.map
44
+ //# sourceMappingURL=chunk-E2X525PA.js.map
@@ -1,6 +1,8 @@
1
1
  import {
2
- getReleasesById
3
- } from "./chunk-IS4RSIX5.js";
2
+ getAuditLogEntry,
3
+ getIsServiceProvider,
4
+ getOrganization
5
+ } from "./chunk-X6AM6P6X.js";
4
6
  import {
5
7
  getCurrentUser,
6
8
  getGlobalSettings,
@@ -10,18 +12,16 @@ import {
10
12
  getSecurityAlertDismissedTimestamp,
11
13
  getUserSettings,
12
14
  getUserSettingsInitialized
13
- } from "./chunk-NKS5ASWX.js";
14
- import {
15
- getAuditLogEntry,
16
- getIsServiceProvider,
17
- getOrganization
18
- } from "./chunk-X6AM6P6X.js";
15
+ } from "./chunk-IDKMS5RA.js";
19
16
  import {
20
- getIssueCountsByType
21
- } from "./chunk-YO22XLHI.js";
17
+ getReleasesById
18
+ } from "./chunk-E2X525PA.js";
22
19
  import {
23
20
  getOnboarding
24
21
  } from "./chunk-JIS4PA3R.js";
22
+ import {
23
+ getIssueCountsByType
24
+ } from "./chunk-YO22XLHI.js";
25
25
  import {
26
26
  getDeploymentsById,
27
27
  getDeploymentsSelectionState,
@@ -41,7 +41,7 @@ import {
41
41
  import {
42
42
  listItemMapper,
43
43
  mapUserRolesToUiPermissions
44
- } from "./chunk-UTBSK7B6.js";
44
+ } from "./chunk-S7XYEGLR.js";
45
45
  import {
46
46
  ALL_DEVICES,
47
47
  ATTRIBUTE_SCOPES,
@@ -310,4 +310,4 @@ export {
310
310
  getRelevantRoles,
311
311
  getShowSecurityAlert
312
312
  };
313
- //# sourceMappingURL=chunk-KIKY6LHH.js.map
313
+ //# sourceMappingURL=chunk-E7PTHNNO.js.map
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  actions_default
3
- } from "./chunk-CEO2PODV.js";
4
- import {
5
- releasesSlice_default
6
- } from "./chunk-NRHTBY6E.js";
3
+ } from "./chunk-DOT4GDYO.js";
7
4
  import {
8
5
  actions as actions2,
9
6
  usersSlice_default
10
7
  } from "./chunk-4NG7EGAG.js";
8
+ import {
9
+ releasesSlice_default
10
+ } from "./chunk-NRHTBY6E.js";
11
11
  import {
12
12
  actions,
13
13
  organizationSlice_default
14
14
  } from "./chunk-IJ6KKUA2.js";
15
- import {
16
- monitorSlice_default
17
- } from "./chunk-NYDBCHD7.js";
18
15
  import {
19
16
  onboardingSlice_default
20
17
  } from "./chunk-CQXDAXQF.js";
18
+ import {
19
+ monitorSlice_default
20
+ } from "./chunk-NYDBCHD7.js";
21
21
  import {
22
22
  devicesSlice_default
23
23
  } from "./chunk-GLIQTGWN.js";
@@ -139,4 +139,4 @@ export {
139
139
  useAppDispatch,
140
140
  createAppAsyncThunk
141
141
  };
142
- //# sourceMappingURL=chunk-WTVM2QSK.js.map
142
+ //# sourceMappingURL=chunk-EZRW3IQG.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isDarkMode
3
- } from "./chunk-UTBSK7B6.js";
3
+ } from "./chunk-S7XYEGLR.js";
4
4
  import {
5
5
  DEVICE_ONLINE_CUTOFF,
6
6
  READ_STATES,
@@ -79,4 +79,4 @@ export {
79
79
  getRolesInitialized,
80
80
  getSecurityAlertDismissedTimestamp
81
81
  };
82
- //# sourceMappingURL=chunk-NKS5ASWX.js.map
82
+ //# sourceMappingURL=chunk-IDKMS5RA.js.map
@@ -2,13 +2,13 @@ import {
2
2
  commonErrorFallback,
3
3
  commonErrorHandler,
4
4
  createAppAsyncThunk
5
- } from "./chunk-WTVM2QSK.js";
5
+ } from "./chunk-EZRW3IQG.js";
6
6
  import {
7
7
  general_api_default
8
8
  } from "./chunk-6NLGT2LD.js";
9
9
  import {
10
10
  actions_default
11
- } from "./chunk-CEO2PODV.js";
11
+ } from "./chunk-DOT4GDYO.js";
12
12
  import {
13
13
  actions,
14
14
  sliceName
@@ -18,14 +18,14 @@ import {
18
18
  } from "./chunk-X4TGUR22.js";
19
19
  import {
20
20
  getSearchEndpoint
21
- } from "./chunk-KIKY6LHH.js";
21
+ } from "./chunk-E7PTHNNO.js";
22
22
  import {
23
23
  getReleasesById
24
- } from "./chunk-IS4RSIX5.js";
24
+ } from "./chunk-E2X525PA.js";
25
25
  import {
26
26
  convertDeviceListStateToFilters,
27
27
  progress
28
- } from "./chunk-UTBSK7B6.js";
28
+ } from "./chunk-S7XYEGLR.js";
29
29
  import {
30
30
  DEVICE_LIST_DEFAULTS,
31
31
  SORTING_OPTIONS,
@@ -442,4 +442,4 @@ export {
442
442
  getDeltaGenerationJobs,
443
443
  getDeltaGenerationJobDetails
444
444
  };
445
- //# sourceMappingURL=chunk-OH4CWUIK.js.map
445
+ //# sourceMappingURL=chunk-PKPTJ6XM.js.map
@@ -213,6 +213,12 @@ var parseSubscriptionPreview = (lines) => lines.reduce((acc, { addon, amount, pr
213
213
  }
214
214
  return acc;
215
215
  }, {});
216
+ var convertToBackendSPLimits = (limits, spLimits) => Object.fromEntries(
217
+ Object.entries(limits).filter(([key]) => !!spLimits[key]).map(([key, limit]) => {
218
+ const { backendId } = spLimits[key];
219
+ return [backendId, { Name: backendId, value: Number(limit) || 0 }];
220
+ })
221
+ );
216
222
 
217
223
  export {
218
224
  mapFiltersToTerms,
@@ -234,6 +240,7 @@ export {
234
240
  generateDeploymentGroupDetails,
235
241
  mapDeviceAttributes,
236
242
  isDarkMode,
237
- parseSubscriptionPreview
243
+ parseSubscriptionPreview,
244
+ convertToBackendSPLimits
238
245
  };
239
- //# sourceMappingURL=chunk-UTBSK7B6.js.map
246
+ //# sourceMappingURL=chunk-S7XYEGLR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.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 type { DeviceAttribute } from '@northern.tech/types/DeviceAttribute';\nimport type { Scope } from '@northern.tech/types/MenderTypes';\nimport { duplicateFilter, yes } from '@northern.tech/utils/helpers';\n\nimport type { DeviceIssueOptionKey } from './constants';\nimport {\n ATTRIBUTE_SCOPES,\n DARK_MODE,\n DEPLOYMENT_STATES,\n DEVICE_FILTERING_OPTIONS,\n DEVICE_ISSUE_OPTIONS,\n DEVICE_LIST_MAXIMUM_LENGTH,\n defaultStats,\n deploymentDisplayStates,\n deploymentStatesToSubstates,\n deploymentStatesToSubstatesWithSkipped,\n emptyFilter,\n emptyUiPermissions,\n softwareIndicator\n} from './constants';\nimport type { DeviceFilter, DeviceGroup, InventoryAttributes } from './devicesSlice';\n\n// for some reason these functions can not be stored in the deviceConstants...\nconst filterProcessors = {\n [DEVICE_FILTERING_OPTIONS.$gt.key]: val => Number(val) || val,\n [DEVICE_FILTERING_OPTIONS.$gte.key]: val => Number(val) || val,\n [DEVICE_FILTERING_OPTIONS.$lt.key]: val => Number(val) || val,\n [DEVICE_FILTERING_OPTIONS.$lte.key]: val => Number(val) || val,\n [DEVICE_FILTERING_OPTIONS.$ltne.key]: val => Number(val) || val,\n [DEVICE_FILTERING_OPTIONS.$in.key]: val => ('' + val).split(',').map(i => i.trim()),\n [DEVICE_FILTERING_OPTIONS.$nin.key]: val => ('' + val).split(',').map(i => i.trim()),\n [DEVICE_FILTERING_OPTIONS.$exists.key]: yes,\n [DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false\n};\nconst filterAliases = {\n $nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }\n};\nexport const mapFiltersToTerms = filters =>\n filters.map(filter => ({\n scope: filter.scope,\n attribute: filter.key,\n type: filterAliases[filter.operator]?.alias || filter.operator,\n value: filterProcessors.hasOwnProperty(filter.operator) ? filterProcessors[filter.operator](filter.value) : filter.value\n }));\nexport const mapTermsToFilters = terms =>\n terms.map(term => {\n const aliasedFilter = Object.entries(filterAliases).find(\n aliasDefinition => aliasDefinition[1].alias === term.type && aliasDefinition[1].value === term.value\n );\n const operator = aliasedFilter ? aliasedFilter[0] : term.type;\n return { scope: term.scope as Scope, key: term.attribute, operator, value: term.value };\n });\n\nconst convertIssueOptionsToFilters = (issuesSelection, filtersState = {}) =>\n issuesSelection.map(item => {\n if (typeof DEVICE_ISSUE_OPTIONS[item].filterRule.value === 'function') {\n return { ...DEVICE_ISSUE_OPTIONS[item].filterRule, value: DEVICE_ISSUE_OPTIONS[item].filterRule.value(filtersState) };\n }\n return DEVICE_ISSUE_OPTIONS[item].filterRule;\n });\n\nexport const convertDeviceListStateToFilters = ({\n filters = [],\n group,\n groups = { byId: {} },\n offlineThreshold,\n selectedIssues = [],\n status\n}: {\n filters?: DeviceFilter[];\n group?: string;\n groups?: { byId: Record<string, DeviceGroup> };\n offlineThreshold?: string;\n selectedIssues?: DeviceIssueOptionKey[];\n status?: string;\n}) => {\n let applicableFilters = [...filters];\n if (typeof group === 'string' && !(groups.byId[group]?.filters || applicableFilters).length) {\n applicableFilters.push({ key: 'group', value: group, operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: 'system' });\n }\n const nonMonitorFilters = applicableFilters.filter(\n filter =>\n !Object.values(DEVICE_ISSUE_OPTIONS).some(\n ({ filterRule }) => filter.scope !== 'inventory' && filterRule.scope === filter.scope && filterRule.key === filter.key\n )\n );\n const deviceIssueFilters = convertIssueOptionsToFilters(selectedIssues, { offlineThreshold });\n applicableFilters = [...nonMonitorFilters, ...deviceIssueFilters];\n const effectiveFilters = status\n ? [...applicableFilters, { key: 'status', value: status, operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: 'identity' }]\n : applicableFilters;\n return { applicableFilters: nonMonitorFilters, filterTerms: mapFiltersToTerms(effectiveFilters) };\n};\n\nconst filterCompare = (filter, item) => Object.keys(emptyFilter).every(key => item[key]?.toString() === filter[key]?.toString());\n\nexport const filtersFilter = (item, index, array) => {\n const firstIndex = array.findIndex(filter => filterCompare(filter, item));\n return firstIndex === index;\n};\n\nexport const listItemMapper = <T>(\n byId: Record<string, T>,\n ids: string[],\n { cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH, defaultObject = {} }: { cutOffSize?: number; defaultObject?: T }\n): T[] =>\n ids.slice(0, cutOffSize).reduce((accu, id) => {\n if (id && byId[id]) {\n accu.push({ ...defaultObject, ...byId[id] });\n }\n return accu;\n }, []);\n\nexport const mergePermissions = (existingPermissions = { ...emptyUiPermissions }, addedPermissions) =>\n Object.entries(existingPermissions).reduce(\n (accu, [key, value]) => {\n let values;\n if (!accu[key]) {\n accu[key] = value;\n return accu;\n }\n if (Array.isArray(value)) {\n values = [...value, ...accu[key]].filter(duplicateFilter);\n } else {\n values = mergePermissions(accu[key], { ...value });\n }\n accu[key] = values;\n return accu;\n },\n { ...addedPermissions }\n );\n\nexport const mapUserRolesToUiPermissions = (userRoles, roles) =>\n userRoles.reduce(\n (accu, roleId) => {\n if (!(roleId && roles[roleId])) {\n return accu;\n }\n return mergePermissions(accu, roles[roleId].uiPermissions);\n },\n { ...emptyUiPermissions }\n );\n\nexport const progress = ({ loaded, total }) => {\n let uploadProgress = (loaded / total) * 100;\n return (uploadProgress = uploadProgress < 50 ? Math.ceil(uploadProgress) : Math.round(uploadProgress));\n};\n\nexport const extractErrorMessage = (err, fallback = '') =>\n err.response?.data?.error?.message || err.response?.data?.error || err.error || err.message || fallback;\n\nexport const ensureVersionString = (software, fallback) =>\n software.length && software !== 'artifact_name' ? (software.endsWith(softwareIndicator) ? software : `${software}${softwareIndicator}`) : fallback;\n\nexport const getComparisonCompatibleVersion = version => (isNaN(version.charAt(0)) && version !== 'next' ? 'master' : version);\n\nexport const stringToBoolean = content => {\n if (!content) {\n return false;\n }\n const string = content + '';\n switch (string.trim().toLowerCase()) {\n case 'true':\n case 'yes':\n case '1':\n return true;\n case 'false':\n case 'no':\n case '0':\n case null:\n return false;\n default:\n return Boolean(string);\n }\n};\n\nexport const groupDeploymentDevicesStats = deployment => {\n const deviceStatCollector = (deploymentStates, devices) =>\n Object.values(devices).reduce((accu, device) => (deploymentStates.includes(device.status) ? accu + 1 : accu), 0);\n\n const inprogress = deviceStatCollector(deploymentStatesToSubstates.inprogress, deployment.devices);\n const pending = deviceStatCollector(deploymentStatesToSubstates.pending, deployment.devices);\n const successes = deviceStatCollector(deploymentStatesToSubstates.successes, deployment.devices);\n const failures = deviceStatCollector(deploymentStatesToSubstates.failures, deployment.devices);\n const paused = deviceStatCollector(deploymentStatesToSubstates.paused, deployment.devices);\n return { inprogress, paused, pending, successes, failures };\n};\n\nexport const statCollector = (items, statistics) => items.reduce((accu, property) => accu + Number(statistics[property] || 0), 0);\nexport const groupDeploymentStats = (deployment, withSkipped) => {\n const { statistics = {} } = deployment;\n const { status = {} } = statistics;\n const stats = { ...defaultStats, ...status };\n let groupStates = deploymentStatesToSubstates;\n let result = {};\n if (withSkipped) {\n groupStates = deploymentStatesToSubstatesWithSkipped;\n result.skipped = statCollector(groupStates.skipped, stats);\n }\n result = {\n ...result,\n // don't include 'pending' as inprogress, as all remaining devices will be pending - we don't discriminate based on phase membership\n inprogress: statCollector(groupStates.inprogress, stats),\n pending: statCollector(groupStates.pending, stats),\n successes: statCollector(groupStates.successes, stats),\n failures: statCollector(groupStates.failures, stats),\n paused: statCollector(groupStates.paused, stats)\n };\n return result;\n};\n\nexport const getDeploymentState = deployment => {\n const { status: deploymentStatus = DEPLOYMENT_STATES.pending } = deployment;\n const { inprogress: currentProgressCount, paused } = groupDeploymentStats(deployment);\n\n let status = deploymentDisplayStates[deploymentStatus];\n if (deploymentStatus === DEPLOYMENT_STATES.pending && currentProgressCount === 0) {\n status = 'queued';\n } else if (paused > 0) {\n status = deploymentDisplayStates.paused;\n }\n return status;\n};\n\nexport const generateDeploymentGroupDetails = (filter, groupName) =>\n filter && filter.terms?.length\n ? `${groupName} (${filter.terms\n .map(filter => `${filter.attribute || filter.key} ${DEVICE_FILTERING_OPTIONS[filter.type || filter.operator].shortform} ${filter.value}`)\n .join(', ')})`\n : groupName;\n\nexport const mapDeviceAttributes = (\n attributes: DeviceAttribute[] = []\n): {\n identity: Record<string, string>;\n inventory: InventoryAttributes;\n monitor: Record<string, string>;\n system: Record<string, string>;\n tags: Record<string, string>;\n} =>\n attributes.reduce(\n (accu, attribute) => {\n if (!(attribute.value && attribute.name) && attribute.scope === ATTRIBUTE_SCOPES.inventory) {\n return accu;\n }\n accu[attribute.scope || ATTRIBUTE_SCOPES.inventory] = {\n ...accu[attribute.scope || ATTRIBUTE_SCOPES.inventory],\n [attribute.name]: attribute.value\n };\n if (attribute.name === 'device_type' && attribute.scope === ATTRIBUTE_SCOPES.inventory) {\n accu.inventory.device_type = [].concat(attribute.value);\n }\n return accu;\n },\n { inventory: { device_type: [], artifact_name: '' }, identity: {}, monitor: {}, system: {}, tags: {} }\n );\n\nexport const isDarkMode = mode => mode === DARK_MODE;\ntype Line = { addon?: string; amount: number; currency: string; description: string; product: 'mender_standard' | 'mender_micro'; quantity: number };\n\nexport const parseSubscriptionPreview = (lines: Line[]): Omit<PricePreview, 'total'> =>\n lines.reduce((acc, { addon, amount, product }) => {\n const tier = product.replace('mender_', '');\n if (!acc[tier]) {\n acc[tier] = {\n amount: 0,\n addons: {}\n };\n }\n if (!addon) {\n acc[tier].amount += amount;\n } else {\n acc[tier].addons[addon] = (acc[tier].addons[addon] ?? 0) + amount;\n }\n return acc;\n }, {});\n"],"mappings":"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","names":["filter"]}
1
+ {"version":3,"sources":["../src/utils.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 type { DeviceAttribute } from '@northern.tech/types/DeviceAttribute';\nimport type { Scope } from '@northern.tech/types/MenderTypes';\nimport { duplicateFilter, yes } from '@northern.tech/utils/helpers';\n\nimport type { DeviceIssueOptionKey } from './constants';\nimport {\n ATTRIBUTE_SCOPES,\n DARK_MODE,\n DEPLOYMENT_STATES,\n DEVICE_FILTERING_OPTIONS,\n DEVICE_ISSUE_OPTIONS,\n DEVICE_LIST_MAXIMUM_LENGTH,\n defaultStats,\n deploymentDisplayStates,\n deploymentStatesToSubstates,\n deploymentStatesToSubstatesWithSkipped,\n emptyFilter,\n emptyUiPermissions,\n softwareIndicator\n} from './constants';\nimport type { DeviceFilter, DeviceGroup, InventoryAttributes } from './devicesSlice';\n\n// for some reason these functions can not be stored in the deviceConstants...\nconst filterProcessors = {\n [DEVICE_FILTERING_OPTIONS.$gt.key]: val => Number(val) || val,\n [DEVICE_FILTERING_OPTIONS.$gte.key]: val => Number(val) || val,\n [DEVICE_FILTERING_OPTIONS.$lt.key]: val => Number(val) || val,\n [DEVICE_FILTERING_OPTIONS.$lte.key]: val => Number(val) || val,\n [DEVICE_FILTERING_OPTIONS.$ltne.key]: val => Number(val) || val,\n [DEVICE_FILTERING_OPTIONS.$in.key]: val => ('' + val).split(',').map(i => i.trim()),\n [DEVICE_FILTERING_OPTIONS.$nin.key]: val => ('' + val).split(',').map(i => i.trim()),\n [DEVICE_FILTERING_OPTIONS.$exists.key]: yes,\n [DEVICE_FILTERING_OPTIONS.$nexists.key]: () => false\n};\nconst filterAliases = {\n $nexists: { alias: DEVICE_FILTERING_OPTIONS.$exists.key, value: false }\n};\nexport const mapFiltersToTerms = filters =>\n filters.map(filter => ({\n scope: filter.scope,\n attribute: filter.key,\n type: filterAliases[filter.operator]?.alias || filter.operator,\n value: filterProcessors.hasOwnProperty(filter.operator) ? filterProcessors[filter.operator](filter.value) : filter.value\n }));\nexport const mapTermsToFilters = terms =>\n terms.map(term => {\n const aliasedFilter = Object.entries(filterAliases).find(\n aliasDefinition => aliasDefinition[1].alias === term.type && aliasDefinition[1].value === term.value\n );\n const operator = aliasedFilter ? aliasedFilter[0] : term.type;\n return { scope: term.scope as Scope, key: term.attribute, operator, value: term.value };\n });\n\nconst convertIssueOptionsToFilters = (issuesSelection, filtersState = {}) =>\n issuesSelection.map(item => {\n if (typeof DEVICE_ISSUE_OPTIONS[item].filterRule.value === 'function') {\n return { ...DEVICE_ISSUE_OPTIONS[item].filterRule, value: DEVICE_ISSUE_OPTIONS[item].filterRule.value(filtersState) };\n }\n return DEVICE_ISSUE_OPTIONS[item].filterRule;\n });\n\nexport const convertDeviceListStateToFilters = ({\n filters = [],\n group,\n groups = { byId: {} },\n offlineThreshold,\n selectedIssues = [],\n status\n}: {\n filters?: DeviceFilter[];\n group?: string;\n groups?: { byId: Record<string, DeviceGroup> };\n offlineThreshold?: string;\n selectedIssues?: DeviceIssueOptionKey[];\n status?: string;\n}) => {\n let applicableFilters = [...filters];\n if (typeof group === 'string' && !(groups.byId[group]?.filters || applicableFilters).length) {\n applicableFilters.push({ key: 'group', value: group, operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: 'system' });\n }\n const nonMonitorFilters = applicableFilters.filter(\n filter =>\n !Object.values(DEVICE_ISSUE_OPTIONS).some(\n ({ filterRule }) => filter.scope !== 'inventory' && filterRule.scope === filter.scope && filterRule.key === filter.key\n )\n );\n const deviceIssueFilters = convertIssueOptionsToFilters(selectedIssues, { offlineThreshold });\n applicableFilters = [...nonMonitorFilters, ...deviceIssueFilters];\n const effectiveFilters = status\n ? [...applicableFilters, { key: 'status', value: status, operator: DEVICE_FILTERING_OPTIONS.$eq.key, scope: 'identity' }]\n : applicableFilters;\n return { applicableFilters: nonMonitorFilters, filterTerms: mapFiltersToTerms(effectiveFilters) };\n};\n\nconst filterCompare = (filter, item) => Object.keys(emptyFilter).every(key => item[key]?.toString() === filter[key]?.toString());\n\nexport const filtersFilter = (item, index, array) => {\n const firstIndex = array.findIndex(filter => filterCompare(filter, item));\n return firstIndex === index;\n};\n\nexport const listItemMapper = <T>(\n byId: Record<string, T>,\n ids: string[],\n { cutOffSize = DEVICE_LIST_MAXIMUM_LENGTH, defaultObject = {} }: { cutOffSize?: number; defaultObject?: T }\n): T[] =>\n ids.slice(0, cutOffSize).reduce((accu, id) => {\n if (id && byId[id]) {\n accu.push({ ...defaultObject, ...byId[id] });\n }\n return accu;\n }, []);\n\nexport const mergePermissions = (existingPermissions = { ...emptyUiPermissions }, addedPermissions) =>\n Object.entries(existingPermissions).reduce(\n (accu, [key, value]) => {\n let values;\n if (!accu[key]) {\n accu[key] = value;\n return accu;\n }\n if (Array.isArray(value)) {\n values = [...value, ...accu[key]].filter(duplicateFilter);\n } else {\n values = mergePermissions(accu[key], { ...value });\n }\n accu[key] = values;\n return accu;\n },\n { ...addedPermissions }\n );\n\nexport const mapUserRolesToUiPermissions = (userRoles, roles) =>\n userRoles.reduce(\n (accu, roleId) => {\n if (!(roleId && roles[roleId])) {\n return accu;\n }\n return mergePermissions(accu, roles[roleId].uiPermissions);\n },\n { ...emptyUiPermissions }\n );\n\nexport const progress = ({ loaded, total }) => {\n let uploadProgress = (loaded / total) * 100;\n return (uploadProgress = uploadProgress < 50 ? Math.ceil(uploadProgress) : Math.round(uploadProgress));\n};\n\nexport const extractErrorMessage = (err, fallback = '') =>\n err.response?.data?.error?.message || err.response?.data?.error || err.error || err.message || fallback;\n\nexport const ensureVersionString = (software, fallback) =>\n software.length && software !== 'artifact_name' ? (software.endsWith(softwareIndicator) ? software : `${software}${softwareIndicator}`) : fallback;\n\nexport const getComparisonCompatibleVersion = version => (isNaN(version.charAt(0)) && version !== 'next' ? 'master' : version);\n\nexport const stringToBoolean = content => {\n if (!content) {\n return false;\n }\n const string = content + '';\n switch (string.trim().toLowerCase()) {\n case 'true':\n case 'yes':\n case '1':\n return true;\n case 'false':\n case 'no':\n case '0':\n case null:\n return false;\n default:\n return Boolean(string);\n }\n};\n\nexport const groupDeploymentDevicesStats = deployment => {\n const deviceStatCollector = (deploymentStates, devices) =>\n Object.values(devices).reduce((accu, device) => (deploymentStates.includes(device.status) ? accu + 1 : accu), 0);\n\n const inprogress = deviceStatCollector(deploymentStatesToSubstates.inprogress, deployment.devices);\n const pending = deviceStatCollector(deploymentStatesToSubstates.pending, deployment.devices);\n const successes = deviceStatCollector(deploymentStatesToSubstates.successes, deployment.devices);\n const failures = deviceStatCollector(deploymentStatesToSubstates.failures, deployment.devices);\n const paused = deviceStatCollector(deploymentStatesToSubstates.paused, deployment.devices);\n return { inprogress, paused, pending, successes, failures };\n};\n\nexport const statCollector = (items, statistics) => items.reduce((accu, property) => accu + Number(statistics[property] || 0), 0);\nexport const groupDeploymentStats = (deployment, withSkipped) => {\n const { statistics = {} } = deployment;\n const { status = {} } = statistics;\n const stats = { ...defaultStats, ...status };\n let groupStates = deploymentStatesToSubstates;\n let result = {};\n if (withSkipped) {\n groupStates = deploymentStatesToSubstatesWithSkipped;\n result.skipped = statCollector(groupStates.skipped, stats);\n }\n result = {\n ...result,\n // don't include 'pending' as inprogress, as all remaining devices will be pending - we don't discriminate based on phase membership\n inprogress: statCollector(groupStates.inprogress, stats),\n pending: statCollector(groupStates.pending, stats),\n successes: statCollector(groupStates.successes, stats),\n failures: statCollector(groupStates.failures, stats),\n paused: statCollector(groupStates.paused, stats)\n };\n return result;\n};\n\nexport const getDeploymentState = deployment => {\n const { status: deploymentStatus = DEPLOYMENT_STATES.pending } = deployment;\n const { inprogress: currentProgressCount, paused } = groupDeploymentStats(deployment);\n\n let status = deploymentDisplayStates[deploymentStatus];\n if (deploymentStatus === DEPLOYMENT_STATES.pending && currentProgressCount === 0) {\n status = 'queued';\n } else if (paused > 0) {\n status = deploymentDisplayStates.paused;\n }\n return status;\n};\n\nexport const generateDeploymentGroupDetails = (filter, groupName) =>\n filter && filter.terms?.length\n ? `${groupName} (${filter.terms\n .map(filter => `${filter.attribute || filter.key} ${DEVICE_FILTERING_OPTIONS[filter.type || filter.operator].shortform} ${filter.value}`)\n .join(', ')})`\n : groupName;\n\nexport const mapDeviceAttributes = (\n attributes: DeviceAttribute[] = []\n): {\n identity: Record<string, string>;\n inventory: InventoryAttributes;\n monitor: Record<string, string>;\n system: Record<string, string>;\n tags: Record<string, string>;\n} =>\n attributes.reduce(\n (accu, attribute) => {\n if (!(attribute.value && attribute.name) && attribute.scope === ATTRIBUTE_SCOPES.inventory) {\n return accu;\n }\n accu[attribute.scope || ATTRIBUTE_SCOPES.inventory] = {\n ...accu[attribute.scope || ATTRIBUTE_SCOPES.inventory],\n [attribute.name]: attribute.value\n };\n if (attribute.name === 'device_type' && attribute.scope === ATTRIBUTE_SCOPES.inventory) {\n accu.inventory.device_type = [].concat(attribute.value);\n }\n return accu;\n },\n { inventory: { device_type: [], artifact_name: '' }, identity: {}, monitor: {}, system: {}, tags: {} }\n );\n\nexport const isDarkMode = mode => mode === DARK_MODE;\ntype Line = { addon?: string; amount: number; currency: string; description: string; product: 'mender_standard' | 'mender_micro'; quantity: number };\n\nexport const parseSubscriptionPreview = (lines: Line[]): Omit<PricePreview, 'total'> =>\n lines.reduce((acc, { addon, amount, product }) => {\n const tier = product.replace('mender_', '');\n if (!acc[tier]) {\n acc[tier] = {\n amount: 0,\n addons: {}\n };\n }\n if (!addon) {\n acc[tier].amount += amount;\n } else {\n acc[tier].addons[addon] = (acc[tier].addons[addon] ?? 0) + amount;\n }\n return acc;\n }, {});\n\nexport const convertToBackendSPLimits = (limits, spLimits) =>\n Object.fromEntries(\n Object.entries(limits)\n .filter(([key]) => !!spLimits[key])\n .map(([key, limit]) => {\n const { backendId } = spLimits[key];\n return [backendId, { Name: backendId, value: Number(limit) || 0 }];\n })\n );\n"],"mappings":"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","names":["filter"]}
@@ -2,26 +2,26 @@ import {
2
2
  commonErrorFallback,
3
3
  commonErrorHandler,
4
4
  createAppAsyncThunk
5
- } from "./chunk-WTVM2QSK.js";
5
+ } from "./chunk-EZRW3IQG.js";
6
6
  import {
7
7
  general_api_default
8
8
  } from "./chunk-6NLGT2LD.js";
9
9
  import {
10
10
  actions_default
11
- } from "./chunk-CEO2PODV.js";
11
+ } from "./chunk-DOT4GDYO.js";
12
12
  import {
13
13
  actions,
14
14
  sliceName
15
15
  } from "./chunk-NYDBCHD7.js";
16
16
  import {
17
17
  getSearchEndpoint
18
- } from "./chunk-KIKY6LHH.js";
18
+ } from "./chunk-E7PTHNNO.js";
19
19
  import {
20
20
  getDeviceFilters
21
21
  } from "./chunk-2AGBXDGF.js";
22
22
  import {
23
23
  convertDeviceListStateToFilters
24
- } from "./chunk-UTBSK7B6.js";
24
+ } from "./chunk-S7XYEGLR.js";
25
25
  import {
26
26
  DEVICE_LIST_DEFAULTS,
27
27
  TIMEOUTS,
@@ -107,4 +107,4 @@ export {
107
107
  getDeviceMonitorConfig,
108
108
  changeNotificationSetting
109
109
  };
110
- //# sourceMappingURL=chunk-QSTJRY3C.js.map
110
+ //# sourceMappingURL=chunk-T2BICNAM.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getDeviceMonitorConfig,
3
3
  getLatestDeviceAlerts
4
- } from "./chunk-QSTJRY3C.js";
4
+ } from "./chunk-T2BICNAM.js";
5
5
  import {
6
6
  commonErrorFallback,
7
7
  commonErrorHandler,
8
8
  createAppAsyncThunk
9
- } from "./chunk-WTVM2QSK.js";
9
+ } from "./chunk-EZRW3IQG.js";
10
10
  import {
11
11
  users_api_default
12
12
  } from "./chunk-3IXBQAMO.js";
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-6NLGT2LD.js";
16
16
  import {
17
17
  actions_default
18
- } from "./chunk-CEO2PODV.js";
18
+ } from "./chunk-DOT4GDYO.js";
19
19
  import {
20
20
  actions as actions6,
21
21
  sliceName as sliceName6
@@ -52,7 +52,14 @@ import {
52
52
  getSearchEndpoint,
53
53
  getTenantCapabilities,
54
54
  getUserCapabilities
55
- } from "./chunk-KIKY6LHH.js";
55
+ } from "./chunk-E7PTHNNO.js";
56
+ import {
57
+ getAuditlogState,
58
+ getDeviceTwinIntegrations,
59
+ getOrganization,
60
+ getSpLimits,
61
+ getTenantsList
62
+ } from "./chunk-X6AM6P6X.js";
56
63
  import {
57
64
  getCurrentSession,
58
65
  getCurrentUser,
@@ -64,13 +71,7 @@ import {
64
71
  getTooltipsState,
65
72
  getUserSettings,
66
73
  getUsersById
67
- } from "./chunk-NKS5ASWX.js";
68
- import {
69
- getAuditlogState,
70
- getDeviceTwinIntegrations,
71
- getOrganization,
72
- getTenantsList
73
- } from "./chunk-X6AM6P6X.js";
74
+ } from "./chunk-IDKMS5RA.js";
74
75
  import {
75
76
  getDeploymentsById,
76
77
  getDeploymentsByStatus
@@ -92,6 +93,7 @@ import {
92
93
  } from "./chunk-4BHM6WVX.js";
93
94
  import {
94
95
  convertDeviceListStateToFilters,
96
+ convertToBackendSPLimits,
95
97
  extractErrorMessage,
96
98
  filtersFilter,
97
99
  getComparisonCompatibleVersion,
@@ -101,7 +103,7 @@ import {
101
103
  mergePermissions,
102
104
  parseSubscriptionPreview,
103
105
  progress
104
- } from "./chunk-UTBSK7B6.js";
106
+ } from "./chunk-S7XYEGLR.js";
105
107
  import {
106
108
  ALL_DEVICE_STATES,
107
109
  ALL_RELEASES,
@@ -1780,16 +1782,17 @@ var setTenantsListState = createAppAsyncThunk(
1780
1782
  return dispatch(actions5.setTenantListState({ ...nextState }));
1781
1783
  }
1782
1784
  );
1783
- var editTenant = createAppAsyncThunk(
1784
- `${sliceName5}/editDeviceLimit`,
1785
- ({ device_limits, id, name }, { dispatch }) => general_api_default.put(`${tenantadmApiUrlv2}/tenants/${id}/child`, { device_limits, name }).catch((err) => commonErrorHandler(err, `Device Limit cannot be changed`, dispatch)).then(
1785
+ var editTenant = createAppAsyncThunk(`${sliceName5}/editDeviceLimit`, ({ deviceLimits, id, name }, { dispatch, getState }) => {
1786
+ const spLimits = getSpLimits(getState());
1787
+ const device_limits = convertToBackendSPLimits(deviceLimits, spLimits);
1788
+ return general_api_default.put(`${tenantadmApiUrlv2}/tenants/${id}/child`, { device_limits, name }).catch((err) => commonErrorHandler(err, `Device Limit cannot be changed`, dispatch)).then(
1786
1789
  () => Promise.all([
1787
1790
  dispatch(setSnackbar3("Tenant was changed successfully")),
1788
1791
  dispatch(getUserOrganization()),
1789
1792
  new Promise((resolve) => setTimeout(() => resolve(dispatch(getTenants())), TIMEOUTS.oneSecond))
1790
1793
  ])
1791
- )
1792
- );
1794
+ );
1795
+ });
1793
1796
  var editBillingProfile = createAppAsyncThunk(
1794
1797
  `${sliceName5}/editBillingProfileEmail`,
1795
1798
  ({ billingProfile }, { dispatch }) => general_api_default.patch(`${tenantadmApiUrlv2}/billing/profile`, billingProfile).catch((err) => commonErrorHandler(err, `Failed to change billing profile`, dispatch)).then(() => Promise.all([dispatch(setSnackbar3("Billing Profile was changed successfully")), dispatch(getUserBilling())]))
@@ -2860,4 +2863,4 @@ export {
2860
2863
  setAllTooltipsReadState,
2861
2864
  submitUserFeedback
2862
2865
  };
2863
- //# sourceMappingURL=chunk-4LXBO2FO.js.map
2866
+ //# sourceMappingURL=chunk-XAAJ4NVG.js.map