2025-08-04 11:01:28 -04:00
|
|
|
import { Observable, concatMap } from "rxjs";
|
|
|
|
|
|
2025-08-25 12:38:28 -04:00
|
|
|
import {
|
|
|
|
|
DeriveDefinition,
|
|
|
|
|
DerivedState,
|
|
|
|
|
DerivedStateDependencies,
|
|
|
|
|
DerivedStateProvider,
|
|
|
|
|
} from "@bitwarden/state";
|
2025-08-04 11:01:28 -04:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-10 10:57:36 -06:00
|
|
|
export class InlineDerivedState<
|
|
|
|
|
TFrom,
|
|
|
|
|
TTo,
|
|
|
|
|
TDeps extends DerivedStateDependencies,
|
|
|
|
|
> implements DerivedState<TTo> {
|
2025-08-04 11:01:28 -04:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|