@zarlex/ngx-accessor
Version:
This library provides an adapter to interact with Angular forms. It also provides an adapter to work with object signals and forms
46 lines (45 loc) • 2.41 kB
TypeScript
import { Signal, WritableSignal } from '@angular/core';
import { Subscription } from 'rxjs';
import { Accessor } from '../accessor/interface';
import { ArrayAccessors, IsValidAccessorKey } from '../type-utils/accessor.types';
import { GetPropertyType, SimplePath } from '../type-utils/get.types';
import { IValidator, ValidationUpdate } from '../validation/interface';
import { Validation } from '../validation/validation';
export interface AccessorCreateOptions {
isEqual: (val1: unknown, val2: unknown) => boolean;
validators: {
[key: string]: Array<IValidator>;
};
onValidationChange: (update: ValidationUpdate) => void;
}
export interface IAccessorOptions<TProperties extends object> {
validators: {
[key in SimplePath<TProperties>]?: Array<IValidator>;
};
}
export interface AccessorPropertyConfig {
validators?: Array<IValidator>;
isEqual?: (val1: unknown, val2: unknown) => boolean;
}
export type AccessorConfig<TProperties extends object> = {
[property in SimplePath<TProperties>]?: AccessorPropertyConfig;
};
export declare abstract class AbstractAccessor<TProperties extends object> {
config: AccessorConfig<TProperties>;
readonly validation: Validation<TProperties>;
readonly isDirty: Signal<boolean>;
protected dirtyKeys: Map<string, boolean>;
protected writableIsDirty: WritableSignal<boolean>;
protected accessorMap: Map<string, Accessor<any, any>>;
protected accessorSubscriptionsMap: Map<string, Subscription>;
constructor(config?: AccessorConfig<TProperties>);
access<TKey extends string | undefined = undefined>(key?: IsValidAccessorKey<TKey, TProperties>): [TKey] extends [undefined] ? Accessor<TProperties, TProperties> : Accessor<TProperties, GetPropertyType<TProperties, TKey>>;
getAccessors(): ArrayAccessors<any>;
removeAccess<TKey extends string>(key: IsValidAccessorKey<TKey, TProperties>): void;
destroy(): void;
setPristine(): void;
protected accessRoot(): Accessor<TProperties, TProperties>;
protected accessProperty<TKey extends string>(key: IsValidAccessorKey<TKey, TProperties>): Accessor<TProperties, GetPropertyType<TProperties, TKey>>;
protected abstract createAccessor<TKey extends keyof TProperties>(key: TKey, options: AccessorCreateOptions): Accessor<any, any>;
protected abstract createRootAccessor(options: AccessorCreateOptions): Accessor<any, any>;
}