1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-14 23:33:31 +00:00
Files
browser/libs/vault/src/cipher-form/abstractions/cipher-form-config.service.ts
Shane Melton 9e093f88af [PM-10247] Browser Refresh - Fix save credential banner (#10520)
* [PM-10247] Prioritize initialValues when initiating the CipherForm child forms

* [PM-10247] Fetch the addEditCipherInfo when opening the cipher form in Browser and override any initialValues if present

* [PM-10247] Fix item details section tests

* [PM-10247] Add login details section test

* [PM-10247] Add autofill options tests

* [PM-10247] Undo webpack config change

* [PM-10247] Fix failing tests

* [PM-10247] Add additional tests for addEditCipherInfo
2024-08-26 12:03:47 -07:00

140 lines
4.3 KiB
TypeScript

import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { CipherId, CollectionId, OrganizationId } from "@bitwarden/common/types/guid";
import { CipherType } from "@bitwarden/common/vault/enums";
import { Cipher } from "@bitwarden/common/vault/models/domain/cipher";
import { CollectionView } from "@bitwarden/common/vault/models/view/collection.view";
import { FolderView } from "@bitwarden/common/vault/models/view/folder.view";
/**
* The mode of the add/edit form.
* - `add` - The form is creating a new cipher.
* - `edit` - The form is editing an existing cipher.
* - `partial-edit` - The form is editing an existing cipher, but only the favorite/folder fields
* - `clone` - The form is creating a new cipher that is a clone of an existing cipher.
*/
export type CipherFormMode = "add" | "edit" | "partial-edit" | "clone";
/**
* Optional initial values for the form.
*/
export type OptionalInitialValues = {
folderId?: string;
organizationId?: OrganizationId;
collectionIds?: CollectionId[];
loginUri?: string;
username?: string;
password?: string;
name?: string;
};
/**
* Base configuration object for the cipher form. Includes all common fields.
*/
type BaseCipherFormConfig = {
/**
* The mode of the form.
*/
mode: CipherFormMode;
/**
* The type of cipher to create/edit.
*/
cipherType: CipherType;
/**
* Flag to indicate the form should submit to admin endpoints that have different permission checks. If the
* user is not an admin or performing an action that requires admin permissions, this should be false.
*/
admin: boolean;
/**
* Flag to indicate if the user is allowed to create ciphers in their own Vault. If false, configuration must
* supply a list of organizations that the user can create ciphers in.
*/
allowPersonalOwnership: boolean;
/**
* The original cipher that is being edited or cloned. This can be undefined when creating a new cipher.
*/
originalCipher?: Cipher;
/**
* Optional initial values for the form when opening the cipher form.
* Useful when creating a new cipher in a filtered view or modifying a cipher with values from another source (e.g. the notification bar in Browser)
*/
initialValues?: OptionalInitialValues;
/**
* The list of collections that the user has visibility to. This list should include read-only collections as they
* can still be displayed in the component for reference.
*/
collections: CollectionView[];
/**
* The list of folders for the current user. Should include the "No Folder" option with a `null` id.
*/
folders: FolderView[];
/**
* List of organizations that the user can create ciphers for.
*/
organizations?: Organization[];
};
/**
* Configuration object for the cipher form when editing/cloning an existing cipher.
*/
type ExistingCipherConfig = BaseCipherFormConfig & {
mode: "edit" | "partial-edit" | "clone";
originalCipher: Cipher;
};
/**
* Configuration object for the cipher form when creating a completely new cipher.
*/
type CreateNewCipherConfig = BaseCipherFormConfig & {
mode: "add";
};
type CombinedAddEditConfig = ExistingCipherConfig | CreateNewCipherConfig;
/**
* Configuration object for the cipher form when personal ownership is allowed.
*/
type PersonalOwnershipAllowed = CombinedAddEditConfig & {
allowPersonalOwnership: true;
};
/**
* Configuration object for the cipher form when personal ownership is not allowed.
* Organizations must be provided.
*/
type PersonalOwnershipNotAllowed = CombinedAddEditConfig & {
allowPersonalOwnership: false;
organizations: Organization[];
};
/**
* Configuration object for the cipher form.
* Determines the behavior of the form and the controls that are displayed/enabled.
*/
export type CipherFormConfig = PersonalOwnershipAllowed | PersonalOwnershipNotAllowed;
/**
* Service responsible for building the configuration object for the cipher form.
*/
export abstract class CipherFormConfigService {
/**
* Builds the configuration for the cipher form using the specified mode, cipherId, and cipherType.
* The other configuration fields will be fetched from their respective services.
* @param mode
* @param cipherId
* @param cipherType
*/
abstract buildConfig(
mode: CipherFormMode,
cipherId?: CipherId,
cipherType?: CipherType,
): Promise<CipherFormConfig>;
}