* switch back to default (Lock) session timeout action when PIN is enabled in master password less accounts.
* always reset to null (default) when only one action is available.
* unnecessary additional keys refresh on token storage migration
* Remove pm-23341-milestone-2 flagged logic from user-subscription component
Remove the enableDiscountDisplay$ feature flag observable and collapse the
ngIf/else template to always show the discount badge. The badge handles
null/no-discount gracefully.
* Remove PM23341_Milestone_2 flag definition from feature-flag enum
Remove the enableDiscountDisplay$ feature flag observable and collapse the
ngIf/else template to always show the discount badge. The badge handles
null/no-discount gracefully.
* fix: warn user about unsaved changes before applying desktop update
* fix: update dialog
* fix: update restart to properly clean up IPC listeners on timeout and warn about unsaved Send forms
* revert: Revert AddEditComponent changes
* fix: solve type error
* fix: warn user about unsaved chagnes
* fix: use FormGroupDirective in DirtyFormService to detect dirty forms after form reassignment
---------
Co-authored-by: bittoby <bittoby@users.noreply.github.com>
* fix(dirt): check response.error before showing success toast for critical apps
The orchestrator's catchError converts API failures into next emissions
with response.error set. The component's next handler was unconditionally
showing a success toast without checking this field.
Now checks response.error and shows an error toast when the API call
failed. Selection is preserved on error so users can retry.
Also ensures updatingCriticalApps signal is reset on all paths (success,
caught error, and uncaught error).
[PM-33067]
* test(dirt): add tests for mark/unmark critical apps error handling
Tests verify that:
- Success toast shown when response.error is null
- Error toast shown when response.error is non-null
- Selection preserved on error, cleared on success
[PM-33067]
* fix(dirt): use specific error toast for unmark critical apps failure
Replace generic "An unexpected error has occurred" with
"Failed to unmark applications as critical" for consistency
with the mark-as-critical error toast.
* fix(dirt): check response.error in Review New Applications mark critical
The AllApplicationsComponent (Review New Applications widget) had the
same false success toast bug as the All Applications tab. The next
handler ignored the response parameter entirely, showing a success
toast even when response.error was set by the orchestrator's catchError.
Now checks response.error before showing toast. On error: shows
"Failed to mark applications as critical" and preserves selection.
Also resets markingAsCritical on all paths.
Adds unit tests for mark success and error paths.
[PM-33067]
* Revert "fix(dirt): check response.error in Review New Applications mark critical"
This reverts commit b646598613.
* fix(dirt): check response.error in application review dialog before showing success toast
The saveApplicationReviewStatus$ orchestrator method uses catchError
to convert API failures into next emissions with response.error set.
The dialog used firstValueFrom inside try/catch, but since catchError
prevents the Observable from erroring, firstValueFrom resolves
successfully and the catch block never fires.
Now checks response.error on the resolved value before showing the
success toast. On error: shows "Error saving review status" and
stays on the dialog so the user can retry.
[PM-33067]
* Replace usage of two factor images with TwoFactorIcon component
* Delete web scss and now unused two-factor images
* Remove mfaType from eslint whitelist
* Delete unused mfaType scss entries on browser and desktop
* Fix linting issue
* Remove icons from two factor setup dialogs
* Delete unused images on browser and desktop
* Remove mfaLogoSuffix
* Remove paragraph
---------
Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
Makes a distinct `"settings-change-password"` route on Extension - to be used when the user initiates changing their password by navigating to Settings > Account Recovery. This route uses the `ChangePasswordPageComponent` (unlike the "change-password" route, which uses the `ExtensionAnonLayoutWrapperComponent`).
Feature flag: `pm-32413-multi-client-password-management`
* re init notification bar in overlay
* overlay tests
* update notification background to verify the tabs current url matches the domain which the notification was queued for, improve guard in cipher queue message
* use example sites in testing
* Enhance policy management by adding organization input to policy edit components and dialogs. Update edit method to include organization context, enabling feature entitlements based on organization settings. Adjust templates to conditionally render options based on organization properties.
* Refactor PolicyEditDialogComponent to change access modifiers for properties. Update policyType and saveDisabled$ to protected and instance variables respectively, enhancing encapsulation and consistency in the component's structure.
* Refactor PolicyEditDialogComponent to change property access modifiers from readonly to instance variables for loading, saveDisabled$, and policyComponent, improving flexibility in component state management.
* Refactor PoliciesComponent tests to use property accessors and improve type definitions
- Updated mockPolicyResponse and mockPolicyResponsesData to include explicit type definitions.
- Changed direct property access to bracket notation for organizationId$, organization$, policies$, and policiesEnabledMap$ observables.
- Enhanced edit method calls to include organization parameter in tests.
- Added new tests for conditional behavior based on organization.useMyItems in vNextOrganizationDataOwnershipPolicyComponent.
- Implemented logic to enable/disable controls based on policy and organization state.
* Refactor PolicyEditDialogComponent to use Angular signals for state management
- Updated loading state and saveDisabled properties to use signals instead of traditional variables.
- Modified template bindings to reflect changes in loading state and save button disable logic.
- Enhanced component initialization to ensure proper handling of policy component and its state.
- Improved observables management with takeUntilDestroyed for better resource cleanup.
* Refactor Policy Edit Dialogs to use Angular signals for loading state management
- Updated loading state bindings in HTML templates to call loading() as a function.
- Refactored TypeScript components to utilize typed accessors for policy components.
- Enhanced observables for save button disable logic to ensure proper state handling.
- Improved error handling and initialization checks for policy components.
* Fix test setup for AutoConfirmPolicyDialogComponent by updating policyComponent initialization to use bracket notation for better type handling.
* Refactor policy components to remove organization ID references and utilize organization objects directly. Update related dialog components and tests to ensure consistency with the new structure. This change enhances clarity and reduces redundancy in policy management.
* Refactor policy components to improve organization handling. Update policies component to directly use organization objects instead of IDs. Adjust related components and services for consistency, enhancing clarity in policy management.
* Refactor PoliciesComponent tests to eliminate organization ID references and directly use organization objects. Update related test cases for consistency and clarity in policy management.
* Refactor policy dialog components to enhance type safety by checking component instances instead of using type assertions. This change improves code clarity and maintainability.
* Enhance unit tests for policy dialog and vault services by improving mock implementations and ensuring accurate date calculations. Update organization references to use object structures for better clarity and maintainability in policy management.
* fix(tests): Update date calculation in WebVaultExtensionPromptService tests for clarity
* Moved the task scheduler registration to the init method to ensure we're not re-registering it. Also made a no-op upload service for when the extension is popped out so we don't push events from both threads.