mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 15:30:13 +01:00
Share the router configuration between the client and the server
This commit is contained in:
parent
592aa6d576
commit
6dc7404f23
2 changed files with 3 additions and 5 deletions
125
config/router.js
Normal file
125
config/router.js
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
let previousPath;
|
||||
FlowRouter.triggers.exit([({path}) => {
|
||||
previousPath = path;
|
||||
}]);
|
||||
|
||||
FlowRouter.route('/', {
|
||||
name: 'home',
|
||||
triggersEnter: [AccountsTemplates.ensureSignedIn],
|
||||
action() {
|
||||
Session.set('currentBoard', null);
|
||||
Session.set('currentCard', null);
|
||||
|
||||
Filter.reset();
|
||||
EscapeActions.executeAll();
|
||||
|
||||
BlazeLayout.render('defaultLayout', {
|
||||
headerBar: 'boardListHeaderBar',
|
||||
content: 'boardList',
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
FlowRouter.route('/b/:id/:slug', {
|
||||
name: 'board',
|
||||
action(params) {
|
||||
const currentBoard = params.id;
|
||||
const previousBoard = Session.get('currentBoard');
|
||||
Session.set('currentBoard', currentBoard);
|
||||
Session.set('currentCard', null);
|
||||
|
||||
// If we close a card, we'll execute again this route action but we don't
|
||||
// want to excape every current actions (filters, etc.)
|
||||
if (previousBoard !== currentBoard) {
|
||||
EscapeActions.executeAll();
|
||||
} else {
|
||||
EscapeActions.executeUpTo('popup-close');
|
||||
}
|
||||
|
||||
BlazeLayout.render('defaultLayout', {
|
||||
headerBar: 'boardHeaderBar',
|
||||
content: 'board',
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
FlowRouter.route('/b/:boardId/:slug/:cardId', {
|
||||
name: 'card',
|
||||
action(params) {
|
||||
EscapeActions.executeUpTo('inlinedForm');
|
||||
|
||||
Session.set('currentBoard', params.boardId);
|
||||
Session.set('currentCard', params.cardId);
|
||||
|
||||
BlazeLayout.render('defaultLayout', {
|
||||
headerBar: 'boardHeaderBar',
|
||||
content: 'board',
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
FlowRouter.route('/shortcuts', {
|
||||
name: 'shortcuts',
|
||||
action() {
|
||||
const shortcutsTemplate = 'keyboardShortcuts';
|
||||
|
||||
EscapeActions.executeUpTo('popup-close');
|
||||
|
||||
if (previousPath) {
|
||||
Modal.open(shortcutsTemplate, {
|
||||
header: 'shortcutsModalTitle',
|
||||
onCloseGoTo: previousPath,
|
||||
});
|
||||
} else {
|
||||
BlazeLayout.render('defaultLayout', {
|
||||
headerBar: 'shortcutsHeaderBar',
|
||||
content: shortcutsTemplate,
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
FlowRouter.notFound = {
|
||||
action() {
|
||||
BlazeLayout.render('defaultLayout', { content: 'notFound' });
|
||||
},
|
||||
};
|
||||
|
||||
// We maintain a list of redirections to ensure that we don't break old URLs
|
||||
// when we change our routing scheme.
|
||||
const redirections = {
|
||||
'/boards': '/',
|
||||
'/boards/:id/:slug': '/b/:id/:slug',
|
||||
'/boards/:id/:slug/:cardId': '/b/:id/:slug/:cardId',
|
||||
};
|
||||
|
||||
_.each(redirections, (newPath, oldPath) => {
|
||||
FlowRouter.route(oldPath, {
|
||||
triggersEnter: [(context, redirect) => {
|
||||
redirect(FlowRouter.path(newPath, context.params));
|
||||
}],
|
||||
});
|
||||
});
|
||||
|
||||
// As it is not possible to use template helpers in the page <head> we create a
|
||||
// reactive function whose role is to set any page-specific tag in the <head>
|
||||
// using the `kadira:dochead` package. Currently we only use it to display the
|
||||
// board title if we are in a board page (see #364) but we may want to support
|
||||
// some <meta> tags in the future.
|
||||
const appTitle = 'Wekan';
|
||||
|
||||
// XXX The `Meteor.startup` should not be necessary -- we don't need to wait for
|
||||
// the complete DOM to be ready to call `DocHead.setTitle`. But the problem is
|
||||
// that the global variable `Boards` is undefined when this file loads so we
|
||||
// wait a bit until hopefully all files are loaded. This will be fixed in a
|
||||
// clean way once Meteor will support ES6 modules -- hopefully in Meteor 1.3.
|
||||
Meteor.isClient && Meteor.startup(() => {
|
||||
Tracker.autorun(() => {
|
||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
const titleStack = [appTitle];
|
||||
if (currentBoard) {
|
||||
titleStack.push(currentBoard.title);
|
||||
}
|
||||
DocHead.setTitle(titleStack.reverse().join(' - '));
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue