@northern.tech/store 0.5.2 → 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.
Files changed (216) hide show
  1. package/dist/actions.cjs +47 -0
  2. package/dist/actions.cjs.map +1 -1
  3. package/dist/actions.d.cts +6 -2
  4. package/dist/actions.d.ts +6 -2
  5. package/dist/actions.js +10 -10
  6. package/dist/api/general-api.cjs +1 -1
  7. package/dist/api/general-api.cjs.map +1 -1
  8. package/dist/api/general-api.d.cts +8 -8
  9. package/dist/api/general-api.d.ts +8 -8
  10. package/dist/api/general-api.js +4 -4
  11. package/dist/api/users-api.cjs +1 -1
  12. package/dist/api/users-api.cjs.map +1 -1
  13. package/dist/api/users-api.d.cts +1 -1
  14. package/dist/api/users-api.d.ts +1 -1
  15. package/dist/api/users-api.js +5 -5
  16. package/dist/appSlice/constants.cjs +1 -0
  17. package/dist/appSlice/constants.cjs.map +1 -1
  18. package/dist/appSlice/constants.d.cts +5 -0
  19. package/dist/appSlice/constants.d.ts +5 -0
  20. package/dist/appSlice/constants.js +1 -1
  21. package/dist/appSlice/index.cjs +1 -0
  22. package/dist/appSlice/index.cjs.map +1 -1
  23. package/dist/appSlice/index.js +3 -3
  24. package/dist/appSlice/mocks.cjs +1 -0
  25. package/dist/appSlice/mocks.cjs.map +1 -1
  26. package/dist/appSlice/mocks.js +3 -3
  27. package/dist/appSlice/thunks.cjs +76 -20
  28. package/dist/appSlice/thunks.cjs.map +1 -1
  29. package/dist/appSlice/thunks.js +25 -25
  30. package/dist/auth.cjs.map +1 -1
  31. package/dist/auth.js +3 -3
  32. package/dist/{chunk-MZNANSS2.js → chunk-4DOSYAJY.js} +2 -2
  33. package/dist/{chunk-R6KRH2IY.js → chunk-4UJXT6RF.js} +3 -3
  34. package/dist/{chunk-VUFRP6P3.js → chunk-5HYHE4HO.js} +2 -2
  35. package/dist/chunk-5HYHE4HO.js.map +1 -0
  36. package/dist/{chunk-ZJW3QIPM.js → chunk-66NK2ZV2.js} +2 -2
  37. package/dist/{chunk-PGFVHKP5.js → chunk-AVCIWAZB.js} +2 -2
  38. package/dist/{chunk-RS37Y2PQ.js → chunk-BNSSPYCA.js} +4 -4
  39. package/dist/chunk-BNSSPYCA.js.map +1 -0
  40. package/dist/{chunk-UE5N5VO3.js → chunk-CEEXZF5E.js} +3 -3
  41. package/dist/{chunk-UGSLGUS6.js → chunk-CWZKWW74.js} +2 -2
  42. package/dist/{chunk-3P3IE42O.js → chunk-DE25YP6N.js} +62 -54
  43. package/dist/chunk-DE25YP6N.js.map +1 -0
  44. package/dist/{chunk-QYLGIR4W.js → chunk-DXJ2WS3N.js} +3 -2
  45. package/dist/chunk-DXJ2WS3N.js.map +1 -0
  46. package/dist/{chunk-H5FAPMJJ.js → chunk-DYN7AU7R.js} +9 -9
  47. package/dist/{chunk-JXQUFKID.js → chunk-GRVTVLIZ.js} +7 -2
  48. package/dist/chunk-GRVTVLIZ.js.map +1 -0
  49. package/dist/{chunk-KC7SKI3U.js → chunk-HLTP624H.js} +8 -5
  50. package/dist/{chunk-KC7SKI3U.js.map → chunk-HLTP624H.js.map} +1 -1
  51. package/dist/{chunk-F26IKSML.js → chunk-I6JE3OLT.js} +8 -8
  52. package/dist/{chunk-ABJLRDCO.js → chunk-IY76MO6R.js} +2 -2
  53. package/dist/{chunk-V3QEONX7.js → chunk-J74LNK6P.js} +11 -11
  54. package/dist/{chunk-QKPV5RRN.js → chunk-JOK26PI7.js} +51 -18
  55. package/dist/chunk-JOK26PI7.js.map +1 -0
  56. package/dist/{chunk-KJNNEDRV.js → chunk-JZXNRDO2.js} +2 -2
  57. package/dist/{chunk-MSOXMRF7.js → chunk-KGSJ7CSA.js} +12 -3
  58. package/dist/{chunk-MSOXMRF7.js.map → chunk-KGSJ7CSA.js.map} +1 -1
  59. package/dist/{chunk-OOICURFL.js → chunk-KJJ47UIO.js} +48 -2
  60. package/dist/chunk-KJJ47UIO.js.map +1 -0
  61. package/dist/{chunk-7C4SQBEE.js → chunk-MRXTMI6O.js} +1 -1
  62. package/dist/chunk-MRXTMI6O.js.map +1 -0
  63. package/dist/{chunk-HFOTAPIJ.js → chunk-PY6ID7TL.js} +2 -1
  64. package/dist/chunk-PY6ID7TL.js.map +1 -0
  65. package/dist/{chunk-SCZLNFB5.js → chunk-VCTZ25Q5.js} +9 -9
  66. package/dist/{chunk-YY6SKZDF.js → chunk-W37ETKI6.js} +3 -12
  67. package/dist/chunk-W37ETKI6.js.map +1 -0
  68. package/dist/{chunk-QHK7GGV4.js → chunk-ZZ3YDCYZ.js} +3 -3
  69. package/dist/commonConstants.cjs.map +1 -1
  70. package/dist/commonConstants.d.cts +6 -5
  71. package/dist/commonConstants.d.ts +6 -5
  72. package/dist/commonConstants.js +2 -2
  73. package/dist/commonSelectors.cjs +8 -18
  74. package/dist/commonSelectors.cjs.map +1 -1
  75. package/dist/commonSelectors.js +9 -9
  76. package/dist/constants.cjs +1 -0
  77. package/dist/constants.cjs.map +1 -1
  78. package/dist/constants.d.cts +1 -1
  79. package/dist/constants.d.ts +1 -1
  80. package/dist/constants.js +2 -2
  81. package/dist/deploymentsSlice/constants.js +2 -2
  82. package/dist/deploymentsSlice/index.cjs.map +1 -1
  83. package/dist/deploymentsSlice/index.d.cts +2 -2
  84. package/dist/deploymentsSlice/index.d.ts +2 -2
  85. package/dist/deploymentsSlice/index.js +3 -3
  86. package/dist/deploymentsSlice/mocks.cjs.map +1 -1
  87. package/dist/deploymentsSlice/mocks.js +3 -3
  88. package/dist/deploymentsSlice/selectors.cjs +6 -0
  89. package/dist/deploymentsSlice/selectors.cjs.map +1 -1
  90. package/dist/deploymentsSlice/selectors.d.cts +22 -1
  91. package/dist/deploymentsSlice/selectors.d.ts +22 -1
  92. package/dist/deploymentsSlice/selectors.js +5 -3
  93. package/dist/deploymentsSlice/thunks.cjs +78 -20
  94. package/dist/deploymentsSlice/thunks.cjs.map +1 -1
  95. package/dist/deploymentsSlice/thunks.d.cts +14 -1
  96. package/dist/deploymentsSlice/thunks.d.ts +14 -1
  97. package/dist/deploymentsSlice/thunks.js +27 -25
  98. package/dist/devicesSlice/constants.js +2 -2
  99. package/dist/devicesSlice/index.js +3 -3
  100. package/dist/devicesSlice/mocks.js +3 -3
  101. package/dist/devicesSlice/selectors.cjs.map +1 -1
  102. package/dist/devicesSlice/selectors.js +3 -3
  103. package/dist/devicesSlice/thunks.cjs +76 -20
  104. package/dist/devicesSlice/thunks.cjs.map +1 -1
  105. package/dist/devicesSlice/thunks.js +25 -25
  106. package/dist/liststatehook.cjs +6 -3
  107. package/dist/liststatehook.cjs.map +1 -1
  108. package/dist/liststatehook.d.cts +4 -2
  109. package/dist/liststatehook.d.ts +4 -2
  110. package/dist/liststatehook.js +3 -3
  111. package/dist/locationutils.cjs +6 -3
  112. package/dist/locationutils.cjs.map +1 -1
  113. package/dist/locationutils.d.cts +3 -1
  114. package/dist/locationutils.d.ts +3 -1
  115. package/dist/locationutils.js +3 -3
  116. package/dist/monitorSlice/index.js +3 -3
  117. package/dist/monitorSlice/mocks.js +3 -3
  118. package/dist/monitorSlice/thunks.cjs +56 -9
  119. package/dist/monitorSlice/thunks.cjs.map +1 -1
  120. package/dist/monitorSlice/thunks.js +21 -21
  121. package/dist/onboardingSlice/thunks.cjs +76 -20
  122. package/dist/onboardingSlice/thunks.cjs.map +1 -1
  123. package/dist/onboardingSlice/thunks.js +25 -25
  124. package/dist/organizationSlice/constants.js +2 -2
  125. package/dist/organizationSlice/index.js +3 -3
  126. package/dist/organizationSlice/mocks.js +3 -3
  127. package/dist/organizationSlice/selectors.cjs +0 -20
  128. package/dist/organizationSlice/selectors.cjs.map +1 -1
  129. package/dist/organizationSlice/selectors.d.cts +1 -155
  130. package/dist/organizationSlice/selectors.d.ts +1 -155
  131. package/dist/organizationSlice/selectors.js +3 -5
  132. package/dist/organizationSlice/thunks.cjs +99 -43
  133. package/dist/organizationSlice/thunks.cjs.map +1 -1
  134. package/dist/organizationSlice/thunks.d.cts +5 -5
  135. package/dist/organizationSlice/thunks.d.ts +5 -5
  136. package/dist/organizationSlice/thunks.js +25 -25
  137. package/dist/releasesSlice/index.cjs +46 -0
  138. package/dist/releasesSlice/index.cjs.map +1 -1
  139. package/dist/releasesSlice/index.d.cts +51 -3
  140. package/dist/releasesSlice/index.d.ts +51 -3
  141. package/dist/releasesSlice/index.js +3 -3
  142. package/dist/releasesSlice/mocks.cjs +46 -0
  143. package/dist/releasesSlice/mocks.cjs.map +1 -1
  144. package/dist/releasesSlice/mocks.d.cts +13 -0
  145. package/dist/releasesSlice/mocks.d.ts +13 -0
  146. package/dist/releasesSlice/mocks.js +3 -3
  147. package/dist/releasesSlice/selectors.cjs +13 -0
  148. package/dist/releasesSlice/selectors.cjs.map +1 -1
  149. package/dist/releasesSlice/selectors.d.cts +186 -1
  150. package/dist/releasesSlice/selectors.d.ts +186 -1
  151. package/dist/releasesSlice/selectors.js +12 -4
  152. package/dist/releasesSlice/thunks.cjs +99 -17
  153. package/dist/releasesSlice/thunks.cjs.map +1 -1
  154. package/dist/releasesSlice/thunks.d.cts +68 -3
  155. package/dist/releasesSlice/thunks.d.ts +68 -3
  156. package/dist/releasesSlice/thunks.js +26 -22
  157. package/dist/selectors.cjs +19 -20
  158. package/dist/selectors.cjs.map +1 -1
  159. package/dist/selectors.d.cts +5 -3
  160. package/dist/selectors.d.ts +5 -3
  161. package/dist/selectors.js +19 -11
  162. package/dist/sockethook.cjs.map +1 -1
  163. package/dist/sockethook.js +2 -2
  164. package/dist/store.cjs +47 -0
  165. package/dist/store.cjs.map +1 -1
  166. package/dist/store.d.cts +11 -110
  167. package/dist/store.d.ts +11 -110
  168. package/dist/store.js +12 -12
  169. package/dist/storehooks.cjs +142 -54
  170. package/dist/storehooks.cjs.map +1 -1
  171. package/dist/storehooks.js +26 -25
  172. package/dist/storehooks.js.map +1 -1
  173. package/dist/thunks.cjs +146 -53
  174. package/dist/thunks.cjs.map +1 -1
  175. package/dist/thunks.d.cts +3 -3
  176. package/dist/thunks.d.ts +3 -3
  177. package/dist/thunks.js +33 -27
  178. package/dist/useDeploymentDevice.cjs +76 -20
  179. package/dist/useDeploymentDevice.cjs.map +1 -1
  180. package/dist/useDeploymentDevice.js +25 -25
  181. package/dist/usersSlice/constants.js +2 -2
  182. package/dist/usersSlice/index.js +3 -3
  183. package/dist/usersSlice/mocks.js +3 -3
  184. package/dist/usersSlice/selectors.cjs.map +1 -1
  185. package/dist/usersSlice/selectors.js +4 -4
  186. package/dist/usersSlice/thunks.cjs +78 -22
  187. package/dist/usersSlice/thunks.cjs.map +1 -1
  188. package/dist/usersSlice/thunks.d.cts +18 -10
  189. package/dist/usersSlice/thunks.d.ts +18 -10
  190. package/dist/usersSlice/thunks.js +27 -27
  191. package/dist/utils.cjs.map +1 -1
  192. package/dist/utils.js +3 -3
  193. package/package.json +5 -5
  194. package/dist/chunk-3P3IE42O.js.map +0 -1
  195. package/dist/chunk-7C4SQBEE.js.map +0 -1
  196. package/dist/chunk-HFOTAPIJ.js.map +0 -1
  197. package/dist/chunk-JXQUFKID.js.map +0 -1
  198. package/dist/chunk-OOICURFL.js.map +0 -1
  199. package/dist/chunk-QKPV5RRN.js.map +0 -1
  200. package/dist/chunk-QYLGIR4W.js.map +0 -1
  201. package/dist/chunk-RS37Y2PQ.js.map +0 -1
  202. package/dist/chunk-VUFRP6P3.js.map +0 -1
  203. package/dist/chunk-YY6SKZDF.js.map +0 -1
  204. /package/dist/{chunk-MZNANSS2.js.map → chunk-4DOSYAJY.js.map} +0 -0
  205. /package/dist/{chunk-R6KRH2IY.js.map → chunk-4UJXT6RF.js.map} +0 -0
  206. /package/dist/{chunk-ZJW3QIPM.js.map → chunk-66NK2ZV2.js.map} +0 -0
  207. /package/dist/{chunk-PGFVHKP5.js.map → chunk-AVCIWAZB.js.map} +0 -0
  208. /package/dist/{chunk-UE5N5VO3.js.map → chunk-CEEXZF5E.js.map} +0 -0
  209. /package/dist/{chunk-UGSLGUS6.js.map → chunk-CWZKWW74.js.map} +0 -0
  210. /package/dist/{chunk-H5FAPMJJ.js.map → chunk-DYN7AU7R.js.map} +0 -0
  211. /package/dist/{chunk-F26IKSML.js.map → chunk-I6JE3OLT.js.map} +0 -0
  212. /package/dist/{chunk-ABJLRDCO.js.map → chunk-IY76MO6R.js.map} +0 -0
  213. /package/dist/{chunk-V3QEONX7.js.map → chunk-J74LNK6P.js.map} +0 -0
  214. /package/dist/{chunk-KJNNEDRV.js.map → chunk-JZXNRDO2.js.map} +0 -0
  215. /package/dist/{chunk-SCZLNFB5.js.map → chunk-VCTZ25Q5.js.map} +0 -0
  216. /package/dist/{chunk-QHK7GGV4.js.map → chunk-ZZ3YDCYZ.js.map} +0 -0
