Bitwarden client apps (web, browser extension, desktop, and cli). bitwarden.com
Go to file
Jared 405c30008a
[PM-31778] Multi-step policy edit dialog (#19406)
* implement multi-step policy ui framework

* policy wip

* Refactor organization data ownership policy component to use multi-step dialog and signals. Remove deprecated dialog component and update related tests. Add organizationId input to base policy edit component and implement save logic in the new dialog structure.

* Update multi-step policy edit dialog to handle loading state and improve template initialization. Adjust button disable logic to account for loading status and modify ViewChild static property for proper change detection.

* Refactor policy confirmation logic in base policy edit component. Remove deprecated confirm method and update policy edit dialog to handle confirmation checks dynamically. Adjust organization data ownership policy component to align with new confirmation structure.

* Update apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/auto-confirm-policy.component.html

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>

* Refactor multi-step policy dialog component and remove legacy confirm method

- Deleted the multi-step policy plan documentation.
- Introduced a new `MultiStepPolicyEditDialogComponent` to handle multi-step workflows.
- Updated `BasePolicyEditComponent` to support multi-step configurations and removed the deprecated `confirm()` method.
- Enhanced `PolicyStep` type to include optional `disableSave` and `bodyContent` properties.
- Adjusted HTML templates to utilize signals for dynamic content rendering.
- Refactored existing policy components to integrate with the new multi-step dialog structure.

* Refactor AutoConfirmPolicy component constructor to use readonly modifier for firstTimeDialog parameter

* Update multi-step policy edit dialog template to ensure proper rendering of policy form before lifecycle hooks. Added comment for clarity on rendering behavior.

* Update apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/auto-confirm-policy.component.html

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>

* Add confirmation step before policy submission in dialog component

- Introduced an optional `confirm` method in `BasePolicyEditComponent` to allow components to implement a confirmation step before saving.
- Updated `PolicyEditDialogComponent` to call the `confirm` method and handle user confirmation.
- Added new test files for `AutoConfirmPolicyEditComponent` and `MultiStepPolicyEditDialogComponent` to ensure proper functionality and behavior of the new confirmation logic.

* Update apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/vnext-organization-data-ownership.component.ts

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>

* Refactor policy edit components to streamline side effects and improve save logic

- Moved side effect logic from inline definitions to dedicated methods in AutoConfirmPolicyEditComponent.
- Updated vNextOrganizationDataOwnershipPolicyComponent to remove unused template references.
- Adjusted PolicyStep type to allow for side effects returning void.
- Enhanced save button logic in MultiStepPolicyEditDialogComponent to utilize a computed signal for save state management.

* Enhance MultiStepPolicyEditDialogComponent tests and update references

- Refactored tests in multi-step policy edit dialog to improve saveDisabled logic and ensure accurate state management.
- Updated references from AutoConfirmPolicyDialogComponent to MultiStepPolicyEditDialogComponent in web-vault-prompt service tests for consistency.

* Refactor auto-confirm policy component template and update imports

- Improved readability of the auto-confirm policy component template by formatting the button element.
- Cleaned up import statements in the auto-confirm policy component test file for consistency.

* Update WebVaultPromptService tests to validate firstTimeDialog property

- Added assertion to ensure the firstTimeDialog property is correctly passed in the policy data during dialog closure in WebVaultPromptService tests.

* Refactor policy edit components to support migration to new policy steps

- Added TODO comments in BasePolicyEditComponent and PolicyEditDialogComponent to indicate the removal of the confirm method when the `MigrateMyVaultToMyItems` feature flag is deprecated.
- Updated vNextOrganizationDataOwnershipPolicyComponent to ensure proper handling of organizationId.
- Enhanced MultiStepPolicyEditDialogComponent template for improved subtitle handling and readability.

* Refactor policy edit components to utilize Angular's input function

- Replaced traditional @Input() properties with the new input() function in BasePolicyEditComponent for better reactivity.
- Updated policy edit dialog component to set inputs using the new method for improved clarity and consistency.
- Adjusted various policy components to ensure compatibility with the new input handling, enhancing overall code maintainability.

* fix(policy-edit): update policy access method to use function call syntax

Changed the way policy properties are accessed in the auto-confirm policy component template, ensuring compatibility with the updated policy structure.

* refactor(session-timeout): update policyResponse handling in component and tests

Modified the SessionTimeoutPolicyComponent to use function call syntax for accessing policyResponse. Updated corresponding unit tests to reflect this change, ensuring consistent handling of policy data across the component and its tests.

* refactor(policy-edit-dialog): simplify test structure and improve saveDisabled logic

Updated the unit tests for MultiStepPolicyEditDialogComponent to eliminate the use of fakeAsync and detectChanges, replacing them with direct state manipulation and TestBed.flushEffects(). This change enhances test clarity and reliability. Additionally, refactored the account age calculation in WebVaultExtensionPromptService to use UTC midnight for accurate day counting, addressing potential off-by-one errors.

* Fix change to prompt service which was unneeded

* refactor(policy-edit): enhance savePolicy method and inject dependencies

Updated the BasePolicyEditComponent to inject AccountService, KeyService, and PolicyApiServiceAbstraction. Refactored the savePolicy method to streamline the policy saving process, ensuring proper handling of organization keys and error management. Adjusted AutoConfirmPolicyEditComponent and vNextOrganizationDataOwnershipPolicyComponent to utilize the new savePolicy implementation.

* refactor(policy-edit): remove unused AccountService dependency

Removed the AccountService dependency from MasterPasswordPolicyComponent and ResetPasswordPolicyComponent as it was not utilized. Added a getter for autoConfirmPolicy in AutoConfirmPolicyEditComponent to enhance code clarity.

* refactor(policy-edit): update sideEffect callbacks in AutoConfirmPolicyEditComponent

Modified the sideEffect properties in the AutoConfirmPolicyEditComponent to use arrow functions, ensuring proper context binding for the savePolicy and navigateToExtensionPromptStep methods.

* refactor(policy-edit): update sideEffect to use arrow function in vNextOrganizationDataOwnershipPolicyComponent

Changed the sideEffect property in the vNextOrganizationDataOwnershipPolicyComponent to use an arrow function for the savePolicy method, ensuring proper context binding.

* Fixes tests for PR

* refactor(vault): improve account age calculation to use UTC boundaries

Updated the account age calculation in WebVaultExtensionPromptService to utilize UTC midnight boundaries, preventing issues with Daylight Saving Time skewing the day count.

* Refactor PolicyEditDialogComponent to improve signal usage for save button state management

- Changed saveDisabled property to use a private signal for better encapsulation.
- Updated template bindings to call loading() and saveDisabled() as functions for correct state handling.
- Enhanced observables management for save button disable logic to ensure proper state updates.

* Fix optional chaining in policy confirmation and add policy steps to vNext organization data ownership component

* Update tests for vNext organization data ownership component to use fixture inputs and add missing service mocks

---------

Co-authored-by: Brandon <btreston@bitwarden.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
2026-04-08 11:17:14 -04:00
.checkmarx Update SAST preset to query set (#8569) 2024-04-01 16:24:04 -04:00
.claude Add fix-angular-fixmes skill to resolve Angular FIXME migration comments (#19426) 2026-04-07 12:48:01 -04:00
.codescene disable code duplication check in unit tests (#6773) 2023-11-06 15:48:34 -05:00
.github fix(ci): Update to use bw-ghapp for opening SDK update PR 2026-04-08 10:51:22 -04:00
.husky Update husky hooks (#7738) 2024-01-30 06:50:54 -08:00
.storybook [CL-1023][CL-1031] Design system refresh: Milestone 1 (#19061) 2026-03-25 10:55:06 -05:00
.vscode chore(dev): enable Tailwind IntelliSense for tw- class strings in TypeScript (#19353) 2026-03-04 10:17:14 -05:00
apps [PM-31778] Multi-step policy edit dialog (#19406) 2026-04-08 11:17:14 -04:00
bitwarden_license [PM-31778] Multi-step policy edit dialog (#19406) 2026-04-08 11:17:14 -04:00
docs refactor(nx): remove unneeded tsconfig.build.json & adjust nx docs (#16864) 2025-10-14 11:07:23 -04:00
libs Auth/pm-34506 - Login Strategy Session Cache Expiration Adjustment (#20009) 2026-04-08 11:13:08 -04:00
scripts Add script to install Rust env. Use in CI and pre-commit hooks. (#19891) 2026-04-06 08:52:07 -06:00
.browserslistrc [PM-6788][PM-7755] add babel/preset-env and browserslist (#9383) 2024-05-30 18:42:26 -04:00
.editorconfig Add support for migrated jslib (#2826) 2022-06-03 18:01:07 +02:00
.git-blame-ignore-revs add prettier formatting merge commit to .git-blame-ignore-revs (#7037) 2023-11-29 17:53:26 -05:00
.gitattributes Apply Prettier (#2238) 2021-12-21 15:43:35 +01:00
.gitignore Implement reusable Claude code review workflow (#16979) 2025-10-27 16:25:40 +01:00
.npmrc [PM-25911] Add commercial sdk internal as dependency (#16883) 2025-10-27 15:17:20 +01:00
.nvmrc [PM-22343] Bump non-cli to Node 22 (#15058) 2025-06-26 18:05:37 -04:00
.nxignore refactor(scheduling): extract @bitwarden/scheduling Nx leaf library (#19771) 2026-03-27 11:23:22 +00:00
.prettierignore chore(tech-debt): [PM-33963] Remove legacy Duo Web SDK v2 from desktop 2026-04-03 17:04:06 -04:00
.prettierrc.json Update CL documentation (#5379) 2023-05-08 14:46:59 +02:00
angular.json [CL-717][PM-27966] Update to Angular 20 and Storybook 9 (#17638) 2025-12-01 14:15:58 -05:00
babel.config.json [PM-6788] enable bugfixes in babel/preset-env (#9465) 2024-05-31 17:59:39 -04:00
clients.code-workspace Add Nx Console to vscode recommended extension list (#17683) 2025-11-27 07:47:01 +01:00
CONTRIBUTING.md Update README and CONTRIBUTING to point to contributing.bitwarden.com (#2771) 2022-06-13 17:34:07 +10:00
eslint.config.mjs chore(tech-debt): [PM-33963] Remove legacy Duo Web SDK v2 from desktop 2026-04-03 17:04:06 -04:00
jest.config.js refactor(scheduling): extract @bitwarden/scheduling Nx leaf library (#19771) 2026-03-27 11:23:22 +00:00
jest.preset.js feat(nx): add basic-lib generator for streamlined library creation (#14992) 2025-06-05 14:20:23 -04:00
LICENSE_BITWARDEN.txt Fix some references to master (#14578) 2025-05-01 07:18:09 -07:00
LICENSE_GPL.txt Prepare bitwarden_license directory (#2663) 2022-05-09 17:50:15 +02:00
LICENSE.txt Fix some references to master (#14578) 2025-05-01 07:18:09 -07:00
lint-staged.config.mjs Add script to install Rust env. Use in CI and pre-commit hooks. (#19891) 2026-04-06 08:52:07 -06:00
nx.json feat(nx): add basic-lib generator for streamlined library creation (#14992) 2025-06-05 14:20:23 -04:00
package-lock.json Bitwarden IPC improvements/refactor (#19935) 2026-04-07 17:05:37 +02:00
package.json Bitwarden IPC improvements/refactor (#19935) 2026-04-07 17:05:37 +02:00
README.md Remove gitter chat badges from READMEs (#19368) 2026-03-04 16:33:27 +00:00
SECURITY.md Revise language on SECURITY.md 2022-03-15 15:39:14 -04:00
tailwind.config.js Billing/pm 23385 premium modal in web after registration (#16182) 2025-09-04 14:44:04 +00:00
tsconfig.base.json refactor(scheduling): extract @bitwarden/scheduling Nx leaf library (#19771) 2026-03-27 11:23:22 +00:00
tsconfig.eslint.json fix(eslint): extend tsconfig.base in tsconfig.eslint (#15082) 2025-06-05 11:08:03 -04:00
tsconfig.json [PM-32442] Enforce tsc-strict on desktop and CLI apps (#19058) 2026-02-24 09:20:44 +01:00

Bitwarden

GitHub Workflow browser build on main GitHub Workflow CLI build on main GitHub Workflow desktop build on main GitHub Workflow web build on main


Bitwarden Client Applications

This repository houses all Bitwarden client applications except the mobile applications (iOS | android).

Please refer to the Clients section of the Contributing Documentation for build instructions, recommended tooling, code style tips, and lots of other great information to get you started.

We're Hiring!

Interested in contributing in a big way? Consider joining our team! We're hiring for many positions. Please take a look at our Careers page to see what opportunities are currently open as well as what it's like to work at Bitwarden.

Contribute

Code contributions are welcome! Please commit any pull requests against the main branch. Learn more about how to contribute by reading the Contributing Guidelines. Check out the Contributing Documentation for how to get started with your first contribution.

Security audits and feedback are welcome. Please open an issue or email us privately if the report is sensitive in nature. You can read our security policy in the SECURITY.md file.