Skip to content

Commit

Permalink
refactor: added setParamValue() to DbxRouteParamReader
Browse files Browse the repository at this point in the history
  • Loading branch information
dereekb committed Nov 14, 2022
1 parent b1e3da9 commit 02b92c8
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ export abstract class DbxRouterService {
/**
* Navigates to the current url with updated parameters. Will be merged with the existing parameters.
*
* The new state will replace the current state in the history.
*
* @param segueRef
*/
abstract updateParams(params: ObservableOrValue<SegueRefRawSegueParams>): Promise<boolean>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { SubscriptionObject, switchMapToDefault, SwitchMapToDefaultFilterFunctio
const DEFAULT_REDIRECT_INSTANCE_FORWARD_FACTORY = defaultForwardFunctionFactory<SwitchMapToDefaultFilterFunction<unknown>>((value) => of(value == null));

/**
* Utility class used in conjuction with a DbxRouteParamReaderInstance to redirect when the default param does not equal the
* Utility class used in conjuction with a DbxRouteParamReaderInstance to redirect when the default param is not valid.
*/
export class DbxRouteParamDefaultRedirectInstance<T> implements Initialized, Destroyable {
private _enabled = new BehaviorSubject<boolean>(true);
Expand Down
24 changes: 22 additions & 2 deletions packages/dbx-core/src/lib/router/router/util/route.reader.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { ObservableOrValueGetter, MaybeObservableOrValueGetter, switchMapToDefault, maybeValueFromObservableOrValueGetter } from '@dereekb/rxjs';
import { ObservableOrValueGetter, MaybeObservableOrValueGetter, switchMapToDefault, maybeValueFromObservableOrValueGetter, valueFromObservableOrValueGetter, asObservableFromGetter } from '@dereekb/rxjs';
import { Destroyable, Maybe } from '@dereekb/util';
import { BehaviorSubject, combineLatest, distinctUntilChanged, map, Observable, shareReplay } from 'rxjs';
import { BehaviorSubject, combineLatest, distinctUntilChanged, first, map, Observable, shareReplay } from 'rxjs';
import { DbxRouterService } from '../service/router.service';

/**
Expand Down Expand Up @@ -32,6 +32,12 @@ export interface DbxRouteParamReader<T> {
* @param defaultValue
*/
setDefaultValue(defaultValue: MaybeObservableOrValueGetter<T>): void;
/**
* Updates the value on the current route for the paramKey.
*
* @param value
*/
setParamValue(value: MaybeObservableOrValueGetter<T>): void;
}

/**
Expand Down Expand Up @@ -60,6 +66,7 @@ export class DbxRouteParamReaderInstance<T> implements DbxRouteParamReader<T>, D

destroy(): void {
this._paramKey.complete();
this._defaultValue.complete();
}

get paramKey(): string {
Expand All @@ -73,4 +80,17 @@ export class DbxRouteParamReaderInstance<T> implements DbxRouteParamReader<T>, D
setDefaultValue(defaultValue: MaybeObservableOrValueGetter<T>): void {
this._defaultValue.next(defaultValue ?? this.defaultValue);
}

/**
* Convenience function to set the param value on the router.
*
* @param value
*/
setParamValue(value: MaybeObservableOrValueGetter<T>): void {
combineLatest([this.paramKey$, asObservableFromGetter(value)])
.pipe(first())
.subscribe(([paramKey, value]) => {
this.dbxRouterService.updateParams({ [paramKey]: value });
});
}
}
4 changes: 4 additions & 0 deletions packages/dbx-firebase/src/lib/router/id.param.redirect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ export class DbxFirebaseIdRouteParamRedirectInstance implements DbxFirebaseIdRou
setDecider(decider: string | SwitchMapToDefaultFilterFunction<ModelKey>): void {
this._useDefaultParamDecider.next(decider);
}

setParamValue(value: MaybeObservableOrValueGetter<string>): void {
this._paramReader.setParamValue(value);
}
}

export function dbxFirebaseIdRouteParamRedirect(dbxRouterService: DbxRouterService): DbxFirebaseIdRouteParamRedirectInstance {
Expand Down

0 comments on commit 02b92c8

Please sign in to comment.