mirror of
https://github.com/bitwarden/browser
synced 2025-12-12 14:23:32 +00:00
* Allow for update logic in state update callbacks * Prefer reading updates to sending in stream * Inform state providers when they must deserialize * Update DefaultGlobalState to act more like DefaultUserState * Fully Implement AbstractStorageService * Add KeyDefinitionOptions * Address PR feedback * More Descriptive Error --------- Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
27 lines
724 B
TypeScript
27 lines
724 B
TypeScript
import { Observable } from "rxjs";
|
|
|
|
export const DEFAULT_OPTIONS = {
|
|
shouldUpdate: () => true,
|
|
combineLatestWith: null as Observable<unknown>,
|
|
msTimeout: 1000,
|
|
};
|
|
|
|
type DefinitelyTypedDefault<T, TCombine> = Omit<
|
|
typeof DEFAULT_OPTIONS,
|
|
"shouldUpdate" | "combineLatestWith"
|
|
> & {
|
|
shouldUpdate: (state: T, dependency: TCombine) => boolean;
|
|
combineLatestWith?: Observable<TCombine>;
|
|
};
|
|
|
|
export type StateUpdateOptions<T, TCombine> = Partial<DefinitelyTypedDefault<T, TCombine>>;
|
|
|
|
export function populateOptionsWithDefault<T, TCombine>(
|
|
options: StateUpdateOptions<T, TCombine>
|
|
): StateUpdateOptions<T, TCombine> {
|
|
return {
|
|
...(DEFAULT_OPTIONS as StateUpdateOptions<T, TCombine>),
|
|
...options,
|
|
};
|
|
}
|