This PR makes it so the devices are always sorted in this order (by default):
1. Has Pending Auth Request (if any) comes first
2. Current Device comes second (or first if there are no pending auth requests)
3. First Login Date - the rest of the devices are sorted by first login date (newest to oldest)
This sort order is preserved even after a user approves/denies and auth request - that is, the approved/denied device will re-sort to its correct position according to it's first login date.
Feature Flag: `PM14938_BrowserExtensionLoginApproval`
* feat: only set badge state for the active tab
* fix: tests
* feat: avoid calculating states unecessarily
* Revert BrowserApi.removeListener change
* Add fatal log on observable failure
* Use fromChromeEvent
* Remove required-using tests
* Only disable some
* One of each
---------
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
Adds a check to make sure that the email on the Org Invite matches the email submitted in the form. If it matches, only then do we apply the org invite to get the MP policies. But if the emails do not match, it means the user attempting to login is no longer the user who originally clicked the emailed org invite link. Therefore, we clear the Org Invite + Deep Link and allow the user to login as normal.
* WIP
* switch to signal
* fix ts strict errors
* clean up
* refactor policy list service
* implement vnext component
* refactor to include feature flag check in display()
* CR feedback
* refactor submit to cancel before request is built
* clean up
* Fix typo
---------
Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
* update shield logo and container padding
* Fix horizontal icon shift
* use absolutel position to fix shield shifting
* add new shield and admin console logo
* add new logos
* add business unit portal logo
* delete redundant logos
* add missing fill color class
* Add bulk user confirmation method to OrganizationUserService
* Update OrganizationUserBulkConfirmRequest to include optional defaultUserCollectionName property
* Implement conditional bulk user confirmation logic in BulkConfirmDialogComponent.
Its gated behind the feature flag for default user collection.
* Refactor OrganizationUserBulkConfirmRequest to use SdkEncString for defaultUserCollectionName
* Refactor BulkConfirmDialogComponent to use organization object instead of organizationId for improved clarity and type safety.
* Add unit tests for OrganizationUserService to validate user single/bulk confirmation logic
* Refactor OrganizationUserService to streamline encrypted collection name retrieval by introducing getEncryptedDefaultCollectionName$ method.
* Refactor unit tests for OrganizationUserService to reduce duplication by introducing a setupCommonMocks function for common mock configurations.
* refactor(organization-user.service): streamline retrieval of encrypted collection name in bulk confirmation process
* refactor manually open extension error message to a separate component
* allow icons and max width to be updated via setAnonLayoutWrapperData
* set error state when the extension fails to open
* bump timeout to 2000ms. I was seeing false error states when attempting to open the extension
* fix initialization of css variables
- Renames the `LoginApprovalComponent` to `LoginApprovalDialogComponent`
- Renames the property `notificationId` to `authRequestId` for clarity
- Updates text content on the component
* Move pin service to km ownership
* Run format
* Eslint
* Fix tsconfig
* Fix imports and test
* Clean up imports
* Remove unused dependency on PinService
* Fix comments
---------
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
* Introduce ActiveUserAccessor
* Use ActiveUserAccessor over AccountService
* Updates tests and testing utils to support ActiveUserAccessor
* Update all injection points
* Fix types test
* Use ternary instead
* properly call input functions
* don't enable sshkey form
* fix logic for disabling cipher form
* prefer use of observable
* use destroyRef. change to enabled status only