@northern.tech/store 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions.d.mts +95 -0
- package/dist/actions.d.ts +95 -0
- package/dist/actions.js +1746 -0
- package/dist/actions.js.map +1 -0
- package/dist/actions.mjs +21 -0
- package/dist/actions.mjs.map +1 -0
- package/dist/api/general-api.d.mts +21 -0
- package/dist/api/general-api.d.ts +21 -0
- package/dist/api/general-api.js +1002 -0
- package/dist/api/general-api.js.map +1 -0
- package/dist/api/general-api.mjs +18 -0
- package/dist/api/general-api.mjs.map +1 -0
- package/dist/api/types/Address.ts +6 -0
- package/dist/api/types/AddressUpdate.ts +12 -0
- package/dist/api/types/AuthSet.ts +37 -0
- package/{api/types/AuthSet.ts → dist/api/types/AuthSetIot_manager.ts} +2 -2
- package/dist/api/types/BillingProfile.ts +37 -0
- package/dist/api/types/BillingProfileUpdate.ts +37 -0
- package/{api → dist/api}/types/BinaryDeltaLimits.ts +6 -0
- package/{api → dist/api}/types/BoundingBox.ts +1 -3
- package/dist/api/types/Deployment.ts +45 -0
- package/{api → dist/api}/types/DeploymentAggregation.ts +1 -3
- package/{api → dist/api}/types/DeploymentAggregationItem.ts +1 -3
- package/{api → dist/api}/types/DeploymentAggregationTerm.ts +1 -2
- package/{api → dist/api}/types/DeploymentAggregationTerms.ts +1 -3
- package/{api → dist/api}/types/DeploymentAttributeProjection.ts +1 -2
- package/{api → dist/api}/types/DeploymentDeployments.ts +4 -5
- package/{api → dist/api}/types/DeploymentFilterTerm.ts +1 -3
- package/dist/api/types/DeploymentPhaseDeployments.ts +23 -0
- package/{api → dist/api}/types/DeploymentSearchTerms.ts +1 -3
- package/{api → dist/api}/types/DeploymentSortTerm.ts +1 -3
- package/dist/api/types/DeploymentStatisticsDeployments.ts +15 -0
- package/dist/api/types/DeploymentStatusStatisticsDeployments.ts +54 -0
- package/dist/api/types/Device.ts +20 -0
- package/{api → dist/api}/types/DeviceAggregation.ts +1 -3
- package/{api → dist/api}/types/DeviceAggregationItem.ts +1 -3
- package/{api → dist/api}/types/DeviceAggregationTerm.ts +1 -2
- package/{api → dist/api}/types/DeviceAggregationTerms.ts +1 -3
- package/{api → dist/api}/types/DeviceAttribute.ts +1 -2
- package/{api → dist/api}/types/DeviceAttributeProjection.ts +1 -2
- package/{api/types/Device.ts → dist/api/types/DeviceDeployments.ts} +1 -1
- package/{api → dist/api}/types/DeviceFilterAttribute.ts +1 -2
- package/{api → dist/api}/types/DeviceFilterTerm.ts +1 -3
- package/{api → dist/api}/types/DeviceSearchTerms.ts +1 -3
- package/{api → dist/api}/types/DeviceSortTerm.ts +1 -3
- package/{api → dist/api}/types/Error.ts +1 -1
- package/{api/types/FilterInventory.ts → dist/api/types/Filter.ts} +3 -4
- package/{api/types/Filter.ts → dist/api/types/FilterInventory.ts} +1 -1
- package/dist/api/types/FilterPredicate.ts +48 -0
- package/{api/types/FilterPredicate.ts → dist/api/types/FilterPredicateInventory.ts} +3 -3
- package/{api → dist/api}/types/GeoBoundingBox.ts +1 -3
- package/{api → dist/api}/types/GeoBoundingBoxFilter.ts +1 -2
- package/{api → dist/api}/types/GeoDistance.ts +1 -3
- package/{api → dist/api}/types/GeoDistanceFilter.ts +1 -3
- package/{api → dist/api}/types/GeoPoint.ts +1 -2
- package/{api → dist/api}/types/Integration.ts +6 -0
- package/{api → dist/api}/types/MenderTypes.ts +41 -11
- package/{api → dist/api}/types/NewDeploymentV2.ts +3 -0
- package/{api → dist/api}/types/NewTenant.ts +16 -8
- package/{api → dist/api}/types/Object.ts +3 -0
- package/{api → dist/api}/types/PreAuthSet.ts +1 -1
- package/{api → dist/api}/types/Settings.ts +3 -3
- package/{api → dist/api}/types/Status.ts +5 -4
- package/{api → dist/api}/types/StatusTenantadm.ts +1 -3
- package/dist/api/types/Tenant.ts +21 -0
- package/{api → dist/api}/types/TenantTenantadm.ts +16 -0
- package/dist/api/types/UpdateChildTenant.ts +17 -0
- package/{api → dist/api}/types/UpdateDeployments.ts +1 -1
- package/{api → dist/api}/types/UpgradeCompleteRequest.ts +2 -0
- package/{api → dist/api}/types/UserWithTenantInfo.ts +7 -3
- package/dist/api/users-api.d.mts +16 -0
- package/dist/api/users-api.d.ts +16 -0
- package/dist/api/users-api.js +1026 -0
- package/dist/api/users-api.js.map +1 -0
- package/dist/api/users-api.mjs +15 -0
- package/dist/api/users-api.mjs.map +1 -0
- package/dist/appSlice/constants.d.mts +210 -0
- package/dist/appSlice/constants.d.ts +210 -0
- package/dist/appSlice/constants.js +221 -0
- package/dist/appSlice/constants.js.map +1 -0
- package/dist/appSlice/constants.mjs +42 -0
- package/dist/appSlice/constants.mjs.map +1 -0
- package/dist/appSlice/index.d.mts +1557 -0
- package/dist/appSlice/index.d.ts +1557 -0
- package/dist/appSlice/index.js +1067 -0
- package/dist/appSlice/index.js.map +1 -0
- package/dist/appSlice/index.mjs +21 -0
- package/dist/appSlice/index.mjs.map +1 -0
- package/dist/appSlice/selectors.d.mts +91 -0
- package/dist/appSlice/selectors.d.ts +91 -0
- package/dist/appSlice/selectors.js +90 -0
- package/dist/appSlice/selectors.js.map +1 -0
- package/dist/appSlice/selectors.mjs +20 -0
- package/dist/appSlice/selectors.mjs.map +1 -0
- package/dist/appSlice/thunks.d.mts +46 -0
- package/dist/appSlice/thunks.d.ts +46 -0
- package/dist/appSlice/thunks.js +5655 -0
- package/dist/appSlice/thunks.js.map +1 -0
- package/dist/appSlice/thunks.mjs +45 -0
- package/dist/appSlice/thunks.mjs.map +1 -0
- package/dist/auth.d.mts +17 -0
- package/dist/auth.d.ts +17 -0
- package/dist/auth.js +985 -0
- package/dist/auth.js.map +1 -0
- package/dist/auth.mjs +23 -0
- package/dist/auth.mjs.map +1 -0
- package/dist/chunk-6667TCAJ.mjs +135 -0
- package/dist/chunk-6667TCAJ.mjs.map +1 -0
- package/{releasesSlice/index.ts → dist/chunk-7E7KJHY3.mjs} +33 -32
- package/dist/chunk-7E7KJHY3.mjs.map +1 -0
- package/{usersSlice/index.ts → dist/chunk-BJSH2G7W.mjs} +39 -58
- package/dist/chunk-BJSH2G7W.mjs.map +1 -0
- package/dist/chunk-BOSBROA3.mjs +168 -0
- package/dist/chunk-BOSBROA3.mjs.map +1 -0
- package/dist/chunk-BRHSKNFC.mjs +70 -0
- package/dist/chunk-BRHSKNFC.mjs.map +1 -0
- package/dist/chunk-C2YZYTJ6.mjs +37 -0
- package/dist/chunk-C2YZYTJ6.mjs.map +1 -0
- package/dist/chunk-DZBVTSIX.mjs +55 -0
- package/dist/chunk-DZBVTSIX.mjs.map +1 -0
- package/{appSlice/index.ts → dist/chunk-F37LUTBX.mjs} +58 -68
- package/dist/chunk-F37LUTBX.mjs.map +1 -0
- package/dist/chunk-G32LAKW4.mjs +239 -0
- package/dist/chunk-G32LAKW4.mjs.map +1 -0
- package/dist/chunk-G3I53JGW.mjs +243 -0
- package/dist/chunk-G3I53JGW.mjs.map +1 -0
- package/dist/chunk-G4FGNSV3.mjs +13 -0
- package/dist/chunk-G4FGNSV3.mjs.map +1 -0
- package/dist/chunk-G7LATUT6.mjs +110 -0
- package/dist/chunk-G7LATUT6.mjs.map +1 -0
- package/dist/chunk-H2PQQMRY.mjs +7 -0
- package/dist/chunk-H2PQQMRY.mjs.map +1 -0
- package/{devicesSlice/index.ts → dist/chunk-HRWZJQMH.mjs} +57 -77
- package/dist/chunk-HRWZJQMH.mjs.map +1 -0
- package/dist/chunk-HVHZG2H4.mjs +56 -0
- package/dist/chunk-HVHZG2H4.mjs.map +1 -0
- package/dist/chunk-HXPYJ6QN.mjs +75 -0
- package/dist/chunk-HXPYJ6QN.mjs.map +1 -0
- package/dist/chunk-IPPIKGIB.mjs +35 -0
- package/dist/chunk-IPPIKGIB.mjs.map +1 -0
- package/dist/chunk-IU4OXOPA.mjs +46 -0
- package/dist/chunk-IU4OXOPA.mjs.map +1 -0
- package/dist/chunk-IVSYYXTC.mjs +36 -0
- package/dist/chunk-IVSYYXTC.mjs.map +1 -0
- package/{onboardingSlice/index.ts → dist/chunk-M4U5R7A4.mjs} +19 -22
- package/dist/chunk-M4U5R7A4.mjs.map +1 -0
- package/dist/chunk-N7G6QK2E.mjs +414 -0
- package/dist/chunk-N7G6QK2E.mjs.map +1 -0
- package/dist/chunk-O6O3D52B.mjs +39 -0
- package/dist/chunk-O6O3D52B.mjs.map +1 -0
- package/dist/chunk-QBKCUIWO.mjs +7 -0
- package/dist/chunk-QBKCUIWO.mjs.map +1 -0
- package/dist/chunk-R2GBNXLV.mjs +57 -0
- package/dist/chunk-R2GBNXLV.mjs.map +1 -0
- package/dist/chunk-RH6ONMG7.mjs +65 -0
- package/dist/chunk-RH6ONMG7.mjs.map +1 -0
- package/dist/chunk-RQOE5OOT.mjs +284 -0
- package/dist/chunk-RQOE5OOT.mjs.map +1 -0
- package/dist/chunk-TD45YTYK.mjs +108 -0
- package/dist/chunk-TD45YTYK.mjs.map +1 -0
- package/dist/chunk-V32GTKOS.mjs +1 -0
- package/dist/chunk-V32GTKOS.mjs.map +1 -0
- package/dist/chunk-XWBD7VOK.mjs +93 -0
- package/dist/chunk-XWBD7VOK.mjs.map +1 -0
- package/dist/chunk-XYVPYFSM.mjs +106 -0
- package/dist/chunk-XYVPYFSM.mjs.map +1 -0
- package/dist/chunk-YNVSU3AA.mjs +2977 -0
- package/dist/chunk-YNVSU3AA.mjs.map +1 -0
- package/dist/chunk-ZIYGEXSJ.mjs +145 -0
- package/dist/chunk-ZIYGEXSJ.mjs.map +1 -0
- package/dist/chunk-ZNST5R6O.mjs +658 -0
- package/dist/chunk-ZNST5R6O.mjs.map +1 -0
- package/dist/commonConstants.d.mts +248 -0
- package/dist/commonConstants.d.ts +248 -0
- package/dist/commonConstants.js +303 -0
- package/dist/commonConstants.js.map +1 -0
- package/dist/commonConstants.mjs +40 -0
- package/dist/commonConstants.mjs.map +1 -0
- package/dist/commonSelectors.d.mts +896 -0
- package/dist/commonSelectors.d.ts +896 -0
- package/dist/commonSelectors.js +1482 -0
- package/dist/commonSelectors.js.map +1 -0
- package/dist/commonSelectors.mjs +54 -0
- package/dist/commonSelectors.mjs.map +1 -0
- package/dist/constants.d.mts +12 -0
- package/dist/constants.d.ts +12 -0
- package/dist/constants.js +1246 -0
- package/dist/constants.js.map +1 -0
- package/dist/constants.mjs +219 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/deploymentsSlice/constants.d.mts +142 -0
- package/dist/deploymentsSlice/constants.d.ts +142 -0
- package/dist/deploymentsSlice/constants.js +969 -0
- package/dist/deploymentsSlice/constants.js.map +1 -0
- package/dist/deploymentsSlice/constants.mjs +42 -0
- package/dist/deploymentsSlice/constants.mjs.map +1 -0
- package/dist/deploymentsSlice/index.d.mts +2373 -0
- package/dist/deploymentsSlice/index.d.ts +2373 -0
- package/dist/deploymentsSlice/index.js +1053 -0
- package/dist/deploymentsSlice/index.js.map +1 -0
- package/dist/deploymentsSlice/index.mjs +21 -0
- package/dist/deploymentsSlice/index.mjs.map +1 -0
- package/dist/deploymentsSlice/selectors.d.mts +59 -0
- package/dist/deploymentsSlice/selectors.d.ts +59 -0
- package/dist/deploymentsSlice/selectors.js +969 -0
- package/dist/deploymentsSlice/selectors.js.map +1 -0
- package/dist/deploymentsSlice/selectors.mjs +25 -0
- package/dist/deploymentsSlice/selectors.mjs.map +1 -0
- package/dist/deploymentsSlice/thunks.d.mts +202 -0
- package/dist/deploymentsSlice/thunks.d.ts +202 -0
- package/dist/deploymentsSlice/thunks.js +5671 -0
- package/dist/deploymentsSlice/thunks.js.map +1 -0
- package/dist/deploymentsSlice/thunks.mjs +63 -0
- package/dist/deploymentsSlice/thunks.mjs.map +1 -0
- package/dist/devicesSlice/constants.d.mts +44 -0
- package/dist/devicesSlice/constants.d.ts +44 -0
- package/dist/devicesSlice/constants.js +969 -0
- package/dist/devicesSlice/constants.js.map +1 -0
- package/dist/devicesSlice/constants.mjs +40 -0
- package/dist/devicesSlice/constants.mjs.map +1 -0
- package/dist/devicesSlice/index.d.mts +2223 -0
- package/dist/devicesSlice/index.d.ts +2223 -0
- package/dist/devicesSlice/index.js +1109 -0
- package/dist/devicesSlice/index.js.map +1 -0
- package/dist/devicesSlice/index.mjs +21 -0
- package/dist/devicesSlice/index.mjs.map +1 -0
- package/dist/devicesSlice/selectors.d.mts +261 -0
- package/dist/devicesSlice/selectors.d.ts +261 -0
- package/dist/devicesSlice/selectors.js +1084 -0
- package/dist/devicesSlice/selectors.js.map +1 -0
- package/dist/devicesSlice/selectors.mjs +53 -0
- package/dist/devicesSlice/selectors.mjs.map +1 -0
- package/dist/devicesSlice/thunks.d.mts +742 -0
- package/dist/devicesSlice/thunks.d.ts +742 -0
- package/dist/devicesSlice/thunks.js +5743 -0
- package/dist/devicesSlice/thunks.js.map +1 -0
- package/dist/devicesSlice/thunks.mjs +135 -0
- package/dist/devicesSlice/thunks.mjs.map +1 -0
- package/dist/monitorSlice/constants.d.mts +6 -0
- package/dist/monitorSlice/constants.d.ts +6 -0
- package/dist/monitorSlice/constants.js +919 -0
- package/dist/monitorSlice/constants.js.map +1 -0
- package/dist/monitorSlice/constants.mjs +14 -0
- package/dist/monitorSlice/constants.mjs.map +1 -0
- package/dist/monitorSlice/index.d.mts +291 -0
- package/dist/monitorSlice/index.d.ts +291 -0
- package/dist/monitorSlice/index.js +971 -0
- package/dist/monitorSlice/index.js.map +1 -0
- package/dist/monitorSlice/index.mjs +21 -0
- package/dist/monitorSlice/index.mjs.map +1 -0
- package/dist/monitorSlice/selectors.d.mts +3 -0
- package/dist/monitorSlice/selectors.d.ts +3 -0
- package/dist/monitorSlice/selectors.js +31 -0
- package/dist/monitorSlice/selectors.js.map +1 -0
- package/dist/monitorSlice/selectors.mjs +8 -0
- package/dist/monitorSlice/selectors.mjs.map +1 -0
- package/dist/monitorSlice/thunks.d.mts +71 -0
- package/dist/monitorSlice/thunks.d.ts +71 -0
- package/dist/monitorSlice/thunks.js +2531 -0
- package/dist/monitorSlice/thunks.js.map +1 -0
- package/dist/monitorSlice/thunks.mjs +44 -0
- package/dist/monitorSlice/thunks.mjs.map +1 -0
- package/dist/onboardingSlice/constants.d.mts +23 -0
- package/dist/onboardingSlice/constants.d.ts +23 -0
- package/dist/onboardingSlice/constants.js +71 -0
- package/dist/onboardingSlice/constants.js.map +1 -0
- package/dist/onboardingSlice/constants.mjs +10 -0
- package/dist/onboardingSlice/constants.mjs.map +1 -0
- package/dist/onboardingSlice/index.d.mts +237 -0
- package/dist/onboardingSlice/index.d.ts +237 -0
- package/dist/onboardingSlice/index.js +94 -0
- package/dist/onboardingSlice/index.js.map +1 -0
- package/dist/onboardingSlice/index.mjs +16 -0
- package/dist/onboardingSlice/index.mjs.map +1 -0
- package/dist/onboardingSlice/selectors.d.mts +3 -0
- package/dist/onboardingSlice/selectors.d.ts +3 -0
- package/dist/onboardingSlice/selectors.js +31 -0
- package/dist/onboardingSlice/selectors.js.map +1 -0
- package/dist/onboardingSlice/selectors.mjs +8 -0
- package/dist/onboardingSlice/selectors.mjs.map +1 -0
- package/dist/onboardingSlice/thunks.d.mts +172 -0
- package/dist/onboardingSlice/thunks.d.ts +172 -0
- package/dist/onboardingSlice/thunks.js +5661 -0
- package/dist/onboardingSlice/thunks.js.map +1 -0
- package/dist/onboardingSlice/thunks.mjs +51 -0
- package/dist/onboardingSlice/thunks.mjs.map +1 -0
- package/dist/organizationSlice/constants.d.mts +134 -0
- package/dist/organizationSlice/constants.d.ts +134 -0
- package/dist/organizationSlice/constants.js +978 -0
- package/dist/organizationSlice/constants.js.map +1 -0
- package/dist/organizationSlice/constants.mjs +34 -0
- package/dist/organizationSlice/constants.mjs.map +1 -0
- package/dist/organizationSlice/index.d.mts +1097 -0
- package/dist/organizationSlice/index.d.ts +1097 -0
- package/dist/organizationSlice/index.js +1015 -0
- package/dist/organizationSlice/index.js.map +1 -0
- package/dist/organizationSlice/index.mjs +21 -0
- package/dist/organizationSlice/index.mjs.map +1 -0
- package/dist/organizationSlice/selectors.d.mts +134 -0
- package/dist/organizationSlice/selectors.d.ts +134 -0
- package/dist/organizationSlice/selectors.js +977 -0
- package/dist/organizationSlice/selectors.js.map +1 -0
- package/dist/organizationSlice/selectors.mjs +39 -0
- package/dist/organizationSlice/selectors.mjs.map +1 -0
- package/dist/organizationSlice/thunks.d.mts +502 -0
- package/dist/organizationSlice/thunks.d.ts +502 -0
- package/dist/organizationSlice/thunks.js +5709 -0
- package/dist/organizationSlice/thunks.js.map +1 -0
- package/dist/organizationSlice/thunks.mjs +101 -0
- package/dist/organizationSlice/thunks.mjs.map +1 -0
- package/dist/releasesSlice/constants.d.mts +14 -0
- package/dist/releasesSlice/constants.d.ts +14 -0
- package/dist/releasesSlice/constants.js +40 -0
- package/dist/releasesSlice/constants.js.map +1 -0
- package/dist/releasesSlice/constants.mjs +14 -0
- package/dist/releasesSlice/constants.mjs.map +1 -0
- package/dist/releasesSlice/index.d.mts +483 -0
- package/dist/releasesSlice/index.d.ts +483 -0
- package/dist/releasesSlice/index.js +1034 -0
- package/dist/releasesSlice/index.js.map +1 -0
- package/dist/releasesSlice/index.mjs +21 -0
- package/dist/releasesSlice/index.mjs.map +1 -0
- package/dist/releasesSlice/selectors.d.mts +92 -0
- package/dist/releasesSlice/selectors.d.ts +92 -0
- package/dist/releasesSlice/selectors.js +967 -0
- package/dist/releasesSlice/selectors.js.map +1 -0
- package/dist/releasesSlice/selectors.mjs +28 -0
- package/dist/releasesSlice/selectors.mjs.map +1 -0
- package/dist/releasesSlice/thunks.d.mts +276 -0
- package/dist/releasesSlice/thunks.d.ts +276 -0
- package/dist/releasesSlice/thunks.js +2843 -0
- package/dist/releasesSlice/thunks.js.map +1 -0
- package/dist/releasesSlice/thunks.mjs +66 -0
- package/dist/releasesSlice/thunks.mjs.map +1 -0
- package/dist/selectors.d.mts +10 -0
- package/dist/selectors.d.ts +10 -0
- package/dist/selectors.js +1636 -0
- package/dist/selectors.js.map +1 -0
- package/dist/selectors.mjs +207 -0
- package/dist/selectors.mjs.map +1 -0
- package/dist/store.d.mts +2306 -0
- package/dist/store.d.ts +2306 -0
- package/dist/store.js +1877 -0
- package/dist/store.js.map +1 -0
- package/dist/store.mjs +32 -0
- package/dist/store.mjs.map +1 -0
- package/dist/storehooks.d.mts +4 -0
- package/dist/storehooks.d.ts +4 -0
- package/dist/storehooks.js +5844 -0
- package/dist/storehooks.js.map +1 -0
- package/dist/storehooks.mjs +265 -0
- package/dist/storehooks.mjs.map +1 -0
- package/dist/thunks.d.mts +12 -0
- package/dist/thunks.d.ts +12 -0
- package/dist/thunks.js +5973 -0
- package/dist/thunks.js.map +1 -0
- package/dist/thunks.mjs +363 -0
- package/dist/thunks.mjs.map +1 -0
- package/dist/usersSlice/constants.d.mts +635 -0
- package/dist/usersSlice/constants.d.ts +635 -0
- package/dist/usersSlice/constants.js +967 -0
- package/dist/usersSlice/constants.js.map +1 -0
- package/dist/usersSlice/constants.mjs +43 -0
- package/dist/usersSlice/constants.mjs.map +1 -0
- package/dist/usersSlice/index.d.mts +6993 -0
- package/dist/usersSlice/index.d.ts +6993 -0
- package/dist/usersSlice/index.js +1054 -0
- package/dist/usersSlice/index.js.map +1 -0
- package/dist/usersSlice/index.mjs +21 -0
- package/dist/usersSlice/index.mjs.map +1 -0
- package/dist/usersSlice/selectors.d.mts +209 -0
- package/dist/usersSlice/selectors.d.ts +209 -0
- package/dist/usersSlice/selectors.js +997 -0
- package/dist/usersSlice/selectors.js.map +1 -0
- package/dist/usersSlice/selectors.mjs +38 -0
- package/dist/usersSlice/selectors.mjs.map +1 -0
- package/dist/usersSlice/thunks.d.mts +881 -0
- package/dist/usersSlice/thunks.d.ts +881 -0
- package/dist/usersSlice/thunks.js +5717 -0
- package/dist/usersSlice/thunks.js.map +1 -0
- package/dist/usersSlice/thunks.mjs +109 -0
- package/dist/usersSlice/thunks.mjs.map +1 -0
- package/dist/utils.d.mts +60 -0
- package/dist/utils.d.ts +60 -0
- package/dist/utils.js +1160 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.mjs +49 -0
- package/dist/utils.mjs.map +1 -0
- package/package.json +14 -2
- package/.eslintrc.cjs +0 -9
- package/.prettierignore +0 -1
- package/CHANGELOG.md +0 -2
- package/actions.ts +0 -32
- package/api/general-api.test.ts +0 -51
- package/api/general-api.ts +0 -60
- package/api/types/Deployment.ts +0 -95
- package/api/types/DeviceDeployments.ts +0 -31
- package/api/types/FilterPredicateInventory.ts +0 -76
- package/api/types/Tenant.ts +0 -38
- package/api/users-api.ts +0 -34
- package/appSlice/constants.ts +0 -166
- package/appSlice/reducer.test.ts +0 -97
- package/appSlice/selectors.ts +0 -33
- package/appSlice/thunks.test.ts +0 -118
- package/appSlice/thunks.ts +0 -148
- package/auth.test.ts +0 -36
- package/auth.ts +0 -82
- package/commonConstants.tsx +0 -252
- package/commonSelectors.ts +0 -255
- package/constants.ts +0 -22
- package/deploymentsSlice/constants.ts +0 -175
- package/deploymentsSlice/index.ts +0 -145
- package/deploymentsSlice/reducer.test.ts +0 -108
- package/deploymentsSlice/selectors.ts +0 -58
- package/deploymentsSlice/thunks.test.ts +0 -425
- package/deploymentsSlice/thunks.ts +0 -382
- package/devicesSlice/constants.ts +0 -56
- package/devicesSlice/reducer.test.ts +0 -194
- package/devicesSlice/selectors.ts +0 -127
- package/devicesSlice/thunks.test.tsx +0 -1245
- package/devicesSlice/thunks.tsx +0 -1098
- package/monitorSlice/constants.ts +0 -17
- package/monitorSlice/index.ts +0 -65
- package/monitorSlice/reducer.test.ts +0 -79
- package/monitorSlice/selectors.ts +0 -15
- package/monitorSlice/thunks.test.ts +0 -112
- package/monitorSlice/thunks.ts +0 -101
- package/onboardingSlice/constants.ts +0 -53
- package/onboardingSlice/reducer.test.ts +0 -45
- package/onboardingSlice/selectors.ts +0 -15
- package/onboardingSlice/thunks.test.ts +0 -235
- package/onboardingSlice/thunks.ts +0 -142
- package/organizationSlice/constants.ts +0 -82
- package/organizationSlice/index.ts +0 -111
- package/organizationSlice/reducer.test.ts +0 -78
- package/organizationSlice/selectors.ts +0 -45
- package/organizationSlice/thunks.test.ts +0 -619
- package/organizationSlice/thunks.ts +0 -383
- package/releasesSlice/constants.ts +0 -18
- package/releasesSlice/reducer.test.ts +0 -78
- package/releasesSlice/selectors.ts +0 -33
- package/releasesSlice/thunks.test.ts +0 -389
- package/releasesSlice/thunks.ts +0 -379
- package/selectors.ts +0 -22
- package/store.ts +0 -89
- package/storehooks.test.tsx +0 -386
- package/storehooks.ts +0 -250
- package/thunks.ts +0 -21
- package/tsconfig.json +0 -11
- package/tsup.config.ts +0 -11
- package/usersSlice/constants.ts +0 -374
- package/usersSlice/reducer.test.ts +0 -141
- package/usersSlice/selectors.ts +0 -60
- package/usersSlice/thunks.test.ts +0 -660
- package/usersSlice/thunks.ts +0 -782
- package/utils.test.ts +0 -187
- package/utils.ts +0 -249
- /package/{api → dist/api}/types/AWSCredentials.ts +0 -0
- /package/{api → dist/api}/types/Actor.ts +0 -0
- /package/{api → dist/api}/types/Addon.ts +0 -0
- /package/{api → dist/api}/types/AddonTenantadm.ts +0 -0
- /package/{api → dist/api}/types/Alert.ts +0 -0
- /package/{api → dist/api}/types/AlertDetails.ts +0 -0
- /package/{api → dist/api}/types/AlertSubject.ts +0 -0
- /package/{api → dist/api}/types/ApiBurst.ts +0 -0
- /package/{api → dist/api}/types/ApiBurstTenantadm.ts +0 -0
- /package/{api → dist/api}/types/ApiLimits.ts +0 -0
- /package/{api → dist/api}/types/ApiLimitsTenantadm.ts +0 -0
- /package/{api → dist/api}/types/ApiQuota.ts +0 -0
- /package/{api → dist/api}/types/ApiQuotaTenantadm.ts +0 -0
- /package/{api → dist/api}/types/Artifact.ts +0 -0
- /package/{api → dist/api}/types/ArtifactDeployments.ts +0 -0
- /package/{api → dist/api}/types/ArtifactInfo.ts +0 -0
- /package/{api → dist/api}/types/ArtifactInfoDeployments.ts +0 -0
- /package/{api → dist/api}/types/ArtifactLink.ts +0 -0
- /package/{api → dist/api}/types/ArtifactTypeInfo.ts +0 -0
- /package/{api → dist/api}/types/ArtifactTypeInfoDeployments.ts +0 -0
- /package/{api → dist/api}/types/ArtifactUpdate.ts +0 -0
- /package/{api → dist/api}/types/ArtifactUploadLink.ts +0 -0
- /package/{api → dist/api}/types/Attribute.ts +0 -0
- /package/{api → dist/api}/types/AttributeInventory.ts +0 -0
- /package/{api → dist/api}/types/AuditLog.ts +0 -0
- /package/{api → dist/api}/types/AuthSetDeviceauth.ts +0 -0
- /package/{api → dist/api}/types/AutoAuthRequest.ts +0 -0
- /package/{api → dist/api}/types/AzureSharedAccessSecret.ts +0 -0
- /package/{api → dist/api}/types/BillingInfo.ts +0 -0
- /package/{api → dist/api}/types/BinaryDeltaConfiguration.ts +0 -0
- /package/{api → dist/api}/types/BinaryDeltaConfigurationDeployments.ts +0 -0
- /package/{api → dist/api}/types/BinaryDeltaLimitsDeployments.ts +0 -0
- /package/{api → dist/api}/types/CancelRequest.ts +0 -0
- /package/{api → dist/api}/types/CardData.ts +0 -0
- /package/{api → dist/api}/types/CardSetupData.ts +0 -0
- /package/{api → dist/api}/types/CheckoutData.ts +0 -0
- /package/{api → dist/api}/types/Configuration.ts +0 -0
- /package/{api → dist/api}/types/Count.ts +0 -0
- /package/{api → dist/api}/types/Credentials.ts +0 -0
- /package/{api → dist/api}/types/DBusSubsystem.ts +0 -0
- /package/{api → dist/api}/types/DeltaConfiguration.ts +0 -0
- /package/{api → dist/api}/types/DeltaConfigurationDeployments.ts +0 -0
- /package/{api → dist/api}/types/DeploymentAuditlogs.ts +0 -0
- /package/{api → dist/api}/types/DeploymentIdentifier.ts +0 -0
- /package/{api → dist/api}/types/DeploymentPhase.ts +0 -0
- /package/{api → dist/api}/types/DeploymentReporting.ts +0 -0
- /package/{api → dist/api}/types/DeploymentStatistics.ts +0 -0
- /package/{api → dist/api}/types/DeploymentStatusStatistics.ts +0 -0
- /package/{api → dist/api}/types/DeviceAuditlogs.ts +0 -0
- /package/{api → dist/api}/types/DeviceAuthEvent.ts +0 -0
- /package/{api → dist/api}/types/DeviceConfiguration.ts +0 -0
- /package/{api → dist/api}/types/DeviceDeployment.ts +0 -0
- /package/{api → dist/api}/types/DeviceDeviceauth.ts +0 -0
- /package/{api → dist/api}/types/DeviceInventory.ts +0 -0
- /package/{api → dist/api}/types/DeviceInventoryInventory.ts +0 -0
- /package/{api → dist/api}/types/DeviceReporting.ts +0 -0
- /package/{api → dist/api}/types/DeviceState.ts +0 -0
- /package/{api → dist/api}/types/DeviceStateDeviceconnect.ts +0 -0
- /package/{api → dist/api}/types/DeviceStateIot_manager.ts +0 -0
- /package/{api → dist/api}/types/DeviceStatus.ts +0 -0
- /package/{api → dist/api}/types/DeviceWithImage.ts +0 -0
- /package/{api → dist/api}/types/DirectUploadMetadata.ts +0 -0
- /package/{api → dist/api}/types/EmailVerificationCompletion.ts +0 -0
- /package/{api → dist/api}/types/EmailVerificationRequest.ts +0 -0
- /package/{api → dist/api}/types/ErrorAuditlogs.ts +0 -0
- /package/{api → dist/api}/types/ErrorDeployments.ts +0 -0
- /package/{api → dist/api}/types/ErrorDeviceauth.ts +0 -0
- /package/{api → dist/api}/types/ErrorDeviceconfig.ts +0 -0
- /package/{api → dist/api}/types/ErrorDeviceconnect.ts +0 -0
- /package/{api → dist/api}/types/ErrorDevicemonitor.ts +0 -0
- /package/{api → dist/api}/types/ErrorExt.ts +0 -0
- /package/{api → dist/api}/types/ErrorInventory.ts +0 -0
- /package/{api → dist/api}/types/ErrorIot_manager.ts +0 -0
- /package/{api → dist/api}/types/ErrorNotFound.ts +0 -0
- /package/{api → dist/api}/types/ErrorReporting.ts +0 -0
- /package/{api → dist/api}/types/ErrorTenantadm.ts +0 -0
- /package/{api → dist/api}/types/ErrorUseradm.ts +0 -0
- /package/{api → dist/api}/types/Event.ts +0 -0
- /package/{api → dist/api}/types/ExternalIdentity.ts +0 -0
- /package/{api → dist/api}/types/Features.ts +0 -0
- /package/{api → dist/api}/types/FileUpload.ts +0 -0
- /package/{api → dist/api}/types/FilterAttribute.ts +0 -0
- /package/{api → dist/api}/types/FilterDefinition.ts +0 -0
- /package/{api → dist/api}/types/FilterDeployments.ts +0 -0
- /package/{api → dist/api}/types/FilterPredicateDeployments.ts +0 -0
- /package/{api → dist/api}/types/Group.ts +0 -0
- /package/{api → dist/api}/types/HTTP.ts +0 -0
- /package/{api → dist/api}/types/IdentityData.ts +0 -0
- /package/{api → dist/api}/types/InputParameter.ts +0 -0
- /package/{api → dist/api}/types/JobStatus.ts +0 -0
- /package/{api → dist/api}/types/Limit.ts +0 -0
- /package/{api → dist/api}/types/LimitDeployments.ts +0 -0
- /package/{api → dist/api}/types/LimitDeviceauth.ts +0 -0
- /package/{api → dist/api}/types/LimitUseradm.ts +0 -0
- /package/{api → dist/api}/types/Limits.ts +0 -0
- /package/{api → dist/api}/types/LineDescriptor.ts +0 -0
- /package/{api → dist/api}/types/LogSubsystem.ts +0 -0
- /package/{api → dist/api}/types/LoginOptions.ts +0 -0
- /package/{api → dist/api}/types/ManagementAPIConfiguration.ts +0 -0
- /package/{api → dist/api}/types/MonitorConfiguration.ts +0 -0
- /package/{api → dist/api}/types/NewConfigurationDeployment.ts +0 -0
- /package/{api → dist/api}/types/NewConfigurationDeploymentResponse.ts +0 -0
- /package/{api → dist/api}/types/NewDeployment.ts +0 -0
- /package/{api → dist/api}/types/NewDeploymentForGroup.ts +0 -0
- /package/{api → dist/api}/types/NewDeploymentPhase.ts +0 -0
- /package/{api → dist/api}/types/NewDeploymentPhaseDeployments.ts +0 -0
- /package/{api → dist/api}/types/OwnUserUpdate.ts +0 -0
- /package/{api → dist/api}/types/PasswordResetCompletion.ts +0 -0
- /package/{api → dist/api}/types/PasswordResetRequest.ts +0 -0
- /package/{api → dist/api}/types/Permission.ts +0 -0
- /package/{api → dist/api}/types/PermissionObject.ts +0 -0
- /package/{api → dist/api}/types/PermissionSet.ts +0 -0
- /package/{api → dist/api}/types/PermissionSetWithScope.ts +0 -0
- /package/{api → dist/api}/types/PersonalAccessToken.ts +0 -0
- /package/{api → dist/api}/types/PersonalAccessTokenRequest.ts +0 -0
- /package/{api → dist/api}/types/Plan.ts +0 -0
- /package/{api → dist/api}/types/PlanBindingDetails.ts +0 -0
- /package/{api → dist/api}/types/PlanChangeRequest.ts +0 -0
- /package/{api → dist/api}/types/PlanLimits.ts +0 -0
- /package/{api → dist/api}/types/Release.ts +0 -0
- /package/{api → dist/api}/types/ReleaseDeployments.ts +0 -0
- /package/{api → dist/api}/types/ReleaseUpdate.ts +0 -0
- /package/{api → dist/api}/types/Releases.ts +0 -0
- /package/{api → dist/api}/types/ReleasesDeleteError.ts +0 -0
- /package/{api → dist/api}/types/ReleasesDeployments.ts +0 -0
- /package/{api → dist/api}/types/Role.ts +0 -0
- /package/{api → dist/api}/types/RolePermission.ts +0 -0
- /package/{api → dist/api}/types/RolePermissionObject.ts +0 -0
- /package/{api → dist/api}/types/RoleUseradm.ts +0 -0
- /package/{api → dist/api}/types/SAMLMetadata.ts +0 -0
- /package/{api → dist/api}/types/Scope.ts +0 -0
- /package/{api → dist/api}/types/SelectAttribute.ts +0 -0
- /package/{api → dist/api}/types/ServiceSubsystem.ts +0 -0
- /package/{api → dist/api}/types/SortCriteria.ts +0 -0
- /package/{api → dist/api}/types/SsoObject.ts +0 -0
- /package/{api → dist/api}/types/StatusDeviceauth.ts +0 -0
- /package/{api → dist/api}/types/StorageLimit.ts +0 -0
- /package/{api → dist/api}/types/SubscriptionData.ts +0 -0
- /package/{api → dist/api}/types/SupportRequest.ts +0 -0
- /package/{api → dist/api}/types/Tag.ts +0 -0
- /package/{api → dist/api}/types/Tags.ts +0 -0
- /package/{api → dist/api}/types/TaskResult.ts +0 -0
- /package/{api → dist/api}/types/TaskResultCLI.ts +0 -0
- /package/{api → dist/api}/types/TaskResultHTTPRequest.ts +0 -0
- /package/{api → dist/api}/types/TaskResultHTTPResponse.ts +0 -0
- /package/{api → dist/api}/types/TenantApiLimits.ts +0 -0
- /package/{api → dist/api}/types/TenantApiLimitsTenantadm.ts +0 -0
- /package/{api → dist/api}/types/TenantIdName.ts +0 -0
- /package/{api → dist/api}/types/TenantIdsData.ts +0 -0
- /package/{api → dist/api}/types/TenantInfo.ts +0 -0
- /package/{api → dist/api}/types/TenantShortInfo.ts +0 -0
- /package/{api → dist/api}/types/TenantsIdName.ts +0 -0
- /package/{api → dist/api}/types/Update.ts +0 -0
- /package/{api → dist/api}/types/UpdateFile.ts +0 -0
- /package/{api → dist/api}/types/UpdateFileDeployments.ts +0 -0
- /package/{api → dist/api}/types/UpdateTypes.ts +0 -0
- /package/{api → dist/api}/types/User.ts +0 -0
- /package/{api → dist/api}/types/UserAuditlogs.ts +0 -0
- /package/{api → dist/api}/types/UserNew.ts +0 -0
- /package/{api → dist/api}/types/UserUpdate.ts +0 -0
- /package/{api → dist/api}/types/UserUseradm.ts +0 -0
- /package/{api → dist/api}/types/XDeltaArgs.ts +0 -0
- /package/{api → dist/api}/types/XDeltaArgsDeployments.ts +0 -0
- /package/{api → dist/api}/types/XDeltaArgsLimits.ts +0 -0
- /package/{api → dist/api}/types/XDeltaArgsLimitsDeployments.ts +0 -0
|
@@ -1,383 +0,0 @@
|
|
|
1
|
-
// Copyright 2020 Northern.tech AS
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
// @ts-nocheck
|
|
15
|
-
import storeActions from '@northern.tech/store/actions';
|
|
16
|
-
import Api from '@northern.tech/store/api/general-api';
|
|
17
|
-
import { Tenant } from '@northern.tech/store/api/types/MenderTypes';
|
|
18
|
-
import {
|
|
19
|
-
DEVICE_LIST_DEFAULTS,
|
|
20
|
-
SORTING_OPTIONS,
|
|
21
|
-
TENANT_LIST_DEFAULT,
|
|
22
|
-
TIMEOUTS,
|
|
23
|
-
deviceAuthV2,
|
|
24
|
-
headerNames,
|
|
25
|
-
iotManagerBaseURL,
|
|
26
|
-
locations
|
|
27
|
-
} from '@northern.tech/store/constants';
|
|
28
|
-
import { getCurrentSession, getTenantCapabilities, getTenantsList } from '@northern.tech/store/selectors';
|
|
29
|
-
import { commonErrorFallback, commonErrorHandler } from '@northern.tech/store/store';
|
|
30
|
-
import { setFirstLoginAfterSignup } from '@northern.tech/store/thunks';
|
|
31
|
-
import { deepCompare } from '@northern.tech/utils/helpers';
|
|
32
|
-
import { createAsyncThunk } from '@reduxjs/toolkit';
|
|
33
|
-
import { jwtDecode } from 'jwt-decode';
|
|
34
|
-
import hashString from 'md5';
|
|
35
|
-
import Cookies from 'universal-cookie';
|
|
36
|
-
|
|
37
|
-
import { actions, sliceName } from '.';
|
|
38
|
-
import { SSO_TYPES, auditLogsApiUrl, ssoIdpApiUrlv1, tenantadmApiUrlv1, tenantadmApiUrlv2 } from './constants';
|
|
39
|
-
import { getAuditlogState, getOrganization } from './selectors';
|
|
40
|
-
|
|
41
|
-
const cookies = new Cookies();
|
|
42
|
-
|
|
43
|
-
const { setAnnouncement, setSnackbar } = storeActions;
|
|
44
|
-
const { page: defaultPage, perPage: defaultPerPage } = DEVICE_LIST_DEFAULTS;
|
|
45
|
-
|
|
46
|
-
export const cancelRequest = createAsyncThunk(`${sliceName}/cancelRequest`, (reason, { dispatch, getState }) => {
|
|
47
|
-
const { id: tenantId } = getOrganization(getState());
|
|
48
|
-
return Api.post(`${tenantadmApiUrlv2}/tenants/${tenantId}/cancel`, { reason }).then(() =>
|
|
49
|
-
Promise.resolve(dispatch(setSnackbar({ message: 'Deactivation request was sent successfully', autoHideDuration: TIMEOUTS.fiveSeconds })))
|
|
50
|
-
);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
export const getTargetLocation = key => {
|
|
54
|
-
if (devLocations.includes(window.location.hostname)) {
|
|
55
|
-
return '';
|
|
56
|
-
}
|
|
57
|
-
let subdomainSections = window.location.hostname.substring(0, window.location.hostname.indexOf(locations.us.location)).split('.');
|
|
58
|
-
subdomainSections = subdomainSections.splice(0, subdomainSections.length - 1);
|
|
59
|
-
if (!subdomainSections.find(section => section === key)) {
|
|
60
|
-
subdomainSections = key === locations.us.key ? subdomainSections.filter(section => !locations[section]) : [...subdomainSections, key];
|
|
61
|
-
return `https://${[...subdomainSections, ...locations.us.location.split('.')].join('.')}`;
|
|
62
|
-
}
|
|
63
|
-
return `https://${window.location.hostname}`;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const devLocations = ['localhost', 'docker.mender.io'];
|
|
67
|
-
export const createOrganizationTrial = createAsyncThunk(`${sliceName}/createOrganizationTrial`, (data, { dispatch }) => {
|
|
68
|
-
const { key } = locations[data.location];
|
|
69
|
-
const targetLocation = getTargetLocation(key);
|
|
70
|
-
const target = `${targetLocation}${tenantadmApiUrlv2}/tenants/trial`;
|
|
71
|
-
return Api.postUnauthorized(target, data)
|
|
72
|
-
.catch(err => {
|
|
73
|
-
if (err.response.status >= 400 && err.response.status < 500) {
|
|
74
|
-
dispatch(setSnackbar({ message: err.response.data.error, autoHideDuration: TIMEOUTS.fiveSeconds }));
|
|
75
|
-
return Promise.reject(err);
|
|
76
|
-
}
|
|
77
|
-
})
|
|
78
|
-
.then(({ headers }) => {
|
|
79
|
-
cookies.remove('oauth');
|
|
80
|
-
cookies.remove('externalID');
|
|
81
|
-
cookies.remove('email');
|
|
82
|
-
dispatch(setFirstLoginAfterSignup(true));
|
|
83
|
-
return new Promise(resolve =>
|
|
84
|
-
setTimeout(() => {
|
|
85
|
-
window.location.assign(`${targetLocation}${headers.location || ''}`);
|
|
86
|
-
return resolve();
|
|
87
|
-
}, TIMEOUTS.fiveSeconds)
|
|
88
|
-
);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
export const startCardUpdate = createAsyncThunk(`${sliceName}/startCardUpdate`, (_, { dispatch }) =>
|
|
93
|
-
Api.post(`${tenantadmApiUrlv2}/billing/card`)
|
|
94
|
-
.then(({ data }) => {
|
|
95
|
-
dispatch(actions.receiveSetupIntent(data.intent_id));
|
|
96
|
-
return Promise.resolve(data.secret);
|
|
97
|
-
})
|
|
98
|
-
.catch(err => commonErrorHandler(err, `Updating the card failed:`, dispatch))
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
export const confirmCardUpdate = createAsyncThunk(`${sliceName}/confirmCardUpdate`, (_, { dispatch, getState }) =>
|
|
102
|
-
Api.post(`${tenantadmApiUrlv2}/billing/card/${getState().organization.intentId}/confirm`)
|
|
103
|
-
.then(() => Promise.all([dispatch(setSnackbar('Payment card was updated successfully')), dispatch(actions.receiveSetupIntent(null))]))
|
|
104
|
-
.catch(err => commonErrorHandler(err, `Updating the card failed:`, dispatch))
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
export const getCurrentCard = createAsyncThunk(`${sliceName}/getCurrentCard`, (_, { dispatch }) =>
|
|
108
|
-
Api.get(`${tenantadmApiUrlv2}/billing`).then(res => {
|
|
109
|
-
const { last4, exp_month, exp_year, brand } = res.data.card || {};
|
|
110
|
-
return Promise.resolve(dispatch(actions.receiveCurrentCard({ brand, last4, expiration: { month: exp_month, year: exp_year } })));
|
|
111
|
-
})
|
|
112
|
-
);
|
|
113
|
-
|
|
114
|
-
export const startUpgrade = createAsyncThunk(`${sliceName}/startUpgrade`, (tenantId, { dispatch }) =>
|
|
115
|
-
Api.post(`${tenantadmApiUrlv2}/tenants/${tenantId}/upgrade/start`)
|
|
116
|
-
.then(({ data }) => Promise.resolve(data.secret))
|
|
117
|
-
.catch(err => commonErrorHandler(err, `There was an error upgrading your account:`, dispatch))
|
|
118
|
-
);
|
|
119
|
-
|
|
120
|
-
export const cancelUpgrade = createAsyncThunk(`${sliceName}/cancelUpgrade`, tenantId => Api.post(`${tenantadmApiUrlv2}/tenants/${tenantId}/upgrade/cancel`));
|
|
121
|
-
|
|
122
|
-
export const completeUpgrade = createAsyncThunk(`${sliceName}/completeUpgrade`, ({ tenantId, plan }, { dispatch }) =>
|
|
123
|
-
Api.post(`${tenantadmApiUrlv2}/tenants/${tenantId}/upgrade/complete`, { plan })
|
|
124
|
-
.catch(err => commonErrorHandler(err, `There was an error upgrading your account:`, dispatch))
|
|
125
|
-
.then(() => Promise.resolve(dispatch(getUserOrganization())))
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
const prepareAuditlogQuery = ({ startDate, endDate, user: userFilter, type, detail: detailFilter, sort = {} }) => {
|
|
129
|
-
const userId = userFilter?.id || userFilter;
|
|
130
|
-
const detail = detailFilter?.id || detailFilter;
|
|
131
|
-
const createdAfter = startDate ? `&created_after=${Math.round(Date.parse(startDate) / 1000)}` : '';
|
|
132
|
-
const createdBefore = endDate ? `&created_before=${Math.round(Date.parse(endDate) / 1000)}` : '';
|
|
133
|
-
const typeSearch = type ? `&object_type=${type.value}`.toLowerCase() : '';
|
|
134
|
-
const userSearch = userId ? `&actor_id=${userId}` : '';
|
|
135
|
-
const objectSearch = type && detail ? `&${type.queryParameter}=${encodeURIComponent(detail)}` : '';
|
|
136
|
-
const { direction = SORTING_OPTIONS.desc } = sort;
|
|
137
|
-
return `${createdAfter}${createdBefore}${userSearch}${typeSearch}${objectSearch}&sort=${direction}`;
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
export const getAuditLogs = createAsyncThunk(`${sliceName}/getAuditLogs`, (selectionState, { dispatch, getState }) => {
|
|
141
|
-
const { page, perPage } = selectionState;
|
|
142
|
-
const { hasAuditlogs } = getTenantCapabilities(getState());
|
|
143
|
-
if (!hasAuditlogs) {
|
|
144
|
-
return Promise.resolve();
|
|
145
|
-
}
|
|
146
|
-
return Api.get(`${auditLogsApiUrl}/logs?page=${page}&per_page=${perPage}${prepareAuditlogQuery(selectionState)}`)
|
|
147
|
-
.then(({ data, headers }) => {
|
|
148
|
-
let total = headers[headerNames.total];
|
|
149
|
-
total = Number(total || data.length);
|
|
150
|
-
return Promise.resolve(dispatch(actions.receiveAuditLogs({ events: data, total })));
|
|
151
|
-
})
|
|
152
|
-
.catch(err => commonErrorHandler(err, `There was an error retrieving audit logs:`, dispatch));
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
export const getAuditLogsCsvLink = createAsyncThunk(`${sliceName}/getAuditLogsCsvLink`, (_, { getState }) =>
|
|
156
|
-
Promise.resolve(`${window.location.origin}${auditLogsApiUrl}/logs/export?limit=20000${prepareAuditlogQuery(getAuditlogState(getState()))}`)
|
|
157
|
-
);
|
|
158
|
-
|
|
159
|
-
export const setAuditlogsState = createAsyncThunk(`${sliceName}/setAuditlogsState`, (selectionState, { dispatch, getState }) => {
|
|
160
|
-
const currentState = getAuditlogState(getState());
|
|
161
|
-
let nextState = {
|
|
162
|
-
...currentState,
|
|
163
|
-
...selectionState,
|
|
164
|
-
sort: { ...currentState.sort, ...selectionState.sort }
|
|
165
|
-
};
|
|
166
|
-
let tasks = [];
|
|
167
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
168
|
-
const { isLoading: currentLoading, selectedIssue: currentIssue, ...currentRequestState } = currentState;
|
|
169
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
170
|
-
const { isLoading: selectionLoading, selectedIssue: selectionIssue, ...selectionRequestState } = nextState;
|
|
171
|
-
if (!deepCompare(currentRequestState, selectionRequestState)) {
|
|
172
|
-
nextState.isLoading = true;
|
|
173
|
-
tasks.push(dispatch(getAuditLogs(nextState)).finally(() => dispatch(actions.setAuditLogState({ isLoading: false }))));
|
|
174
|
-
}
|
|
175
|
-
tasks.push(dispatch(actions.setAuditLogState(nextState)));
|
|
176
|
-
return Promise.all(tasks);
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
/*
|
|
180
|
-
Tenant management + Hosted Mender
|
|
181
|
-
*/
|
|
182
|
-
export const tenantDataDivergedMessage = 'The system detected there is a change in your plan or purchased add-ons. Please log out and log in again';
|
|
183
|
-
|
|
184
|
-
export const addTenant = createAsyncThunk(`${sliceName}/createTenant`, (selectionState, { dispatch }) => {
|
|
185
|
-
return Api.post(`${tenantadmApiUrlv2}/tenants`, selectionState)
|
|
186
|
-
.then(() => Promise.all([dispatch(getTenants()), dispatch(setSnackbar('Tenant was created successfully.'))]))
|
|
187
|
-
.catch(err => commonErrorHandler(err, 'There was an error creating tenant', dispatch, commonErrorFallback));
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
const tenantListRetrieval = async (config): Promise<[Tenant[], number]> => {
|
|
191
|
-
const { page, perPage } = config;
|
|
192
|
-
const params = new URLSearchParams({ page, per_page: perPage }).toString();
|
|
193
|
-
const tenantList = await Api.get(`${tenantadmApiUrlv2}/tenants?${params}`);
|
|
194
|
-
const totalCount = tenantList.headers[headerNames.total] || TENANT_LIST_DEFAULT.perPage;
|
|
195
|
-
return [tenantList.data, totalCount];
|
|
196
|
-
};
|
|
197
|
-
export const getTenants = createAsyncThunk(`${sliceName}/getTenants`, async (_, { dispatch, getState }) => {
|
|
198
|
-
const currentState = getTenantsList(getState());
|
|
199
|
-
const [tenants, pageCount] = await tenantListRetrieval(currentState);
|
|
200
|
-
dispatch(actions.setTenantListState({ ...currentState, total: pageCount, tenants }));
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
export const setTenantsListState = createAsyncThunk(`${sliceName}/setTenantsListState`, async (selectionState: any, { dispatch, getState }) => {
|
|
204
|
-
const currentState = getTenantsList(getState());
|
|
205
|
-
const nextState = {
|
|
206
|
-
...currentState,
|
|
207
|
-
...selectionState
|
|
208
|
-
};
|
|
209
|
-
if (!deepCompare(currentState, selectionState)) {
|
|
210
|
-
const [tenants, pageCount] = await tenantListRetrieval(nextState);
|
|
211
|
-
return dispatch(actions.setTenantListState({ ...nextState, tenants, total: pageCount }));
|
|
212
|
-
}
|
|
213
|
-
return dispatch(actions.setTenantListState({ ...nextState }));
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
interface editTenantBody {
|
|
217
|
-
name: string;
|
|
218
|
-
newLimit: number;
|
|
219
|
-
id: string;
|
|
220
|
-
}
|
|
221
|
-
export const editTenantDeviceLimit = createAsyncThunk(`${sliceName}/editDeviceLimit`, ({ newLimit, id, name }: editTenantBody, { dispatch }) => {
|
|
222
|
-
return Api.put(`${tenantadmApiUrlv2}/tenants/${id}/child`, { device_limit: newLimit, name })
|
|
223
|
-
.catch(err => commonErrorHandler(err, `Device Limit cannot be changed`, dispatch))
|
|
224
|
-
.then(() => Promise.resolve(dispatch(setSnackbar({ message: 'Device Limit was changed successfully', autoHideDuration: TIMEOUTS.fiveSeconds }))))
|
|
225
|
-
.then(() => dispatch(getTenants()));
|
|
226
|
-
});
|
|
227
|
-
export const removeTenant = createAsyncThunk(`${sliceName}/editDeviceLimit`, ({ id }: { id: string }, { dispatch }) => {
|
|
228
|
-
return Api.post(`${tenantadmApiUrlv2}/tenants/${id}/remove/start`)
|
|
229
|
-
.catch(err => commonErrorHandler(err, `There was an error removing the tenant`, dispatch))
|
|
230
|
-
.then(() => {
|
|
231
|
-
const tasks = [Promise.resolve(dispatch(setSnackbar({ message: 'Tenant was removed successfully', autoHideDuration: TIMEOUTS.fiveSeconds })))];
|
|
232
|
-
tasks.push(dispatch(getTenants()));
|
|
233
|
-
tasks.push(setTenantsListState({ selectedTenant: null }));
|
|
234
|
-
return Promise.all(tasks);
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
export const getUserOrganization = createAsyncThunk(`${sliceName}/getUserOrganization`, (_, { dispatch, getState }) => {
|
|
239
|
-
return Api.get(`${tenantadmApiUrlv1}/user/tenant`).then(res => {
|
|
240
|
-
let tasks = [dispatch(actions.setOrganization(res.data))];
|
|
241
|
-
const { addons, plan, trial } = res.data;
|
|
242
|
-
const { token } = getCurrentSession(getState());
|
|
243
|
-
const jwt = jwtDecode(token);
|
|
244
|
-
const jwtData = { addons: jwt['mender.addons'], plan: jwt['mender.plan'], trial: jwt['mender.trial'] };
|
|
245
|
-
if (!deepCompare({ addons, plan, trial }, jwtData)) {
|
|
246
|
-
const hash = hashString(tenantDataDivergedMessage);
|
|
247
|
-
cookies.remove(`${jwt.sub}${hash}`);
|
|
248
|
-
tasks.push(dispatch(setAnnouncement(tenantDataDivergedMessage)));
|
|
249
|
-
}
|
|
250
|
-
return Promise.all(tasks);
|
|
251
|
-
});
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
export const sendSupportMessage = createAsyncThunk(`${sliceName}/sendSupportMessage`, (content, { dispatch }) =>
|
|
255
|
-
Api.post(`${tenantadmApiUrlv2}/contact/support`, content)
|
|
256
|
-
.catch(err => commonErrorHandler(err, 'There was an error sending your request', dispatch, commonErrorFallback))
|
|
257
|
-
.then(() => Promise.resolve(dispatch(setSnackbar({ message: 'Your request was sent successfully', autoHideDuration: TIMEOUTS.fiveSeconds }))))
|
|
258
|
-
);
|
|
259
|
-
|
|
260
|
-
export const requestPlanChange = createAsyncThunk(`${sliceName}/requestPlanChange`, ({ content, tenantId }, { dispatch }) =>
|
|
261
|
-
Api.post(`${tenantadmApiUrlv2}/tenants/${tenantId}/plan`, content)
|
|
262
|
-
.catch(err => commonErrorHandler(err, 'There was an error sending your request', dispatch, commonErrorFallback))
|
|
263
|
-
.then(() => Promise.resolve(dispatch(setSnackbar({ message: 'Your request was sent successfully', autoHideDuration: TIMEOUTS.fiveSeconds }))))
|
|
264
|
-
);
|
|
265
|
-
|
|
266
|
-
export const downloadLicenseReport = createAsyncThunk(`${sliceName}/downloadLicenseReport`, (_, { dispatch }) =>
|
|
267
|
-
Api.get(`${deviceAuthV2}/reports/devices`)
|
|
268
|
-
.catch(err => commonErrorHandler(err, 'There was an error downloading the report', dispatch, commonErrorFallback))
|
|
269
|
-
.then(res => res.data)
|
|
270
|
-
);
|
|
271
|
-
|
|
272
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
273
|
-
export const createIntegration = createAsyncThunk(`${sliceName}/createIntegration`, ({ id, ...integration }, { dispatch }) =>
|
|
274
|
-
Api.post(`${iotManagerBaseURL}/integrations`, integration)
|
|
275
|
-
.catch(err => commonErrorHandler(err, 'There was an error creating the integration', dispatch, commonErrorFallback))
|
|
276
|
-
.then(() => Promise.all([dispatch(setSnackbar('The integration was set up successfully')), dispatch(getIntegrations())]))
|
|
277
|
-
);
|
|
278
|
-
|
|
279
|
-
export const changeIntegration = createAsyncThunk(`${sliceName}/changeIntegration`, ({ id, credentials }, { dispatch }) =>
|
|
280
|
-
Api.put(`${iotManagerBaseURL}/integrations/${id}/credentials`, credentials)
|
|
281
|
-
.catch(err => commonErrorHandler(err, 'There was an error updating the integration', dispatch, commonErrorFallback))
|
|
282
|
-
.then(() => Promise.all([dispatch(setSnackbar('The integration was updated successfully')), dispatch(getIntegrations())]))
|
|
283
|
-
);
|
|
284
|
-
|
|
285
|
-
export const deleteIntegration = createAsyncThunk(`${sliceName}/deleteIntegration`, ({ id, provider }, { dispatch, getState }) =>
|
|
286
|
-
Api.delete(`${iotManagerBaseURL}/integrations/${id}`, {})
|
|
287
|
-
.catch(err => commonErrorHandler(err, 'There was an error removing the integration', dispatch, commonErrorFallback))
|
|
288
|
-
.then(() => {
|
|
289
|
-
const integrations = getState().organization.externalDeviceIntegrations.filter(item => provider !== item.provider);
|
|
290
|
-
return Promise.all([
|
|
291
|
-
dispatch(setSnackbar('The integration was removed successfully')),
|
|
292
|
-
dispatch(actions.receiveExternalDeviceIntegrations(integrations))
|
|
293
|
-
]);
|
|
294
|
-
})
|
|
295
|
-
);
|
|
296
|
-
|
|
297
|
-
export const getIntegrations = createAsyncThunk(`${sliceName}/getIntegrations`, (_, { dispatch, getState }) =>
|
|
298
|
-
Api.get(`${iotManagerBaseURL}/integrations`)
|
|
299
|
-
.catch(err => commonErrorHandler(err, 'There was an error retrieving the integration', dispatch, commonErrorFallback))
|
|
300
|
-
.then(({ data }) => {
|
|
301
|
-
const existingIntegrations = getState().organization.externalDeviceIntegrations;
|
|
302
|
-
const integrations = data.reduce((accu, item) => {
|
|
303
|
-
const existingIntegration = existingIntegrations.find(integration => item.id === integration.id) ?? {};
|
|
304
|
-
const integration = { ...existingIntegration, ...item };
|
|
305
|
-
accu.push(integration);
|
|
306
|
-
return accu;
|
|
307
|
-
}, []);
|
|
308
|
-
return Promise.resolve(dispatch(actions.receiveExternalDeviceIntegrations(integrations)));
|
|
309
|
-
})
|
|
310
|
-
);
|
|
311
|
-
|
|
312
|
-
export const getWebhookEvents = createAsyncThunk(`${sliceName}/getWebhookEvents`, (config = {}, { dispatch, getState }) => {
|
|
313
|
-
const { isFollowUp, page = defaultPage, perPage = defaultPerPage } = config;
|
|
314
|
-
return Api.get(`${iotManagerBaseURL}/events?page=${page}&per_page=${perPage}`)
|
|
315
|
-
.catch(err => commonErrorHandler(err, 'There was an error retrieving activity for this integration', dispatch, commonErrorFallback))
|
|
316
|
-
.then(({ data }) => {
|
|
317
|
-
let tasks = [
|
|
318
|
-
dispatch(
|
|
319
|
-
actions.receiveWebhookEvents({
|
|
320
|
-
value: isFollowUp ? getState().organization.webhooks.events : data,
|
|
321
|
-
total: (page - 1) * perPage + data.length
|
|
322
|
-
})
|
|
323
|
-
)
|
|
324
|
-
];
|
|
325
|
-
if (data.length >= perPage && !isFollowUp) {
|
|
326
|
-
tasks.push(dispatch(getWebhookEvents({ isFollowUp: true, page: page + 1, perPage: 1 })));
|
|
327
|
-
}
|
|
328
|
-
return Promise.all(tasks);
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
const ssoConfigActions = {
|
|
333
|
-
create: { success: 'stored', error: 'storing' },
|
|
334
|
-
edit: { success: 'updated', error: 'updating' },
|
|
335
|
-
read: { success: '', error: 'retrieving' },
|
|
336
|
-
remove: { success: 'removed', error: 'removing' },
|
|
337
|
-
readMultiple: { success: '', error: 'retrieving' }
|
|
338
|
-
};
|
|
339
|
-
|
|
340
|
-
const ssoConfigActionErrorHandler = (err, type) => dispatch =>
|
|
341
|
-
commonErrorHandler(err, `There was an error ${ssoConfigActions[type].error} the SSO configuration.`, dispatch, commonErrorFallback);
|
|
342
|
-
|
|
343
|
-
const ssoConfigActionSuccessHandler = type => dispatch => dispatch(setSnackbar(`The SSO configuration was ${ssoConfigActions[type].success} successfully`));
|
|
344
|
-
|
|
345
|
-
export const storeSsoConfig = createAsyncThunk(`${sliceName}/storeSsoConfig`, ({ config, contentType }, { dispatch }) =>
|
|
346
|
-
Api.post(ssoIdpApiUrlv1, config, { headers: { 'Content-Type': contentType, Accept: 'application/json' } })
|
|
347
|
-
.catch(err => dispatch(ssoConfigActionErrorHandler(err, 'create')))
|
|
348
|
-
.then(() => Promise.all([dispatch(ssoConfigActionSuccessHandler('create')), dispatch(getSsoConfigs())]))
|
|
349
|
-
);
|
|
350
|
-
|
|
351
|
-
export const changeSsoConfig = createAsyncThunk(`${sliceName}/changeSsoConfig`, ({ config, contentType }, { dispatch }) =>
|
|
352
|
-
Api.put(`${ssoIdpApiUrlv1}/${config.id}`, config, { headers: { 'Content-Type': contentType, Accept: 'application/json' } })
|
|
353
|
-
.catch(err => dispatch(ssoConfigActionErrorHandler(err, 'edit')))
|
|
354
|
-
.then(() => Promise.all([dispatch(ssoConfigActionSuccessHandler('edit')), dispatch(getSsoConfigs())]))
|
|
355
|
-
);
|
|
356
|
-
|
|
357
|
-
export const deleteSsoConfig = createAsyncThunk(`${sliceName}/deleteSsoConfig`, ({ id }, { dispatch, getState }) =>
|
|
358
|
-
Api.delete(`${ssoIdpApiUrlv1}/${id}`)
|
|
359
|
-
.catch(err => dispatch(ssoConfigActionErrorHandler(err, 'remove')))
|
|
360
|
-
.then(() => {
|
|
361
|
-
const configs = getState().organization.ssoConfigs.filter(item => id !== item.id);
|
|
362
|
-
return Promise.all([dispatch(ssoConfigActionSuccessHandler('remove')), dispatch(actions.receiveSsoConfigs(configs))]);
|
|
363
|
-
})
|
|
364
|
-
);
|
|
365
|
-
|
|
366
|
-
export const getSsoConfigById = createAsyncThunk(`${sliceName}/getSsoConfigById`, (config, { dispatch }) =>
|
|
367
|
-
Api.get(`${ssoIdpApiUrlv1}/${config.id}`)
|
|
368
|
-
.catch(err => dispatch(ssoConfigActionErrorHandler(err, 'read')))
|
|
369
|
-
.then(({ data, headers }) => {
|
|
370
|
-
const sso = Object.values(SSO_TYPES).find(({ contentType }) => contentType === headers['content-type']);
|
|
371
|
-
return sso ? Promise.resolve({ ...config, config: data, type: sso.id }) : Promise.reject('Unsupported SSO config content type.');
|
|
372
|
-
})
|
|
373
|
-
);
|
|
374
|
-
|
|
375
|
-
export const getSsoConfigs = createAsyncThunk(`${sliceName}/getSsoConfigs`, (_, { dispatch }) =>
|
|
376
|
-
Api.get(ssoIdpApiUrlv1)
|
|
377
|
-
.catch(err => dispatch(ssoConfigActionErrorHandler(err, 'readMultiple')))
|
|
378
|
-
.then(({ data }) =>
|
|
379
|
-
Promise.all(data.map(config => dispatch(getSsoConfigById(config)).unwrap()))
|
|
380
|
-
.then(configs => dispatch(actions.receiveSsoConfigs(configs)))
|
|
381
|
-
.catch(err => commonErrorHandler(err, err, dispatch, ''))
|
|
382
|
-
)
|
|
383
|
-
);
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// Copyright 2019 Northern.tech AS
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
export const ARTIFACT_GENERATION_TYPE = { SINGLE_FILE: 'single_file' };
|
|
15
|
-
|
|
16
|
-
export const currentArtifact = 'artifact_name';
|
|
17
|
-
export const rootfsImageVersion = 'rootfs-image.version';
|
|
18
|
-
export const softwareTitleMap = { [rootfsImageVersion]: { title: 'Root filesystem', priority: 0, key: rootfsImageVersion } };
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
// Copyright 2020 Northern.tech AS
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
// @ts-nocheck
|
|
15
|
-
import reducer, { actions, initialState } from '.';
|
|
16
|
-
|
|
17
|
-
const testRelease = {
|
|
18
|
-
artifacts: [
|
|
19
|
-
{
|
|
20
|
-
id: '123',
|
|
21
|
-
name: 'test',
|
|
22
|
-
description: '-',
|
|
23
|
-
device_types_compatible: ['test'],
|
|
24
|
-
updates: [{ files: [{ size: 123, name: '' }], type_info: { type: 'rootfs-image' } }],
|
|
25
|
-
url: ''
|
|
26
|
-
}
|
|
27
|
-
],
|
|
28
|
-
device_types_compatible: ['test'],
|
|
29
|
-
name: 'test'
|
|
30
|
-
};
|
|
31
|
-
describe('release reducer', () => {
|
|
32
|
-
it('should return the initial state', async () => {
|
|
33
|
-
expect(reducer(undefined, {})).toEqual(initialState);
|
|
34
|
-
});
|
|
35
|
-
it('should handle RECEIVE_RELEASE', async () => {
|
|
36
|
-
expect(reducer(undefined, { type: actions.receiveRelease, payload: { ...testRelease, name: 'test2' } }).byId.test2).toEqual({
|
|
37
|
-
...testRelease,
|
|
38
|
-
name: 'test2'
|
|
39
|
-
});
|
|
40
|
-
expect(reducer(initialState, { type: actions.receiveRelease, payload: { ...testRelease, name: 'test2' } }).byId.test2).toEqual({
|
|
41
|
-
...testRelease,
|
|
42
|
-
name: 'test2'
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
it('should handle RECEIVE_RELEASES', async () => {
|
|
46
|
-
expect(reducer(undefined, { type: actions.receiveReleases, payload: { test: testRelease, test2: { ...testRelease, name: 'test2' } } }).byId).toEqual({
|
|
47
|
-
test: testRelease,
|
|
48
|
-
test2: { ...testRelease, name: 'test2' }
|
|
49
|
-
});
|
|
50
|
-
expect(reducer(initialState, { type: actions.receiveReleases, payload: { test: testRelease, test2: { ...testRelease, name: 'test2' } } }).byId).toEqual({
|
|
51
|
-
test: testRelease,
|
|
52
|
-
test2: { ...testRelease, name: 'test2' }
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
it('should handle RELEASE_REMOVED', async () => {
|
|
56
|
-
expect(reducer(undefined, { type: actions.removeRelease, payload: 'test' }).byId).toEqual({});
|
|
57
|
-
expect(reducer({ ...initialState, byId: { test: testRelease } }, { type: actions.removeRelease, payload: 'test' }).byId).toEqual({});
|
|
58
|
-
expect(
|
|
59
|
-
reducer({ ...initialState, byId: { test: testRelease }, selectedRelease: 'test' }, { type: actions.removeRelease, payload: 'test' }).selectedRelease
|
|
60
|
-
).toEqual(null);
|
|
61
|
-
expect(
|
|
62
|
-
reducer({ ...initialState, byId: { test: testRelease, test2: testRelease }, selectedRelease: 'test2' }, { type: actions.removeRelease, payload: 'test' })
|
|
63
|
-
.selectedRelease
|
|
64
|
-
).toEqual('test2');
|
|
65
|
-
});
|
|
66
|
-
it('should handle SELECTED_RELEASE', async () => {
|
|
67
|
-
expect(reducer(undefined, { type: actions.selectedRelease, payload: 'test' }).selectedRelease).toEqual('test');
|
|
68
|
-
expect(reducer(initialState, { type: actions.selectedRelease, payload: 'test' }).selectedRelease).toEqual('test');
|
|
69
|
-
});
|
|
70
|
-
it('should handle SET_RELEASES_LIST_STATE', async () => {
|
|
71
|
-
expect(reducer(undefined, { type: actions.setReleaseListState, payload: { something: 'special' } }).releasesList).toEqual({
|
|
72
|
-
something: 'special'
|
|
73
|
-
});
|
|
74
|
-
expect(reducer(initialState, { type: actions.setReleaseListState, payload: { something: 'special' } }).releasesList).toEqual({
|
|
75
|
-
something: 'special'
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
});
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
// Copyright 2023 Northern.tech AS
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
import { listItemMapper } from '@northern.tech/store/utils';
|
|
15
|
-
import { createSelector } from '@reduxjs/toolkit';
|
|
16
|
-
|
|
17
|
-
const getSelectedReleaseId = state => state.releases.selectedRelease;
|
|
18
|
-
export const getReleasesById = state => state.releases.byId;
|
|
19
|
-
export const getReleaseTags = state => state.releases.tags;
|
|
20
|
-
export const getReleaseListState = state => state.releases.releasesList;
|
|
21
|
-
const getListedReleases = state => state.releases.releasesList.releaseIds;
|
|
22
|
-
export const getUpdateTypes = state => state.releases.updateTypes;
|
|
23
|
-
|
|
24
|
-
const getReleaseMappingDefaults = () => ({});
|
|
25
|
-
export const getReleasesList = createSelector([getReleasesById, getListedReleases, getReleaseMappingDefaults], listItemMapper);
|
|
26
|
-
|
|
27
|
-
export const getReleaseTagsById = createSelector([getReleaseTags], releaseTags => releaseTags.reduce((accu, key) => ({ ...accu, [key]: key }), {}));
|
|
28
|
-
export const getHasReleases = createSelector(
|
|
29
|
-
[getReleaseListState, getReleasesById],
|
|
30
|
-
({ searchTotal, total }, byId) => !!(Object.keys(byId).length || total || searchTotal)
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
export const getSelectedRelease = createSelector([getReleasesById, getSelectedReleaseId], (byId, id) => byId[id] ?? {});
|