Skip to content

Commit 1f98cee

Browse files
refactor(hooks): move each hooks definition and registration to the same file
1 parent 37241e7 commit 1f98cee

File tree

6 files changed

+65
-32
lines changed

6 files changed

+65
-32
lines changed

src/hooks/onEnterExitRetain.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import {TransitionStateHookFn} from "../transition/interface";
33
import {State} from "../state/stateObject";
44
import {Transition} from "../transition/transition";
5+
import {TransitionService} from "../transition/transitionService";
56

67
/**
78
* A factory which creates an onEnter, onExit or onRetain transition hook function
@@ -12,10 +13,10 @@ import {Transition} from "../transition/transition";
1213
* @hidden
1314
*/
1415
function makeEnterExitRetainHook(hookName: string): TransitionStateHookFn {
15-
return (transition: Transition, state: State) => {
16-
let hookFn: TransitionStateHookFn = state[hookName];
17-
return hookFn(transition, state);
18-
}
16+
return (transition: Transition, state: State) => {
17+
let hookFn: TransitionStateHookFn = state[hookName];
18+
return hookFn(transition, state);
19+
}
1920
}
2021

2122
/**
@@ -27,7 +28,9 @@ function makeEnterExitRetainHook(hookName: string): TransitionStateHookFn {
2728
*
2829
* See: [[IHookRegistry.onExit]]
2930
*/
30-
export const onExitHook: TransitionStateHookFn = makeEnterExitRetainHook('onExit');
31+
const onExitHook: TransitionStateHookFn = makeEnterExitRetainHook('onExit');
32+
export const registerOnExitHook = (transitionService: TransitionService) =>
33+
transitionService.onExit({exiting: state => !!state.onExit}, onExitHook);
3134

3235
/**
3336
* The [[TransitionStateHookFn]] for onRetain
@@ -38,7 +41,9 @@ export const onExitHook: TransitionStateHookFn = makeEnterExitRetainHook('o
3841
*
3942
* See: [[IHookRegistry.onRetain]]
4043
*/
41-
export const onRetainHook: TransitionStateHookFn = makeEnterExitRetainHook('onRetain');
44+
const onRetainHook: TransitionStateHookFn = makeEnterExitRetainHook('onRetain');
45+
export const registerOnRetainHook = (transitionService: TransitionService) =>
46+
transitionService.onRetain({retained: state => !!state.onRetain}, onRetainHook);
4247

4348
/**
4449
* The [[TransitionStateHookFn]] for onEnter
@@ -49,4 +54,7 @@ export const onRetainHook: TransitionStateHookFn = makeEnterExitRetainHook('o
4954
*
5055
* See: [[IHookRegistry.onEnter]]
5156
*/
52-
export const onEnterHook: TransitionStateHookFn = makeEnterExitRetainHook('onEnter');
57+
const onEnterHook: TransitionStateHookFn = makeEnterExitRetainHook('onEnter');
58+
export const registerOnEnterHook = (transitionService: TransitionService) =>
59+
transitionService.onEnter({entering: state => !!state.onEnter}, onEnterHook);
60+

src/hooks/redirectTo.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import {isString, isFunction} from "../common/predicates"
33
import {Transition} from "../transition/transition";
44
import {services} from "../common/coreservices";
55
import {TargetState} from "../state/targetState";
6+
import {TransitionService} from "../transition/transitionService";
7+
import {TransitionHookFn} from "../transition/interface";
68

79
/**
810
* A [[TransitionHookFn]] that redirects to a different state or params
@@ -11,7 +13,7 @@ import {TargetState} from "../state/targetState";
1113
*
1214
* See [[StateDeclaration.redirectTo]]
1315
*/
14-
export const redirectToHook = (trans: Transition) => {
16+
const redirectToHook: TransitionHookFn = (trans: Transition) => {
1517
let redirect = trans.to().redirectTo;
1618
if (!redirect) return;
1719

@@ -28,4 +30,7 @@ export const redirectToHook = (trans: Transition) => {
2830
return services.$q.when(redirect(trans)).then(handleResult);
2931
}
3032
return handleResult(redirect);
31-
};
33+
};
34+
35+
export const registerRedirectToHook = (transitionService: TransitionService) =>
36+
transitionService.onStart({to: (state) => !!state.redirectTo}, redirectToHook);

