mirror of
https://github.com/bitwarden/browser
synced 2025-12-29 06:33:40 +00:00
* [PM-8524] Update appA11yTitle to keep attributes in sync after first render * [PM-8524] Introduce UriOptionComponent * [PM-9190] Introduce AutofillOptionsComponent * [PM-9190] Add AutofillOptions to LoginDetailsSection * [PM-9190] Add autofill options component unit tests * [PM-9190] Add UriOptionComponent unit tests * [PM-9190] Add missing translations * [PM-9190] Add autofill on page load field * [PM-9190] Ensure updatedCipherView is completely separate from originalCipherView * [CL-348] Do not override items if there are no OptionComponents available * [PM-9190] Mock AutoFillOptions component in Login Details tests * [PM-9190] Cleanup storybook and missing web translations * [PM-9190] Ensure storybook decryptCipher returns a separate object
57 lines
2.8 KiB
TypeScript
57 lines
2.8 KiB
TypeScript
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
|
|
import { CipherFormConfig } from "@bitwarden/vault";
|
|
|
|
import { AdditionalOptionsSectionComponent } from "./components/additional-options/additional-options-section.component";
|
|
import { AutofillOptionsComponent } from "./components/autofill-options/autofill-options.component";
|
|
import { CardDetailsSectionComponent } from "./components/card-details-section/card-details-section.component";
|
|
import { CustomFieldsComponent } from "./components/custom-fields/custom-fields.component";
|
|
import { IdentitySectionComponent } from "./components/identity/identity.component";
|
|
import { ItemDetailsSectionComponent } from "./components/item-details/item-details-section.component";
|
|
import { LoginDetailsSectionComponent } from "./components/login-details-section/login-details-section.component";
|
|
|
|
/**
|
|
* The complete form for a cipher. Includes all the sub-forms from their respective section components.
|
|
* TODO: Add additional form sections as they are implemented.
|
|
*/
|
|
export type CipherForm = {
|
|
itemDetails?: ItemDetailsSectionComponent["itemDetailsForm"];
|
|
additionalOptions?: AdditionalOptionsSectionComponent["additionalOptionsForm"];
|
|
loginDetails?: LoginDetailsSectionComponent["loginDetailsForm"];
|
|
autoFillOptions?: AutofillOptionsComponent["autofillOptionsForm"];
|
|
cardDetails?: CardDetailsSectionComponent["cardDetailsForm"];
|
|
identityDetails?: IdentitySectionComponent["identityForm"];
|
|
customFields?: CustomFieldsComponent["customFieldsForm"];
|
|
};
|
|
|
|
/**
|
|
* A container for the {@link CipherForm} that allows for registration of child form groups and patching of the cipher
|
|
* to be updated/created. Child form components inject this container in order to register themselves with the parent form
|
|
* and access configuration options.
|
|
*
|
|
* This is an alternative to passing the form groups down through the component tree via @Inputs() and form updates via
|
|
* @Outputs(). It allows child forms to define their own structure and validation rules, while still being able to
|
|
* update the parent cipher.
|
|
*/
|
|
export abstract class CipherFormContainer {
|
|
/**
|
|
* The configuration for the cipher form.
|
|
*/
|
|
readonly config: CipherFormConfig;
|
|
|
|
/**
|
|
* The original cipher that is being edited/cloned. Used to pre-populate the form and compare changes.
|
|
*/
|
|
readonly originalCipherView: CipherView | null;
|
|
|
|
abstract registerChildForm<K extends keyof CipherForm>(
|
|
name: K,
|
|
group: Exclude<CipherForm[K], undefined>,
|
|
): void;
|
|
|
|
/**
|
|
* Method to update the cipherView with the new values. This method should be called by the child form components
|
|
* @param updateFn - A function that takes the current cipherView and returns the updated cipherView
|
|
*/
|
|
abstract patchCipher(updateFn: (current: CipherView) => CipherView): void;
|
|
}
|