summaryrefslogtreecommitdiffstats
path: root/client/config/router.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/config/router.js')
-rw-r--r--client/config/router.js34
1 files changed, 28 insertions, 6 deletions
diff --git a/client/config/router.js b/client/config/router.js
index d4bc3c4f..ed9a069d 100644
--- a/client/config/router.js
+++ b/client/config/router.js
@@ -1,3 +1,6 @@
+// XXX Switch to Flow-Router?
+var previousRoute;
+
Router.configure({
loadingTemplate: 'spinner',
notFoundTemplate: 'notfound',
@@ -6,24 +9,43 @@ Router.configure({
onBeforeAction: function() {
var options = this.route.options;
+ var loggedIn = Tracker.nonreactive(function() {
+ return !! Meteor.userId();
+ });
+
// Redirect logged in users to Boards view when they try to open Login or
// signup views.
- if (Meteor.userId() && options.redirectLoggedInUsers) {
+ if (loggedIn && options.redirectLoggedInUsers) {
return this.redirect('Boards');
}
// Authenticated
- if (! Meteor.userId() && options.authenticated) {
+ if (! loggedIn && options.authenticated) {
return this.redirect('atSignIn');
}
- // Reset default sessions
- Session.set('error', false);
-
Tracker.nonreactive(function() {
- EscapeActions.executeLowerThan(40);
+ if (! options.noEscapeActions &&
+ ! (previousRoute && previousRoute.options.noEscapeActions))
+ EscapeActions.executeAll();
});
+ previousRoute = this.route;
+
this.next();
}
});
+
+// We want to execute our EscapeActions.executeLowerThan method any time the
+// route is changed, but not if the stays the same but only the parameters
+// change (eg when a user is navigation from a card A to a card B). This is why
+// we can’t put this function in the above `onBeforeAction` that is being run
+// too many times, instead we register a dependency only on the route name and
+// use Tracker.autorun. The following paragraph explains the problem quite well:
+// https://github.com/meteorhacks/flow-router#routercurrent-is-evil
+// Tracker.autorun(function(computation) {
+// routeName.get();
+// if (! computation.firstRun) {
+// EscapeActions.executeLowerThan('inlinedForm');
+// }
+// });