@northern.tech/store 0.46.3 → 0.46.5

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.
@@ -164,7 +164,14 @@ export declare const abortDeployment: import("@reduxjs/toolkit").AsyncThunk<[{
164
164
  fulfilledMeta?: unknown;
165
165
  rejectedMeta?: unknown;
166
166
  }>;
167
- export declare const updateDeploymentControlMap: import("@reduxjs/toolkit").AsyncThunk<import("@reduxjs/toolkit").PayloadAction<unknown, string, {
167
+ export declare const updateDeploymentControlMap: import("@reduxjs/toolkit").AsyncThunk<import("@reduxjs/toolkit").PayloadAction<{
168
+ payload: Deployment;
169
+ type: "deployments/receivedDeployment";
170
+ }, string, {
171
+ arg: string;
172
+ requestId: string;
173
+ requestStatus: "fulfilled";
174
+ }, never> | import("@reduxjs/toolkit").PayloadAction<unknown, string, {
168
175
  arg: string;
169
176
  requestId: string;
170
177
  requestStatus: "rejected";
@@ -174,14 +181,7 @@ export declare const updateDeploymentControlMap: import("@reduxjs/toolkit").Asyn
174
181
  rejectedWithValue: true;
175
182
  } | ({
176
183
  rejectedWithValue: false;
177
- } & {})), import("@reduxjs/toolkit").SerializedError> | import("@reduxjs/toolkit").PayloadAction<{
178
- payload: Deployment;
179
- type: "deployments/receivedDeployment";
180
- }, string, {
181
- arg: string;
182
- requestId: string;
183
- requestStatus: "fulfilled";
184
- }, never>, {
184
+ } & {})), import("@reduxjs/toolkit").SerializedError>, {
185
185
  deploymentId: string;
186
186
  updateControlMap: DeploymentV1["update_control_map"];
187
187
  }, {
@@ -164,7 +164,14 @@ export declare const abortDeployment: import("@reduxjs/toolkit").AsyncThunk<[{
164
164
  fulfilledMeta?: unknown;
165
165
  rejectedMeta?: unknown;
166
166
  }>;
167
- export declare const updateDeploymentControlMap: import("@reduxjs/toolkit").AsyncThunk<import("@reduxjs/toolkit").PayloadAction<unknown, string, {
167
+ export declare const updateDeploymentControlMap: import("@reduxjs/toolkit").AsyncThunk<import("@reduxjs/toolkit").PayloadAction<{
168
+ payload: Deployment;
169
+ type: "deployments/receivedDeployment";
170
+ }, string, {
171
+ arg: string;
172
+ requestId: string;
173
+ requestStatus: "fulfilled";
174
+ }, never> | import("@reduxjs/toolkit").PayloadAction<unknown, string, {
168
175
  arg: string;
169
176
  requestId: string;
170
177
  requestStatus: "rejected";
@@ -174,14 +181,7 @@ export declare const updateDeploymentControlMap: import("@reduxjs/toolkit").Asyn
174
181
  rejectedWithValue: true;
175
182
  } | ({
176
183
  rejectedWithValue: false;
177
- } & {})), import("@reduxjs/toolkit").SerializedError> | import("@reduxjs/toolkit").PayloadAction<{
178
- payload: Deployment;
179
- type: "deployments/receivedDeployment";
180
- }, string, {
181
- arg: string;
182
- requestId: string;
183
- requestStatus: "fulfilled";
184
- }, never>, {
184
+ } & {})), import("@reduxjs/toolkit").SerializedError>, {
185
185
  deploymentId: string;
186
186
  updateControlMap: DeploymentV1["update_control_map"];
187
187
  }, {
@@ -24,7 +24,7 @@ const getDeviceLimits = (state) => state.devices.limits;
24
24
  const getTestDeviceCount = (state) => state.devices.testDeviceCount;
25
25
  const getFilteringAttributesLimit = (state) => state.devices.filteringAttributesLimit;
26
26
  const getDeviceIdentityAttributes = (0, _reduxjs_toolkit.createSelector)([getFilteringAttributes, getFilteringAttributesLimit], ({ identityAttributes }, filteringAttributesLimit) => {
27
- return identityAttributes.slice(0, filteringAttributesLimit).reduce((accu, value) => {
27
+ return identityAttributes.filter((attribute) => attribute !== "status").slice(0, filteringAttributesLimit).reduce((accu, value) => {
28
28
  accu.push({
29
29
  value,
30
30
  label: value,
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.cjs","names":["createSelector","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 || [];\nexport const getTestDeviceLimit = (state: RootState) => state.devices.testDeviceLimit;\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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"}
1
+ {"version":3,"file":"selectors.cjs","names":["createSelector","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 || [];\nexport const getTestDeviceLimit = (state: RootState) => state.devices.testDeviceLimit;\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 // the device auth status is not a meaningful device identifier\n // limit the selection of the available attribute to AVAILABLE_ATTRIBUTE_LIMIT\n const attributes = identityAttributes.filter(attribute => attribute !== 'status').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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"}
@@ -22,7 +22,7 @@ const getDeviceLimits = (state) => state.devices.limits;
22
22
  const getTestDeviceCount = (state) => state.devices.testDeviceCount;
23
23
  const getFilteringAttributesLimit = (state) => state.devices.filteringAttributesLimit;
24
24
  const getDeviceIdentityAttributes = createSelector([getFilteringAttributes, getFilteringAttributesLimit], ({ identityAttributes }, filteringAttributesLimit) => {
25
- return identityAttributes.slice(0, filteringAttributesLimit).reduce((accu, value) => {
25
+ return identityAttributes.filter((attribute) => attribute !== "status").slice(0, filteringAttributesLimit).reduce((accu, value) => {
26
26
  accu.push({
27
27
  value,
28
28
  label: value,
@@ -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 || [];\nexport const getTestDeviceLimit = (state: RootState) => state.devices.testDeviceLimit;\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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"}
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 || [];\nexport const getTestDeviceLimit = (state: RootState) => state.devices.testDeviceLimit;\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 // the device auth status is not a meaningful device identifier\n // limit the selection of the available attribute to AVAILABLE_ATTRIBUTE_LIMIT\n const attributes = identityAttributes.filter(attribute => attribute !== 'status').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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"}
@@ -123,7 +123,11 @@ export declare const completeUpgrade: import("@reduxjs/toolkit").AsyncThunk<[imp
123
123
  arg: void;
124
124
  requestId: string;
125
125
  requestStatus: "fulfilled";
126
- }, never>, import("@reduxjs/toolkit").PayloadAction<unknown, string, {
126
+ }, never>, import("@reduxjs/toolkit").PayloadAction<import("redux").UnknownAction[], string, {
127
+ arg: void;
128
+ requestId: string;
129
+ requestStatus: "fulfilled";
130
+ }, never> | import("@reduxjs/toolkit").PayloadAction<unknown, string, {
127
131
  arg: void;
128
132
  requestId: string;
129
133
  requestStatus: "rejected";
@@ -133,11 +137,7 @@ export declare const completeUpgrade: import("@reduxjs/toolkit").AsyncThunk<[imp
133
137
  rejectedWithValue: true;
134
138
  } | ({
135
139
  rejectedWithValue: false;
136
- } & {})), import("@reduxjs/toolkit").SerializedError> | import("@reduxjs/toolkit").PayloadAction<import("redux").UnknownAction[], string, {
137
- arg: void;
138
- requestId: string;
139
- requestStatus: "fulfilled";
140
- }, never>], completeUpgradePayload, {
140
+ } & {})), import("@reduxjs/toolkit").SerializedError>], completeUpgradePayload, {
141
141
  dispatch: AppDispatch;
142
142
  state: RootState;
143
143
  extra?: unknown;
@@ -426,7 +426,11 @@ export declare const requestPlanUpgrade: import("@reduxjs/toolkit").AsyncThunk<[
426
426
  arg: void;
427
427
  requestId: string;
428
428
  requestStatus: "fulfilled";
429
- }, never>, import("@reduxjs/toolkit").PayloadAction<unknown, string, {
429
+ }, never>, import("@reduxjs/toolkit").PayloadAction<import("redux").UnknownAction[], string, {
430
+ arg: void;
431
+ requestId: string;
432
+ requestStatus: "fulfilled";
433
+ }, never> | import("@reduxjs/toolkit").PayloadAction<unknown, string, {
430
434
  arg: void;
431
435
  requestId: string;
432
436
  requestStatus: "rejected";
@@ -436,11 +440,7 @@ export declare const requestPlanUpgrade: import("@reduxjs/toolkit").AsyncThunk<[
436
440
  rejectedWithValue: true;
437
441
  } | ({
438
442
  rejectedWithValue: false;
439
- } & {})), import("@reduxjs/toolkit").SerializedError> | import("@reduxjs/toolkit").PayloadAction<import("redux").UnknownAction[], string, {
440
- arg: void;
441
- requestId: string;
442
- requestStatus: "fulfilled";
443
- }, never>], {
443
+ } & {})), import("@reduxjs/toolkit").SerializedError>], {
444
444
  plan: string;
445
445
  products: Product[];
446
446
  }, {
@@ -123,7 +123,11 @@ export declare const completeUpgrade: import("@reduxjs/toolkit").AsyncThunk<[imp
123
123
  arg: void;
124
124
  requestId: string;
125
125
  requestStatus: "fulfilled";
126
- }, never>, import("@reduxjs/toolkit").PayloadAction<unknown, string, {
126
+ }, never>, import("@reduxjs/toolkit").PayloadAction<import("redux").UnknownAction[], string, {
127
+ arg: void;
128
+ requestId: string;
129
+ requestStatus: "fulfilled";
130
+ }, never> | import("@reduxjs/toolkit").PayloadAction<unknown, string, {
127
131
  arg: void;
128
132
  requestId: string;
129
133
  requestStatus: "rejected";
@@ -133,11 +137,7 @@ export declare const completeUpgrade: import("@reduxjs/toolkit").AsyncThunk<[imp
133
137
  rejectedWithValue: true;
134
138
  } | ({
135
139
  rejectedWithValue: false;
136
- } & {})), import("@reduxjs/toolkit").SerializedError> | import("@reduxjs/toolkit").PayloadAction<import("redux").UnknownAction[], string, {
137
- arg: void;
138
- requestId: string;
139
- requestStatus: "fulfilled";
140
- }, never>], completeUpgradePayload, {
140
+ } & {})), import("@reduxjs/toolkit").SerializedError>], completeUpgradePayload, {
141
141
  dispatch: AppDispatch;
142
142
  state: RootState;
143
143
  extra?: unknown;
@@ -426,7 +426,11 @@ export declare const requestPlanUpgrade: import("@reduxjs/toolkit").AsyncThunk<[
426
426
  arg: void;
427
427
  requestId: string;
428
428
  requestStatus: "fulfilled";
429
- }, never>, import("@reduxjs/toolkit").PayloadAction<unknown, string, {
429
+ }, never>, import("@reduxjs/toolkit").PayloadAction<import("redux").UnknownAction[], string, {
430
+ arg: void;
431
+ requestId: string;
432
+ requestStatus: "fulfilled";
433
+ }, never> | import("@reduxjs/toolkit").PayloadAction<unknown, string, {
430
434
  arg: void;
431
435
  requestId: string;
432
436
  requestStatus: "rejected";
@@ -436,11 +440,7 @@ export declare const requestPlanUpgrade: import("@reduxjs/toolkit").AsyncThunk<[
436
440
  rejectedWithValue: true;
437
441
  } | ({
438
442
  rejectedWithValue: false;
439
- } & {})), import("@reduxjs/toolkit").SerializedError> | import("@reduxjs/toolkit").PayloadAction<import("redux").UnknownAction[], string, {
440
- arg: void;
441
- requestId: string;
442
- requestStatus: "fulfilled";
443
- }, never>], {
443
+ } & {})), import("@reduxjs/toolkit").SerializedError>], {
444
444
  plan: string;
445
445
  products: Product[];
446
446
  }, {
package/dist/thunks.cjs CHANGED
@@ -576,11 +576,11 @@ const removeDevicesFromGroup = require_store.createAppAsyncThunk(`${require_devi
576
576
  message: `The ${(0, pluralize.default)("devices", deviceIds.length)} ${(0, pluralize.default)("were", deviceIds.length)} removed from the group`,
577
577
  autoHideDuration: require_constants.TIMEOUTS.fiveSeconds
578
578
  }))])));
579
- const addStaticGroup = require_store.createAppAsyncThunk(`${require_devicesSlice_index.sliceName}/addStaticGroup`, ({ group, devices }, { dispatch, getState }) => Promise.resolve(dispatch(addDevicesToGroup({
579
+ const addStaticGroup = require_store.createAppAsyncThunk(`${require_devicesSlice_index.sliceName}/addStaticGroup`, ({ group, devices }, { dispatch, getState }) => dispatch(addDevicesToGroup({
580
580
  group,
581
581
  deviceIds: devices.map(({ id }) => id),
582
582
  isCreation: true
583
- }))).then(() => Promise.resolve(dispatch(require_devicesSlice_index.actions.addGroup({
583
+ })).unwrap().then(() => Promise.resolve(dispatch(require_devicesSlice_index.actions.addGroup({
584
584
  group: {
585
585
  deviceIds: [],
586
586
  total: 0,