@dereekb/dbx-core 9.20.1 → 9.20.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/router/anchor/clickable.mjs +12 -1
- package/esm2020/lib/router/auth/hook/id.hook.mjs +54 -0
- package/esm2020/lib/router/auth/hook/index.mjs +2 -1
- package/esm2020/lib/router/auth/hook/uid.hook.mjs +12 -48
- package/fesm2015/dereekb-dbx-core.mjs +51 -24
- package/fesm2015/dereekb-dbx-core.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-core.mjs +51 -24
- package/fesm2020/dereekb-dbx-core.mjs.map +1 -1
- package/lib/router/anchor/clickable.d.ts +3 -1
- package/lib/router/auth/hook/id.hook.d.ts +44 -0
- package/lib/router/auth/hook/index.d.ts +1 -0
- package/lib/router/auth/hook/uid.hook.d.ts +0 -2
- package/package.json +4 -4
|
@@ -1,7 +1,18 @@
|
|
|
1
|
+
import { mailToUrlString, telUrlString } from '@dereekb/util';
|
|
1
2
|
export function clickableUrlInNewTab(url) {
|
|
2
3
|
return {
|
|
3
4
|
url,
|
|
4
5
|
target: '_blank'
|
|
5
6
|
};
|
|
6
7
|
}
|
|
7
|
-
|
|
8
|
+
export function clickableUrlMailTo(mailTo) {
|
|
9
|
+
return {
|
|
10
|
+
url: mailToUrlString(mailTo)
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function clickableUrlTel(tel) {
|
|
14
|
+
return {
|
|
15
|
+
url: telUrlString(tel)
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2thYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWNvcmUvc3JjL2xpYi9yb3V0ZXIvYW5jaG9yL2NsaWNrYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLGVBQWUsRUFBc0IsWUFBWSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBb0I5RyxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBd0I7SUFDM0QsT0FBTztRQUNMLEdBQUc7UUFDSCxNQUFNLEVBQUUsUUFBUTtLQUNqQixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFzQjtJQUN2RCxPQUFPO1FBQ0wsR0FBRyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUM7S0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQWdCO0lBQzlDLE9BQU87UUFDTCxHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztLQUN2QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1haWxUb1VybElucHV0LCBtYWlsVG9VcmxTdHJpbmcsIE1heWJlLCBQaG9uZU51bWJlciwgdGVsVXJsU3RyaW5nLCBXZWJzaXRlVXJsIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpY2thYmxlRnVuY3Rpb24ge1xuICBvbkNsaWNrPzogKGV2ZW50PzogTWF5YmU8TW91c2VFdmVudD4pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNsaWNrYWJsZSBocmVmL3VybCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaWNrYWJsZVVybCB7XG4gIC8qKlxuICAgKiBocmVmIHVybFxuICAgKi9cbiAgdXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogaHJlZiB0YXJnZXQgYXR0cmlidXRlLlxuICAgKi9cbiAgdGFyZ2V0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpY2thYmxlVXJsSW5OZXdUYWIodXJsOiBzdHJpbmcgfCBXZWJzaXRlVXJsKTogQ2xpY2thYmxlVXJsIHtcbiAgcmV0dXJuIHtcbiAgICB1cmwsXG4gICAgdGFyZ2V0OiAnX2JsYW5rJ1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpY2thYmxlVXJsTWFpbFRvKG1haWxUbzogTWFpbFRvVXJsSW5wdXQpOiBDbGlja2FibGVVcmwge1xuICByZXR1cm4ge1xuICAgIHVybDogbWFpbFRvVXJsU3RyaW5nKG1haWxUbylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaWNrYWJsZVVybFRlbCh0ZWw6IFBob25lTnVtYmVyKTogQ2xpY2thYmxlVXJsIHtcbiAgcmV0dXJuIHtcbiAgICB1cmw6IHRlbFVybFN0cmluZyh0ZWwpXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DbxAuthService } from '../../../auth/service/auth.service';
|
|
2
|
+
import { map, first, switchMap, firstValueFrom, of } from 'rxjs';
|
|
3
|
+
export const DEFAULT_REDIRECT_FOR_IDENTIFIER_PARAM_VALUE = '0';
|
|
4
|
+
export const DEFAULT_REDIRECT_FOR_IDENTIFIER_PARAM_KEY = 'id';
|
|
5
|
+
/**
|
|
6
|
+
* This hook asserts the user is allowed to view a route with an identifier as a state parameter.
|
|
7
|
+
*/
|
|
8
|
+
export function redirectForIdentifierParamHook(input) {
|
|
9
|
+
const { defaultAllowedValue, idParam = DEFAULT_REDIRECT_FOR_IDENTIFIER_PARAM_KEY, defaultParamValue = DEFAULT_REDIRECT_FOR_IDENTIFIER_PARAM_VALUE, priority = 100, transitionService, canViewModelWithId: canViewUser } = input;
|
|
10
|
+
const criteria = typeof input.criteria === 'string' ? { entering: input.criteria } : input.criteria;
|
|
11
|
+
// https://ui-router.github.io/ng2/docs/latest/modules/transition.html#hookresult
|
|
12
|
+
const assertAllowedId = (transition) => {
|
|
13
|
+
const $state = transition.router.stateService;
|
|
14
|
+
const injector = transition.injector();
|
|
15
|
+
const authService = injector.get(DbxAuthService);
|
|
16
|
+
const params = transition.params();
|
|
17
|
+
const transitionTargetId = params[idParam];
|
|
18
|
+
const defaultAllowedValueObs$ = defaultAllowedValue(authService, injector, transition);
|
|
19
|
+
return firstValueFrom(defaultAllowedValueObs$.pipe(first(), switchMap((defaultAllowedIdValue) => {
|
|
20
|
+
let result = of(true);
|
|
21
|
+
let redirectToId;
|
|
22
|
+
if (!transitionTargetId || transitionTargetId === defaultParamValue) {
|
|
23
|
+
// If the param isn't set, default to the default value
|
|
24
|
+
redirectToId = of(defaultAllowedIdValue);
|
|
25
|
+
}
|
|
26
|
+
else if (defaultAllowedIdValue !== transitionTargetId) {
|
|
27
|
+
redirectToId = canViewUser(transitionTargetId, authService, injector).pipe(map((x) => {
|
|
28
|
+
if (x == null || typeof x === 'boolean') {
|
|
29
|
+
return x ? transitionTargetId : defaultAllowedIdValue;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return x;
|
|
33
|
+
}
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
if (redirectToId != null) {
|
|
37
|
+
result = redirectToId.pipe(first(), map((targetId) => {
|
|
38
|
+
if (targetId !== transitionTargetId) {
|
|
39
|
+
const target = transition.targetState();
|
|
40
|
+
const state = target.state();
|
|
41
|
+
return $state.target(state, { ...params, [idParam]: targetId }, { location: true });
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
})));
|
|
50
|
+
};
|
|
51
|
+
// Register the "requires auth" hook with the TransitionsService
|
|
52
|
+
transitionService.onBefore(criteria, assertAllowedId, { priority });
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQuaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1jb3JlL3NyYy9saWIvcm91dGVyL2F1dGgvaG9vay9pZC5ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUdwRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc3RSxNQUFNLENBQUMsTUFBTSwyQ0FBMkMsR0FBRyxHQUFHLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0seUNBQXlDLEdBQUcsSUFBSSxDQUFDO0FBb0M5RDs7R0FFRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxLQUEwQztJQUN2RixNQUFNLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxHQUFHLHlDQUF5QyxFQUFFLGlCQUFpQixHQUFHLDJDQUEyQyxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ2hPLE1BQU0sUUFBUSxHQUFzQixPQUFPLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFFdkgsaUZBQWlGO0lBQ2pGLE1BQU0sZUFBZSxHQUFxQixDQUFDLFVBQXNCLEVBQWMsRUFBRTtRQUMvRSxNQUFNLE1BQU0sR0FBaUIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDNUQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFtQixRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVuQyxNQUFNLGtCQUFrQixHQUFrQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsTUFBTSx1QkFBdUIsR0FBRyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZGLE9BQU8sY0FBYyxDQUNuQix1QkFBdUIsQ0FBQyxJQUFJLENBQzFCLEtBQUssRUFBRSxFQUNQLFNBQVMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLEVBQUU7WUFDbEMsSUFBSSxNQUFNLEdBQTJCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU5QyxJQUFJLFlBQWdELENBQUM7WUFFckQsSUFBSSxDQUFDLGtCQUFrQixJQUFJLGtCQUFrQixLQUFLLGlCQUFpQixFQUFFO2dCQUNuRSx1REFBdUQ7Z0JBQ3ZELFlBQVksR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQzthQUMxQztpQkFBTSxJQUFJLHFCQUFxQixLQUFLLGtCQUFrQixFQUFFO2dCQUN2RCxZQUFZLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ3hFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNSLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTLEVBQUU7d0JBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7cUJBQ3ZEO3lCQUFNO3dCQUNMLE9BQU8sQ0FBQyxDQUFDO3FCQUNWO2dCQUNILENBQUMsQ0FBQyxDQUNILENBQUM7YUFDSDtZQUVELElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtnQkFDeEIsTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQ3hCLEtBQUssRUFBRSxFQUNQLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNmLElBQUksUUFBUSxLQUFLLGtCQUFrQixFQUFFO3dCQUNuQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ3hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDN0IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztxQkFDckY7eUJBQU07d0JBQ0wsT0FBTyxJQUFJLENBQUM7cUJBQ2I7Z0JBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQzthQUNIO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FDWSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUVGLGdFQUFnRTtJQUNoRSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERieEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXV0aC9zZXJ2aWNlL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uU2VydmljZSwgVHJhbnNpdGlvbkhvb2tGbiwgVHJhbnNpdGlvbiwgSG9va1Jlc3VsdCwgU3RhdGVTZXJ2aWNlLCBIb29rTWF0Y2hDcml0ZXJpYSB9IGZyb20gJ0B1aXJvdXRlci9jb3JlJztcbmltcG9ydCB7IE1heWJlLCBNb2RlbEtleSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgbWFwLCBmaXJzdCwgc3dpdGNoTWFwLCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFRElSRUNUX0ZPUl9JREVOVElGSUVSX1BBUkFNX1ZBTFVFID0gJzAnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVESVJFQ1RfRk9SX0lERU5USUZJRVJfUEFSQU1fS0VZID0gJ2lkJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWRpcmVjdEZvcklkZW50aWZpZXJQYXJhbUhvb2tJbnB1dCB7XG4gIC8qKlxuICAgKiBGYWN0b3J5IHRoYXQgcmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgc2VuZHMgdGhlIGRlZmF1bHQgYWxsb3dlZCBpZGVudGlmaWVyIHRvIHVzZSB3aGVuIGFjY2Vzc2luZyB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QWxsb3dlZFZhbHVlOiAoYXV0aFNlcnZpY2U6IERieEF1dGhTZXJ2aWNlLCBpbmplY3RvcjogSW5qZWN0b3IsIHRyYW5zaXRpb246IFRyYW5zaXRpb24pID0+IE9ic2VydmFibGU8TW9kZWxLZXk+O1xuICAvKipcbiAgICogUm91dGUgcGFyYW1ldGVyIHRvIHVzZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gXCJ1aWRcIlxuICAgKi9cbiAgcmVhZG9ubHkgaWRQYXJhbT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHBhcmFtIHZhbHVlIHRvIGNoZWNrIGFnYWluc3QuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIDAuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0UGFyYW1WYWx1ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIENyaXRlcmlhIG9yIHJvdXRlIHRvIHdhdGNoIGFuZCBpbnRlcmNlcHQuXG4gICAqL1xuICByZWFkb25seSBjcml0ZXJpYTogSG9va01hdGNoQ3JpdGVyaWEgfCBzdHJpbmc7XG4gIHJlYWRvbmx5IHRyYW5zaXRpb25TZXJ2aWNlOiBUcmFuc2l0aW9uU2VydmljZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IHVzZXIgY2FuIHZpZXcgdGhlIHRhcmdldCBpZC5cbiAgICpcbiAgICogQ2FuIHJldHVybiBhbm90aGVyIGlkZW50aWZpZXIsIG9yIHRydWUgdG8gYWxsb3cgYWNjZXNzLCBvciBmYWxzZS9udWxsL3VuZGVmaW5lZCB0byBkZW55IGFjY2Vzcy5cbiAgICovXG4gIHJlYWRvbmx5IGNhblZpZXdNb2RlbFdpdGhJZDogKHRhcmdldElkOiBNb2RlbEtleSwgYXV0aFNlcnZpY2U6IERieEF1dGhTZXJ2aWNlLCBpbmplY3RvcjogSW5qZWN0b3IpID0+IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbiB8IE1vZGVsS2V5Pj47XG4gIC8qKlxuICAgKiBIb29rIHByaW9yaXR5XG4gICAqL1xuICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGlzIGhvb2sgYXNzZXJ0cyB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIHZpZXcgYSByb3V0ZSB3aXRoIGFuIGlkZW50aWZpZXIgYXMgYSBzdGF0ZSBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWRpcmVjdEZvcklkZW50aWZpZXJQYXJhbUhvb2soaW5wdXQ6IFJlZGlyZWN0Rm9ySWRlbnRpZmllclBhcmFtSG9va0lucHV0KTogdm9pZCB7XG4gIGNvbnN0IHsgZGVmYXVsdEFsbG93ZWRWYWx1ZSwgaWRQYXJhbSA9IERFRkFVTFRfUkVESVJFQ1RfRk9SX0lERU5USUZJRVJfUEFSQU1fS0VZLCBkZWZhdWx0UGFyYW1WYWx1ZSA9IERFRkFVTFRfUkVESVJFQ1RfRk9SX0lERU5USUZJRVJfUEFSQU1fVkFMVUUsIHByaW9yaXR5ID0gMTAwLCB0cmFuc2l0aW9uU2VydmljZSwgY2FuVmlld01vZGVsV2l0aElkOiBjYW5WaWV3VXNlciB9ID0gaW5wdXQ7XG4gIGNvbnN0IGNyaXRlcmlhOiBIb29rTWF0Y2hDcml0ZXJpYSA9IHR5cGVvZiBpbnB1dC5jcml0ZXJpYSA9PT0gJ3N0cmluZycgPyB7IGVudGVyaW5nOiBpbnB1dC5jcml0ZXJpYSB9IDogaW5wdXQuY3JpdGVyaWE7XG5cbiAgLy8gaHR0cHM6Ly91aS1yb3V0ZXIuZ2l0aHViLmlvL25nMi9kb2NzL2xhdGVzdC9tb2R1bGVzL3RyYW5zaXRpb24uaHRtbCNob29rcmVzdWx0XG4gIGNvbnN0IGFzc2VydEFsbG93ZWRJZDogVHJhbnNpdGlvbkhvb2tGbiA9ICh0cmFuc2l0aW9uOiBUcmFuc2l0aW9uKTogSG9va1Jlc3VsdCA9PiB7XG4gICAgY29uc3QgJHN0YXRlOiBTdGF0ZVNlcnZpY2UgPSB0cmFuc2l0aW9uLnJvdXRlci5zdGF0ZVNlcnZpY2U7XG4gICAgY29uc3QgaW5qZWN0b3IgPSB0cmFuc2l0aW9uLmluamVjdG9yKCk7XG4gICAgY29uc3QgYXV0aFNlcnZpY2U6IERieEF1dGhTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KERieEF1dGhTZXJ2aWNlKTtcbiAgICBjb25zdCBwYXJhbXMgPSB0cmFuc2l0aW9uLnBhcmFtcygpO1xuXG4gICAgY29uc3QgdHJhbnNpdGlvblRhcmdldElkOiBNYXliZTxzdHJpbmc+ID0gcGFyYW1zW2lkUGFyYW1dO1xuICAgIGNvbnN0IGRlZmF1bHRBbGxvd2VkVmFsdWVPYnMkID0gZGVmYXVsdEFsbG93ZWRWYWx1ZShhdXRoU2VydmljZSwgaW5qZWN0b3IsIHRyYW5zaXRpb24pO1xuXG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKFxuICAgICAgZGVmYXVsdEFsbG93ZWRWYWx1ZU9icyQucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgc3dpdGNoTWFwKChkZWZhdWx0QWxsb3dlZElkVmFsdWUpID0+IHtcbiAgICAgICAgICBsZXQgcmVzdWx0OiBPYnNlcnZhYmxlPEhvb2tSZXN1bHQ+ID0gb2YodHJ1ZSk7XG5cbiAgICAgICAgICBsZXQgcmVkaXJlY3RUb0lkOiBNYXliZTxPYnNlcnZhYmxlPE1heWJlPE1vZGVsS2V5Pj4+O1xuXG4gICAgICAgICAgaWYgKCF0cmFuc2l0aW9uVGFyZ2V0SWQgfHwgdHJhbnNpdGlvblRhcmdldElkID09PSBkZWZhdWx0UGFyYW1WYWx1ZSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmFtIGlzbid0IHNldCwgZGVmYXVsdCB0byB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgICAgcmVkaXJlY3RUb0lkID0gb2YoZGVmYXVsdEFsbG93ZWRJZFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlZmF1bHRBbGxvd2VkSWRWYWx1ZSAhPT0gdHJhbnNpdGlvblRhcmdldElkKSB7XG4gICAgICAgICAgICByZWRpcmVjdFRvSWQgPSBjYW5WaWV3VXNlcih0cmFuc2l0aW9uVGFyZ2V0SWQsIGF1dGhTZXJ2aWNlLCBpbmplY3RvcikucGlwZShcbiAgICAgICAgICAgICAgbWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHggPT0gbnVsbCB8fCB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geCA/IHRyYW5zaXRpb25UYXJnZXRJZCA6IGRlZmF1bHRBbGxvd2VkSWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVkaXJlY3RUb0lkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlZGlyZWN0VG9JZC5waXBlKFxuICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICBtYXAoKHRhcmdldElkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldElkICE9PSB0cmFuc2l0aW9uVGFyZ2V0SWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRyYW5zaXRpb24udGFyZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGFyZ2V0LnN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gJHN0YXRlLnRhcmdldChzdGF0ZSwgeyAuLi5wYXJhbXMsIFtpZFBhcmFtXTogdGFyZ2V0SWQgfSwgeyBsb2NhdGlvbjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICkgYXMgSG9va1Jlc3VsdDtcbiAgfTtcblxuICAvLyBSZWdpc3RlciB0aGUgXCJyZXF1aXJlcyBhdXRoXCIgaG9vayB3aXRoIHRoZSBUcmFuc2l0aW9uc1NlcnZpY2VcbiAgdHJhbnNpdGlvblNlcnZpY2Uub25CZWZvcmUoY3JpdGVyaWEsIGFzc2VydEFsbG93ZWRJZCwgeyBwcmlvcml0eSB9KTtcbn1cbiJdfQ==
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
+
export * from './id.hook';
|
|
1
2
|
export * from './uid.hook';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtY29yZS9zcmMvbGliL3JvdXRlci9hdXRoL2hvb2svaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2lkLmhvb2snO1xuZXhwb3J0ICogZnJvbSAnLi91aWQuaG9vayc7XG4iXX0=
|
|
@@ -1,55 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { map, first, switchMap, firstValueFrom, of } from 'rxjs';
|
|
1
|
+
import { redirectForIdentifierParamHook } from './id.hook';
|
|
3
2
|
export const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE = '0';
|
|
4
3
|
export const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY = 'uid';
|
|
5
4
|
/**
|
|
6
5
|
* This hook asserts the user is allowed to view a route with a user identifier as a parameter.
|
|
7
|
-
*
|
|
8
|
-
* If not, or
|
|
9
6
|
*/
|
|
10
7
|
export function redirectForUserIdentifierParamHook(input) {
|
|
11
|
-
const { uidParam = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY, defaultParamValue = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE, priority = 100, transitionService, canViewUser } = input;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
let result = of(true);
|
|
22
|
-
let redirectToUid;
|
|
23
|
-
if (!transitionTargetUid || transitionTargetUid === defaultParamValue) {
|
|
24
|
-
// If uid isn't set, default to the current user.
|
|
25
|
-
redirectToUid = of(currentUserId);
|
|
26
|
-
}
|
|
27
|
-
else if (currentUserId !== transitionTargetUid) {
|
|
28
|
-
redirectToUid = canViewUser(transitionTargetUid, authService, injector).pipe(map((x) => {
|
|
29
|
-
if (x == null || typeof x === 'boolean') {
|
|
30
|
-
return x ? transitionTargetUid : currentUserId;
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
return x;
|
|
34
|
-
}
|
|
35
|
-
}));
|
|
36
|
-
}
|
|
37
|
-
if (redirectToUid != null) {
|
|
38
|
-
result = redirectToUid.pipe(first(), map((targetUid) => {
|
|
39
|
-
if (targetUid !== transitionTargetUid) {
|
|
40
|
-
const target = transition.targetState();
|
|
41
|
-
const state = target.state();
|
|
42
|
-
return $state.target(state, { ...params, uid: targetUid }, { location: true });
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
}));
|
|
48
|
-
}
|
|
49
|
-
return result;
|
|
50
|
-
})));
|
|
51
|
-
};
|
|
52
|
-
// Register the "requires auth" hook with the TransitionsService
|
|
53
|
-
transitionService.onBefore(criteria, assertAllowedUid, { priority });
|
|
8
|
+
const { uidParam = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY, defaultParamValue = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE, criteria, priority = 100, transitionService, canViewUser } = input;
|
|
9
|
+
return redirectForIdentifierParamHook({
|
|
10
|
+
defaultAllowedValue: (authService) => authService.userIdentifier$,
|
|
11
|
+
idParam: uidParam,
|
|
12
|
+
defaultParamValue,
|
|
13
|
+
criteria,
|
|
14
|
+
transitionService,
|
|
15
|
+
canViewModelWithId: canViewUser,
|
|
16
|
+
priority
|
|
17
|
+
});
|
|
54
18
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlkLmhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtY29yZS9zcmMvbGliL3JvdXRlci9hdXRoL2hvb2svdWlkLmhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLGdEQUFnRCxHQUFHLEdBQUcsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSw4Q0FBOEMsR0FBRyxLQUFLLENBQUM7QUFnQ3BFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGtDQUFrQyxDQUFDLEtBQThDO0lBQy9GLE1BQU0sRUFBRSxRQUFRLEdBQUcsOENBQThDLEVBQUUsaUJBQWlCLEdBQUcsZ0RBQWdELEVBQUUsUUFBUSxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRTVNLE9BQU8sOEJBQThCLENBQUM7UUFDcEMsbUJBQW1CLEVBQUUsQ0FBQyxXQUEyQixFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsZUFBZTtRQUNqRixPQUFPLEVBQUUsUUFBUTtRQUNqQixpQkFBaUI7UUFDakIsUUFBUTtRQUNSLGlCQUFpQjtRQUNqQixrQkFBa0IsRUFBRSxXQUFXO1FBQy9CLFFBQVE7S0FDVCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aFVzZXJJZGVudGlmaWVyIH0gZnJvbSAnLi4vLi4vLi4vYXV0aC9hdXRoLnVzZXInO1xuaW1wb3J0IHsgRGJ4QXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hdXRoL3NlcnZpY2UvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zaXRpb25TZXJ2aWNlLCBIb29rTWF0Y2hDcml0ZXJpYSB9IGZyb20gJ0B1aXJvdXRlci9jb3JlJztcbmltcG9ydCB7IE1heWJlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVkaXJlY3RGb3JJZGVudGlmaWVyUGFyYW1Ib29rIH0gZnJvbSAnLi9pZC5ob29rJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVESVJFQ1RfRk9SX1VTRVJfSURFTlRJRklFUl9QQVJBTV9WQUxVRSA9ICcwJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFRElSRUNUX0ZPUl9VU0VSX0lERU5USUZJRVJfUEFSQU1fS0VZID0gJ3VpZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXJlY3RGb3JVc2VySWRlbnRpZmllclBhcmFtSG9va0lucHV0IHtcbiAgLyoqXG4gICAqIFJvdXRlIHBhcmFtZXRlciB0byB1c2UuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIFwidWlkXCJcbiAgICovXG4gIHJlYWRvbmx5IHVpZFBhcmFtPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgcGFyYW0gdmFsdWUgdG8gY2hlY2sgYWdhaW5zdC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gMC5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRQYXJhbVZhbHVlPzogc3RyaW5nO1xuICAvKipcbiAgICogQ3JpdGVyaWEgb3Igcm91dGUgdG8gd2F0Y2ggYW5kIGludGVyY2VwdC5cbiAgICovXG4gIHJlYWRvbmx5IGNyaXRlcmlhOiBIb29rTWF0Y2hDcml0ZXJpYSB8IHN0cmluZztcbiAgcmVhZG9ubHkgdHJhbnNpdGlvblNlcnZpY2U6IFRyYW5zaXRpb25TZXJ2aWNlO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgdXNlciBjYW4gdmlldyB0aGUgdGFyZ2V0IHVzZXIuXG4gICAqXG4gICAqIENhbiByZXR1cm4gYW5vdGhlciB1c2VycyBpZGVudGlmaWVyLCBvciB0cnVlIHRvIGFsbG93IGFjY2Vzcywgb3IgZmFsc2UvbnVsbC91bmRlZmluZWQgdG8gZGVueSBhY2Nlc3MuXG4gICAqL1xuICByZWFkb25seSBjYW5WaWV3VXNlcjogKHRhcmdldFVpZDogQXV0aFVzZXJJZGVudGlmaWVyLCBhdXRoU2VydmljZTogRGJ4QXV0aFNlcnZpY2UsIGluamVjdG9yOiBJbmplY3RvcikgPT4gT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuIHwgQXV0aFVzZXJJZGVudGlmaWVyPj47XG4gIC8qKlxuICAgKiBIb29rIHByaW9yaXR5XG4gICAqL1xuICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGlzIGhvb2sgYXNzZXJ0cyB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIHZpZXcgYSByb3V0ZSB3aXRoIGEgdXNlciBpZGVudGlmaWVyIGFzIGEgcGFyYW1ldGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkaXJlY3RGb3JVc2VySWRlbnRpZmllclBhcmFtSG9vayhpbnB1dDogUmVkaXJlY3RGb3JVc2VySWRlbnRpZmllclBhcmFtSG9va0lucHV0KTogdm9pZCB7XG4gIGNvbnN0IHsgdWlkUGFyYW0gPSBERUZBVUxUX1JFRElSRUNUX0ZPUl9VU0VSX0lERU5USUZJRVJfUEFSQU1fS0VZLCBkZWZhdWx0UGFyYW1WYWx1ZSA9IERFRkFVTFRfUkVESVJFQ1RfRk9SX1VTRVJfSURFTlRJRklFUl9QQVJBTV9WQUxVRSwgY3JpdGVyaWEsIHByaW9yaXR5ID0gMTAwLCB0cmFuc2l0aW9uU2VydmljZSwgY2FuVmlld1VzZXIgfSA9IGlucHV0O1xuXG4gIHJldHVybiByZWRpcmVjdEZvcklkZW50aWZpZXJQYXJhbUhvb2soe1xuICAgIGRlZmF1bHRBbGxvd2VkVmFsdWU6IChhdXRoU2VydmljZTogRGJ4QXV0aFNlcnZpY2UpID0+IGF1dGhTZXJ2aWNlLnVzZXJJZGVudGlmaWVyJCxcbiAgICBpZFBhcmFtOiB1aWRQYXJhbSxcbiAgICBkZWZhdWx0UGFyYW1WYWx1ZSxcbiAgICBjcml0ZXJpYSxcbiAgICB0cmFuc2l0aW9uU2VydmljZSxcbiAgICBjYW5WaWV3TW9kZWxXaXRoSWQ6IGNhblZpZXdVc2VyLFxuICAgIHByaW9yaXR5XG4gIH0pO1xufVxuIl19
|
|
@@ -5,7 +5,7 @@ import { SubscriptionObject, LockSet, filterMaybe, LoadingStateType, beginLoadin
|
|
|
5
5
|
import * as i1 from 'rxjs';
|
|
6
6
|
import { switchMap, first, BehaviorSubject, combineLatest, distinctUntilChanged, filter, Subject, debounce, interval, throttle, exhaustMap, mergeMap, map, shareReplay, EMPTY, withLatestFrom, of, startWith, delay, tap, catchError, firstValueFrom, takeUntil, Observable } from 'rxjs';
|
|
7
7
|
import * as i1$6 from '@dereekb/util';
|
|
8
|
-
import { isDefinedAndNotFalse, hasValueOrNotEmpty, BooleanStringKeyArrayUtilityInstance, reduceBooleansWithOrFn, getValueFromGetter, toReadableError, isGetter, setIncludes, isAllowed, maybeSet, expandTreeFunction, flattenTreeToArrayFunction, expandFlattenTreeFunction, mergeObjects, KeyValueTypleValueFilter, asArray, defaultForwardFunctionFactory, mergeArrays, filterMaybeValues, mergeArrayOrValueIntoArray, promiseReference, DataIsExpiredError, DataDoesNotExistError, hasNonNullValue, splitJoinRemainder, StorageObjectUtility, SHARED_MEMORY_STORAGE } from '@dereekb/util';
|
|
8
|
+
import { isDefinedAndNotFalse, hasValueOrNotEmpty, BooleanStringKeyArrayUtilityInstance, reduceBooleansWithOrFn, getValueFromGetter, toReadableError, isGetter, setIncludes, isAllowed, maybeSet, expandTreeFunction, flattenTreeToArrayFunction, expandFlattenTreeFunction, mailToUrlString, telUrlString, mergeObjects, KeyValueTypleValueFilter, asArray, defaultForwardFunctionFactory, mergeArrays, filterMaybeValues, mergeArrayOrValueIntoArray, promiseReference, DataIsExpiredError, DataDoesNotExistError, hasNonNullValue, splitJoinRemainder, StorageObjectUtility, SHARED_MEMORY_STORAGE } from '@dereekb/util';
|
|
9
9
|
import { ComponentStore } from '@ngrx/component-store';
|
|
10
10
|
import { CommonModule, formatDate } from '@angular/common';
|
|
11
11
|
import * as i1$3 from '@ngrx/effects';
|
|
@@ -2389,47 +2389,56 @@ function clickableUrlInNewTab(url) {
|
|
|
2389
2389
|
target: '_blank'
|
|
2390
2390
|
};
|
|
2391
2391
|
}
|
|
2392
|
+
function clickableUrlMailTo(mailTo) {
|
|
2393
|
+
return {
|
|
2394
|
+
url: mailToUrlString(mailTo)
|
|
2395
|
+
};
|
|
2396
|
+
}
|
|
2397
|
+
function clickableUrlTel(tel) {
|
|
2398
|
+
return {
|
|
2399
|
+
url: telUrlString(tel)
|
|
2400
|
+
};
|
|
2401
|
+
}
|
|
2392
2402
|
|
|
2393
|
-
const
|
|
2394
|
-
const
|
|
2403
|
+
const DEFAULT_REDIRECT_FOR_IDENTIFIER_PARAM_VALUE = '0';
|
|
2404
|
+
const DEFAULT_REDIRECT_FOR_IDENTIFIER_PARAM_KEY = 'id';
|
|
2395
2405
|
/**
|
|
2396
|
-
* This hook asserts the user is allowed to view a route with
|
|
2397
|
-
*
|
|
2398
|
-
* If not, or
|
|
2406
|
+
* This hook asserts the user is allowed to view a route with an identifier as a state parameter.
|
|
2399
2407
|
*/
|
|
2400
|
-
function
|
|
2401
|
-
const {
|
|
2408
|
+
function redirectForIdentifierParamHook(input) {
|
|
2409
|
+
const { defaultAllowedValue, idParam = DEFAULT_REDIRECT_FOR_IDENTIFIER_PARAM_KEY, defaultParamValue = DEFAULT_REDIRECT_FOR_IDENTIFIER_PARAM_VALUE, priority = 100, transitionService, canViewModelWithId: canViewUser } = input;
|
|
2402
2410
|
const criteria = typeof input.criteria === 'string' ? { entering: input.criteria } : input.criteria;
|
|
2403
2411
|
// https://ui-router.github.io/ng2/docs/latest/modules/transition.html#hookresult
|
|
2404
|
-
const
|
|
2412
|
+
const assertAllowedId = (transition) => {
|
|
2405
2413
|
const $state = transition.router.stateService;
|
|
2406
2414
|
const injector = transition.injector();
|
|
2407
2415
|
const authService = injector.get(DbxAuthService);
|
|
2408
2416
|
const params = transition.params();
|
|
2409
|
-
const
|
|
2410
|
-
|
|
2417
|
+
const transitionTargetId = params[idParam];
|
|
2418
|
+
const defaultAllowedValueObs$ = defaultAllowedValue(authService, injector, transition);
|
|
2419
|
+
return firstValueFrom(defaultAllowedValueObs$.pipe(first(), switchMap((defaultAllowedIdValue) => {
|
|
2411
2420
|
let result = of(true);
|
|
2412
|
-
let
|
|
2413
|
-
if (!
|
|
2414
|
-
// If
|
|
2415
|
-
|
|
2421
|
+
let redirectToId;
|
|
2422
|
+
if (!transitionTargetId || transitionTargetId === defaultParamValue) {
|
|
2423
|
+
// If the param isn't set, default to the default value
|
|
2424
|
+
redirectToId = of(defaultAllowedIdValue);
|
|
2416
2425
|
}
|
|
2417
|
-
else if (
|
|
2418
|
-
|
|
2426
|
+
else if (defaultAllowedIdValue !== transitionTargetId) {
|
|
2427
|
+
redirectToId = canViewUser(transitionTargetId, authService, injector).pipe(map((x) => {
|
|
2419
2428
|
if (x == null || typeof x === 'boolean') {
|
|
2420
|
-
return x ?
|
|
2429
|
+
return x ? transitionTargetId : defaultAllowedIdValue;
|
|
2421
2430
|
}
|
|
2422
2431
|
else {
|
|
2423
2432
|
return x;
|
|
2424
2433
|
}
|
|
2425
2434
|
}));
|
|
2426
2435
|
}
|
|
2427
|
-
if (
|
|
2428
|
-
result =
|
|
2429
|
-
if (
|
|
2436
|
+
if (redirectToId != null) {
|
|
2437
|
+
result = redirectToId.pipe(first(), map((targetId) => {
|
|
2438
|
+
if (targetId !== transitionTargetId) {
|
|
2430
2439
|
const target = transition.targetState();
|
|
2431
2440
|
const state = target.state();
|
|
2432
|
-
return $state.target(state, Object.assign(Object.assign({}, params), {
|
|
2441
|
+
return $state.target(state, Object.assign(Object.assign({}, params), { [idParam]: targetId }), { location: true });
|
|
2433
2442
|
}
|
|
2434
2443
|
else {
|
|
2435
2444
|
return true;
|
|
@@ -2440,7 +2449,25 @@ function redirectForUserIdentifierParamHook(input) {
|
|
|
2440
2449
|
})));
|
|
2441
2450
|
};
|
|
2442
2451
|
// Register the "requires auth" hook with the TransitionsService
|
|
2443
|
-
transitionService.onBefore(criteria,
|
|
2452
|
+
transitionService.onBefore(criteria, assertAllowedId, { priority });
|
|
2453
|
+
}
|
|
2454
|
+
|
|
2455
|
+
const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE = '0';
|
|
2456
|
+
const DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY = 'uid';
|
|
2457
|
+
/**
|
|
2458
|
+
* This hook asserts the user is allowed to view a route with a user identifier as a parameter.
|
|
2459
|
+
*/
|
|
2460
|
+
function redirectForUserIdentifierParamHook(input) {
|
|
2461
|
+
const { uidParam = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY, defaultParamValue = DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE, criteria, priority = 100, transitionService, canViewUser } = input;
|
|
2462
|
+
return redirectForIdentifierParamHook({
|
|
2463
|
+
defaultAllowedValue: (authService) => authService.userIdentifier$,
|
|
2464
|
+
idParam: uidParam,
|
|
2465
|
+
defaultParamValue,
|
|
2466
|
+
criteria,
|
|
2467
|
+
transitionService,
|
|
2468
|
+
canViewModelWithId: canViewUser,
|
|
2469
|
+
priority
|
|
2470
|
+
});
|
|
2444
2471
|
}
|
|
2445
2472
|
|
|
2446
2473
|
var DbxRouterTransitionEventType;
|
|
@@ -5006,5 +5033,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
5006
5033
|
* Generated bundle index. Do not edit.
|
|
5007
5034
|
*/
|
|
5008
5035
|
|
|
5009
|
-
export { APP_ACTION_DISABLED_DIRECTIVE_KEY, APP_ACTION_DISABLED_ON_SUCCESS_DIRECTIVE_KEY, APP_ACTION_ENFORCE_MODIFIED_DIRECTIVE_KEY, AbstractDbxActionHandlerDirective, AbstractDbxActionValueOnTriggerDirective, AbstractDbxAnchorDirective, AbstractDbxButtonDirective, AbstractDbxFilterMapInstanceDirective, AbstractDbxInjectionDirective, AbstractFilterSourceConnectorDirective, AbstractFilterSourceDirective, AbstractForwardDbxInjectionContextDirective, AbstractIfDirective, AbstractLockSetSubscriptionDirective, AbstractSubscriptionDirective, AbstractTransitionDirective, AbstractTransitionWatcherDirective, ActionContextStore, ActionContextStoreSource, ActionContextStoreSourceMap, AnchorType, DBX_ACTION_HANDLER_LOCK_KEY, DBX_APP_APP_CONTEXT_STATE, DBX_APP_AUTH_ROUTER_EFFECTS_TOKEN, DBX_AUTH_APP_CONTEXT_STATE, DBX_INIT_APP_CONTEXT_STATE, DBX_INJECTION_COMPONENT_DATA, DBX_KNOWN_APP_CONTEXT_STATES, DBX_ONBOARDING_APP_CONTEXT_STATE, DBX_ONBOARD_APP_CONTEXT_STATE, DBX_PUBLIC_APP_CONTEXT_STATE, DEFAULT_ACTION_DISABLED_KEY, DEFAULT_ACTION_MAP_WORKING_DISABLED_KEY, DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY, DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE, DEFAULT_STORAGE_ACCESSOR_FACTORY_TOKEN, DEFAULT_STORAGE_OBJECT_TOKEN, DateDistancePipe, DateFormatDistancePipe, DateFromToTimePipe, DbxActionAutoModifyDirective, DbxActionAutoTriggerDirective, DbxActionButtonDirective, DbxActionButtonTriggerDirective, DbxActionContextBaseSource, DbxActionContextLoggerDirective, DbxActionContextMachine, DbxActionContextMachineAsService, DbxActionContextMapDirective, DbxActionContextMapDirectiveSourceInstance, DbxActionContextStoreSourceInstance, DbxActionDirective, DbxActionDisabledDirective, DbxActionDisabledOnSuccessDirective, DbxActionEnforceModifiedDirective, DbxActionFromMapDirective, DbxActionHandlerDirective, DbxActionHandlerInstance, DbxActionHasSuccessDirective, DbxActionIsWorkingDirective, DbxActionMapSourceDirective, DbxActionMapWorkingDisableDirective, DbxActionPreSuccessDirective, DbxActionSourceDirective, DbxActionState, DbxActionSuccessHandlerDirective, DbxActionValueDirective, DbxActionValueOnTriggerInstance, DbxActionValueTriggerDirective, DbxActionWorkInstanceDelegate, DbxAnchor, DbxAngularRouterService, DbxAppAuthRouterEffects, DbxAppAuthRouterModule, DbxAppAuthRouterService, DbxAppAuthRouterStateModule, DbxAppAuthRoutes, DbxAppAuthStateModule, DbxAppAuthStateService, DbxAppContextService, DbxAppContextStateDirective, DbxAppContextStateModule, DbxAuthHasAnyRoleDirective, DbxAuthHasRolesDirective, DbxAuthNotAnyRolesDirective, DbxAuthService, DbxButton, DbxButtonDirective, DbxButtonSegueDirective, DbxCoreActionModule, DbxCoreAngularRouterSegueModule, DbxCoreAuthModule, DbxCoreButtonModule, DbxCoreFilterModule, DbxCoreUIRouterSegueModule, DbxDatePipeModule, DbxFilterConnectSourceDirective, DbxFilterMapDirective, DbxFilterMapSourceConnectorDirective, DbxFilterMapSourceDirective, DbxFilterSourceConnectorDirective, DbxFilterSourceDirective, DbxInjectionComponent, DbxInjectionComponentModule, DbxInjectionContext, DbxInjectionContextDirective, DbxInjectionInstance, DbxLoadingButtonDirective, DbxMiscPipeModule, DbxPipesModule, DbxRouteParamDefaultRedirectInstance, DbxRouteParamReaderInstance, DbxRouterService, DbxRouterTransitionEventType, DbxRouterTransitionService, DbxStorageModule, DbxUIRouterService, FilterSourceDirective, FullLocalStorageObject, InstantStorageAccessor, LimitedStorageAccessor, LockSetComponentStore, MemoryStorageObject, MinutesStringPipe, NO_AUTH_USER_IDENTIFIER, PrettyJsonPipe, SecondaryActionContextStoreSource, SimpleStorageAccessor, SimpleStorageAccessorFactory, StorageAccessor, StringStorageAccessor, StringifySimpleStorageAccessorConverter, TimeDistanceCountdownPipe, TimeDistancePipe, ToJsDatePipe, ToMinutesPipe, WrapperSimpleStorageAccessorDelegate, actionContextHasNoErrorAndIsModifiedAndCanTrigger, actionContextIsModifiedAndCanTrigger, actionContextStoreSourceInstanceFactory, actionContextStoreSourceMachineFactory, actionContextStoreSourcePipe, anchorTypeForAnchor, asSegueRef, asSegueRefString, authRolesSetContainsAllRolesFrom, authRolesSetContainsAnyRoleFrom, authRolesSetContainsNoRolesFrom, authUserIdentifier, canReadyValue, canTriggerAction, canTriggerActionState, checkNgContentWrapperHasContent, clickableUrlInNewTab, dbxActionValueStreamDirective, defaultStorageObjectFactory, enableHasAuthRoleHook, enableHasAuthStateHook, enableIsLoggedInHook, expandClickableAnchorLinkTree, expandClickableAnchorLinkTreeNode, expandClickableAnchorLinkTrees, filterTransitionEvent, filterTransitionSuccess, flattenExpandedClickableAnchorLinkTree, flattenExpandedClickableAnchorLinkTreeToLinks, index as fromDbxAppAuth, index$2 as fromDbxAppContext, goWithRouter, isActionContextDisabled, isActionContextEnabled, isDisabledActionContextState, isIdleActionState, isLatestSuccessfulRoute, isSegueRef, isSegueRefActive, isSegueRefActiveFunction, isSegueRefActiveOnTransitionSuccess, isWorkingActionState, loadingStateForActionContextState, loadingStateTypeForActionContextState, loadingStateTypeForActionState, loggedInObsFromIsLoggedIn, loggedOutObsFromIsLoggedIn, makeAuthTransitionHook, makeDbxActionContextSourceReference, mapRefStringObsToSegueRefObs, mergeDbxInjectionComponentConfigs, index$1 as onDbxAppAuth, index$3 as onDbxAppContext, onRouterTransitionEventType, onRouterTransitionSuccessEvent, pipeActionStore, provideActionStoreSource, provideDbxAnchor, provideDbxButton, provideDbxInjectionContext, provideFilterSource, provideFilterSourceConnector, provideFilterSourceDirective, provideSecondaryActionStoreSource, redirectBasedOnAuthUserState, redirectForUserIdentifierParamHook, refStringToSegueRef, safeDetectChanges, safeMarkForCheck, safeUseCdRef, successTransition, tapDetectChanges, tapSafeMarkForCheck, useActionStore };
|
|
5036
|
+
export { APP_ACTION_DISABLED_DIRECTIVE_KEY, APP_ACTION_DISABLED_ON_SUCCESS_DIRECTIVE_KEY, APP_ACTION_ENFORCE_MODIFIED_DIRECTIVE_KEY, AbstractDbxActionHandlerDirective, AbstractDbxActionValueOnTriggerDirective, AbstractDbxAnchorDirective, AbstractDbxButtonDirective, AbstractDbxFilterMapInstanceDirective, AbstractDbxInjectionDirective, AbstractFilterSourceConnectorDirective, AbstractFilterSourceDirective, AbstractForwardDbxInjectionContextDirective, AbstractIfDirective, AbstractLockSetSubscriptionDirective, AbstractSubscriptionDirective, AbstractTransitionDirective, AbstractTransitionWatcherDirective, ActionContextStore, ActionContextStoreSource, ActionContextStoreSourceMap, AnchorType, DBX_ACTION_HANDLER_LOCK_KEY, DBX_APP_APP_CONTEXT_STATE, DBX_APP_AUTH_ROUTER_EFFECTS_TOKEN, DBX_AUTH_APP_CONTEXT_STATE, DBX_INIT_APP_CONTEXT_STATE, DBX_INJECTION_COMPONENT_DATA, DBX_KNOWN_APP_CONTEXT_STATES, DBX_ONBOARDING_APP_CONTEXT_STATE, DBX_ONBOARD_APP_CONTEXT_STATE, DBX_PUBLIC_APP_CONTEXT_STATE, DEFAULT_ACTION_DISABLED_KEY, DEFAULT_ACTION_MAP_WORKING_DISABLED_KEY, DEFAULT_REDIRECT_FOR_IDENTIFIER_PARAM_KEY, DEFAULT_REDIRECT_FOR_IDENTIFIER_PARAM_VALUE, DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_KEY, DEFAULT_REDIRECT_FOR_USER_IDENTIFIER_PARAM_VALUE, DEFAULT_STORAGE_ACCESSOR_FACTORY_TOKEN, DEFAULT_STORAGE_OBJECT_TOKEN, DateDistancePipe, DateFormatDistancePipe, DateFromToTimePipe, DbxActionAutoModifyDirective, DbxActionAutoTriggerDirective, DbxActionButtonDirective, DbxActionButtonTriggerDirective, DbxActionContextBaseSource, DbxActionContextLoggerDirective, DbxActionContextMachine, DbxActionContextMachineAsService, DbxActionContextMapDirective, DbxActionContextMapDirectiveSourceInstance, DbxActionContextStoreSourceInstance, DbxActionDirective, DbxActionDisabledDirective, DbxActionDisabledOnSuccessDirective, DbxActionEnforceModifiedDirective, DbxActionFromMapDirective, DbxActionHandlerDirective, DbxActionHandlerInstance, DbxActionHasSuccessDirective, DbxActionIsWorkingDirective, DbxActionMapSourceDirective, DbxActionMapWorkingDisableDirective, DbxActionPreSuccessDirective, DbxActionSourceDirective, DbxActionState, DbxActionSuccessHandlerDirective, DbxActionValueDirective, DbxActionValueOnTriggerInstance, DbxActionValueTriggerDirective, DbxActionWorkInstanceDelegate, DbxAnchor, DbxAngularRouterService, DbxAppAuthRouterEffects, DbxAppAuthRouterModule, DbxAppAuthRouterService, DbxAppAuthRouterStateModule, DbxAppAuthRoutes, DbxAppAuthStateModule, DbxAppAuthStateService, DbxAppContextService, DbxAppContextStateDirective, DbxAppContextStateModule, DbxAuthHasAnyRoleDirective, DbxAuthHasRolesDirective, DbxAuthNotAnyRolesDirective, DbxAuthService, DbxButton, DbxButtonDirective, DbxButtonSegueDirective, DbxCoreActionModule, DbxCoreAngularRouterSegueModule, DbxCoreAuthModule, DbxCoreButtonModule, DbxCoreFilterModule, DbxCoreUIRouterSegueModule, DbxDatePipeModule, DbxFilterConnectSourceDirective, DbxFilterMapDirective, DbxFilterMapSourceConnectorDirective, DbxFilterMapSourceDirective, DbxFilterSourceConnectorDirective, DbxFilterSourceDirective, DbxInjectionComponent, DbxInjectionComponentModule, DbxInjectionContext, DbxInjectionContextDirective, DbxInjectionInstance, DbxLoadingButtonDirective, DbxMiscPipeModule, DbxPipesModule, DbxRouteParamDefaultRedirectInstance, DbxRouteParamReaderInstance, DbxRouterService, DbxRouterTransitionEventType, DbxRouterTransitionService, DbxStorageModule, DbxUIRouterService, FilterSourceDirective, FullLocalStorageObject, InstantStorageAccessor, LimitedStorageAccessor, LockSetComponentStore, MemoryStorageObject, MinutesStringPipe, NO_AUTH_USER_IDENTIFIER, PrettyJsonPipe, SecondaryActionContextStoreSource, SimpleStorageAccessor, SimpleStorageAccessorFactory, StorageAccessor, StringStorageAccessor, StringifySimpleStorageAccessorConverter, TimeDistanceCountdownPipe, TimeDistancePipe, ToJsDatePipe, ToMinutesPipe, WrapperSimpleStorageAccessorDelegate, actionContextHasNoErrorAndIsModifiedAndCanTrigger, actionContextIsModifiedAndCanTrigger, actionContextStoreSourceInstanceFactory, actionContextStoreSourceMachineFactory, actionContextStoreSourcePipe, anchorTypeForAnchor, asSegueRef, asSegueRefString, authRolesSetContainsAllRolesFrom, authRolesSetContainsAnyRoleFrom, authRolesSetContainsNoRolesFrom, authUserIdentifier, canReadyValue, canTriggerAction, canTriggerActionState, checkNgContentWrapperHasContent, clickableUrlInNewTab, clickableUrlMailTo, clickableUrlTel, dbxActionValueStreamDirective, defaultStorageObjectFactory, enableHasAuthRoleHook, enableHasAuthStateHook, enableIsLoggedInHook, expandClickableAnchorLinkTree, expandClickableAnchorLinkTreeNode, expandClickableAnchorLinkTrees, filterTransitionEvent, filterTransitionSuccess, flattenExpandedClickableAnchorLinkTree, flattenExpandedClickableAnchorLinkTreeToLinks, index as fromDbxAppAuth, index$2 as fromDbxAppContext, goWithRouter, isActionContextDisabled, isActionContextEnabled, isDisabledActionContextState, isIdleActionState, isLatestSuccessfulRoute, isSegueRef, isSegueRefActive, isSegueRefActiveFunction, isSegueRefActiveOnTransitionSuccess, isWorkingActionState, loadingStateForActionContextState, loadingStateTypeForActionContextState, loadingStateTypeForActionState, loggedInObsFromIsLoggedIn, loggedOutObsFromIsLoggedIn, makeAuthTransitionHook, makeDbxActionContextSourceReference, mapRefStringObsToSegueRefObs, mergeDbxInjectionComponentConfigs, index$1 as onDbxAppAuth, index$3 as onDbxAppContext, onRouterTransitionEventType, onRouterTransitionSuccessEvent, pipeActionStore, provideActionStoreSource, provideDbxAnchor, provideDbxButton, provideDbxInjectionContext, provideFilterSource, provideFilterSourceConnector, provideFilterSourceDirective, provideSecondaryActionStoreSource, redirectBasedOnAuthUserState, redirectForIdentifierParamHook, redirectForUserIdentifierParamHook, refStringToSegueRef, safeDetectChanges, safeMarkForCheck, safeUseCdRef, successTransition, tapDetectChanges, tapSafeMarkForCheck, useActionStore };
|
|
5010
5037
|
//# sourceMappingURL=dereekb-dbx-core.mjs.map
|