src/hooks/resolve.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import {Transition} from "../transition/transition";
44
import {State} from "../state/stateObject";
55
import {ResolveContext} from "../resolve/resolveContext";
66
import {TransitionStateHookFn, TransitionHookFn} from "../transition/interface";
7+
import {TransitionService} from "../transition/transitionService";
8+
import {val} from "../common/hof";
79

810
/**
911
* A [[TransitionHookFn]] which resolves all EAGER Resolvables in the To Path
@@ -14,11 +16,14 @@ import {TransitionStateHookFn, TransitionHookFn} from "../transition/interface";
1416
*
1517
* See [[StateDeclaration.resolve]]
1618
*/
17-
export const eagerResolvePath: TransitionHookFn = (trans: Transition) =>
19+
const eagerResolvePath: TransitionHookFn = (trans: Transition) =>
1820
new ResolveContext(trans.treeChanges().to)
1921
.resolvePath("EAGER", trans)
2022
.then(noop);
2123

24+
export const registerEagerResolvePath = (transitionService: TransitionService) =>
25+
transitionService.onStart({}, eagerResolvePath, {priority: 1000});
26+
2227
/**
2328
* A [[TransitionHookFn]] which resolves all LAZY Resolvables for the state (and all its ancestors) in the To Path
2429
*
@@ -28,9 +33,12 @@ export const eagerResolvePath: TransitionHookFn = (trans: Transition) =>
2833
*
2934
* See [[StateDeclaration.resolve]]
3035
*/
31-
export const lazyResolveState: TransitionStateHookFn = (trans: Transition, state: State) =>
36+
const lazyResolveState: TransitionStateHookFn = (trans: Transition, state: State) =>
3237
new ResolveContext(trans.treeChanges().to)
3338
.subContext(state)
3439
.resolvePath("LAZY", trans)
3540
.then(noop);
3641

42+
export const registerLazyResolveState = (transitionService: TransitionService) =>
43+
transitionService.onEnter({ entering: val(true) }, lazyResolveState, {priority: 1000});
44+

src/hooks/url.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
import {UrlRouter} from "../url/urlRouter";
33
import {StateService} from "../state/stateService";
44
import {Transition} from "../transition/transition";
5+
import {TransitionHookFn} from "../transition/interface";
56

67
/**
78
* A [[TransitionHookFn]] which updates the URL after a successful transition
89
*
910
* Registered using `transitionService.onSuccess({}, updateUrl);`
1011
*/
11-
export function updateUrl(transition: Transition) {
12+
const updateUrl: TransitionHookFn = (transition: Transition) => {
1213
let options = transition.options();
1314
let $state: StateService = transition.router.stateService;
1415
let $urlRouter: UrlRouter = transition.router.urlRouter;
@@ -19,4 +20,7 @@ export function updateUrl(transition: Transition) {
1920
}
2021

2122
$urlRouter.update(true);
22-
}
23+
};
24+
25+
export const registerUpdateUrl = (transitionService: TransitionService) =>
26+
transitionService.onSuccess({}, updateUrl, {priority: 9999});

src/hooks/views.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import {services} from "../common/coreservices";
44
import {Transition} from "../transition/transition";
55
import {ViewService} from "../view/view";
66
import {ViewConfig} from "../view/interface";
7+
import {TransitionHookFn} from "../transition/interface";
8+
import {TransitionService} from "../transition/transitionService";
79

810

911
/**
@@ -14,11 +16,14 @@ import {ViewConfig} from "../view/interface";
1416
* Allows the views to do async work in [[ViewConfig.load]] before the transition continues.
1517
* In angular 1, this includes loading the templates.
1618
*/
17-
export function loadEnteringViews(transition: Transition) {
19+
const loadEnteringViews: TransitionHookFn = (transition: Transition) => {
1820
let enteringViews = transition.views("entering");
1921
if (!enteringViews.length) return;
2022
return services.$q.all(enteringViews.map(view => view.load())).then(noop);
21-
}
23+
};
24+
25+
export const registerLoadEnteringViews = (transitionService: TransitionService) =>
26+
transitionService.onStart({}, loadEnteringViews);
2227

