@datorama/akita-ng-forms-manager
Version:
The best way to manage your Angular form state in Akita
69 lines (68 loc) • 3.24 kB
TypeScript
import { AbstractControl, AsyncValidatorFn, ValidatorFn } from '@angular/forms';
import { HashMap } from '@datorama/akita';
import { Observable } from 'rxjs';
import { FormsQuery } from './forms-manager.query';
import { FormsStore } from './forms-manager.store';
import { FormsManagerOptions } from './forms-manager-options';
export declare type AkitaAbstractControl = Pick<AbstractControl, 'value' | 'valid' | 'invalid' | 'disabled' | 'errors' | 'touched' | 'pristine' | 'pending' | 'dirty'> & {
rawValue: any;
};
export interface AkitaAbstractGroup<C = any> extends AkitaAbstractControl {
controls: {
readonly [P in keyof C]: AkitaAbstractControl;
};
}
export declare type ArrayControlFactory = (value: any) => AbstractControl;
export declare class AkitaNgFormsManager<FormsState = any> {
private readonly _options;
private readonly _store;
private readonly _query;
private valueChanges;
private ngForms;
constructor(options?: Partial<FormsManagerOptions>);
readonly query: FormsQuery<FormsState>;
readonly store: FormsStore<FormsState>;
selectValid(formName: keyof FormsState, path?: string): Observable<boolean>;
selectDirty(formName: keyof FormsState, path?: string): Observable<boolean>;
selectDisabled(formName: keyof FormsState, path?: string): Observable<boolean>;
selectValue<T = any>(formName: keyof FormsState, path?: string): Observable<T>;
selectErrors(formName: keyof FormsState, path?: string): Observable<any>;
selectNgForm(formName: keyof FormsState): Observable<AbstractControl>;
/**
* If no path specified it means that it's a single FormControl or FormArray
*/
selectControl(formName: keyof FormsState, path?: string): Observable<AkitaAbstractControl>;
getControl(formName: keyof FormsState, path?: string): AkitaAbstractControl;
selectForm(formName: keyof FormsState, options?: {
filterNil: true;
}): Observable<AkitaAbstractGroup>;
getForm<Name extends keyof FormsState>(formName: keyof FormsState): AkitaAbstractGroup<FormsState[Name]>;
getNgForm(formName: keyof FormsState): AbstractControl;
hasForm(formName: keyof FormsState): boolean;
upsert(formName: keyof FormsState, form: AbstractControl, config?: {
debounceTime?: number;
emitEvent?: boolean;
arrControlFactory?: ArrayControlFactory | HashMap<ArrayControlFactory>;
persistForm?: boolean;
}): this;
remove(formName?: keyof FormsState): void;
unsubscribe(formName?: keyof FormsState, config?: {
removeNgForm?: boolean;
updateStore?: boolean;
}): void;
private removeFromStore;
private resolveControl;
private find;
private resolveStoreToForm;
private handleFormArray;
private cleanArray;
private buildFormStoreState;
private updateStore;
private resolveFormToStore;
private cloneValue;
private isObject;
private storeFormInstance;
private removeFormInstance;
}
export declare function setValidators(control: AbstractControl, validator: ValidatorFn | ValidatorFn[] | null): void;
export declare function setAsyncValidators(control: AbstractControl, validator: AsyncValidatorFn | AsyncValidatorFn[] | null): void;