mirror of
https://github.com/bitwarden/browser
synced 2025-12-19 09:43:23 +00:00
#7290 introduced these types, but during development we switched over to specifying dependencies in type parameters instead of an object. This change meant we no longer needed these `Type` or `ShapeToInstance` types, greatly simplifying the types related to derived state.
32 lines
1.5 KiB
TypeScript
32 lines
1.5 KiB
TypeScript
import { Observable } from "rxjs";
|
|
|
|
import { UserId } from "../../types/guid";
|
|
import { DerivedStateDependencies } from "../../types/state";
|
|
|
|
import { DeriveDefinition } from "./derive-definition";
|
|
import { DerivedState } from "./derived-state";
|
|
import { GlobalState } from "./global-state";
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in docs
|
|
import { GlobalStateProvider } from "./global-state.provider";
|
|
import { KeyDefinition } from "./key-definition";
|
|
import { ActiveUserState, SingleUserState } from "./user-state";
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in docs
|
|
import { ActiveUserStateProvider, SingleUserStateProvider } from "./user-state.provider";
|
|
|
|
/** Convenience wrapper class for {@link ActiveUserStateProvider}, {@link SingleUserStateProvider},
|
|
* and {@link GlobalStateProvider}.
|
|
*/
|
|
export abstract class StateProvider {
|
|
/** @see{@link ActiveUserStateProvider.get} */
|
|
getActive: <T>(keyDefinition: KeyDefinition<T>) => ActiveUserState<T>;
|
|
/** @see{@link SingleUserStateProvider.get} */
|
|
getUser: <T>(userId: UserId, keyDefinition: KeyDefinition<T>) => SingleUserState<T>;
|
|
/** @see{@link GlobalStateProvider.get} */
|
|
getGlobal: <T>(keyDefinition: KeyDefinition<T>) => GlobalState<T>;
|
|
getDerived: <TFrom, TTo, TDeps extends DerivedStateDependencies>(
|
|
parentState$: Observable<TFrom>,
|
|
deriveDefinition: DeriveDefinition<unknown, TTo, TDeps>,
|
|
dependencies: TDeps,
|
|
) => DerivedState<TTo>;
|
|
}
|