2328
/**
2429
* A [[TransitionHookFn]] which activates the new views when a transition is successful.
@@ -30,7 +35,7 @@ export function loadEnteringViews(transition: Transition) {
3035
*
3136
* See [[ViewService]]
3237
*/
33-
export function activateViews(transition: Transition) {
38+
const activateViews: TransitionHookFn = (transition: Transition) => {
3439
let enteringViews = transition.views("entering");
3540
let exitingViews = transition.views("exiting");
3641
if (!enteringViews.length && !exitingViews.length) return;
@@ -41,4 +46,7 @@ export function activateViews(transition: Transition) {
4146
enteringViews.forEach((vc: ViewConfig) => $view.activateViewConfig(vc));
4247

4348
$view.sync();
44-
}
49+
};
50+
51+
export const registerActivateViews = (transitionService: TransitionService) =>
52+
transitionService.onSuccess({}, activateViews);

src/transition/transitionService.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ import {TargetState} from "../state/targetState";
1010
import {PathNode} from "../path/node";
1111
import {IEventHook} from "./interface";
1212
import {ViewService} from "../view/view";
13-
import {eagerResolvePath, lazyResolveState} from "../hooks/resolve";
14-
import {loadEnteringViews, activateViews} from "../hooks/views";
15-
import {updateUrl} from "../hooks/url";
16-
import {redirectToHook} from "../hooks/redirectTo";
17-
import {onExitHook, onRetainHook, onEnterHook} from "../hooks/onEnterExitRetain";
1813
import {UIRouter} from "../router";
19-
import {val} from "../common/hof";
14+
15+
import {registerEagerResolvePath, registerLazyResolveState} from "../hooks/resolve";
16+
import {registerLoadEnteringViews, registerActivateViews} from "../hooks/views";
17+
import {registerUpdateUrl} from "../hooks/url";
18+
import {registerRedirectToHook} from "../hooks/redirectTo";
19+
import {registerOnExitHook, registerOnRetainHook, registerOnEnterHook} from "../hooks/onEnterExitRetain";
2020

2121
/**
2222
* The default [[Transition]] options.
@@ -79,23 +79,23 @@ export class TransitionService implements IHookRegistry {
7979
let fns = this._deregisterHookFns;
8080

8181
// Wire up redirectTo hook
82-
fns.redirectTo = this.onStart({to: (state) => !!state.redirectTo}, redirectToHook);
82+
fns.redirectTo = registerRedirectToHook(this);
8383

8484
// Wire up onExit/Retain/Enter state hooks
85-
fns.onExit = this.onExit ({exiting: state => !!state.onExit}, onExitHook);
86-
fns.onRetain = this.onRetain({retained: state => !!state.onRetain}, onRetainHook);
87-
fns.onEnter = this.onEnter ({entering: state => !!state.onEnter}, onEnterHook);
85+
fns.onExit = registerOnExitHook(this);
86+
fns.onRetain = registerOnRetainHook(this);
87+
fns.onEnter = registerOnEnterHook(this);
8888

8989
// Wire up Resolve hooks
90-
fns.eagerResolve = this.onStart({}, eagerResolvePath, {priority: 1000});
91-
fns.lazyResolve = this.onEnter({ entering: val(true) }, lazyResolveState, {priority: 1000});
90+
fns.eagerResolve = registerEagerResolvePath(this);
91+
fns.lazyResolve = registerLazyResolveState(this);
9292

9393
// Wire up the View management hooks
94-
fns.loadViews = this.onStart({}, loadEnteringViews);
95-
fns.activateViews = this.onSuccess({}, activateViews);
94+
fns.loadViews = registerLoadEnteringViews(this);
95+
fns.activateViews = registerActivateViews(this);
9696

9797
// After globals.current is updated at priority: 10000
98-
fns.updateUrl = this.onSuccess({}, updateUrl, {priority: 9999});
98+
fns.updateUrl = registerUpdateUrl(this);
9999
}
100100

101101
/** @inheritdoc */

0 commit comments

Comments
 (0)