@@ -20,12 +20,16 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/releasesSlice/selectors.ts
21
21
  var selectors_exports = {};
22
22
  __export(selectors_exports, {
23
+ getDeltaJobById: () => getDeltaJobById,
24
+ getDeltaJobsById: () => getDeltaJobsById,
25
+ getDeltaJobsListState: () => getDeltaJobsListState,
23
26
  getHasReleases: () => getHasReleases,
24
27
  getReleaseListState: () => getReleaseListState,
25
28
  getReleaseTags: () => getReleaseTags,
26
29
  getReleaseTagsById: () => getReleaseTagsById,
27
30
  getReleasesById: () => getReleasesById,
28
31
  getReleasesList: () => getReleasesList,
32
+ getSelectedJob: () => getSelectedJob,
29
33
  getSelectedRelease: () => getSelectedRelease,
30
34
  getSelectedReleases: () => getSelectedReleases,
31
35
  getUpdateTypes: () => getUpdateTypes
@@ -414,14 +418,23 @@ var getHasReleases = (0, import_toolkit.createSelector)(
414
418
  );
415
419
  var getSelectedRelease = (0, import_toolkit.createSelector)([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id || ""] ?? {});
416
420
  var getSelectedReleases = (0, import_toolkit.createSelector)([getReleaseListState, getReleasesList], ({ selection }, releases) => selection.map((index) => releases[index]));
421
+ var getDeltaJobsListState = (state) => state.releases.deltaJobsList;
422
+ var getDeltaJobsById = (state) => state.releases.deltaJobs;
423
+ var getDeltaJobById = (0, import_toolkit.createSelector)([getDeltaJobsById, (_, jobId) => jobId], (byId, jobId) => byId[jobId]);
424
+ var getSelectedJobId = (state) => state.releases.selectedJob;
425
+ var getSelectedJob = (0, import_toolkit.createSelector)([getDeltaJobsById, getSelectedJobId], (byId, jobId) => byId[jobId || ""]);
417
426
  // Annotate the CommonJS export names for ESM import in node:
418
427
  0 && (module.exports = {
428
+ getDeltaJobById,
429
+ getDeltaJobsById,
430
+ getDeltaJobsListState,
419
431
  getHasReleases,
420
432
  getReleaseListState,
421
433
  getReleaseTags,
422
434
  getReleaseTagsById,
423
435
  getReleasesById,
424
436
  getReleasesList,
437
+ getSelectedJob,
425
438
  getSelectedRelease,
426
439
  getSelectedReleases,
427
440
  getUpdateTypes
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/releasesSlice/selectors.ts","../../src/utils.ts","../../src/constants.ts","../../src/commonConstants.tsx"],"sourcesContent":["// Copyright 2023 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 type { Release } from '@northern.tech/types/MenderTypes';\nimport { createSelector } from '@reduxjs/toolkit';\n\nimport type { RootState } from '../store';\nimport { listItemMapper } from '../utils';\n\nconst getSelectedReleaseId = (state: RootState) => state.releases.selectedRelease;\nexport const getReleasesById = (state: RootState) => state.releases.byId;\nexport const getReleaseTags = (state: RootState) => state.releases.tags;\nexport const getReleaseListState = (state: RootState) => state.releases.releasesList;\nconst getListedReleases = (state: RootState) => state.releases.releasesList.releaseIds;\nexport const getUpdateTypes = (state: RootState) => state.releases.updateTypes;\nconst releaseDefaults = {};\nconst getReleaseMappingDefaults = () => releaseDefaults;\nexport const getReleasesList = createSelector([getReleasesById, getListedReleases, getReleaseMappingDefaults], listItemMapper<Release>);\n\nexport const getReleaseTagsById = createSelector([getReleaseTags], releaseTags => releaseTags.reduce((accu, key) => ({ ...accu, [key]: key }), {}));\nexport const getHasReleases = createSelector(\n [getReleaseListState, getReleasesById],\n ({ searchTotal, total }, byId) => !!(Object.keys(byId).length || total || searchTotal)\n);\n\nexport const getSelectedRelease = createSelector([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id || ''] ?? {});\n\nexport const getSelectedReleases = createSelector([getReleaseListState, getReleasesList], ({ selection }, releases) => selection.map(index => releases[index]));\n","// 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 { 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, 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; quantity: number };\n\nexport const parseSubscriptionPreview = (lines: Line[]) =>\n lines.reduce(\n (acc, { addon, amount }) => {\n const key = addon || 'plan';\n if (key === 'plan') {\n acc.plan += amount;\n } else {\n acc.addons[key] = (acc.addons[key] ?? 0) + amount;\n }\n return acc;\n },\n { plan: 0, addons: {} }\n );\n","// 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 {\n ALL_DEVICES,\n ALL_DEVICE_STATES,\n ALL_RELEASES,\n APPLICATION_JSON_CONTENT_TYPE,\n APPLICATION_JWT_CONTENT_TYPE,\n ATTRIBUTE_SCOPES,\n DEVICE_FILTERING_OPTIONS,\n DEVICE_ISSUE_OPTIONS,\n DEVICE_LIST_DEFAULTS,\n DEVICE_STATES,\n PermissionTypes,\n SORTING_OPTIONS,\n alertChannels,\n apiRoot,\n apiUrl,\n auditLogsApiUrl,\n defaultPermissionSets,\n deploymentsApiUrl,\n deploymentsApiUrlV2,\n deviceAuthV2,\n deviceConfig,\n deviceConnect,\n emptyRole,\n emptyUiPermissions,\n headerNames,\n inventoryApiUrl,\n inventoryApiUrlV2,\n iotManagerBaseURL,\n limitDefault,\n maxSessionAge,\n monitorApiUrlv1,\n reportingApiUrl,\n rolesById,\n rolesByName,\n scopedPermissionAreas,\n serviceProviderRolesById,\n ssoIdpApiUrlv1,\n tenantadmApiUrlv1,\n tenantadmApiUrlv2,\n twoFAStates,\n uiPermissionsByArea,\n uiPermissionsById,\n useradmApiUrl,\n useradmApiUrlv1,\n useradmApiUrlv2\n} from '@northern.tech/utils/constants';\nimport type {\n AnyPermission,\n AuditLogPermission,\n DeploymentPermission,\n DeviceIssueOptionKey,\n GroupsPermission,\n PermissionObject,\n PermissionSet,\n PermissionSetId,\n ReleasesPermission,\n Role,\n ScopedPermissionsByAreaKey,\n SortOptions,\n UiPermissionsByAreaKey,\n UiPermissionsByIdKey,\n UiPermissionsDefinition,\n UserManagementPermission\n} from '@northern.tech/utils/constants';\n\nexport {\n alertChannels,\n ALL_DEVICE_STATES,\n ALL_DEVICES,\n ALL_RELEASES,\n APPLICATION_JSON_CONTENT_TYPE,\n APPLICATION_JWT_CONTENT_TYPE,\n ATTRIBUTE_SCOPES,\n apiRoot,\n apiUrl,\n auditLogsApiUrl,\n defaultPermissionSets,\n deploymentsApiUrl,\n deploymentsApiUrlV2,\n DEVICE_FILTERING_OPTIONS,\n DEVICE_ISSUE_OPTIONS,\n DEVICE_LIST_DEFAULTS,\n DEVICE_STATES,\n deviceAuthV2,\n deviceConfig,\n deviceConnect,\n emptyRole,\n emptyUiPermissions,\n headerNames,\n inventoryApiUrl,\n inventoryApiUrlV2,\n iotManagerBaseURL,\n monitorApiUrlv1,\n limitDefault,\n maxSessionAge,\n PermissionTypes,\n reportingApiUrl,\n rolesById,\n rolesByName,\n scopedPermissionAreas,\n serviceProviderRolesById,\n SORTING_OPTIONS,\n ssoIdpApiUrlv1,\n tenantadmApiUrlv1,\n tenantadmApiUrlv2,\n twoFAStates,\n uiPermissionsByArea,\n uiPermissionsById,\n useradmApiUrl,\n useradmApiUrlv1,\n useradmApiUrlv2\n};\n\nexport type {\n AnyPermission,\n AuditLogPermission,\n DeploymentPermission,\n DeviceIssueOptionKey,\n GroupsPermission,\n PermissionObject,\n PermissionSet,\n PermissionSetId,\n ReleasesPermission,\n Role,\n ScopedPermissionsByAreaKey,\n SortOptions,\n UiPermissionsByAreaKey,\n UiPermissionsByIdKey,\n UiPermissionsDefinition,\n UserManagementPermission\n};\n\nexport * from './appSlice/constants';\nexport * from './commonConstants';\nexport * from './deploymentsSlice/constants';\nexport * from './devicesSlice/constants';\nexport * from './monitorSlice/constants';\nexport * from './onboardingSlice/constants';\nexport * from './organizationSlice/constants';\nexport * from './releasesSlice/constants';\nexport * from './usersSlice/constants';\n","// 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 { mdiAws as AWS, mdiMicrosoftAzure as Azure } from '@mdi/js';\nimport { Credentials, Integration } from '@northern.tech/types/MenderTypes';\n\nimport type { DEVICE_FILTERING_OPTIONS } from './constants';\nimport { ATTRIBUTE_SCOPES } from './constants';\n\nexport const timeUnits = {\n days: 'days',\n minutes: 'minutes',\n hours: 'hours'\n};\n\nexport const UNGROUPED_GROUP = { id: '*|=ungrouped=|*', name: 'Unassigned' };\n\nexport const DEVICE_LIST_MAXIMUM_LENGTH = 50;\n\nexport type FilterOperator = keyof typeof DEVICE_FILTERING_OPTIONS;\n\nconst oneSecond = 1000;\nexport const TIMEOUTS = {\n debounceDefault: 700,\n debounceShort: 300,\n halfASecond: 0.5 * oneSecond,\n oneSecond,\n twoSeconds: 2 * oneSecond,\n threeSeconds: 3 * oneSecond,\n fiveSeconds: 5 * oneSecond,\n refreshDefault: 10 * oneSecond,\n refreshLong: 60 * oneSecond\n};\n\nexport const DEVICE_ONLINE_CUTOFF = { interval: 1, intervalName: timeUnits.days };\n\nexport const defaultIdAttribute = Object.freeze({ attribute: 'id', scope: ATTRIBUTE_SCOPES.identity });\n\nexport const credentialTypes = {\n aws: Credentials.type.AWS,\n http: Credentials.type.HTTP,\n sas: Credentials.type.SAS,\n x509: 'x509'\n};\nexport const EXTERNAL_PROVIDER = {\n 'iot-core': {\n credentialsType: credentialTypes.aws as Credentials.type.AWS,\n icon: AWS,\n title: 'AWS IoT Core',\n twinTitle: 'Device Shadow',\n provider: 'iot-core',\n enabled: true,\n deviceTwin: true,\n configHint: <>For help finding your AWS IoT Core connection string, check the AWS IoT documentation.</>\n },\n 'iot-hub': {\n credentialsType: credentialTypes.sas as Credentials.type.SAS,\n icon: Azure,\n title: 'Azure IoT Hub',\n twinTitle: 'Device Twin',\n provider: 'iot-hub',\n enabled: true,\n deviceTwin: true,\n configHint: (\n <span>\n For help finding your Azure IoT Hub connection string, look under &apos;Shared access policies&apos; in the Microsoft Azure UI as described{' '}\n {\n <a\n href=\"https://devblogs.microsoft.com/iotdev/understand-different-connection-strings-in-azure-iot-hub/#iothubconn\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n here\n </a>\n }\n .\n </span>\n )\n },\n webhook: {\n credentialsType: credentialTypes.http as Credentials.type.HTTP,\n deviceTwin: false,\n twinTitle: '',\n // disable the webhook provider here, since it is treated different than other integrations, with a custom configuration & management view, etc.\n enabled: false,\n provider: 'webhook'\n }\n} as const;\n\nexport interface Webhook extends Integration {\n provider: Integration.provider.WEBHOOK;\n}\n\nexport const emptyWebhook: Webhook = {\n description: '',\n provider: Integration.provider.WEBHOOK,\n credentials: {\n type: EXTERNAL_PROVIDER.webhook.credentialsType,\n [EXTERNAL_PROVIDER.webhook.credentialsType]: {\n secret: '',\n url: ''\n }\n }\n};\n\ninterface CountryType {\n code: string;\n label: string;\n}\nexport const MAX_PAGE_SIZE = 500;\nconst regionNames = new Intl.DisplayNames(['en'], { type: 'region' });\nexport const countries: readonly CountryType[] = [\n 'AD',\n 'AE',\n 'AF',\n 'AG',\n 'AI',\n 'AL',\n 'AM',\n 'AO',\n 'AQ',\n 'AR',\n 'AS',\n 'AT',\n 'AU',\n 'AW',\n 'AX',\n 'AZ',\n 'BA',\n 'BB',\n 'BD',\n 'BE',\n 'BF',\n 'BG',\n 'BH',\n 'BI',\n 'BJ',\n 'BL',\n 'BM',\n 'BN',\n 'BO',\n 'BR',\n 'BS',\n 'BT',\n 'BV',\n 'BW',\n 'BY',\n 'BZ',\n 'CA',\n 'CC',\n 'CD',\n 'CF',\n 'CG',\n 'CH',\n 'CI',\n 'CK',\n 'CL',\n 'CM',\n 'CN',\n 'CO',\n 'CR',\n 'CU',\n 'CV',\n 'CW',\n 'CX',\n 'CY',\n 'CZ',\n 'DE',\n 'DJ',\n 'DK',\n 'DM',\n 'DO',\n 'DZ',\n 'EC',\n 'EE',\n 'EG',\n 'EH',\n 'ER',\n 'ES',\n 'ET',\n 'FI',\n 'FJ',\n 'FK',\n 'FM',\n 'FO',\n 'FR',\n 'GA',\n 'GB',\n 'GD',\n 'GE',\n 'GF',\n 'GG',\n 'GH',\n 'GI',\n 'GL',\n 'GM',\n 'GN',\n 'GP',\n 'GQ',\n 'GR',\n 'GS',\n 'GT',\n 'GU',\n 'GW',\n 'GY',\n 'HK',\n 'HM',\n 'HN',\n 'HR',\n 'HT',\n 'HU',\n 'ID',\n 'IE',\n 'IL',\n 'IM',\n 'IN',\n 'IO',\n 'IQ',\n 'IR',\n 'IS',\n 'IT',\n 'JE',\n 'JM',\n 'JO',\n 'JP',\n 'KE',\n 'KG',\n 'KH',\n 'KI',\n 'KM',\n 'KN',\n 'KP',\n 'KR',\n 'KW',\n 'KY',\n 'KZ',\n 'LA',\n 'LB',\n 'LC',\n 'LI',\n 'LK',\n 'LR',\n 'LS',\n 'LT',\n 'LU',\n 'LV',\n 'LY',\n 'MA',\n 'MC',\n 'MD',\n 'ME',\n 'MF',\n 'MG',\n 'MH',\n 'MK',\n 'ML',\n 'MM',\n 'MN',\n 'MO',\n 'MP',\n 'MQ',\n 'MR',\n 'MS',\n 'MT',\n 'MU',\n 'MV',\n 'MW',\n 'MX',\n 'MY',\n 'MZ',\n 'NA',\n 'NC',\n 'NE',\n 'NF',\n 'NG',\n 'NI',\n 'NL',\n 'NO',\n 'NP',\n 'NR',\n 'NU',\n 'NZ',\n 'OM',\n 'PA',\n 'PE',\n 'PF',\n 'PG',\n 'PH',\n 'PK',\n 'PL',\n 'PM',\n 'PN',\n 'PR',\n 'PS',\n 'PT',\n 'PW',\n 'PY',\n 'QA',\n 'RE',\n 'RO',\n 'RS',\n 'RU',\n 'RW',\n 'SA',\n 'SB',\n 'SC',\n 'SD',\n 'SE',\n 'SG',\n 'SH',\n 'SI',\n 'SJ',\n 'SK',\n 'SL',\n 'SM',\n 'SN',\n 'SO',\n 'SR',\n 'SS',\n 'ST',\n 'SV',\n 'SX',\n 'SY',\n 'SZ',\n 'TC',\n 'TD',\n 'TF',\n 'TG',\n 'TH',\n 'TJ',\n 'TK',\n 'TL',\n 'TM',\n 'TN',\n 'TO',\n 'TR',\n 'TT',\n 'TV',\n 'TW',\n 'TZ',\n 'UA',\n 'UG',\n 'US',\n 'UY',\n 'UZ',\n 'VA',\n 'VC',\n 'VE',\n 'VG',\n 'VI',\n 'VN',\n 'VU',\n 'WF',\n 'WS',\n 'XK',\n 'YE',\n 'YT',\n 'ZA',\n 'ZM',\n 'ZW'\n]\n .map(code => ({ code, label: regionNames.of(code) }))\n .sort((a, b) => a.label.localeCompare(b.label));\n"],"mappings":"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A,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAA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","names":["import_constants","AWS","Azure"]}
1
+ {"version":3,"sources":["../../src/releasesSlice/selectors.ts","../../src/utils.ts","../../src/constants.ts","../../src/commonConstants.tsx"],"sourcesContent":["// Copyright 2023 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 type { Release } from '@northern.tech/types/MenderTypes';\nimport { createSelector } from '@reduxjs/toolkit';\n\nimport type { RootState } from '../store';\nimport { listItemMapper } from '../utils';\n\nconst getSelectedReleaseId = (state: RootState) => state.releases.selectedRelease;\nexport const getReleasesById = (state: RootState) => state.releases.byId;\nexport const getReleaseTags = (state: RootState) => state.releases.tags;\nexport const getReleaseListState = (state: RootState) => state.releases.releasesList;\nconst getListedReleases = (state: RootState) => state.releases.releasesList.releaseIds;\nexport const getUpdateTypes = (state: RootState) => state.releases.updateTypes;\nconst releaseDefaults = {};\nconst getReleaseMappingDefaults = () => releaseDefaults;\nexport const getReleasesList = createSelector([getReleasesById, getListedReleases, getReleaseMappingDefaults], listItemMapper<Release>);\n\nexport const getReleaseTagsById = createSelector([getReleaseTags], releaseTags => releaseTags.reduce((accu, key) => ({ ...accu, [key]: key }), {}));\nexport const getHasReleases = createSelector(\n [getReleaseListState, getReleasesById],\n ({ searchTotal, total }, byId) => !!(Object.keys(byId).length || total || searchTotal)\n);\n\nexport const getSelectedRelease = createSelector([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id || ''] ?? {});\n\nexport const getSelectedReleases = createSelector([getReleaseListState, getReleasesList], ({ selection }, releases) => selection.map(index => releases[index]));\n\nexport const getDeltaJobsListState = (state: RootState) => state.releases.deltaJobsList;\nexport const getDeltaJobsById = (state: RootState) => state.releases.deltaJobs;\nexport const getDeltaJobById = createSelector([getDeltaJobsById, (_, jobId) => jobId], (byId, jobId: string) => byId[jobId]);\nconst getSelectedJobId = (state: RootState) => state.releases.selectedJob;\nexport const getSelectedJob = createSelector([getDeltaJobsById, getSelectedJobId], (byId, jobId) => byId[jobId || '']);\n","// 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 { 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, 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; quantity: number };\n\nexport const parseSubscriptionPreview = (lines: Line[]) =>\n lines.reduce(\n (acc, { addon, amount }) => {\n const key = addon || 'plan';\n if (key === 'plan') {\n acc.plan += amount;\n } else {\n acc.addons[key] = (acc.addons[key] ?? 0) + amount;\n }\n return acc;\n },\n { plan: 0, addons: {} }\n );\n","// 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 {\n ALL_DEVICES,\n ALL_DEVICE_STATES,\n ALL_RELEASES,\n APPLICATION_JSON_CONTENT_TYPE,\n APPLICATION_JWT_CONTENT_TYPE,\n ATTRIBUTE_SCOPES,\n DEVICE_FILTERING_OPTIONS,\n DEVICE_ISSUE_OPTIONS,\n DEVICE_LIST_DEFAULTS,\n DEVICE_STATES,\n PermissionTypes,\n SORTING_OPTIONS,\n alertChannels,\n apiRoot,\n apiUrl,\n auditLogsApiUrl,\n defaultPermissionSets,\n deploymentsApiUrl,\n deploymentsApiUrlV2,\n deviceAuthV2,\n deviceConfig,\n deviceConnect,\n emptyRole,\n emptyUiPermissions,\n headerNames,\n inventoryApiUrl,\n inventoryApiUrlV2,\n iotManagerBaseURL,\n limitDefault,\n maxSessionAge,\n monitorApiUrlv1,\n reportingApiUrl,\n rolesById,\n rolesByName,\n scopedPermissionAreas,\n serviceProviderRolesById,\n ssoIdpApiUrlv1,\n tenantadmApiUrlv1,\n tenantadmApiUrlv2,\n twoFAStates,\n uiPermissionsByArea,\n uiPermissionsById,\n useradmApiUrl,\n useradmApiUrlv1,\n useradmApiUrlv2\n} from '@northern.tech/utils/constants';\nimport type {\n AnyPermission,\n AuditLogPermission,\n DeploymentPermission,\n DeviceIssueOptionKey,\n GroupsPermission,\n PermissionObject,\n PermissionSet,\n PermissionSetId,\n ReleasesPermission,\n Role,\n ScopedPermissionsByAreaKey,\n SortOptions,\n UiPermissionsByAreaKey,\n UiPermissionsByIdKey,\n UiPermissionsDefinition,\n UserManagementPermission\n} from '@northern.tech/utils/constants';\n\nexport {\n alertChannels,\n ALL_DEVICE_STATES,\n ALL_DEVICES,\n ALL_RELEASES,\n APPLICATION_JSON_CONTENT_TYPE,\n APPLICATION_JWT_CONTENT_TYPE,\n ATTRIBUTE_SCOPES,\n apiRoot,\n apiUrl,\n auditLogsApiUrl,\n defaultPermissionSets,\n deploymentsApiUrl,\n deploymentsApiUrlV2,\n DEVICE_FILTERING_OPTIONS,\n DEVICE_ISSUE_OPTIONS,\n DEVICE_LIST_DEFAULTS,\n DEVICE_STATES,\n deviceAuthV2,\n deviceConfig,\n deviceConnect,\n emptyRole,\n emptyUiPermissions,\n headerNames,\n inventoryApiUrl,\n inventoryApiUrlV2,\n iotManagerBaseURL,\n monitorApiUrlv1,\n limitDefault,\n maxSessionAge,\n PermissionTypes,\n reportingApiUrl,\n rolesById,\n rolesByName,\n scopedPermissionAreas,\n serviceProviderRolesById,\n SORTING_OPTIONS,\n ssoIdpApiUrlv1,\n tenantadmApiUrlv1,\n tenantadmApiUrlv2,\n twoFAStates,\n uiPermissionsByArea,\n uiPermissionsById,\n useradmApiUrl,\n useradmApiUrlv1,\n useradmApiUrlv2\n};\n\nexport type {\n AnyPermission,\n AuditLogPermission,\n DeploymentPermission,\n DeviceIssueOptionKey,\n GroupsPermission,\n PermissionObject,\n PermissionSet,\n PermissionSetId,\n ReleasesPermission,\n Role,\n ScopedPermissionsByAreaKey,\n SortOptions,\n UiPermissionsByAreaKey,\n UiPermissionsByIdKey,\n UiPermissionsDefinition,\n UserManagementPermission\n};\n\nexport * from './appSlice/constants';\nexport * from './commonConstants';\nexport * from './deploymentsSlice/constants';\nexport * from './devicesSlice/constants';\nexport * from './monitorSlice/constants';\nexport * from './onboardingSlice/constants';\nexport * from './organizationSlice/constants';\nexport * from './releasesSlice/constants';\nexport * from './usersSlice/constants';\n","// 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 { mdiAws as AWS, mdiMicrosoftAzure as Azure } from '@mdi/js';\nimport { Credentials, Integration } from '@northern.tech/types/MenderTypes';\n\nimport type { DEVICE_FILTERING_OPTIONS } from './constants';\nimport { ATTRIBUTE_SCOPES } from './constants';\n\nexport const timeUnits = {\n days: 'days',\n minutes: 'minutes',\n hours: 'hours'\n};\n\nexport const UNGROUPED_GROUP = { id: '*|=ungrouped=|*', name: 'Unassigned' };\n\nexport const DEVICE_LIST_MAXIMUM_LENGTH = 50;\n\nexport type FilterOperator = keyof typeof DEVICE_FILTERING_OPTIONS;\n\nconst oneSecond = 1000;\nexport const TIMEOUTS = {\n debounceDefault: 700,\n debounceShort: 300,\n halfASecond: 0.5 * oneSecond,\n oneSecond,\n twoSeconds: 2 * oneSecond,\n threeSeconds: 3 * oneSecond,\n fiveSeconds: 5 * oneSecond,\n refreshDefault: 10 * oneSecond,\n refreshLong: 60 * oneSecond\n};\n\nexport const DEVICE_ONLINE_CUTOFF = { interval: 1, intervalName: timeUnits.days };\n\nexport interface IdAttribute {\n attribute: string;\n scope: string;\n}\nexport const defaultIdAttribute: Readonly<IdAttribute> = Object.freeze({ attribute: 'id', scope: ATTRIBUTE_SCOPES.identity });\n\nexport const credentialTypes = {\n aws: Credentials.type.AWS,\n http: Credentials.type.HTTP,\n sas: Credentials.type.SAS,\n x509: 'x509'\n};\nexport const EXTERNAL_PROVIDER = {\n 'iot-core': {\n credentialsType: credentialTypes.aws as Credentials.type.AWS,\n icon: AWS,\n title: 'AWS IoT Core',\n twinTitle: 'Device Shadow',\n provider: 'iot-core',\n enabled: true,\n deviceTwin: true,\n configHint: <>For help finding your AWS IoT Core connection string, check the AWS IoT documentation.</>\n },\n 'iot-hub': {\n credentialsType: credentialTypes.sas as Credentials.type.SAS,\n icon: Azure,\n title: 'Azure IoT Hub',\n twinTitle: 'Device Twin',\n provider: 'iot-hub',\n enabled: true,\n deviceTwin: true,\n configHint: (\n <span>\n For help finding your Azure IoT Hub connection string, look under &apos;Shared access policies&apos; in the Microsoft Azure UI as described{' '}\n {\n <a\n href=\"https://devblogs.microsoft.com/iotdev/understand-different-connection-strings-in-azure-iot-hub/#iothubconn\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n here\n </a>\n }\n .\n </span>\n )\n },\n webhook: {\n credentialsType: credentialTypes.http as Credentials.type.HTTP,\n deviceTwin: false,\n twinTitle: '',\n // disable the webhook provider here, since it is treated different than other integrations, with a custom configuration & management view, etc.\n enabled: false,\n provider: 'webhook'\n }\n} as const;\n\nexport interface Webhook extends Integration {\n provider: Integration.provider.WEBHOOK;\n}\n\nexport const emptyWebhook: Webhook = {\n description: '',\n provider: Integration.provider.WEBHOOK,\n credentials: {\n type: EXTERNAL_PROVIDER.webhook.credentialsType,\n [EXTERNAL_PROVIDER.webhook.credentialsType]: {\n secret: '',\n url: ''\n }\n }\n};\n\ninterface CountryType {\n code: string;\n label: string;\n}\nexport const MAX_PAGE_SIZE = 500;\nconst regionNames = new Intl.DisplayNames(['en'], { type: 'region' });\nexport const countries: readonly CountryType[] = [\n 'AD',\n 'AE',\n 'AF',\n 'AG',\n 'AI',\n 'AL',\n 'AM',\n 'AO',\n 'AQ',\n 'AR',\n 'AS',\n 'AT',\n 'AU',\n 'AW',\n 'AX',\n 'AZ',\n 'BA',\n 'BB',\n 'BD',\n 'BE',\n 'BF',\n 'BG',\n 'BH',\n 'BI',\n 'BJ',\n 'BL',\n 'BM',\n 'BN',\n 'BO',\n 'BR',\n 'BS',\n 'BT',\n 'BV',\n 'BW',\n 'BY',\n 'BZ',\n 'CA',\n 'CC',\n 'CD',\n 'CF',\n 'CG',\n 'CH',\n 'CI',\n 'CK',\n 'CL',\n 'CM',\n 'CN',\n 'CO',\n 'CR',\n 'CU',\n 'CV',\n 'CW',\n 'CX',\n 'CY',\n 'CZ',\n 'DE',\n 'DJ',\n 'DK',\n 'DM',\n 'DO',\n 'DZ',\n 'EC',\n 'EE',\n 'EG',\n 'EH',\n 'ER',\n 'ES',\n 'ET',\n 'FI',\n 'FJ',\n 'FK',\n 'FM',\n 'FO',\n 'FR',\n 'GA',\n 'GB',\n 'GD',\n 'GE',\n 'GF',\n 'GG',\n 'GH',\n 'GI',\n 'GL',\n 'GM',\n 'GN',\n 'GP',\n 'GQ',\n 'GR',\n 'GS',\n 'GT',\n 'GU',\n 'GW',\n 'GY',\n 'HK',\n 'HM',\n 'HN',\n 'HR',\n 'HT',\n 'HU',\n 'ID',\n 'IE',\n 'IL',\n 'IM',\n 'IN',\n 'IO',\n 'IQ',\n 'IR',\n 'IS',\n 'IT',\n 'JE',\n 'JM',\n 'JO',\n 'JP',\n 'KE',\n 'KG',\n 'KH',\n 'KI',\n 'KM',\n 'KN',\n 'KP',\n 'KR',\n 'KW',\n 'KY',\n 'KZ',\n 'LA',\n 'LB',\n 'LC',\n 'LI',\n 'LK',\n 'LR',\n 'LS',\n 'LT',\n 'LU',\n 'LV',\n 'LY',\n 'MA',\n 'MC',\n 'MD',\n 'ME',\n 'MF',\n 'MG',\n 'MH',\n 'MK',\n 'ML',\n 'MM',\n 'MN',\n 'MO',\n 'MP',\n 'MQ',\n 'MR',\n 'MS',\n 'MT',\n 'MU',\n 'MV',\n 'MW',\n 'MX',\n 'MY',\n 'MZ',\n 'NA',\n 'NC',\n 'NE',\n 'NF',\n 'NG',\n 'NI',\n 'NL',\n 'NO',\n 'NP',\n 'NR',\n 'NU',\n 'NZ',\n 'OM',\n 'PA',\n 'PE',\n 'PF',\n 'PG',\n 'PH',\n 'PK',\n 'PL',\n 'PM',\n 'PN',\n 'PR',\n 'PS',\n 'PT',\n 'PW',\n 'PY',\n 'QA',\n 'RE',\n 'RO',\n 'RS',\n 'RU',\n 'RW',\n 'SA',\n 'SB',\n 'SC',\n 'SD',\n 'SE',\n 'SG',\n 'SH',\n 'SI',\n 'SJ',\n 'SK',\n 'SL',\n 'SM',\n 'SN',\n 'SO',\n 'SR',\n 'SS',\n 'ST',\n 'SV',\n 'SX',\n 'SY',\n 'SZ',\n 'TC',\n 'TD',\n 'TF',\n 'TG',\n 'TH',\n 'TJ',\n 'TK',\n 'TL',\n 'TM',\n 'TN',\n 'TO',\n 'TR',\n 'TT',\n 'TV',\n 'TW',\n 'TZ',\n 'UA',\n 'UG',\n 'US',\n 'UY',\n 'UZ',\n 'VA',\n 'VC',\n 'VE',\n 'VG',\n 'VI',\n 'VN',\n 'VU',\n 'WF',\n 'WS',\n 'XK',\n 'YE',\n 'YT',\n 'ZA',\n 'ZM',\n 'ZW'\n]\n .map(code => ({ code, label: regionNames.of(code) }))\n .sort((a, b) => a.label.localeCompare(b.label));\n"],"mappings":"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A,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAA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","names":["import_constants","AWS","Azure"]}
@@ -1,3 +1,5 @@
1
+ import * as _northern_tech_types_DeltaJobsListItem from '@northern.tech/types/DeltaJobsListItem';
2
+ import * as _northern_tech_types_DeltaJobDetailsItem from '@northern.tech/types/DeltaJobDetailsItem';
1
3
  import * as reselect from 'reselect';
2
4
  import * as _northern_tech_utils_constants from '@northern.tech/utils/constants';
3
5
  import { Release as Release$1 } from '@northern.tech/types/MenderTypes';
@@ -950,5 +952,188 @@ declare const getSelectedReleases: ((state: {
950
952
  memoize: typeof reselect.weakMapMemoize;
951
953
  argsMemoize: typeof reselect.weakMapMemoize;
952
954
  };
955
+ declare const getDeltaJobsListState: (state: RootState) => {
956
+ jobIds: string[];
957
+ page: number;
958
+ perPage: number;
959
+ sort?: _northern_tech_utils_constants.SortOptions;
960
+ total: 0;
961
+ };
962
+ declare const getDeltaJobsById: (state: RootState) => Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>;
963
+ declare const getDeltaJobById: ((state: any, jobId: any) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem) & {
964
+ clearCache: () => void;
965
+ resultsCount: () => number;
966
+ resetResultsCount: () => void;
967
+ } & {
968
+ resultFunc: (resultFuncArgs_0: Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, resultFuncArgs_1: any) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem;
969
+ memoizedResultFunc: ((resultFuncArgs_0: Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, resultFuncArgs_1: any) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem) & {
970
+ clearCache: () => void;
971
+ resultsCount: () => number;
972
+ resetResultsCount: () => void;
973
+ };
974
+ lastResult: () => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem;
975
+ dependencies: [(state: RootState) => Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, (_: any, jobId: any) => any];
976
+ recomputations: () => number;
977
+ resetRecomputations: () => void;
978
+ dependencyRecomputations: () => number;
979
+ resetDependencyRecomputations: () => void;
980
+ } & {
981
+ memoize: typeof reselect.weakMapMemoize;
982
+ argsMemoize: typeof reselect.weakMapMemoize;
983
+ };
984
+ declare const getSelectedJob: ((state: {
985
+ app: {
986
+ cancelSource: any;
987
+ commit: string;
988
+ demoArtifactLink: string;
989
+ docsVersion: string;
990
+ features: Record<string, boolean>;
991
+ feedbackProbability: number;
992
+ firstLoginAfterSignup: boolean;
993
+ hostAddress: string | null;
994
+ hostedAnnouncement: string;
995
+ newThreshold: string;
996
+ offlineThreshold: string;
997
+ recaptchaSiteKey: string;
998
+ searchState: SearchState;
999
+ sentry: SentryConfig;
1000
+ snackbar: SnackbarContent;
1001
+ stripeAPIKey: string;
1002
+ trackerCode: string;
1003
+ uploadsById: Record<string, Upload>;
1004
+ versionInformation: {
1005
+ [key: string]: string | {
1006
+ releaseDate: string;
1007
+ repos: Record<string, string>;
1008
+ } | undefined;
1009
+ backend?: string;
1010
+ GUI?: string;
1011
+ latestRelease?: {
1012
+ releaseDate: string;
1013
+ repos: Record<string, string>;
1014
+ };
1015
+ };
1016
+ yesterday?: string;
1017
+ };
1018
+ devices: DeviceSliceType;
1019
+ deployments: {
1020
+ byId: Record<string, Deployment>;
1021
+ byStatus: DeploymentByStatus;
1022
+ config: DeploymentConfig;
1023
+ deploymentDeviceLimit: number;
1024
+ selectedDeviceIds: string[];
1025
+ selectionState: SelectionState;
1026
+ };
1027
+ monitor: {
1028
+ alerts: {
1029
+ alertList: {
1030
+ page: number;
1031
+ perPage: number;
1032
+ total: number;
1033
+ };
1034
+ byDeviceId: {
1035
+ alerts?: Record<string, _northern_tech_types_Alert.Alert & {
1036
+ fullName?: string;
1037
+ }>;
1038
+ latest?: Record<string, _northern_tech_types_Alert.Alert & {
1039
+ fullName?: string;
1040
+ }>;
1041
+ };
1042
+ };
1043
+ issueCounts: {
1044
+ byType: {
1045
+ issues: {
1046
+ filtered: number;
1047
+ total: number;
1048
+ };
1049
+ offline: {
1050
+ filtered: number;
1051
+ total: number;
1052
+ };
1053
+ failedLastUpdate: {
1054
+ filtered: number;
1055
+ total: number;
1056
+ };
1057
+ monitoring: {
1058
+ filtered: number;
1059
+ total: number;
1060
+ };
1061
+ authRequests: {
1062
+ filtered: number;
1063
+ total: number;
1064
+ };
1065
+ gatewayDevices: {
1066
+ filtered: number;
1067
+ total: number;
1068
+ };
1069
+ };
1070
+ };
1071
+ settings: {
1072
+ global: {
1073
+ channels: {
1074
+ email: {
1075
+ enabled: boolean;
1076
+ };
1077
+ };
1078
+ };
1079
+ };
1080
+ };
1081
+ onboarding: {
1082
+ address?: string;
1083
+ approach: OnboardingApproach | null;
1084
+ complete: boolean;
1085
+ demoArtifactPort: number;
1086
+ deviceConnection?: string;
1087
+ deviceType: string[] | string | null;
1088
+ progress: string | null;
1089
+ showTips: boolean | null;
1090
+ showTipsDialog: boolean;
1091
+ };
1092
+ organization: OrganizationState;
1093
+ releases: ReleaseSliceType;
1094
+ users: {
1095
+ activationCode?: string;
1096
+ byId: Record<string, User>;
1097
+ currentSession?: UserSession | object;
1098
+ currentUser: string | null;
1099
+ customColumns: CustomColumn[];
1100
+ globalSettings: GlobalSettings;
1101
+ permissionSetsById: Record<string, _northern_tech_utils_constants.PermissionSet>;
1102
+ qrCode: string | null;
1103
+ rolesById: Record<string, _northern_tech_utils_constants.Role>;
1104
+ rolesInitialized: boolean;
1105
+ settingsInitialized: boolean;
1106
+ showConnectDeviceDialog: boolean;
1107
+ showFeedbackDialog: boolean;
1108
+ showStartupNotification: boolean;
1109
+ tooltips: {
1110
+ byId: Record<string, {
1111
+ readState: ReadState;
1112
+ }>;
1113
+ };
1114
+ userSettings: UserSettings;
1115
+ userSettingsInitialized: boolean;
1116
+ };
1117
+ }) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem) & {
1118
+ clearCache: () => void;
1119
+ resultsCount: () => number;
1120
+ resetResultsCount: () => void;
1121
+ } & {
1122
+ resultFunc: (resultFuncArgs_0: Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, resultFuncArgs_1: string | null) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem;
1123
+ memoizedResultFunc: ((resultFuncArgs_0: Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, resultFuncArgs_1: string | null) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem) & {
1124
+ clearCache: () => void;
1125
+ resultsCount: () => number;
1126
+ resetResultsCount: () => void;
1127
+ };
1128
+ lastResult: () => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem;
1129
+ dependencies: [(state: RootState) => Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, (state: RootState) => string | null];
1130
+ recomputations: () => number;
1131
+ resetRecomputations: () => void;
1132
+ dependencyRecomputations: () => number;
1133
+ resetDependencyRecomputations: () => void;
1134
+ } & {
1135
+ memoize: typeof reselect.weakMapMemoize;
1136
+ argsMemoize: typeof reselect.weakMapMemoize;
1137
+ };
953
1138
 
954
- export { getHasReleases, getReleaseListState, getReleaseTags, getReleaseTagsById, getReleasesById, getReleasesList, getSelectedRelease, getSelectedReleases, getUpdateTypes };
1139
+ export { getDeltaJobById, getDeltaJobsById, getDeltaJobsListState, getHasReleases, getReleaseListState, getReleaseTags, getReleaseTagsById, getReleasesById, getReleasesList, getSelectedJob, getSelectedRelease, getSelectedReleases, getUpdateTypes };
@@ -1,3 +1,5 @@
1
+ import * as _northern_tech_types_DeltaJobsListItem from '@northern.tech/types/DeltaJobsListItem';
2
+ import * as _northern_tech_types_DeltaJobDetailsItem from '@northern.tech/types/DeltaJobDetailsItem';
1
3
  import * as reselect from 'reselect';
2
4
  import * as _northern_tech_utils_constants from '@northern.tech/utils/constants';
3
5
  import { Release as Release$1 } from '@northern.tech/types/MenderTypes';
@@ -950,5 +952,188 @@ declare const getSelectedReleases: ((state: {
950
952
  memoize: typeof reselect.weakMapMemoize;
951
953
  argsMemoize: typeof reselect.weakMapMemoize;
952
954
  };
955
+ declare const getDeltaJobsListState: (state: RootState) => {
956
+ jobIds: string[];
957
+ page: number;
958
+ perPage: number;
959
+ sort?: _northern_tech_utils_constants.SortOptions;
960
+ total: 0;
961
+ };
962
+ declare const getDeltaJobsById: (state: RootState) => Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>;
963
+ declare const getDeltaJobById: ((state: any, jobId: any) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem) & {
964
+ clearCache: () => void;
965
+ resultsCount: () => number;
966
+ resetResultsCount: () => void;
967
+ } & {
968
+ resultFunc: (resultFuncArgs_0: Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, resultFuncArgs_1: any) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem;
969
+ memoizedResultFunc: ((resultFuncArgs_0: Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, resultFuncArgs_1: any) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem) & {
970
+ clearCache: () => void;
971
+ resultsCount: () => number;
972
+ resetResultsCount: () => void;
973
+ };
974
+ lastResult: () => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem;
975
+ dependencies: [(state: RootState) => Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, (_: any, jobId: any) => any];
976
+ recomputations: () => number;
977
+ resetRecomputations: () => void;
978
+ dependencyRecomputations: () => number;
979
+ resetDependencyRecomputations: () => void;
980
+ } & {
981
+ memoize: typeof reselect.weakMapMemoize;
982
+ argsMemoize: typeof reselect.weakMapMemoize;
983
+ };
984
+ declare const getSelectedJob: ((state: {
985
+ app: {
986
+ cancelSource: any;
987
+ commit: string;
988
+ demoArtifactLink: string;
989
+ docsVersion: string;
990
+ features: Record<string, boolean>;
991
+ feedbackProbability: number;
992
+ firstLoginAfterSignup: boolean;
993
+ hostAddress: string | null;
994
+ hostedAnnouncement: string;
995
+ newThreshold: string;
996
+ offlineThreshold: string;
997
+ recaptchaSiteKey: string;
998
+ searchState: SearchState;
999
+ sentry: SentryConfig;
1000
+ snackbar: SnackbarContent;
1001
+ stripeAPIKey: string;
1002
+ trackerCode: string;
1003
+ uploadsById: Record<string, Upload>;
1004
+ versionInformation: {
1005
+ [key: string]: string | {
1006
+ releaseDate: string;
1007
+ repos: Record<string, string>;
1008
+ } | undefined;
1009
+ backend?: string;
1010
+ GUI?: string;
1011
+ latestRelease?: {
1012
+ releaseDate: string;
1013
+ repos: Record<string, string>;
1014
+ };
1015
+ };
1016
+ yesterday?: string;
1017
+ };
1018
+ devices: DeviceSliceType;
1019
+ deployments: {
1020
+ byId: Record<string, Deployment>;
1021
+ byStatus: DeploymentByStatus;
1022
+ config: DeploymentConfig;
1023
+ deploymentDeviceLimit: number;
1024
+ selectedDeviceIds: string[];
1025
+ selectionState: SelectionState;
1026
+ };
1027
+ monitor: {
1028
+ alerts: {
1029
+ alertList: {
1030
+ page: number;
1031
+ perPage: number;
1032
+ total: number;
1033
+ };
1034
+ byDeviceId: {
1035
+ alerts?: Record<string, _northern_tech_types_Alert.Alert & {
1036
+ fullName?: string;
1037
+ }>;
1038
+ latest?: Record<string, _northern_tech_types_Alert.Alert & {
1039
+ fullName?: string;
1040
+ }>;
1041
+ };
1042
+ };
1043
+ issueCounts: {
1044
+ byType: {
1045
+ issues: {
1046
+ filtered: number;
1047
+ total: number;
1048
+ };
1049
+ offline: {
1050
+ filtered: number;
1051
+ total: number;
1052
+ };
1053
+ failedLastUpdate: {
1054
+ filtered: number;
1055
+ total: number;
1056
+ };
1057
+ monitoring: {
1058
+ filtered: number;
1059
+ total: number;
1060
+ };
1061
+ authRequests: {
1062
+ filtered: number;
1063
+ total: number;
1064
+ };
1065
+ gatewayDevices: {
1066
+ filtered: number;
1067
+ total: number;
1068
+ };
1069
+ };
1070
+ };
1071
+ settings: {
1072
+ global: {
1073
+ channels: {
1074
+ email: {
1075
+ enabled: boolean;
1076
+ };
1077
+ };
1078
+ };
1079
+ };
1080
+ };
1081
+ onboarding: {
1082
+ address?: string;
1083
+ approach: OnboardingApproach | null;
1084
+ complete: boolean;
1085
+ demoArtifactPort: number;
1086
+ deviceConnection?: string;
1087
+ deviceType: string[] | string | null;
1088
+ progress: string | null;
1089
+ showTips: boolean | null;
1090
+ showTipsDialog: boolean;
1091
+ };
1092
+ organization: OrganizationState;
1093
+ releases: ReleaseSliceType;
1094
+ users: {
1095
+ activationCode?: string;
1096
+ byId: Record<string, User>;
1097
+ currentSession?: UserSession | object;
1098
+ currentUser: string | null;
1099
+ customColumns: CustomColumn[];
1100
+ globalSettings: GlobalSettings;
1101
+ permissionSetsById: Record<string, _northern_tech_utils_constants.PermissionSet>;
1102
+ qrCode: string | null;
1103
+ rolesById: Record<string, _northern_tech_utils_constants.Role>;
1104
+ rolesInitialized: boolean;
1105
+ settingsInitialized: boolean;
1106
+ showConnectDeviceDialog: boolean;
1107
+ showFeedbackDialog: boolean;
1108
+ showStartupNotification: boolean;
1109
+ tooltips: {
1110
+ byId: Record<string, {
1111
+ readState: ReadState;
1112
+ }>;
1113
+ };
1114
+ userSettings: UserSettings;
1115
+ userSettingsInitialized: boolean;
1116
+ };
1117
+ }) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem) & {
1118
+ clearCache: () => void;
1119
+ resultsCount: () => number;
1120
+ resetResultsCount: () => void;
1121
+ } & {
1122
+ resultFunc: (resultFuncArgs_0: Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, resultFuncArgs_1: string | null) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem;
1123
+ memoizedResultFunc: ((resultFuncArgs_0: Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, resultFuncArgs_1: string | null) => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem) & {
1124
+ clearCache: () => void;
1125
+ resultsCount: () => number;
1126
+ resetResultsCount: () => void;
1127
+ };
1128
+ lastResult: () => _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem;
1129
+ dependencies: [(state: RootState) => Record<string, _northern_tech_types_DeltaJobDetailsItem.DeltaJobDetailsItem & _northern_tech_types_DeltaJobsListItem.DeltaJobsListItem>, (state: RootState) => string | null];
1130
+ recomputations: () => number;
1131
+ resetRecomputations: () => void;
1132
+ dependencyRecomputations: () => number;
1133
+ resetDependencyRecomputations: () => void;
1134
+ } & {
1135
+ memoize: typeof reselect.weakMapMemoize;
1136
+ argsMemoize: typeof reselect.weakMapMemoize;
1137
+ };
953
1138
 
954
- export { getHasReleases, getReleaseListState, getReleaseTags, getReleaseTagsById, getReleasesById, getReleasesList, getSelectedRelease, getSelectedReleases, getUpdateTypes };
1139
+ export { getDeltaJobById, getDeltaJobsById, getDeltaJobsListState, getHasReleases, getReleaseListState, getReleaseTags, getReleaseTagsById, getReleasesById, getReleasesList, getSelectedJob, getSelectedRelease, getSelectedReleases, getUpdateTypes };
@@ -1,27 +1,35 @@
1
1
  import {
2
+ getDeltaJobById,
3
+ getDeltaJobsById,
4
+ getDeltaJobsListState,
2
5
  getHasReleases,
3
6
  getReleaseListState,
4
7
  getReleaseTags,
5
8
  getReleaseTagsById,
6
9
  getReleasesById,
7
10
  getReleasesList,
11
+ getSelectedJob,
8
12
  getSelectedRelease,
9
13
  getSelectedReleases,
10
14
  getUpdateTypes
11
- } from "../chunk-MSOXMRF7.js";
12
- import "../chunk-UE5N5VO3.js";
13
- import "../chunk-7C4SQBEE.js";
15
+ } from "../chunk-KGSJ7CSA.js";
16
+ import "../chunk-CEEXZF5E.js";
17
+ import "../chunk-MRXTMI6O.js";
14
18
  import "../chunk-2DYA3X77.js";
15
19
  import "../chunk-FAJ3I2UQ.js";
16
20
  import "../chunk-ZKAH3APE.js";
17
- import "../chunk-HFOTAPIJ.js";
21
+ import "../chunk-PY6ID7TL.js";
18
22
  export {
23
+ getDeltaJobById,
24
+ getDeltaJobsById,
25
+ getDeltaJobsListState,
19
26
  getHasReleases,
20
27
  getReleaseListState,
21
28
  getReleaseTags,
22
29
  getReleaseTagsById,
23
30
  getReleasesById,
24
31
  getReleasesList,
32
+ getSelectedJob,
25
33
  getSelectedRelease,
26
34
  getSelectedReleases,
27
35
  getUpdateTypes