diff --git a/js/src/common/Application.ts b/js/src/common/Application.ts index 797ccecb1..813fe8f14 100644 --- a/js/src/common/Application.ts +++ b/js/src/common/Application.ts @@ -200,6 +200,13 @@ export default abstract class Application { if (!route) throw new Error(`Route '${name}' does not exist`); const url = route.path.replace(/:([^\/]+)/g, (m, key) => extract(params, key)); + + // Remove falsy values in params to avoid + // having urls like '/?sort&q' + for (const key in params) { + if (params.hasOwnProperty(key) && !params[key]) delete params[key]; + } + const queryString = m.buildQueryString(params); const prefix = m.route.prefix === '' ? this.forum.attribute('basePath') : ''; diff --git a/js/src/forum/routes.ts b/js/src/forum/routes.ts index 64ac062c9..efaf8edb4 100644 --- a/js/src/forum/routes.ts +++ b/js/src/forum/routes.ts @@ -30,13 +30,11 @@ export default app => { app.route.discussion = (discussion: Discussion, near?: number): string => { const slug = discussion?.slug(); const hasNear = near && near !== 1; - const params = { + + return app.route(hasNear ? 'discussion.near' : 'discussion', { id: discussion.id() + (slug.trim() ? '-' + slug : ''), - }; - - if (hasNear) params['near'] = near; - - return app.route(hasNear ? 'discussion.near' : 'discussion', params); + near: hasNear && near, + }); }; /**