@antischematic/angular-state-library
Version:
Reactive state without boilerplate
27 lines (26 loc) • 1.47 kB
TypeScript
import { Injector, ProviderToken, Type } from "@angular/core";
import { BehaviorSubject, Observable, Observer, Subscription } from "rxjs";
import { TypedChanges } from "./interfaces";
export declare function slice<T extends {}, U extends keyof T>(token: ProviderToken<T>, key: U, injector?: Injector): Observable<T[U]>;
export declare function slice<T extends {}, U extends (keyof T)[]>(token: ProviderToken<T>, key: U, injector?: Injector): Observable<Pick<T, U[number]>>;
export declare function store<T extends {}>(token: ProviderToken<T>, injector?: Injector): Observable<T>;
export declare function inputs<T>(token: ProviderToken<T>, injector?: Injector): Observable<TypedChanges<T>>;
export interface WithStateOptions<T> {
from?: Observable<T>;
}
export interface WithState<T> {
source: Observable<T>;
destination: BehaviorSubject<T>;
}
export interface Selector {
new <T>(name: string, factory: (source: Observable<T>) => WithState<T>): Type<BehaviorSubject<T>>;
new <T>(name: string, factory: (source: Observable<T>) => Observable<T>): Type<BehaviorSubject<T> & {
value: T | undefined;
}>;
}
export declare function withState<T>(initial: T, options?: WithStateOptions<T>): WithState<T>;
export declare const Selector: Selector;
export declare function subscribe<T extends {}>(token: ProviderToken<T> | undefined, directive: any, key: string): any;
export interface OnSelect {
ngOnSelect(observer: Observer<any>): Subscription;
}