@northern.tech/store 0.36.2 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/dist/actions.d.cts +2 -1
  2. package/dist/actions.d.ts +2 -1
  3. package/dist/api/general-api.cjs +3 -3
  4. package/dist/api/general-api.cjs.map +1 -1
  5. package/dist/api/users-api.cjs +2 -2
  6. package/dist/api/users-api.cjs.map +1 -1
  7. package/dist/api/users-api.js.map +1 -1
  8. package/dist/appSlice/index.cjs +1 -0
  9. package/dist/appSlice/index.cjs.map +1 -1
  10. package/dist/appSlice/index.js +1 -0
  11. package/dist/appSlice/index.js.map +1 -1
  12. package/dist/appSlice/selectors.cjs +2 -4
  13. package/dist/appSlice/selectors.cjs.map +1 -1
  14. package/dist/appSlice/selectors.d.cts +4 -51
  15. package/dist/appSlice/selectors.d.ts +4 -51
  16. package/dist/appSlice/selectors.js +3 -4
  17. package/dist/appSlice/selectors.js.map +1 -1
  18. package/dist/appSlice/thunks.d.cts +1 -1
  19. package/dist/appSlice/thunks.d.ts +1 -1
  20. package/dist/auth.cjs +2 -2
  21. package/dist/auth.cjs.map +1 -1
  22. package/dist/auth.js.map +1 -1
  23. package/dist/commonSelectors.cjs +2 -2
  24. package/dist/commonSelectors.cjs.map +1 -1
  25. package/dist/commonSelectors.d.cts +10 -2
  26. package/dist/commonSelectors.d.ts +10 -2
  27. package/dist/commonSelectors.js.map +1 -1
  28. package/dist/constants.cjs.map +1 -1
  29. package/dist/constants.js.map +1 -1
  30. package/dist/deploymentsSlice/index.cjs.map +1 -1
  31. package/dist/deploymentsSlice/index.js.map +1 -1
  32. package/dist/deploymentsSlice/selectors.cjs.map +1 -1
  33. package/dist/deploymentsSlice/selectors.d.cts +2 -2
  34. package/dist/deploymentsSlice/selectors.d.ts +2 -2
  35. package/dist/deploymentsSlice/selectors.js.map +1 -1
  36. package/dist/deploymentsSlice/thunks.cjs +1 -0
  37. package/dist/deploymentsSlice/thunks.d.cts +9 -4
  38. package/dist/deploymentsSlice/thunks.d.ts +9 -4
  39. package/dist/deploymentsSlice/thunks.js +2 -2
  40. package/dist/devicesSlice/index.cjs +4 -0
  41. package/dist/devicesSlice/index.cjs.map +1 -1
  42. package/dist/devicesSlice/index.d.cts +1 -1
  43. package/dist/devicesSlice/index.d.ts +1 -1
  44. package/dist/devicesSlice/index.js +4 -0
  45. package/dist/devicesSlice/index.js.map +1 -1
  46. package/dist/devicesSlice/mocks.d.cts +1 -0
  47. package/dist/devicesSlice/mocks.d.ts +1 -0
  48. package/dist/devicesSlice/selectors.cjs +2 -0
  49. package/dist/devicesSlice/selectors.cjs.map +1 -1
  50. package/dist/devicesSlice/selectors.d.cts +4 -3
  51. package/dist/devicesSlice/selectors.d.ts +4 -3
  52. package/dist/devicesSlice/selectors.js +2 -1
  53. package/dist/devicesSlice/selectors.js.map +1 -1
  54. package/dist/devicesSlice/thunks.cjs +2 -0
  55. package/dist/devicesSlice/thunks.d.cts +68 -3
  56. package/dist/devicesSlice/thunks.d.ts +68 -3
  57. package/dist/devicesSlice/thunks.js +2 -2
  58. package/dist/{index-CPdMUfRr.d.ts → index-BqJuhvO_.d.ts} +4 -1
  59. package/dist/{index-DbfM03Gj.d.cts → index-Doc_1P_Y.d.cts} +4 -1
  60. package/dist/liststatehook.cjs.map +1 -1
  61. package/dist/liststatehook.js.map +1 -1
  62. package/dist/locationutils.cjs.map +1 -1
  63. package/dist/locationutils.d.cts +1 -1
  64. package/dist/locationutils.d.ts +1 -1
  65. package/dist/locationutils.js.map +1 -1
  66. package/dist/monitorSlice/index.cjs.map +1 -1
  67. package/dist/monitorSlice/index.js.map +1 -1
  68. package/dist/monitorSlice/mocks.cjs.map +1 -1
  69. package/dist/monitorSlice/mocks.js.map +1 -1
  70. package/dist/monitorSlice/selectors.d.cts +1 -1
  71. package/dist/monitorSlice/selectors.d.ts +1 -1
  72. package/dist/monitorSlice/thunks.cjs.map +1 -1
  73. package/dist/monitorSlice/thunks.d.cts +2 -2
  74. package/dist/monitorSlice/thunks.d.ts +2 -2
  75. package/dist/monitorSlice/thunks.js.map +1 -1
  76. package/dist/onboardingSlice/index.cjs.map +1 -1
  77. package/dist/onboardingSlice/mocks.cjs.map +1 -1
  78. package/dist/onboardingSlice/selectors.d.cts +1 -1
  79. package/dist/onboardingSlice/selectors.d.ts +1 -1
  80. package/dist/onboardingSlice/thunks.d.cts +1 -1
  81. package/dist/onboardingSlice/thunks.d.ts +1 -1
  82. package/dist/organizationSlice/index.cjs.map +1 -1
  83. package/dist/organizationSlice/selectors.cjs.map +1 -1
  84. package/dist/organizationSlice/selectors.d.cts +2 -2
  85. package/dist/organizationSlice/selectors.d.ts +2 -2
  86. package/dist/organizationSlice/selectors.js.map +1 -1
  87. package/dist/organizationSlice/thunks.d.cts +4 -41
  88. package/dist/organizationSlice/thunks.d.ts +4 -41
  89. package/dist/releasesSlice/index.cjs.map +1 -1
  90. package/dist/releasesSlice/selectors.cjs.map +1 -1
  91. package/dist/releasesSlice/selectors.d.cts +2 -2
  92. package/dist/releasesSlice/selectors.d.ts +2 -2
  93. package/dist/releasesSlice/selectors.js.map +1 -1
  94. package/dist/releasesSlice/thunks.cjs +39 -16
  95. package/dist/releasesSlice/thunks.cjs.map +1 -1
  96. package/dist/releasesSlice/thunks.d.cts +3 -9
  97. package/dist/releasesSlice/thunks.d.ts +3 -9
  98. package/dist/releasesSlice/thunks.js +38 -15
  99. package/dist/releasesSlice/thunks.js.map +1 -1
  100. package/dist/selectors.cjs +1 -1
  101. package/dist/selectors.d.cts +3 -3
  102. package/dist/selectors.d.ts +3 -3
  103. package/dist/selectors.js +3 -3
  104. package/dist/sockethook.cjs +3 -3
  105. package/dist/sockethook.cjs.map +1 -1
  106. package/dist/sockethook.js.map +1 -1
  107. package/dist/{store-Co2ptTSm.d.ts → store-BzrMxxAO.d.ts} +112 -4
  108. package/dist/{store-Dd0Y2JCN.d.cts → store-xV2zaXAc.d.cts} +112 -4
  109. package/dist/store.cjs.map +1 -1
  110. package/dist/store.d.cts +1 -2
  111. package/dist/store.d.ts +1 -2
  112. package/dist/store.js.map +1 -1
  113. package/dist/storehooks.cjs +5 -4
  114. package/dist/storehooks.cjs.map +1 -1
  115. package/dist/storehooks.d.cts +1 -1
  116. package/dist/storehooks.d.ts +1 -1
  117. package/dist/storehooks.js +1 -0
  118. package/dist/storehooks.js.map +1 -1
  119. package/dist/thunks.cjs +85 -25
  120. package/dist/thunks.cjs.map +1 -1
  121. package/dist/thunks.d.cts +3 -3
  122. package/dist/thunks.d.ts +3 -3
  123. package/dist/thunks.js +76 -19
  124. package/dist/thunks.js.map +1 -1
  125. package/dist/useDeploymentDevice.cjs +2 -2
  126. package/dist/useDeploymentDevice.cjs.map +1 -1
  127. package/dist/useDeploymentDevice.js.map +1 -1
  128. package/dist/usersSlice/index.cjs.map +1 -1
  129. package/dist/usersSlice/selectors.cjs.map +1 -1
  130. package/dist/usersSlice/selectors.d.cts +2 -2
  131. package/dist/usersSlice/selectors.d.ts +2 -2
  132. package/dist/usersSlice/selectors.js.map +1 -1
  133. package/dist/usersSlice/thunks.d.cts +1 -1
  134. package/dist/usersSlice/thunks.d.ts +1 -1
  135. package/dist/utils.cjs +2 -0
  136. package/dist/utils.cjs.map +1 -1
  137. package/dist/utils.d.cts +2 -2
  138. package/dist/utils.d.ts +2 -2
  139. package/dist/utils.js +3 -2
  140. package/dist/utils.js.map +1 -1
  141. package/package.json +4 -4
  142. package/dist/utils-C_9XEfi_.d.ts +0 -104
  143. package/dist/utils-DbXmZmGq.d.cts +0 -104
  144. /package/dist/{chunk-D6vf50IK.cjs → rolldown-runtime-D6vf50IK.cjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/devicesSlice/index.ts"],"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 {\n Device as BackendDeviceAuth,\n ConnectionState,\n DeviceConfiguration,\n DeviceState,\n DeviceTierLimits,\n MonitorConfiguration,\n Scope,\n SortCriteria,\n Status\n} from '@northern.tech/types/MenderTypes';\n// @ts-nocheck\nimport { deepCompare, duplicateFilter } from '@northern.tech/utils/helpers';\nimport type { PayloadAction } from '@reduxjs/toolkit';\nimport { createSlice } from '@reduxjs/toolkit';\n\nimport type { ALL_DEVICE_STATES, DeviceIssueOptionKey, FilterOperator, SortOptions } from '../constants';\nimport { DEVICE_LIST_DEFAULTS, DEVICE_STATES, SORTING_OPTIONS } from '../constants';\nimport type { DeviceDeployment } from '../deploymentsSlice';\nimport type { DeviceAuthState } from './constants';\n\nexport const sliceName = 'devices';\nexport type DeviceSelectedAttribute = { attribute: string; scope: string };\nexport type DeviceListState = {\n detailsTab: string;\n deviceIds: string[];\n isLoading: boolean;\n open?: boolean;\n page: number;\n perPage: number;\n refreshTrigger: boolean;\n selectedAttributes: DeviceSelectedAttribute[];\n selectedId?: string;\n selectedIssues: DeviceIssueOptionKey[];\n selection: number[];\n setOnly?: boolean;\n sort: SortOptions & Partial<SortCriteria>;\n state?: DeviceAuthState | typeof ALL_DEVICE_STATES;\n total: number;\n};\ntype DeviceReport = {\n items: { count: number; key: string }[];\n otherCount: number;\n total: number;\n};\nexport type DeviceGroup = { deviceIds?: string[]; filters?: DeviceFilter[]; id?: string; total?: number };\nexport type InventoryAttributes = {\n [key: string]: string | string[];\n artifact_name: string;\n device_type: string[];\n};\n\n// based on the api docs the Record values might be even: \"Supported types: number, string, array of numbers, array of strings\" - but I guess \"string\" or \"string | sting[]\" should be good enough\ntype UiDeviceAttributes = {\n attributes: InventoryAttributes;\n identity?: Record<string, string>;\n monitor?: Record<string, string>;\n system: Record<string, string>;\n tags?: Record<string, string>;\n};\n\nexport type Device = BackendDeviceAuth &\n UiDeviceAttributes & {\n check_in_time_exact?: string;\n check_in_time_rounded?: string;\n config?: DeviceConfiguration;\n connect_status?: ConnectionState['status'];\n connect_updated_ts?: string;\n deploymentsCount?: number;\n deviceDeployments?: DeviceDeployment;\n etag?: string;\n gatewayIds?: string[];\n group?: string;\n id: string;\n isNew?: boolean;\n isOffline?: boolean;\n monitors?: MonitorConfiguration[];\n status: Status;\n twinsByIntegration?: Record<string, DeviceState & { twinError?: string }>;\n };\nexport type DeviceFilter = {\n key: string;\n operator: FilterOperator;\n scope: Scope;\n value: string | string[];\n};\ntype FilteringAttributes = {\n identityAttributes: string[];\n inventoryAttributes: string[];\n systemAttributes: string[];\n tagAttributes: string[];\n};\ntype FilteringAttributesConfig = {\n attributes: Record<string, string[]>;\n count: number;\n limit: number;\n};\n\nexport type DeviceGroups = {\n byId: Record<string, DeviceGroup>;\n selectedGroup?: string;\n};\nexport type DeviceSliceType = {\n byId: Record<string, Device>;\n byStatus: Record<DeviceAuthState, { counts: DeviceTierLimits & { total: number }; deviceIds: string[] }>;\n deviceList: DeviceListState;\n filteringAttributes: FilteringAttributes;\n filteringAttributesConfig: FilteringAttributesConfig;\n filteringAttributesLimit: number;\n filters: DeviceFilter[];\n groups: DeviceGroups;\n limits: DeviceTierLimits;\n reports: DeviceReport[];\n total: number;\n};\nexport const initialState: DeviceSliceType = {\n byId: {\n // [deviceId]: {\n // ...,\n // twinsByIntegration: { [external.provider.id]: twinData }\n // }\n },\n byStatus: {\n [DEVICE_STATES.accepted]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },\n [DEVICE_STATES.pending]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },\n [DEVICE_STATES.preauth]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },\n [DEVICE_STATES.rejected]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } }\n },\n deviceList: {\n deviceIds: [],\n ...DEVICE_LIST_DEFAULTS,\n selectedAttributes: [],\n selectedIssues: [],\n selection: [],\n sort: {\n direction: SORTING_OPTIONS.desc\n // key: null,\n // scope: null\n },\n state: DEVICE_STATES.accepted,\n total: 0,\n refreshTrigger: false,\n isLoading: false,\n detailsTab: '',\n open: false\n },\n filters: [\n // { key: 'device_type', value: 'raspberry', operator: '$eq', scope: 'inventory' }\n ],\n filteringAttributes: { identityAttributes: [], inventoryAttributes: [], systemAttributes: [], tagAttributes: [] },\n filteringAttributesLimit: 10,\n filteringAttributesConfig: {\n attributes: {\n // inventory: ['some_attribute']\n },\n count: 0,\n limit: 100\n },\n reports: [\n // { items: [{ key: \"someKey\", count: 42 }], otherCount: 123, total: <otherCount + itemsCount> }\n ],\n total: 0,\n limits: {\n standard: 0,\n micro: 0,\n system: 0\n },\n groups: {\n byId: {\n // groupName: { deviceIds: [], total: 0, filters: [] },\n // dynamo: { deviceIds: [], total: 3, filters: [{ a: 1 }] }\n },\n selectedGroup: undefined\n }\n};\n\nexport const devicesSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n receivedGroups: (state, action: PayloadAction<Record<string, DeviceGroup>>) => {\n state.groups.byId = action.payload;\n },\n addToGroup: (state, action: PayloadAction<{ deviceIds: string[]; group: string }>) => {\n const { group, deviceIds } = action.payload;\n const maybeExistingGroup = {\n filters: [],\n deviceIds: [],\n ...state.groups.byId[group]\n };\n state.groups.byId[group] = {\n ...maybeExistingGroup,\n deviceIds: [...maybeExistingGroup.deviceIds, ...deviceIds].filter(duplicateFilter),\n total: (maybeExistingGroup.total || 0) + 1\n };\n },\n removeFromGroup: (state, action: PayloadAction<{ deviceIds: string[]; group: string }>) => {\n const { group, deviceIds: removedIds } = action.payload;\n const { deviceIds = [], total = 0, ...maybeExistingGroup } = state.groups.byId[group] || {};\n const changedGroup = {\n ...maybeExistingGroup,\n deviceIds: deviceIds.filter(id => !removedIds.includes(id)),\n total: Math.max(total - removedIds.length, 0)\n };\n if (changedGroup.total || changedGroup.deviceIds.length) {\n state.groups.byId[group] = changedGroup;\n return;\n } else if (state.groups.selectedGroup === group) {\n state.groups.selectedGroup = undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [group]: removal, ...remainingById } = state.groups.byId;\n state.groups.byId = remainingById;\n },\n addGroup: (state, action: PayloadAction<{ group: DeviceGroup; groupName: string }>) => {\n const { groupName, group } = action.payload;\n state.groups.byId[groupName] = {\n ...state.groups.byId[groupName],\n ...group\n };\n },\n selectGroup: (state, { payload: group }: PayloadAction<string | undefined>) => {\n state.deviceList.deviceIds =\n group && state.groups.byId[group] && state.groups.byId[group].deviceIds && state.groups.byId[group].deviceIds.length > 0\n ? state.groups.byId[group].deviceIds\n : [];\n state.groups.selectedGroup = group;\n },\n removeGroup: (state, action: PayloadAction<string>) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [action.payload]: removal, ...remainingById } = state.groups.byId;\n state.groups.byId = remainingById;\n state.groups.selectedGroup = state.groups.selectedGroup === action.payload ? undefined : state.groups.selectedGroup;\n },\n setDeviceListState: (state, action: PayloadAction<Partial<DeviceListState>>) => {\n state.deviceList = {\n ...state.deviceList,\n ...action.payload,\n sort: {\n ...state.deviceList.sort,\n ...action.payload.sort\n }\n };\n },\n setFilterAttributes: (state, action: PayloadAction<FilteringAttributes>) => {\n state.filteringAttributes = action.payload;\n },\n setFilterablesConfig: (state, action: PayloadAction<FilteringAttributesConfig>) => {\n state.filteringAttributesConfig = action.payload;\n },\n receivedDevices: (state, action: PayloadAction<Record<string, Device>>) => {\n state.byId = {\n ...state.byId,\n ...action.payload\n };\n },\n setDeviceFilters: (state, action: PayloadAction<DeviceFilter[]>) => {\n if (deepCompare(action.payload, state.filters)) {\n return;\n }\n state.filters = action.payload.filter(filter => filter.key && filter.operator && filter.scope && typeof filter.value !== 'undefined');\n },\n setDeviceReports: (state, action: PayloadAction<DeviceReport[]>) => {\n state.reports = action.payload;\n },\n setDevicesByStatus: (state, action: PayloadAction<{ deviceIds: string[]; status: DeviceAuthState; total: number }>) => {\n const { status, total, deviceIds } = action.payload;\n if (total) {\n state.byStatus[status].deviceIds = deviceIds;\n state.byStatus[status].counts.total = total;\n }\n },\n setDevicesCountByStatus: (state, action: PayloadAction<{ countsPerTier: DeviceTierLimits; status: DeviceAuthState }>) => {\n const { countsPerTier, status } = action.payload;\n state.byStatus[status].counts = { ...countsPerTier, total: Object.values(countsPerTier).reduce((accu, tieredCount) => (accu += tieredCount), 0) };\n },\n setDeviceLimits: (state, action: PayloadAction<DeviceTierLimits>) => {\n state.limits = action.payload;\n },\n receivedDevice: (state, action: PayloadAction<{ id: string } & Partial<Device>>) => {\n state.byId[action.payload.id] = {\n ...state.byId[action.payload.id],\n ...action.payload\n };\n },\n maybeUpdateDevicesByStatus: (state, action: PayloadAction<{ authId?: string; deviceId: string }>) => {\n const { deviceId, authId } = action.payload;\n const device = state.byId[deviceId];\n const hasMultipleAuthSets = authId && device.auth_sets ? device.auth_sets.filter(authset => authset.id !== authId).length > 0 : false;\n if (!hasMultipleAuthSets && (Object.values(DEVICE_STATES) as string[]).includes(device.status)) {\n const deviceIds = state.byStatus[device.status].deviceIds.filter(id => id !== deviceId);\n const deviceTier = (device.attributes.tier as string) || 'standard';\n state.byStatus[device.status] = {\n deviceIds,\n counts: {\n ...state.byStatus[device.status].counts,\n [deviceTier]: Math.max(0, state.byStatus[device.status].counts[deviceTier] - 1),\n total: Math.max(0, state.byStatus[device.status].counts.total - 1)\n }\n };\n }\n }\n }\n});\n\nexport const actions = devicesSlice.actions;\nexport default devicesSlice.reducer;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/devicesSlice/index.ts"],"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 {\n Device as BackendDeviceAuth,\n ConnectionState,\n DeviceConfiguration,\n DeviceState,\n DeviceTierLimits,\n MonitorConfiguration,\n Scope,\n SortCriteria,\n Status\n} from '@northern.tech/types/MenderTypes';\n// @ts-nocheck\nimport { deepCompare, duplicateFilter } from '@northern.tech/utils/helpers';\nimport type { PayloadAction } from '@reduxjs/toolkit';\nimport { createSlice } from '@reduxjs/toolkit';\n\nimport type { ALL_DEVICE_STATES, DeviceIssueOptionKey, FilterOperator, SortOptions } from '../constants';\nimport { DEVICE_LIST_DEFAULTS, DEVICE_STATES, SORTING_OPTIONS } from '../constants';\nimport type { DeviceDeployment } from '../deploymentsSlice';\nimport type { DeviceAuthState } from './constants';\n\nexport const sliceName = 'devices';\nexport type DeviceSelectedAttribute = { attribute: string; scope: string };\nexport type DeviceListState = {\n detailsTab: string;\n deviceIds: string[];\n isLoading: boolean;\n open?: boolean;\n page: number;\n perPage: number;\n refreshTrigger: boolean;\n selectedAttributes: DeviceSelectedAttribute[];\n selectedId?: string;\n selectedIssues: DeviceIssueOptionKey[];\n selection: number[];\n setOnly?: boolean;\n sort: SortOptions & Partial<SortCriteria>;\n state?: DeviceAuthState | typeof ALL_DEVICE_STATES;\n total: number;\n};\ntype DeviceReport = {\n items: { count: number; key: string }[];\n otherCount: number;\n total: number;\n};\nexport type DeviceGroup = { deviceIds?: string[]; filters?: DeviceFilter[]; id?: string; total?: number };\nexport type InventoryAttributes = {\n [key: string]: string | string[];\n artifact_name: string;\n device_type: string[];\n};\n\n// based on the api docs the Record values might be even: \"Supported types: number, string, array of numbers, array of strings\" - but I guess \"string\" or \"string | sting[]\" should be good enough\ntype UiDeviceAttributes = {\n attributes: InventoryAttributes;\n identity?: Record<string, string>;\n monitor?: Record<string, string>;\n system: Record<string, string>;\n tags?: Record<string, string>;\n};\n\nexport type Device = BackendDeviceAuth &\n UiDeviceAttributes & {\n check_in_time_exact?: string;\n check_in_time_rounded?: string;\n config?: DeviceConfiguration;\n connect_status?: ConnectionState['status'];\n connect_updated_ts?: string;\n deploymentsCount?: number;\n deviceDeployments?: DeviceDeployment;\n etag?: string;\n gatewayIds?: string[];\n group?: string;\n id: string;\n isNew?: boolean;\n isOffline?: boolean;\n monitors?: MonitorConfiguration[];\n status: Status;\n twinsByIntegration?: Record<string, DeviceState & { twinError?: string }>;\n };\nexport type DeviceFilter = {\n key: string;\n operator: FilterOperator;\n scope: Scope;\n value: string | string[];\n};\ntype FilteringAttributes = {\n identityAttributes: string[];\n inventoryAttributes: string[];\n systemAttributes: string[];\n tagAttributes: string[];\n};\ntype FilteringAttributesConfig = {\n attributes: Record<string, string[]>;\n count: number;\n limit: number;\n};\n\nexport type DeviceGroups = {\n byId: Record<string, DeviceGroup>;\n selectedGroup?: string;\n};\nexport type DeviceSliceType = {\n byId: Record<string, Device>;\n byStatus: Record<DeviceAuthState, { counts: DeviceTierLimits & { total: number }; deviceIds: string[] }>;\n deviceList: DeviceListState;\n filteringAttributes: FilteringAttributes;\n filteringAttributesConfig: FilteringAttributesConfig;\n filteringAttributesLimit: number;\n filters: DeviceFilter[];\n groups: DeviceGroups;\n limits: DeviceTierLimits;\n reports: DeviceReport[];\n testDeviceCount: number;\n total: number;\n};\nexport const initialState: DeviceSliceType = {\n byId: {\n // [deviceId]: {\n // ...,\n // twinsByIntegration: { [external.provider.id]: twinData }\n // }\n },\n byStatus: {\n [DEVICE_STATES.accepted]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },\n [DEVICE_STATES.pending]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },\n [DEVICE_STATES.preauth]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } },\n [DEVICE_STATES.rejected]: { deviceIds: [], counts: { standard: 0, micro: 0, system: 0, total: 0 } }\n },\n deviceList: {\n deviceIds: [],\n ...DEVICE_LIST_DEFAULTS,\n selectedAttributes: [],\n selectedIssues: [],\n selection: [],\n sort: {\n direction: SORTING_OPTIONS.desc\n // key: null,\n // scope: null\n },\n state: DEVICE_STATES.accepted,\n total: 0,\n refreshTrigger: false,\n isLoading: false,\n detailsTab: '',\n open: false\n },\n filters: [\n // { key: 'device_type', value: 'raspberry', operator: '$eq', scope: 'inventory' }\n ],\n filteringAttributes: { identityAttributes: [], inventoryAttributes: [], systemAttributes: [], tagAttributes: [] },\n filteringAttributesLimit: 10,\n filteringAttributesConfig: {\n attributes: {\n // inventory: ['some_attribute']\n },\n count: 0,\n limit: 100\n },\n reports: [\n // { items: [{ key: \"someKey\", count: 42 }], otherCount: 123, total: <otherCount + itemsCount> }\n ],\n testDeviceCount: 0,\n total: 0,\n limits: {\n standard: 0,\n micro: 0,\n system: 0\n },\n groups: {\n byId: {\n // groupName: { deviceIds: [], total: 0, filters: [] },\n // dynamo: { deviceIds: [], total: 3, filters: [{ a: 1 }] }\n },\n selectedGroup: undefined\n }\n};\n\nexport const devicesSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n receivedGroups: (state, action: PayloadAction<Record<string, DeviceGroup>>) => {\n state.groups.byId = action.payload;\n },\n addToGroup: (state, action: PayloadAction<{ deviceIds: string[]; group: string }>) => {\n const { group, deviceIds } = action.payload;\n const maybeExistingGroup = {\n filters: [],\n deviceIds: [],\n ...state.groups.byId[group]\n };\n state.groups.byId[group] = {\n ...maybeExistingGroup,\n deviceIds: [...maybeExistingGroup.deviceIds, ...deviceIds].filter(duplicateFilter),\n total: (maybeExistingGroup.total || 0) + 1\n };\n },\n removeFromGroup: (state, action: PayloadAction<{ deviceIds: string[]; group: string }>) => {\n const { group, deviceIds: removedIds } = action.payload;\n const { deviceIds = [], total = 0, ...maybeExistingGroup } = state.groups.byId[group] || {};\n const changedGroup = {\n ...maybeExistingGroup,\n deviceIds: deviceIds.filter(id => !removedIds.includes(id)),\n total: Math.max(total - removedIds.length, 0)\n };\n if (changedGroup.total || changedGroup.deviceIds.length) {\n state.groups.byId[group] = changedGroup;\n return;\n } else if (state.groups.selectedGroup === group) {\n state.groups.selectedGroup = undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [group]: removal, ...remainingById } = state.groups.byId;\n state.groups.byId = remainingById;\n },\n addGroup: (state, action: PayloadAction<{ group: DeviceGroup; groupName: string }>) => {\n const { groupName, group } = action.payload;\n state.groups.byId[groupName] = {\n ...state.groups.byId[groupName],\n ...group\n };\n },\n selectGroup: (state, { payload: group }: PayloadAction<string | undefined>) => {\n state.deviceList.deviceIds =\n group && state.groups.byId[group] && state.groups.byId[group].deviceIds && state.groups.byId[group].deviceIds.length > 0\n ? state.groups.byId[group].deviceIds\n : [];\n state.groups.selectedGroup = group;\n },\n removeGroup: (state, action: PayloadAction<string>) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [action.payload]: removal, ...remainingById } = state.groups.byId;\n state.groups.byId = remainingById;\n state.groups.selectedGroup = state.groups.selectedGroup === action.payload ? undefined : state.groups.selectedGroup;\n },\n setDeviceListState: (state, action: PayloadAction<Partial<DeviceListState>>) => {\n state.deviceList = {\n ...state.deviceList,\n ...action.payload,\n sort: {\n ...state.deviceList.sort,\n ...action.payload.sort\n }\n };\n },\n setFilterAttributes: (state, action: PayloadAction<FilteringAttributes>) => {\n state.filteringAttributes = action.payload;\n },\n setFilterablesConfig: (state, action: PayloadAction<FilteringAttributesConfig>) => {\n state.filteringAttributesConfig = action.payload;\n },\n receivedDevices: (state, action: PayloadAction<Record<string, Device>>) => {\n state.byId = {\n ...state.byId,\n ...action.payload\n };\n },\n setDeviceFilters: (state, action: PayloadAction<DeviceFilter[]>) => {\n if (deepCompare(action.payload, state.filters)) {\n return;\n }\n state.filters = action.payload.filter(filter => filter.key && filter.operator && filter.scope && typeof filter.value !== 'undefined');\n },\n setDeviceReports: (state, action: PayloadAction<DeviceReport[]>) => {\n state.reports = action.payload;\n },\n setDevicesByStatus: (state, action: PayloadAction<{ deviceIds: string[]; status: DeviceAuthState; total: number }>) => {\n const { status, total, deviceIds } = action.payload;\n if (total) {\n state.byStatus[status].deviceIds = deviceIds;\n state.byStatus[status].counts.total = total;\n }\n },\n setDevicesCountByStatus: (state, action: PayloadAction<{ countsPerTier: DeviceTierLimits; status: DeviceAuthState }>) => {\n const { countsPerTier, status } = action.payload;\n state.byStatus[status].counts = { ...countsPerTier, total: Object.values(countsPerTier).reduce((accu, tieredCount) => (accu += tieredCount), 0) };\n },\n setDeviceLimits: (state, action: PayloadAction<DeviceTierLimits>) => {\n state.limits = action.payload;\n },\n setTestDeviceCount: (state, action: PayloadAction<number>) => {\n state.testDeviceCount = action.payload;\n },\n receivedDevice: (state, action: PayloadAction<{ id: string } & Partial<Device>>) => {\n state.byId[action.payload.id] = {\n ...state.byId[action.payload.id],\n ...action.payload\n };\n },\n maybeUpdateDevicesByStatus: (state, action: PayloadAction<{ authId?: string; deviceId: string }>) => {\n const { deviceId, authId } = action.payload;\n const device = state.byId[deviceId];\n const hasMultipleAuthSets = authId && device.auth_sets ? device.auth_sets.filter(authset => authset.id !== authId).length > 0 : false;\n if (!hasMultipleAuthSets && (Object.values(DEVICE_STATES) as string[]).includes(device.status)) {\n const deviceIds = state.byStatus[device.status].deviceIds.filter(id => id !== deviceId);\n const deviceTier = (device.attributes.tier as string) || 'standard';\n state.byStatus[device.status] = {\n deviceIds,\n counts: {\n ...state.byStatus[device.status].counts,\n [deviceTier]: Math.max(0, state.byStatus[device.status].counts[deviceTier] - 1),\n total: Math.max(0, state.byStatus[device.status].counts.total - 1)\n }\n };\n }\n }\n }\n});\n\nexport const actions = devicesSlice.actions;\nexport default devicesSlice.reducer;\n"],"mappings":"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"}
@@ -161,6 +161,7 @@ declare const mockState: {
161
161
  otherCount: number;
162
162
  total: number;
163
163
  }[];
164
+ testDeviceCount: number;
164
165
  total: number;
165
166
  };
