mirror of
https://github.com/bitwarden/browser
synced 2025-12-19 01:33:33 +00:00
* refactor: introduce @bitwarden/serialization * refactor: introduce @bitwarden/guid * refactor: introduce @bitwaren/client-type * refactor: introduce @bitwarden/core-test-utils * refactor: introduce @bitwarden/state and @bitwarden/state-test-utils Creates initial project structure for centralized application state management. Part of modularization effort to extract state code from common. * Added state provider documentation to README. * Changed callouts to Github format. * Fixed linting on file name. * Forced git to accept rename --------- Co-authored-by: Todd Martin <tmartin@bitwarden.com>
38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import { Observable, concatMap } from "rxjs";
|
|
|
|
import { DerivedStateDependencies } from "../../types/state";
|
|
import { DeriveDefinition } from "../derive-definition";
|
|
import { DerivedState } from "../derived-state";
|
|
import { DerivedStateProvider } from "../derived-state.provider";
|
|
|
|
export class InlineDerivedStateProvider implements DerivedStateProvider {
|
|
get<TFrom, TTo, TDeps extends DerivedStateDependencies>(
|
|
parentState$: Observable<TFrom>,
|
|
deriveDefinition: DeriveDefinition<TFrom, TTo, TDeps>,
|
|
dependencies: TDeps,
|
|
): DerivedState<TTo> {
|
|
return new InlineDerivedState(parentState$, deriveDefinition, dependencies);
|
|
}
|
|
}
|
|
|
|
export class InlineDerivedState<TFrom, TTo, TDeps extends DerivedStateDependencies>
|
|
implements DerivedState<TTo>
|
|
{
|
|
constructor(
|
|
parentState$: Observable<TFrom>,
|
|
deriveDefinition: DeriveDefinition<TFrom, TTo, TDeps>,
|
|
dependencies: TDeps,
|
|
) {
|
|
this.state$ = parentState$.pipe(
|
|
concatMap(async (value) => await deriveDefinition.derive(value, dependencies)),
|
|
);
|
|
}
|
|
|
|
state$: Observable<TTo>;
|
|
|
|
forceValue(value: TTo): Promise<TTo> {
|
|
// No need to force anything, we don't keep a cache
|
|
return Promise.resolve(value);
|
|
}
|
|
}
|