UNPKG

7.32 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.$stateNotFound = exports.$stateChangeError = exports.$stateChangeSuccess = exports.$stateChangeCancel = exports.$stateChangeStart = void 0;
4/**
5 * # Legacy state events
6 *
7 * Polyfill implementation of the UI-Router 0.2.x state events.
8 *
9 * The 0.2.x state events are deprecated. We recommend moving to Transition Hooks instead, as they
10 * provide much more flexibility, support async, and provide the context (the Transition, etc) necessary
11 * to implement meaningful application behaviors.
12 *
13 * To enable these state events, include the `stateEvents.js` file in your project, e.g.,
14 * ```
15 * <script src="stateEvents.js"></script>
16 * ```
17 * and also make sure you depend on the `ui.router.state.events` angular module, e.g.,
18 * ```
19 * angular.module("myApplication", ['ui.router', 'ui.router.state.events']
20 * ```
21 *
22 * @publicapi @module ng1_state_events
23 */ /** */
24var angular_1 = require("../angular");
25(function () {
26 var isFunction = angular_1.ng.isFunction, isString = angular_1.ng.isString;
27 function applyPairs(memo, keyValTuple) {
28 var key, value;
29 if (Array.isArray(keyValTuple))
30 key = keyValTuple[0], value = keyValTuple[1];
31 if (!isString(key))
32 throw new Error('invalid parameters to applyPairs');
33 memo[key] = value;
34 return memo;
35 }
36 function stateChangeStartHandler($transition$) {
37 if (!$transition$.options().notify || !$transition$.valid() || $transition$.ignored())
38 return;
39 var $injector = $transition$.injector();
40 var $stateEvents = $injector.get('$stateEvents');
41 var $rootScope = $injector.get('$rootScope');
42 var $state = $injector.get('$state');
43 var $urlRouter = $injector.get('$urlRouter');
44 var enabledEvents = $stateEvents.provider.enabled();
45 var toParams = $transition$.params('to');
46 var fromParams = $transition$.params('from');
47 if (enabledEvents.$stateChangeSuccess) {
48 var startEvent = $rootScope.$broadcast('$stateChangeStart', $transition$.to(), toParams, $transition$.from(), fromParams, $transition$.options(), $transition$);
49 if (startEvent.defaultPrevented) {
50 if (enabledEvents.$stateChangeCancel) {
51 $rootScope.$broadcast('$stateChangeCancel', $transition$.to(), toParams, $transition$.from(), fromParams, $transition$.options(), $transition$);
52 }
53 // Don't update and resync url if there's been a new transition started. see issue #2238, #600
54 if ($state.transition == null)
55 $urlRouter.update();
56 return false;
57 }
58 // right after global state is updated
59 var successOpts = { priority: 9999 };
60 $transition$.onSuccess({}, function () {
61 $rootScope.$broadcast('$stateChangeSuccess', $transition$.to(), toParams, $transition$.from(), fromParams, $transition$.options(), $transition$);
62 }, successOpts);
63 }
64 if (enabledEvents.$stateChangeError) {
65 $transition$.promise['catch'](function (error) {
66 if (error && (error.type === 2 /* RejectType.SUPERSEDED */ || error.type === 3) /* RejectType.ABORTED */)
67 return;
68 var evt = $rootScope.$broadcast('$stateChangeError', $transition$.to(), toParams, $transition$.from(), fromParams, error, $transition$.options(), $transition$);
69 if (!evt.defaultPrevented) {
70 $urlRouter.update();
71 }
72 });
73 }
74 }
75 stateNotFoundHandler.$inject = ['$to$', '$from$', '$state', '$rootScope', '$urlRouter'];
76 function stateNotFoundHandler($to$, $from$, injector) {
77 var $state = injector.get('$state');
78 var $rootScope = injector.get('$rootScope');
79 var $urlRouter = injector.get('$urlRouter');
80 var redirect = { to: $to$.identifier(), toParams: $to$.params(), options: $to$.options() };
81 var e = $rootScope.$broadcast('$stateNotFound', redirect, $from$.state(), $from$.params());
82 if (e.defaultPrevented || e.retry)
83 $urlRouter.update();
84 function redirectFn() {
85 return $state.target(redirect.to, redirect.toParams, redirect.options);
86 }
87 if (e.defaultPrevented) {
88 return false;
89 }
90 else if (e.retry || !!$state.get(redirect.to)) {
91 return e.retry && isFunction(e.retry.then) ? e.retry.then(redirectFn) : redirectFn();
92 }
93 }
94 $StateEventsProvider.$inject = ['$stateProvider'];
95 function $StateEventsProvider($stateProvider) {
96 $StateEventsProvider.prototype.instance = this;
97 var runtime = false;
98 var allEvents = ['$stateChangeStart', '$stateNotFound', '$stateChangeSuccess', '$stateChangeError'];
99 var enabledStateEvents = allEvents.map(function (e) { return [e, true]; }).reduce(applyPairs, {});
100 function assertNotRuntime() {
101 if (runtime)
102 throw new Error('Cannot enable events at runtime (use $stateEventsProvider');
103 }
104 /**
105 * Enables the deprecated UI-Router 0.2.x State Events
106 * [ '$stateChangeStart', '$stateNotFound', '$stateChangeSuccess', '$stateChangeError' ]
107 */
108 this.enable = function () {
109 var events = [];
110 for (var _i = 0; _i < arguments.length; _i++) {
111 events[_i] = arguments[_i];
112 }
113 assertNotRuntime();
114 if (!events || !events.length)
115 events = allEvents;
116 events.forEach(function (event) { return (enabledStateEvents[event] = true); });
117 };
118 /**
119 * Disables the deprecated UI-Router 0.2.x State Events
120 * [ '$stateChangeStart', '$stateNotFound', '$stateChangeSuccess', '$stateChangeError' ]
121 */
122 this.disable = function () {
123 var events = [];
124 for (var _i = 0; _i < arguments.length; _i++) {
125 events[_i] = arguments[_i];
126 }
127 assertNotRuntime();
128 if (!events || !events.length)
129 events = allEvents;
130 events.forEach(function (event) { return delete enabledStateEvents[event]; });
131 };
132 this.enabled = function () { return enabledStateEvents; };
133 this.$get = $get;
134 $get.$inject = ['$transitions'];
135 function $get($transitions) {
136 runtime = true;
137 if (enabledStateEvents['$stateNotFound'])
138 $stateProvider.onInvalid(stateNotFoundHandler);
139 if (enabledStateEvents.$stateChangeStart)
140 $transitions.onBefore({}, stateChangeStartHandler, { priority: 1000 });
141 return {
142 provider: $StateEventsProvider.prototype.instance,
143 };
144 }
145 }
146 angular_1.ng
147 .module('ui.router.state.events', ['ui.router.state'])
148 .provider('$stateEvents', $StateEventsProvider)
149 .run([
150 '$stateEvents',
151 // eslint-disable-next-line @typescript-eslint/no-unused-vars
152 function ($stateEvents) {
153 /* Invokes $get() */
154 },
155 ]);
156})();
157//# sourceMappingURL=stateEvents.js.map
\No newline at end of file