166
167
  //#endregion
@@ -161,6 +161,7 @@ declare const mockState: {
161
161
  otherCount: number;
162
162
  total: number;
163
163
  }[];
164
+ testDeviceCount: number;
164
165
  total: number;
165
166
  };
166
167
  //#endregion
@@ -20,6 +20,7 @@ const getSortedFilteringAttributes = (0, _reduxjs_toolkit.createSelector)([getFi
20
20
  identityAttributes: [...filteringAttributes.identityAttributes, "id"]
21
21
  }));
22
22
  const getDeviceLimits = (state) => state.devices.limits;
23
+ const getTestDeviceCount = (state) => state.devices.testDeviceCount;
23
24
  const getFilteringAttributesLimit = (state) => state.devices.filteringAttributesLimit;
24
25
  const getDeviceIdentityAttributes = (0, _reduxjs_toolkit.createSelector)([getFilteringAttributes, getFilteringAttributesLimit], ({ identityAttributes }, filteringAttributesLimit) => {
25
26
  return identityAttributes.slice(0, filteringAttributesLimit).reduce((accu, value) => {
@@ -146,5 +147,6 @@ exports.getListedDevices = getListedDevices;
146
147
  exports.getSelectedGroup = getSelectedGroup;
147
148
  exports.getSelectedGroupInfo = getSelectedGroupInfo;
148
149
  exports.getSortedFilteringAttributes = getSortedFilteringAttributes;
150
+ exports.getTestDeviceCount = getTestDeviceCount;
149
151
 
150
152
  //# sourceMappingURL=selectors.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.cjs","names":["DEVICE_STATES","UNGROUPED_GROUP","duplicateFilter"],"sources":["../../src/devicesSlice/selectors.ts"],"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 { duplicateFilter } from '@northern.tech/utils/helpers';\nimport { createSelector } from '@reduxjs/toolkit';\n\nimport type { DeviceFilter, DeviceGroup } from '.';\nimport type { DeviceAuthState } from '../constants';\nimport { DEVICE_STATES, UNGROUPED_GROUP } from '../constants';\nimport type { RootState } from '../store';\n\nexport const getAcceptedDevices = (state: RootState) => state.devices.byStatus.accepted;\nexport const getDevicesByStatus = (state: RootState) => state.devices.byStatus;\nexport const getDevicesById = (state: RootState) => state.devices.byId;\nexport const getDeviceReports = (state: RootState) => state.devices.reports;\nexport const getGroupsById = (state: RootState) => state.devices.groups.byId;\nexport const getSelectedGroup = (state: RootState) => state.devices.groups.selectedGroup;\n\nexport const getDeviceListState = (state: RootState) => state.devices.deviceList;\nexport const getListedDevices = (state: RootState) => state.devices.deviceList.deviceIds;\nexport const getFilteringAttributes = (state: RootState) => state.devices.filteringAttributes;\nexport const getDeviceFilters = (state: RootState) => state.devices.filters || [];\nconst getFilteringAttributesFromConfig = (state: RootState) => state.devices.filteringAttributesConfig.attributes;\nexport const getSortedFilteringAttributes = createSelector([getFilteringAttributes], filteringAttributes => ({\n ...filteringAttributes,\n identityAttributes: [...filteringAttributes.identityAttributes, 'id']\n}));\nexport const getDeviceLimits = (state: RootState) => state.devices.limits;\nconst getFilteringAttributesLimit = (state: RootState) => state.devices.filteringAttributesLimit;\n\nexport const getDeviceIdentityAttributes = createSelector(\n [getFilteringAttributes, getFilteringAttributesLimit],\n ({ identityAttributes }, filteringAttributesLimit) => {\n // limit the selection of the available attribute to AVAILABLE_ATTRIBUTE_LIMIT\n const attributes = identityAttributes.slice(0, filteringAttributesLimit);\n return attributes.reduce(\n (accu, value) => {\n accu.push({ value, label: value, scope: 'identity' });\n return accu;\n },\n [\n { value: 'name', label: 'Name', scope: 'tags' },\n { value: 'id', label: 'Device ID', scope: 'identity' }\n ]\n );\n }\n);\n\nexport const getDeviceCountsByStatus = createSelector([getDevicesByStatus], byStatus =>\n Object.values(DEVICE_STATES).reduce<Record<DeviceAuthState, number>>(\n (accu, deviceState) => {\n const { counts } = byStatus[deviceState];\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { total, ...tieredCounts } = counts;\n const count = Object.values(tieredCounts).reduce((accu, countPerTier) => accu + countPerTier, 0);\n accu[deviceState] = count;\n accu.total = accu.total + count;\n return accu;\n },\n { total: 0 }\n )\n);\n\nexport const getDeviceById = createSelector([getDevicesById, (_, deviceId) => deviceId], (devicesById, deviceId = '') => devicesById[deviceId] ?? {});\n\nexport const getSelectedGroupInfo = createSelector(\n [getDeviceCountsByStatus, getGroupsById, getSelectedGroup],\n ({ accepted: acceptedDeviceTotal }, groupsById, selectedGroup) => {\n let groupCount = acceptedDeviceTotal;\n let groupFilters: DeviceFilter[] = [];\n if (selectedGroup && groupsById[selectedGroup]) {\n groupCount = groupsById[selectedGroup].total || 0;\n groupFilters = groupsById[selectedGroup].filters || [];\n }\n return { groupCount, selectedGroup, groupFilters };\n }\n);\n\nexport const getCombinedLimit = createSelector(\n [getDeviceLimits],\n deviceLimits => Object.values(deviceLimits).reduce((accu, limit) => accu + Math.max(limit ?? 0, 0), 0) // limit might be -1 for unlimited devices\n);\n\nexport const getLimitMaxed = createSelector(\n [getDeviceCountsByStatus, getCombinedLimit],\n ({ accepted: acceptedDevices }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices\n);\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const getGroupsByIdWithoutUngrouped = createSelector([getGroupsById], ({ [UNGROUPED_GROUP.id]: ungrouped, ...groups }) => groups);\n\nexport const getGroupData = createSelector([getGroupsByIdWithoutUngrouped], groups => {\n const createdGroup = Object.keys(groups).length ? Object.keys(groups)[0] : undefined;\n const hasDynamicGroups = Object.values(groups).some(group => !!group.id);\n return { createdGroup, hasDynamicGroups, groups };\n});\n\ntype SelectorGroup = DeviceGroup & { groupId: string };\ntype SelectorGroups = { dynamic: SelectorGroup[]; static: SelectorGroup[]; ungrouped: SelectorGroup[] };\n\nexport const getGroups = createSelector([getGroupsById], groupsById => {\n const groupNames = Object.keys(groupsById).sort();\n const groupedGroups = Object.entries(groupsById)\n .sort((a, b) => a[0].localeCompare(b[0]))\n .reduce<SelectorGroups>(\n (accu, [groupname, group]) => {\n const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;\n const groupItem = { ...group, groupId: name, name: groupname };\n if ((group.filters ?? []).length > 0) {\n if (groupname !== UNGROUPED_GROUP.id) {\n accu.dynamic.push(groupItem);\n } else {\n accu.ungrouped.push(groupItem);\n }\n } else {\n accu.static.push(groupItem);\n }\n return accu;\n },\n { dynamic: [], static: [], ungrouped: [] }\n );\n return { groupNames, ...groupedGroups };\n});\nexport const getAttributesList = createSelector(\n [getFilteringAttributes, getFilteringAttributesFromConfig],\n ({ identityAttributes = [], inventoryAttributes = [] }, { identity = [], inventory = [] }) =>\n [...identityAttributes, ...inventoryAttributes, ...identity, ...inventory].filter(duplicateFilter)\n);\nconst getEnabledTierLimits = createSelector([getDeviceLimits], limits => Object.entries(limits).filter(([, limit]) => limit !== 0));\n\nexport const getEnabledTiers = createSelector([getEnabledTierLimits], enabledTierLimits => enabledTierLimits.map(([type]) => type));\n\nexport const getDeviceLimitStats = createSelector([getEnabledTierLimits, getAcceptedDevices], (enabledTierLimits, accepted) => {\n const { counts } = accepted;\n return enabledTierLimits.map(([type, limit]) => ({\n type,\n limit,\n total: counts[type] || 0\n }));\n});\n\nexport const getDeviceTypes = createSelector([getAcceptedDevices, getDevicesById], ({ deviceIds = [] }, devicesById) =>\n Object.keys(\n deviceIds.slice(0, 200).reduce((accu, item) => {\n const { device_type: deviceTypes = [] } = devicesById[item] ? devicesById[item].attributes : {};\n accu = deviceTypes.reduce((deviceTypeAccu, deviceType) => {\n if (deviceType.length > 1) {\n deviceTypeAccu[deviceType] = deviceTypeAccu[deviceType] ? deviceTypeAccu[deviceType] + 1 : 1;\n }\n return deviceTypeAccu;\n }, accu);\n return accu;\n }, {})\n )\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"selectors.cjs","names":["DEVICE_STATES","UNGROUPED_GROUP","duplicateFilter"],"sources":["../../src/devicesSlice/selectors.ts"],"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 { duplicateFilter } from '@northern.tech/utils/helpers';\nimport { createSelector } from '@reduxjs/toolkit';\n\nimport type { DeviceFilter, DeviceGroup } from '.';\nimport type { DeviceAuthState } from '../constants';\nimport { DEVICE_STATES, UNGROUPED_GROUP } from '../constants';\nimport type { RootState } from '../store';\n\nexport const getAcceptedDevices = (state: RootState) => state.devices.byStatus.accepted;\nexport const getDevicesByStatus = (state: RootState) => state.devices.byStatus;\nexport const getDevicesById = (state: RootState) => state.devices.byId;\nexport const getDeviceReports = (state: RootState) => state.devices.reports;\nexport const getGroupsById = (state: RootState) => state.devices.groups.byId;\nexport const getSelectedGroup = (state: RootState) => state.devices.groups.selectedGroup;\n\nexport const getDeviceListState = (state: RootState) => state.devices.deviceList;\nexport const getListedDevices = (state: RootState) => state.devices.deviceList.deviceIds;\nexport const getFilteringAttributes = (state: RootState) => state.devices.filteringAttributes;\nexport const getDeviceFilters = (state: RootState) => state.devices.filters || [];\nconst getFilteringAttributesFromConfig = (state: RootState) => state.devices.filteringAttributesConfig.attributes;\nexport const getSortedFilteringAttributes = createSelector([getFilteringAttributes], filteringAttributes => ({\n ...filteringAttributes,\n identityAttributes: [...filteringAttributes.identityAttributes, 'id']\n}));\nexport const getDeviceLimits = (state: RootState) => state.devices.limits;\nexport const getTestDeviceCount = (state: RootState) => state.devices.testDeviceCount;\nconst getFilteringAttributesLimit = (state: RootState) => state.devices.filteringAttributesLimit;\n\nexport const getDeviceIdentityAttributes = createSelector(\n [getFilteringAttributes, getFilteringAttributesLimit],\n ({ identityAttributes }, filteringAttributesLimit) => {\n // limit the selection of the available attribute to AVAILABLE_ATTRIBUTE_LIMIT\n const attributes = identityAttributes.slice(0, filteringAttributesLimit);\n return attributes.reduce(\n (accu, value) => {\n accu.push({ value, label: value, scope: 'identity' });\n return accu;\n },\n [\n { value: 'name', label: 'Name', scope: 'tags' },\n { value: 'id', label: 'Device ID', scope: 'identity' }\n ]\n );\n }\n);\n\nexport const getDeviceCountsByStatus = createSelector([getDevicesByStatus], byStatus =>\n Object.values(DEVICE_STATES).reduce<Record<DeviceAuthState, number>>(\n (accu, deviceState) => {\n const { counts } = byStatus[deviceState];\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { total, ...tieredCounts } = counts;\n const count = Object.values(tieredCounts).reduce((accu, countPerTier) => accu + countPerTier, 0);\n accu[deviceState] = count;\n accu.total = accu.total + count;\n return accu;\n },\n { total: 0 }\n )\n);\n\nexport const getDeviceById = createSelector([getDevicesById, (_, deviceId) => deviceId], (devicesById, deviceId = '') => devicesById[deviceId] ?? {});\n\nexport const getSelectedGroupInfo = createSelector(\n [getDeviceCountsByStatus, getGroupsById, getSelectedGroup],\n ({ accepted: acceptedDeviceTotal }, groupsById, selectedGroup) => {\n let groupCount = acceptedDeviceTotal;\n let groupFilters: DeviceFilter[] = [];\n if (selectedGroup && groupsById[selectedGroup]) {\n groupCount = groupsById[selectedGroup].total || 0;\n groupFilters = groupsById[selectedGroup].filters || [];\n }\n return { groupCount, selectedGroup, groupFilters };\n }\n);\n\nexport const getCombinedLimit = createSelector(\n [getDeviceLimits],\n deviceLimits => Object.values(deviceLimits).reduce((accu, limit) => accu + Math.max(limit ?? 0, 0), 0) // limit might be -1 for unlimited devices\n);\n\nexport const getLimitMaxed = createSelector(\n [getDeviceCountsByStatus, getCombinedLimit],\n ({ accepted: acceptedDevices }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices\n);\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const getGroupsByIdWithoutUngrouped = createSelector([getGroupsById], ({ [UNGROUPED_GROUP.id]: ungrouped, ...groups }) => groups);\n\nexport const getGroupData = createSelector([getGroupsByIdWithoutUngrouped], groups => {\n const createdGroup = Object.keys(groups).length ? Object.keys(groups)[0] : undefined;\n const hasDynamicGroups = Object.values(groups).some(group => !!group.id);\n return { createdGroup, hasDynamicGroups, groups };\n});\n\ntype SelectorGroup = DeviceGroup & { groupId: string };\ntype SelectorGroups = { dynamic: SelectorGroup[]; static: SelectorGroup[]; ungrouped: SelectorGroup[] };\n\nexport const getGroups = createSelector([getGroupsById], groupsById => {\n const groupNames = Object.keys(groupsById).sort();\n const groupedGroups = Object.entries(groupsById)\n .sort((a, b) => a[0].localeCompare(b[0]))\n .reduce<SelectorGroups>(\n (accu, [groupname, group]) => {\n const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;\n const groupItem = { ...group, groupId: name, name: groupname };\n if ((group.filters ?? []).length > 0) {\n if (groupname !== UNGROUPED_GROUP.id) {\n accu.dynamic.push(groupItem);\n } else {\n accu.ungrouped.push(groupItem);\n }\n } else {\n accu.static.push(groupItem);\n }\n return accu;\n },\n { dynamic: [], static: [], ungrouped: [] }\n );\n return { groupNames, ...groupedGroups };\n});\nexport const getAttributesList = createSelector(\n [getFilteringAttributes, getFilteringAttributesFromConfig],\n ({ identityAttributes = [], inventoryAttributes = [] }, { identity = [], inventory = [] }) =>\n [...identityAttributes, ...inventoryAttributes, ...identity, ...inventory].filter(duplicateFilter)\n);\nconst getEnabledTierLimits = createSelector([getDeviceLimits], limits => Object.entries(limits).filter(([, limit]) => limit !== 0));\n\nexport const getEnabledTiers = createSelector([getEnabledTierLimits], enabledTierLimits => enabledTierLimits.map(([type]) => type));\n\nexport const getDeviceLimitStats = createSelector([getEnabledTierLimits, getAcceptedDevices], (enabledTierLimits, accepted) => {\n const { counts } = accepted;\n return enabledTierLimits.map(([type, limit]) => ({\n type,\n limit,\n total: counts[type] || 0\n }));\n});\n\nexport const getDeviceTypes = createSelector([getAcceptedDevices, getDevicesById], ({ deviceIds = [] }, devicesById) =>\n Object.keys(\n deviceIds.slice(0, 200).reduce((accu, item) => {\n const { device_type: deviceTypes = [] } = devicesById[item] ? devicesById[item].attributes : {};\n accu = deviceTypes.reduce((deviceTypeAccu, deviceType) => {\n if (deviceType.length > 1) {\n deviceTypeAccu[deviceType] = deviceTypeAccu[deviceType] ? deviceTypeAccu[deviceType] + 1 : 1;\n }\n return deviceTypeAccu;\n }, accu);\n return accu;\n }, {})\n )\n);\n"],"mappings":"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"}
@@ -2,11 +2,11 @@ import { o as UserSliceType } from "../index-CSk4ENmk.cjs";
2
2
  import { i as ReleaseSliceType } from "../index-Zs9RnVoR.cjs";
3
3
  import { n as OnboardingSliceType } from "../index-DBUt8xVc.cjs";
4
4
  import { o as DeploymentsSliceType } from "../index-EPmsL6Lb.cjs";
5
- import { a as DeviceListState, n as DeviceFilter, r as DeviceGroup, s as DeviceSliceType, t as Device } from "../index-DbfM03Gj.cjs";
5
+ import { a as DeviceListState, n as DeviceFilter, r as DeviceGroup, s as DeviceSliceType, t as Device } from "../index-Doc_1P_Y.cjs";
6
6
  import { t as AppSliceType } from "../index-C8QadAm7.cjs";
7
7
  import { t as MonitorSliceType } from "../index-5Q-iI4EB.cjs";
8
8
  import { t as OrganizationSliceType } from "../index-Bj3OArhr.cjs";
9
- import { r as RootState } from "../store-Dd0Y2JCN.cjs";
9
+ import { r as RootState } from "../store-xV2zaXAc.cjs";
10
10
 
11
11
  //#region src/devicesSlice/selectors.d.ts
12
12
  declare const getAcceptedDevices: (state: RootState) => {
@@ -107,6 +107,7 @@ declare const getSortedFilteringAttributes: ((state: {
107
107
  argsMemoize: typeof import("reselect").weakMapMemoize;
108
108
  };
109
109
  declare const getDeviceLimits: (state: RootState) => import("@northern.tech/types/types.gen").DeviceTierLimits;
110
+ declare const getTestDeviceCount: (state: RootState) => number;
110
111
  declare const getDeviceIdentityAttributes: ((state: {
111
112
  app: AppSliceType;
112
113
  devices: DeviceSliceType;
@@ -883,5 +884,5 @@ declare const getDeviceTypes: ((state: {
883
884
  argsMemoize: typeof import("reselect").weakMapMemoize;
884
885
  };
885
886
  //#endregion
886
- export { getAcceptedDevices, getAttributesList, getCombinedLimit, getDeviceById, getDeviceCountsByStatus, getDeviceFilters, getDeviceIdentityAttributes, getDeviceLimitStats, getDeviceLimits, getDeviceListState, getDeviceReports, getDeviceTypes, getDevicesById, getDevicesByStatus, getEnabledTiers, getFilteringAttributes, getGroupData, getGroups, getGroupsById, getGroupsByIdWithoutUngrouped, getLimitMaxed, getListedDevices, getSelectedGroup, getSelectedGroupInfo, getSortedFilteringAttributes };
887
+ export { getAcceptedDevices, getAttributesList, getCombinedLimit, getDeviceById, getDeviceCountsByStatus, getDeviceFilters, getDeviceIdentityAttributes, getDeviceLimitStats, getDeviceLimits, getDeviceListState, getDeviceReports, getDeviceTypes, getDevicesById, getDevicesByStatus, getEnabledTiers, getFilteringAttributes, getGroupData, getGroups, getGroupsById, getGroupsByIdWithoutUngrouped, getLimitMaxed, getListedDevices, getSelectedGroup, getSelectedGroupInfo, getSortedFilteringAttributes, getTestDeviceCount };
887
888
  //# sourceMappingURL=selectors.d.cts.map
@@ -2,11 +2,11 @@ import { o as UserSliceType } from "../index-Cf81vLTi.js";
2
2
  import { i as ReleaseSliceType } from "../index-DLDY7bNT.js";
3
3
  import { n as OnboardingSliceType } from "../index-DBUt8xVc.js";
4
4
  import { o as DeploymentsSliceType } from "../index-Bb4yvvgG.js";
5
- import { a as DeviceListState, n as DeviceFilter, r as DeviceGroup, s as DeviceSliceType, t as Device } from "../index-CPdMUfRr.js";
5
+ import { a as DeviceListState, n as DeviceFilter, r as DeviceGroup, s as DeviceSliceType, t as Device } from "../index-BqJuhvO_.js";
6
6
  import { t as AppSliceType } from "../index-BLvjQfGj.js";
7
7
  import { t as MonitorSliceType } from "../index-ByfjrTdH.js";
8
8
  import { t as OrganizationSliceType } from "../index-BBsUj1a8.js";
9
- import { r as RootState } from "../store-Co2ptTSm.js";
9
+ import { r as RootState } from "../store-BzrMxxAO.js";
10
10
 
11
11
  //#region src/devicesSlice/selectors.d.ts
12
12
  declare const getAcceptedDevices: (state: RootState) => {
@@ -107,6 +107,7 @@ declare const getSortedFilteringAttributes: ((state: {
107
107
  argsMemoize: typeof import("reselect").weakMapMemoize;
108
108
  };
109
109
  declare const getDeviceLimits: (state: RootState) => import("@northern.tech/types/types.gen").DeviceTierLimits;
110
+ declare const getTestDeviceCount: (state: RootState) => number;
110
111
  declare const getDeviceIdentityAttributes: ((state: {
111
112
  app: AppSliceType;
112
113
  devices: DeviceSliceType;
@@ -883,5 +884,5 @@ declare const getDeviceTypes: ((state: {
883
884
  argsMemoize: typeof import("reselect").weakMapMemoize;
884
885
  };
885
886
  //#endregion
886
- export { getAcceptedDevices, getAttributesList, getCombinedLimit, getDeviceById, getDeviceCountsByStatus, getDeviceFilters, getDeviceIdentityAttributes, getDeviceLimitStats, getDeviceLimits, getDeviceListState, getDeviceReports, getDeviceTypes, getDevicesById, getDevicesByStatus, getEnabledTiers, getFilteringAttributes, getGroupData, getGroups, getGroupsById, getGroupsByIdWithoutUngrouped, getLimitMaxed, getListedDevices, getSelectedGroup, getSelectedGroupInfo, getSortedFilteringAttributes };
887
+ export { getAcceptedDevices, getAttributesList, getCombinedLimit, getDeviceById, getDeviceCountsByStatus, getDeviceFilters, getDeviceIdentityAttributes, getDeviceLimitStats, getDeviceLimits, getDeviceListState, getDeviceReports, getDeviceTypes, getDevicesById, getDevicesByStatus, getEnabledTiers, getFilteringAttributes, getGroupData, getGroups, getGroupsById, getGroupsByIdWithoutUngrouped, getLimitMaxed, getListedDevices, getSelectedGroup, getSelectedGroupInfo, getSortedFilteringAttributes, getTestDeviceCount };
887
888
  //# sourceMappingURL=selectors.d.ts.map
@@ -18,6 +18,7 @@ const getSortedFilteringAttributes = createSelector([getFilteringAttributes], (f
18
18
  identityAttributes: [...filteringAttributes.identityAttributes, "id"]
19
19
  }));
20
20
  const getDeviceLimits = (state) => state.devices.limits;
21
+ const getTestDeviceCount = (state) => state.devices.testDeviceCount;
21
22
  const getFilteringAttributesLimit = (state) => state.devices.filteringAttributesLimit;
22
23
  const getDeviceIdentityAttributes = createSelector([getFilteringAttributes, getFilteringAttributesLimit], ({ identityAttributes }, filteringAttributesLimit) => {
23
24
  return identityAttributes.slice(0, filteringAttributesLimit).reduce((accu, value) => {
@@ -119,6 +120,6 @@ const getDeviceTypes = createSelector([getAcceptedDevices, getDevicesById], ({ d
119
120
  return accu;
120
121
  }, {})));
121
122
  //#endregion
122
- export { getAcceptedDevices, getAttributesList, getCombinedLimit, getDeviceById, getDeviceCountsByStatus, getDeviceFilters, getDeviceIdentityAttributes, getDeviceLimitStats, getDeviceLimits, getDeviceListState, getDeviceReports, getDeviceTypes, getDevicesById, getDevicesByStatus, getEnabledTiers, getFilteringAttributes, getGroupData, getGroups, getGroupsById, getGroupsByIdWithoutUngrouped, getLimitMaxed, getListedDevices, getSelectedGroup, getSelectedGroupInfo, getSortedFilteringAttributes };
123
+ export { getAcceptedDevices, getAttributesList, getCombinedLimit, getDeviceById, getDeviceCountsByStatus, getDeviceFilters, getDeviceIdentityAttributes, getDeviceLimitStats, getDeviceLimits, getDeviceListState, getDeviceReports, getDeviceTypes, getDevicesById, getDevicesByStatus, getEnabledTiers, getFilteringAttributes, getGroupData, getGroups, getGroupsById, getGroupsByIdWithoutUngrouped, getLimitMaxed, getListedDevices, getSelectedGroup, getSelectedGroupInfo, getSortedFilteringAttributes, getTestDeviceCount };
123
124
 
124
125
  //# sourceMappingURL=selectors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.js","names":[],"sources":["../../src/devicesSlice/selectors.ts"],"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 { duplicateFilter } from '@northern.tech/utils/helpers';\nimport { createSelector } from '@reduxjs/toolkit';\n\nimport type { DeviceFilter, DeviceGroup } from '.';\nimport type { DeviceAuthState } from '../constants';\nimport { DEVICE_STATES, UNGROUPED_GROUP } from '../constants';\nimport type { RootState } from '../store';\n\nexport const getAcceptedDevices = (state: RootState) => state.devices.byStatus.accepted;\nexport const getDevicesByStatus = (state: RootState) => state.devices.byStatus;\nexport const getDevicesById = (state: RootState) => state.devices.byId;\nexport const getDeviceReports = (state: RootState) => state.devices.reports;\nexport const getGroupsById = (state: RootState) => state.devices.groups.byId;\nexport const getSelectedGroup = (state: RootState) => state.devices.groups.selectedGroup;\n\nexport const getDeviceListState = (state: RootState) => state.devices.deviceList;\nexport const getListedDevices = (state: RootState) => state.devices.deviceList.deviceIds;\nexport const getFilteringAttributes = (state: RootState) => state.devices.filteringAttributes;\nexport const getDeviceFilters = (state: RootState) => state.devices.filters || [];\nconst getFilteringAttributesFromConfig = (state: RootState) => state.devices.filteringAttributesConfig.attributes;\nexport const getSortedFilteringAttributes = createSelector([getFilteringAttributes], filteringAttributes => ({\n ...filteringAttributes,\n identityAttributes: [...filteringAttributes.identityAttributes, 'id']\n}));\nexport const getDeviceLimits = (state: RootState) => state.devices.limits;\nconst getFilteringAttributesLimit = (state: RootState) => state.devices.filteringAttributesLimit;\n\nexport const getDeviceIdentityAttributes = createSelector(\n [getFilteringAttributes, getFilteringAttributesLimit],\n ({ identityAttributes }, filteringAttributesLimit) => {\n // limit the selection of the available attribute to AVAILABLE_ATTRIBUTE_LIMIT\n const attributes = identityAttributes.slice(0, filteringAttributesLimit);\n return attributes.reduce(\n (accu, value) => {\n accu.push({ value, label: value, scope: 'identity' });\n return accu;\n },\n [\n { value: 'name', label: 'Name', scope: 'tags' },\n { value: 'id', label: 'Device ID', scope: 'identity' }\n ]\n );\n }\n);\n\nexport const getDeviceCountsByStatus = createSelector([getDevicesByStatus], byStatus =>\n Object.values(DEVICE_STATES).reduce<Record<DeviceAuthState, number>>(\n (accu, deviceState) => {\n const { counts } = byStatus[deviceState];\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { total, ...tieredCounts } = counts;\n const count = Object.values(tieredCounts).reduce((accu, countPerTier) => accu + countPerTier, 0);\n accu[deviceState] = count;\n accu.total = accu.total + count;\n return accu;\n },\n { total: 0 }\n )\n);\n\nexport const getDeviceById = createSelector([getDevicesById, (_, deviceId) => deviceId], (devicesById, deviceId = '') => devicesById[deviceId] ?? {});\n\nexport const getSelectedGroupInfo = createSelector(\n [getDeviceCountsByStatus, getGroupsById, getSelectedGroup],\n ({ accepted: acceptedDeviceTotal }, groupsById, selectedGroup) => {\n let groupCount = acceptedDeviceTotal;\n let groupFilters: DeviceFilter[] = [];\n if (selectedGroup && groupsById[selectedGroup]) {\n groupCount = groupsById[selectedGroup].total || 0;\n groupFilters = groupsById[selectedGroup].filters || [];\n }\n return { groupCount, selectedGroup, groupFilters };\n }\n);\n\nexport const getCombinedLimit = createSelector(\n [getDeviceLimits],\n deviceLimits => Object.values(deviceLimits).reduce((accu, limit) => accu + Math.max(limit ?? 0, 0), 0) // limit might be -1 for unlimited devices\n);\n\nexport const getLimitMaxed = createSelector(\n [getDeviceCountsByStatus, getCombinedLimit],\n ({ accepted: acceptedDevices }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices\n);\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const getGroupsByIdWithoutUngrouped = createSelector([getGroupsById], ({ [UNGROUPED_GROUP.id]: ungrouped, ...groups }) => groups);\n\nexport const getGroupData = createSelector([getGroupsByIdWithoutUngrouped], groups => {\n const createdGroup = Object.keys(groups).length ? Object.keys(groups)[0] : undefined;\n const hasDynamicGroups = Object.values(groups).some(group => !!group.id);\n return { createdGroup, hasDynamicGroups, groups };\n});\n\ntype SelectorGroup = DeviceGroup & { groupId: string };\ntype SelectorGroups = { dynamic: SelectorGroup[]; static: SelectorGroup[]; ungrouped: SelectorGroup[] };\n\nexport const getGroups = createSelector([getGroupsById], groupsById => {\n const groupNames = Object.keys(groupsById).sort();\n const groupedGroups = Object.entries(groupsById)\n .sort((a, b) => a[0].localeCompare(b[0]))\n .reduce<SelectorGroups>(\n (accu, [groupname, group]) => {\n const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;\n const groupItem = { ...group, groupId: name, name: groupname };\n if ((group.filters ?? []).length > 0) {\n if (groupname !== UNGROUPED_GROUP.id) {\n accu.dynamic.push(groupItem);\n } else {\n accu.ungrouped.push(groupItem);\n }\n } else {\n accu.static.push(groupItem);\n }\n return accu;\n },\n { dynamic: [], static: [], ungrouped: [] }\n );\n return { groupNames, ...groupedGroups };\n});\nexport const getAttributesList = createSelector(\n [getFilteringAttributes, getFilteringAttributesFromConfig],\n ({ identityAttributes = [], inventoryAttributes = [] }, { identity = [], inventory = [] }) =>\n [...identityAttributes, ...inventoryAttributes, ...identity, ...inventory].filter(duplicateFilter)\n);\nconst getEnabledTierLimits = createSelector([getDeviceLimits], limits => Object.entries(limits).filter(([, limit]) => limit !== 0));\n\nexport const getEnabledTiers = createSelector([getEnabledTierLimits], enabledTierLimits => enabledTierLimits.map(([type]) => type));\n\nexport const getDeviceLimitStats = createSelector([getEnabledTierLimits, getAcceptedDevices], (enabledTierLimits, accepted) => {\n const { counts } = accepted;\n return enabledTierLimits.map(([type, limit]) => ({\n type,\n limit,\n total: counts[type] || 0\n }));\n});\n\nexport const getDeviceTypes = createSelector([getAcceptedDevices, getDevicesById], ({ deviceIds = [] }, devicesById) =>\n Object.keys(\n deviceIds.slice(0, 200).reduce((accu, item) => {\n const { device_type: deviceTypes = [] } = devicesById[item] ? devicesById[item].attributes : {};\n accu = deviceTypes.reduce((deviceTypeAccu, deviceType) => {\n if (deviceType.length > 1) {\n deviceTypeAccu[deviceType] = deviceTypeAccu[deviceType] ? deviceTypeAccu[deviceType] + 1 : 1;\n }\n return deviceTypeAccu;\n }, accu);\n return accu;\n }, {})\n )\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"selectors.js","names":[],"sources":["../../src/devicesSlice/selectors.ts"],"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 { duplicateFilter } from '@northern.tech/utils/helpers';\nimport { createSelector } from '@reduxjs/toolkit';\n\nimport type { DeviceFilter, DeviceGroup } from '.';\nimport type { DeviceAuthState } from '../constants';\nimport { DEVICE_STATES, UNGROUPED_GROUP } from '../constants';\nimport type { RootState } from '../store';\n\nexport const getAcceptedDevices = (state: RootState) => state.devices.byStatus.accepted;\nexport const getDevicesByStatus = (state: RootState) => state.devices.byStatus;\nexport const getDevicesById = (state: RootState) => state.devices.byId;\nexport const getDeviceReports = (state: RootState) => state.devices.reports;\nexport const getGroupsById = (state: RootState) => state.devices.groups.byId;\nexport const getSelectedGroup = (state: RootState) => state.devices.groups.selectedGroup;\n\nexport const getDeviceListState = (state: RootState) => state.devices.deviceList;\nexport const getListedDevices = (state: RootState) => state.devices.deviceList.deviceIds;\nexport const getFilteringAttributes = (state: RootState) => state.devices.filteringAttributes;\nexport const getDeviceFilters = (state: RootState) => state.devices.filters || [];\nconst getFilteringAttributesFromConfig = (state: RootState) => state.devices.filteringAttributesConfig.attributes;\nexport const getSortedFilteringAttributes = createSelector([getFilteringAttributes], filteringAttributes => ({\n ...filteringAttributes,\n identityAttributes: [...filteringAttributes.identityAttributes, 'id']\n}));\nexport const getDeviceLimits = (state: RootState) => state.devices.limits;\nexport const getTestDeviceCount = (state: RootState) => state.devices.testDeviceCount;\nconst getFilteringAttributesLimit = (state: RootState) => state.devices.filteringAttributesLimit;\n\nexport const getDeviceIdentityAttributes = createSelector(\n [getFilteringAttributes, getFilteringAttributesLimit],\n ({ identityAttributes }, filteringAttributesLimit) => {\n // limit the selection of the available attribute to AVAILABLE_ATTRIBUTE_LIMIT\n const attributes = identityAttributes.slice(0, filteringAttributesLimit);\n return attributes.reduce(\n (accu, value) => {\n accu.push({ value, label: value, scope: 'identity' });\n return accu;\n },\n [\n { value: 'name', label: 'Name', scope: 'tags' },\n { value: 'id', label: 'Device ID', scope: 'identity' }\n ]\n );\n }\n);\n\nexport const getDeviceCountsByStatus = createSelector([getDevicesByStatus], byStatus =>\n Object.values(DEVICE_STATES).reduce<Record<DeviceAuthState, number>>(\n (accu, deviceState) => {\n const { counts } = byStatus[deviceState];\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { total, ...tieredCounts } = counts;\n const count = Object.values(tieredCounts).reduce((accu, countPerTier) => accu + countPerTier, 0);\n accu[deviceState] = count;\n accu.total = accu.total + count;\n return accu;\n },\n { total: 0 }\n )\n);\n\nexport const getDeviceById = createSelector([getDevicesById, (_, deviceId) => deviceId], (devicesById, deviceId = '') => devicesById[deviceId] ?? {});\n\nexport const getSelectedGroupInfo = createSelector(\n [getDeviceCountsByStatus, getGroupsById, getSelectedGroup],\n ({ accepted: acceptedDeviceTotal }, groupsById, selectedGroup) => {\n let groupCount = acceptedDeviceTotal;\n let groupFilters: DeviceFilter[] = [];\n if (selectedGroup && groupsById[selectedGroup]) {\n groupCount = groupsById[selectedGroup].total || 0;\n groupFilters = groupsById[selectedGroup].filters || [];\n }\n return { groupCount, selectedGroup, groupFilters };\n }\n);\n\nexport const getCombinedLimit = createSelector(\n [getDeviceLimits],\n deviceLimits => Object.values(deviceLimits).reduce((accu, limit) => accu + Math.max(limit ?? 0, 0), 0) // limit might be -1 for unlimited devices\n);\n\nexport const getLimitMaxed = createSelector(\n [getDeviceCountsByStatus, getCombinedLimit],\n ({ accepted: acceptedDevices }, combinedLimit) => !!combinedLimit && combinedLimit <= acceptedDevices\n);\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const getGroupsByIdWithoutUngrouped = createSelector([getGroupsById], ({ [UNGROUPED_GROUP.id]: ungrouped, ...groups }) => groups);\n\nexport const getGroupData = createSelector([getGroupsByIdWithoutUngrouped], groups => {\n const createdGroup = Object.keys(groups).length ? Object.keys(groups)[0] : undefined;\n const hasDynamicGroups = Object.values(groups).some(group => !!group.id);\n return { createdGroup, hasDynamicGroups, groups };\n});\n\ntype SelectorGroup = DeviceGroup & { groupId: string };\ntype SelectorGroups = { dynamic: SelectorGroup[]; static: SelectorGroup[]; ungrouped: SelectorGroup[] };\n\nexport const getGroups = createSelector([getGroupsById], groupsById => {\n const groupNames = Object.keys(groupsById).sort();\n const groupedGroups = Object.entries(groupsById)\n .sort((a, b) => a[0].localeCompare(b[0]))\n .reduce<SelectorGroups>(\n (accu, [groupname, group]) => {\n const name = groupname === UNGROUPED_GROUP.id ? UNGROUPED_GROUP.name : groupname;\n const groupItem = { ...group, groupId: name, name: groupname };\n if ((group.filters ?? []).length > 0) {\n if (groupname !== UNGROUPED_GROUP.id) {\n accu.dynamic.push(groupItem);\n } else {\n accu.ungrouped.push(groupItem);\n }\n } else {\n accu.static.push(groupItem);\n }\n return accu;\n },\n { dynamic: [], static: [], ungrouped: [] }\n );\n return { groupNames, ...groupedGroups };\n});\nexport const getAttributesList = createSelector(\n [getFilteringAttributes, getFilteringAttributesFromConfig],\n ({ identityAttributes = [], inventoryAttributes = [] }, { identity = [], inventory = [] }) =>\n [...identityAttributes, ...inventoryAttributes, ...identity, ...inventory].filter(duplicateFilter)\n);\nconst getEnabledTierLimits = createSelector([getDeviceLimits], limits => Object.entries(limits).filter(([, limit]) => limit !== 0));\n\nexport const getEnabledTiers = createSelector([getEnabledTierLimits], enabledTierLimits => enabledTierLimits.map(([type]) => type));\n\nexport const getDeviceLimitStats = createSelector([getEnabledTierLimits, getAcceptedDevices], (enabledTierLimits, accepted) => {\n const { counts } = accepted;\n return enabledTierLimits.map(([type, limit]) => ({\n type,\n limit,\n total: counts[type] || 0\n }));\n});\n\nexport const getDeviceTypes = createSelector([getAcceptedDevices, getDevicesById], ({ deviceIds = [] }, devicesById) =>\n Object.keys(\n deviceIds.slice(0, 200).reduce((accu, item) => {\n const { device_type: deviceTypes = [] } = devicesById[item] ? devicesById[item].attributes : {};\n accu = deviceTypes.reduce((deviceTypeAccu, deviceType) => {\n if (deviceType.length > 1) {\n deviceTypeAccu[deviceType] = deviceTypeAccu[deviceType] ? deviceTypeAccu[deviceType] + 1 : 1;\n }\n return deviceTypeAccu;\n }, accu);\n return accu;\n }, {})\n )\n);\n"],"mappings":"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"}
@@ -30,6 +30,7 @@ exports.getGroups = require_thunks.getGroups;
30
30
  exports.getReportDataWithoutBackendSupport = require_thunks.getReportDataWithoutBackendSupport;
31
31
  exports.getSessionDetails = require_thunks.getSessionDetails;
32
32
  exports.getSystemDevices = require_thunks.getSystemDevices;
33
+ exports.getTestDeviceCount = require_thunks.getTestDeviceCount;
33
34
  exports.preauthDevice = require_thunks.preauthDevice;
34
35
  exports.removeDevicesFromGroup = require_thunks.removeDevicesFromGroup;
35
36
  exports.removeDynamicGroup = require_thunks.removeDynamicGroup;
@@ -41,6 +42,7 @@ exports.setDeviceConfig = require_thunks.setDeviceConfig;
41
42
  exports.setDeviceListState = require_thunks.setDeviceListState;
42
43
  exports.setDeviceTags = require_thunks.setDeviceTags;
43
44
  exports.setDeviceTwin = require_thunks.setDeviceTwin;
45
+ exports.setTestDeviceStatus = require_thunks.setTestDeviceStatus;
44
46
  exports.triggerDeviceUpdate = require_thunks.triggerDeviceUpdate;
45
47
  exports.updateDeviceAuth = require_thunks.updateDeviceAuth;
46
48
  exports.updateDevicesAuth = require_thunks.updateDevicesAuth;
@@ -1,7 +1,7 @@
1
1
  import { m as DeviceIssueOptionKey, mt as DeviceAuthState } from "../constants-_p6w8uEp.cjs";
2
- import { a as DeviceListState, n as DeviceFilter, o as DeviceSelectedAttribute, r as DeviceGroup, t as Device$1 } from "../index-DbfM03Gj.cjs";
2
+ import { a as DeviceListState, n as DeviceFilter, o as DeviceSelectedAttribute, r as DeviceGroup, t as Device$1 } from "../index-Doc_1P_Y.cjs";
3
3
  import { i as SnackbarContent, n as SearchState } from "../index-C8QadAm7.cjs";
4
- import { r as RootState, t as AppDispatch } from "../store-Dd0Y2JCN.cjs";
4
+ import { r as RootState, t as AppDispatch } from "../store-xV2zaXAc.cjs";
5
5
  import { ConnectionState, Device, DeviceConfiguration, DeviceInventory, DeviceTierLimits, DeviceWithImage, Filter, Integration, ManagementApiConfiguration, NewConfigurationDeployment, PreAuthSet, SortCriteria, Status } from "@northern.tech/types/MenderTypes";
6
6
 
7
7
  //#region src/devicesSlice/thunks.d.ts
@@ -403,6 +403,19 @@ declare const getDeviceLimits: import("@reduxjs/toolkit").AsyncThunk<{
403
403
  fulfilledMeta?: unknown;
404
404
  rejectedMeta?: unknown;
405
405
  }>;
406
+ declare const getTestDeviceCount: import("@reduxjs/toolkit").AsyncThunk<{
407
+ payload: number;
408
+ type: "devices/setTestDeviceCount";
409
+ }, void, {
410
+ dispatch: AppDispatch;
411
+ state: RootState;
412
+ extra?: unknown;
413
+ rejectValue?: unknown;
414
+ serializedErrorType?: unknown;
415
+ pendingMeta?: unknown;
416
+ fulfilledMeta?: unknown;
417
+ rejectedMeta?: unknown;
418
+ }>;
406
419
  type SetDeviceListStatePayload = {
407
420
  fetchAuth?: boolean;
408
421
  forceRefresh?: boolean;
@@ -831,6 +844,58 @@ declare const setDeviceTags: import("@reduxjs/toolkit").AsyncThunk<[{
831
844
  fulfilledMeta?: unknown;
832
845
  rejectedMeta?: unknown;
833
846
  }>;
847
+ declare const setTestDeviceStatus: import("@reduxjs/toolkit").AsyncThunk<[{
848
+ payload: string | SnackbarContent;
849
+ type: "app/setSnackbar";
850
+ }, {
851
+ payload: {
852
+ id: string;
853
+ } & Partial<Device$1>;
854
+ type: "devices/receivedDevice";
855
+ }, import("@reduxjs/toolkit").PayloadAction<unknown, string, {
856
+ arg: string;
857
+ requestId: string;
858
+ requestStatus: "rejected";
859
+ aborted: boolean;
860
+ condition: boolean;
861
+ } & ({
862
+ rejectedWithValue: true;
863
+ } | ({
864
+ rejectedWithValue: false;
865
+ } & {})), import("@reduxjs/toolkit").SerializedError> | import("@reduxjs/toolkit").PayloadAction<any, string, {
866
+ arg: string;
867
+ requestId: string;
868
+ requestStatus: "fulfilled";
869
+ }, never>, import("@reduxjs/toolkit").PayloadAction<unknown, string, {
870
+ arg: void;
871
+ requestId: string;
872
+ requestStatus: "rejected";
873
+ aborted: boolean;
874
+ condition: boolean;
875
+ } & ({
876
+ rejectedWithValue: true;
877
+ } | ({
878
+ rejectedWithValue: false;
879
+ } & {})), import("@reduxjs/toolkit").SerializedError> | import("@reduxjs/toolkit").PayloadAction<{
880
+ payload: number;
881
+ type: "devices/setTestDeviceCount";
882
+ }, string, {
883
+ arg: void;
884
+ requestId: string;
885
+ requestStatus: "fulfilled";
886
+ }, never>], {
887
+ deviceId: string;
888
+ test_device: boolean;
889
+ }, {
890
+ dispatch: AppDispatch;
891
+ state: RootState;
892
+ extra?: unknown;
893
+ rejectValue?: unknown;
894
+ serializedErrorType?: unknown;
895
+ pendingMeta?: unknown;
896
+ fulfilledMeta?: unknown;
897
+ rejectedMeta?: unknown;
898
+ }>;
834
899
  type DeviceTwinPayload = {
835
900
  deviceId: string;
836
901
  integration: Integration;
@@ -892,5 +957,5 @@ declare const getGatewayDevices: import("@reduxjs/toolkit").AsyncThunk<unknown[]
892
957
  rejectedMeta?: unknown;
893
958
  }>;
894
959
  //#endregion
895
- export { addDevicesToGroup, addDynamicGroup, addStaticGroup, applyDeviceConfig, decommissionDevice, deleteAuthset, deviceFileUpload, getAllDeviceCounts, getAllDevicesByStatus, getAllDynamicGroupDevices, getAllGroupDevices, getDeviceAttributes, getDeviceAuth, getDeviceById, getDeviceConfig, getDeviceConnect, getDeviceFileDownloadLink, getDeviceInfo, getDeviceLimits, getDeviceTwin, getDevicesByStatus, getDevicesWithAuth, getDynamicGroup, getDynamicGroups, getGatewayDevices, getGroupDevices, getGroups, getReportDataWithoutBackendSupport, getSessionDetails, getSystemDevices, preauthDevice, removeDevicesFromGroup, removeDynamicGroup, removeReportsByGroupName, removeStaticGroup, searchDevices, selectGroup, setDeviceConfig, setDeviceListState, setDeviceTags, setDeviceTwin, triggerDeviceUpdate, updateDeviceAuth, updateDevicesAuth, updateDynamicGroup, updateReportData };
960
+ export { addDevicesToGroup, addDynamicGroup, addStaticGroup, applyDeviceConfig, decommissionDevice, deleteAuthset, deviceFileUpload, getAllDeviceCounts, getAllDevicesByStatus, getAllDynamicGroupDevices, getAllGroupDevices, getDeviceAttributes, getDeviceAuth, getDeviceById, getDeviceConfig, getDeviceConnect, getDeviceFileDownloadLink, getDeviceInfo, getDeviceLimits, getDeviceTwin, getDevicesByStatus, getDevicesWithAuth, getDynamicGroup, getDynamicGroups, getGatewayDevices, getGroupDevices, getGroups, getReportDataWithoutBackendSupport, getSessionDetails, getSystemDevices, getTestDeviceCount, preauthDevice, removeDevicesFromGroup, removeDynamicGroup, removeReportsByGroupName, removeStaticGroup, searchDevices, selectGroup, setDeviceConfig, setDeviceListState, setDeviceTags, setDeviceTwin, setTestDeviceStatus, triggerDeviceUpdate, updateDeviceAuth, updateDevicesAuth, updateDynamicGroup, updateReportData };
896
961
  //# sourceMappingURL=thunks.d.cts.map
@@ -1,7 +1,7 @@
1
1
  import { m as DeviceIssueOptionKey, mt as DeviceAuthState } from "../constants-OcdoVk6f.js";
2
- import { a as DeviceListState, n as DeviceFilter, o as DeviceSelectedAttribute, r as DeviceGroup, t as Device$1 } from "../index-CPdMUfRr.js";
2
+ import { a as DeviceListState, n as DeviceFilter, o as DeviceSelectedAttribute, r as DeviceGroup, t as Device$1 } from "../index-BqJuhvO_.js";
3
3
  import { i as SnackbarContent, n as SearchState } from "../index-BLvjQfGj.js";
4
- import { r as RootState, t as AppDispatch } from "../store-Co2ptTSm.js";
4
+ import { r as RootState, t as AppDispatch } from "../store-BzrMxxAO.js";
5
5
  import { ConnectionState, Device, DeviceConfiguration, DeviceInventory, DeviceTierLimits, DeviceWithImage, Filter, Integration, ManagementApiConfiguration, NewConfigurationDeployment, PreAuthSet, SortCriteria, Status } from "@northern.tech/types/MenderTypes";
6
6
 
7
7
  //#region src/devicesSlice/thunks.d.ts
@@ -403,6 +403,19 @@ declare const getDeviceLimits: import("@reduxjs/toolkit").AsyncThunk<{
403
403
  fulfilledMeta?: unknown;
404
404
  rejectedMeta?: unknown;
405
405
  }>;
406
+ declare const getTestDeviceCount: import("@reduxjs/toolkit").AsyncThunk<{
407
+ payload: number;
408
+ type: "devices/setTestDeviceCount";
409
+ }, void, {
410
+ dispatch: AppDispatch;
411
+ state: RootState;
412
+ extra?: unknown;
413
+ rejectValue?: unknown;
414
+ serializedErrorType?: unknown;
415
+ pendingMeta?: unknown;
416
+ fulfilledMeta?: unknown;
417
+ rejectedMeta?: unknown;
418
+ }>;
406
419
  type SetDeviceListStatePayload = {
407
420
  fetchAuth?: boolean;
408
421
  forceRefresh?: boolean;
@@ -831,6 +844,58 @@ declare const setDeviceTags: import("@reduxjs/toolkit").AsyncThunk<[{
831
844
  fulfilledMeta?: unknown;
832
845
  rejectedMeta?: unknown;
833
846
  }>;
847
+ declare const setTestDeviceStatus: import("@reduxjs/toolkit").AsyncThunk<[{
848
+ payload: string | SnackbarContent;
849
+ type: "app/setSnackbar";
850
+ }, {
851
+ payload: {
852
+ id: string;
853
+ } & Partial<Device$1>;
854
+ type: "devices/receivedDevice";
855
+ }, import("@reduxjs/toolkit").PayloadAction<unknown, string, {
856
+ arg: string;
857
+ requestId: string;
858
+ requestStatus: "rejected";
859
+ aborted: boolean;
860
+ condition: boolean;
861
+ } & ({
862
+ rejectedWithValue: true;
863
+ } | ({
864
+ rejectedWithValue: false;
865
+ } & {})), import("@reduxjs/toolkit").SerializedError> | import("@reduxjs/toolkit").PayloadAction<any, string, {
866
+ arg: string;
867
+ requestId: string;
868
+ requestStatus: "fulfilled";
869
+ }, never>, import("@reduxjs/toolkit").PayloadAction<unknown, string, {
870
+ arg: void;
871
+ requestId: string;
872
+ requestStatus: "rejected";
873
+ aborted: boolean;
874
+ condition: boolean;
875
+ } & ({
876
+ rejectedWithValue: true;
877
+ } | ({
878
+ rejectedWithValue: false;
879
+ } & {})), import("@reduxjs/toolkit").SerializedError> | import("@reduxjs/toolkit").PayloadAction<{
880
+ payload: number;
881
+ type: "devices/setTestDeviceCount";
882
+ }, string, {
883
+ arg: void;
884
+ requestId: string;
885
+ requestStatus: "fulfilled";
886
+ }, never>], {
887
+ deviceId: string;
888
+ test_device: boolean;
889
+ }, {
890
+ dispatch: AppDispatch;
891
+ state: RootState;
892
+ extra?: unknown;
893
+ rejectValue?: unknown;
894
+ serializedErrorType?: unknown;
895
+ pendingMeta?: unknown;
896
+ fulfilledMeta?: unknown;
897
+ rejectedMeta?: unknown;
898
+ }>;
834
899
  type DeviceTwinPayload = {
835
900
  deviceId: string;
836
901
  integration: Integration;
@@ -892,5 +957,5 @@ declare const getGatewayDevices: import("@reduxjs/toolkit").AsyncThunk<unknown[]
892
957
  rejectedMeta?: unknown;
893
958
  }>;
894
959
  //#endregion
895
- export { addDevicesToGroup, addDynamicGroup, addStaticGroup, applyDeviceConfig, decommissionDevice, deleteAuthset, deviceFileUpload, getAllDeviceCounts, getAllDevicesByStatus, getAllDynamicGroupDevices, getAllGroupDevices, getDeviceAttributes, getDeviceAuth, getDeviceById, getDeviceConfig, getDeviceConnect, getDeviceFileDownloadLink, getDeviceInfo, getDeviceLimits, getDeviceTwin, getDevicesByStatus, getDevicesWithAuth, getDynamicGroup, getDynamicGroups, getGatewayDevices, getGroupDevices, getGroups, getReportDataWithoutBackendSupport, getSessionDetails, getSystemDevices, preauthDevice, removeDevicesFromGroup, removeDynamicGroup, removeReportsByGroupName, removeStaticGroup, searchDevices, selectGroup, setDeviceConfig, setDeviceListState, setDeviceTags, setDeviceTwin, triggerDeviceUpdate, updateDeviceAuth, updateDevicesAuth, updateDynamicGroup, updateReportData };
960
+ export { addDevicesToGroup, addDynamicGroup, addStaticGroup, applyDeviceConfig, decommissionDevice, deleteAuthset, deviceFileUpload, getAllDeviceCounts, getAllDevicesByStatus, getAllDynamicGroupDevices, getAllGroupDevices, getDeviceAttributes, getDeviceAuth, getDeviceById, getDeviceConfig, getDeviceConnect, getDeviceFileDownloadLink, getDeviceInfo, getDeviceLimits, getDeviceTwin, getDevicesByStatus, getDevicesWithAuth, getDynamicGroup, getDynamicGroups, getGatewayDevices, getGroupDevices, getGroups, getReportDataWithoutBackendSupport, getSessionDetails, getSystemDevices, getTestDeviceCount, preauthDevice, removeDevicesFromGroup, removeDynamicGroup, removeReportsByGroupName, removeStaticGroup, searchDevices, selectGroup, setDeviceConfig, setDeviceListState, setDeviceTags, setDeviceTwin, setTestDeviceStatus, triggerDeviceUpdate, updateDeviceAuth, updateDevicesAuth, updateDynamicGroup, updateReportData };
896
961
  //# sourceMappingURL=thunks.d.ts.map
@@ -1,2 +1,2 @@
1
- import { addDevicesToGroup, addDynamicGroup, addStaticGroup, applyDeviceConfig, decommissionDevice, deleteAuthset, deviceFileUpload, getAllDeviceCounts, getAllDevicesByStatus, getAllDynamicGroupDevices, getAllGroupDevices, getDeviceAttributes, getDeviceAuth, getDeviceById, getDeviceConfig, getDeviceConnect, getDeviceFileDownloadLink, getDeviceInfo, getDeviceLimits, getDeviceTwin, getDevicesByStatus, getDevicesWithAuth, getDynamicGroup, getDynamicGroups, getGatewayDevices, getGroupDevices, getGroups, getReportDataWithoutBackendSupport, getSessionDetails, getSystemDevices, preauthDevice, removeDevicesFromGroup, removeDynamicGroup, removeReportsByGroupName, removeStaticGroup, searchDevices, selectGroup, setDeviceConfig, setDeviceListState, setDeviceTags, setDeviceTwin, triggerDeviceUpdate, updateDeviceAuth, updateDevicesAuth, updateDynamicGroup, updateReportData } from "../thunks.js";
2
- export { addDevicesToGroup, addDynamicGroup, addStaticGroup, applyDeviceConfig, decommissionDevice, deleteAuthset, deviceFileUpload, getAllDeviceCounts, getAllDevicesByStatus, getAllDynamicGroupDevices, getAllGroupDevices, getDeviceAttributes, getDeviceAuth, getDeviceById, getDeviceConfig, getDeviceConnect, getDeviceFileDownloadLink, getDeviceInfo, getDeviceLimits, getDeviceTwin, getDevicesByStatus, getDevicesWithAuth, getDynamicGroup, getDynamicGroups, getGatewayDevices, getGroupDevices, getGroups, getReportDataWithoutBackendSupport, getSessionDetails, getSystemDevices, preauthDevice, removeDevicesFromGroup, removeDynamicGroup, removeReportsByGroupName, removeStaticGroup, searchDevices, selectGroup, setDeviceConfig, setDeviceListState, setDeviceTags, setDeviceTwin, triggerDeviceUpdate, updateDeviceAuth, updateDevicesAuth, updateDynamicGroup, updateReportData };
1
+ import { addDevicesToGroup, addDynamicGroup, addStaticGroup, applyDeviceConfig, decommissionDevice, deleteAuthset, deviceFileUpload, getAllDeviceCounts, getAllDevicesByStatus, getAllDynamicGroupDevices, getAllGroupDevices, getDeviceAttributes, getDeviceAuth, getDeviceById, getDeviceConfig, getDeviceConnect, getDeviceFileDownloadLink, getDeviceInfo, getDeviceLimits, getDeviceTwin, getDevicesByStatus, getDevicesWithAuth, getDynamicGroup, getDynamicGroups, getGatewayDevices, getGroupDevices, getGroups, getReportDataWithoutBackendSupport, getSessionDetails, getSystemDevices, getTestDeviceCount, preauthDevice, removeDevicesFromGroup, removeDynamicGroup, removeReportsByGroupName, removeStaticGroup, searchDevices, selectGroup, setDeviceConfig, setDeviceListState, setDeviceTags, setDeviceTwin, setTestDeviceStatus, triggerDeviceUpdate, updateDeviceAuth, updateDevicesAuth, updateDynamicGroup, updateReportData } from "../thunks.js";
2
+ export { addDevicesToGroup, addDynamicGroup, addStaticGroup, applyDeviceConfig, decommissionDevice, deleteAuthset, deviceFileUpload, getAllDeviceCounts, getAllDevicesByStatus, getAllDynamicGroupDevices, getAllGroupDevices, getDeviceAttributes, getDeviceAuth, getDeviceById, getDeviceConfig, getDeviceConnect, getDeviceFileDownloadLink, getDeviceInfo, getDeviceLimits, getDeviceTwin, getDevicesByStatus, getDevicesWithAuth, getDynamicGroup, getDynamicGroups, getGatewayDevices, getGroupDevices, getGroups, getReportDataWithoutBackendSupport, getSessionDetails, getSystemDevices, getTestDeviceCount, preauthDevice, removeDevicesFromGroup, removeDynamicGroup, removeReportsByGroupName, removeStaticGroup, searchDevices, selectGroup, setDeviceConfig, setDeviceListState, setDeviceTags, setDeviceTwin, setTestDeviceStatus, triggerDeviceUpdate, updateDeviceAuth, updateDevicesAuth, updateDynamicGroup, updateReportData };
@@ -109,6 +109,7 @@ type DeviceSliceType = {
109
109
  groups: DeviceGroups;
110
110
  limits: DeviceTierLimits;
111
111
  reports: DeviceReport[];
112
+ testDeviceCount: number;
112
113
  total: number;
113
114
  };
114
115
  declare const initialState: DeviceSliceType;
@@ -146,6 +147,7 @@ declare const devicesSlice: import("@reduxjs/toolkit").Slice<DeviceSliceType, {
146
147
  status: DeviceAuthState;
147
148
  }>) => void;
148
149
  setDeviceLimits: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<DeviceTierLimits>) => void;
150
+ setTestDeviceCount: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<number>) => void;
149
151
  receivedDevice: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<{
150
152
  id: string;
151
153
  } & Partial<Device$1>>) => void;
@@ -188,6 +190,7 @@ declare const actions: import("@reduxjs/toolkit").CaseReducerActions<{
188
190
  status: DeviceAuthState;
189
191
  }>) => void;
190
192
  setDeviceLimits: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<DeviceTierLimits>) => void;
193
+ setTestDeviceCount: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<number>) => void;
191
194
  receivedDevice: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<{
192
195
  id: string;
193
196
  } & Partial<Device$1>>) => void;
@@ -199,4 +202,4 @@ declare const actions: import("@reduxjs/toolkit").CaseReducerActions<{
199
202
  declare const _default: import("redux").Reducer<DeviceSliceType>;
200
203
  //#endregion
201
204
  export { DeviceListState as a, InventoryAttributes as c, devicesSlice as d, initialState as f, DeviceGroups as i, _default as l, DeviceFilter as n, DeviceSelectedAttribute as o, sliceName as p, DeviceGroup as r, DeviceSliceType as s, Device$1 as t, actions as u };
202
- //# sourceMappingURL=index-CPdMUfRr.d.ts.map
205
+ //# sourceMappingURL=index-BqJuhvO_.d.ts.map
@@ -109,6 +109,7 @@ type DeviceSliceType = {
109
109
  groups: DeviceGroups;
110
110
  limits: DeviceTierLimits;
111
111
  reports: DeviceReport[];
112
+ testDeviceCount: number;
112
113
  total: number;
113
114
  };
114
115
  declare const initialState: DeviceSliceType;
@@ -146,6 +147,7 @@ declare const devicesSlice: import("@reduxjs/toolkit").Slice<DeviceSliceType, {
146
147
  status: DeviceAuthState;
147
148
  }>) => void;
148
149
  setDeviceLimits: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<DeviceTierLimits>) => void;
150
+ setTestDeviceCount: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<number>) => void;
149
151
  receivedDevice: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<{
150
152
  id: string;
151
153
  } & Partial<Device$1>>) => void;
@@ -188,6 +190,7 @@ declare const actions: import("@reduxjs/toolkit").CaseReducerActions<{
188
190
  status: DeviceAuthState;
189
191
  }>) => void;
190
192
  setDeviceLimits: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<DeviceTierLimits>) => void;
193
+ setTestDeviceCount: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<number>) => void;
191
194
  receivedDevice: (state: import("immer").WritableDraft<DeviceSliceType>, action: PayloadAction<{
192
195
  id: string;
193
196
  } & Partial<Device$1>>) => void;
@@ -199,4 +202,4 @@ declare const actions: import("@reduxjs/toolkit").CaseReducerActions<{
199
202
  declare const _default: import("redux").Reducer<DeviceSliceType>;
200
203
  //#endregion
201
204
  export { DeviceListState as a, InventoryAttributes as c, devicesSlice as d, initialState as f, DeviceGroups as i, _default as l, DeviceFilter as n, DeviceSelectedAttribute as o, sliceName as p, DeviceGroup as r, DeviceSliceType as s, Device$1 as t, actions as u };
202
- //# sourceMappingURL=index-DbfM03Gj.d.cts.map
205
+ //# sourceMappingURL=index-Doc_1P_Y.d.cts.map