|
1 | 1 | import DefaultResolver from '../../common/resolvers/DefaultResolver';
|
2 | 2 |
|
| 3 | +/** |
| 4 | + * This isn't exported as it is a temporary measure. |
| 5 | + * A more robust system will be implemented alongside UTF-8 support in beta 15. |
| 6 | + */ |
| 7 | +function getDiscussionIdFromSlug(slug: string | undefined) { |
| 8 | + if (!slug) return; |
| 9 | + return slug.split('-')[0]; |
| 10 | +} |
| 11 | + |
3 | 12 | /**
|
4 | 13 | * A custom route resolver for DiscussionPage that generates the same key to all posts
|
5 | 14 | * on the same discussion. It triggers a scroll when going from one post to another
|
6 | 15 | * in the same discussion.
|
7 | 16 | */
|
8 | 17 | export default class DiscussionPageResolver extends DefaultResolver {
|
9 |
| - static scrollToPostNumber: string | null = null; |
| 18 | + static scrollToPostNumber: number | null = null; |
10 | 19 |
|
11 | 20 | makeKey() {
|
12 | 21 | const params = { ...m.route.param() };
|
13 | 22 | if ('near' in params) {
|
14 | 23 | delete params.near;
|
15 | 24 | }
|
16 |
| - if ('id' in params && params.id.includes('-')) { |
17 |
| - params.id = params.id.split('-')[0]; |
18 |
| - } |
| 25 | + params.id = getDiscussionIdFromSlug(params.id); |
19 | 26 | return this.routeName.replace('.near', '') + JSON.stringify(params);
|
20 | 27 | }
|
21 | 28 |
|
22 | 29 | onmatch(args, requestedPath, route) {
|
23 |
| - const sameDiscussion = m.route.param('id') && args.id && m.route.param('id').split('-')[0] === args.id.split('-')[0]; |
24 |
| - if (route.startsWith('/d/:id') && sameDiscussion) { |
25 |
| - DiscussionPageResolver.scrollToPostNumber = args.near; |
| 30 | + if (route.includes('/d/:id') && getDiscussionIdFromSlug(args.id) === getDiscussionIdFromSlug(m.route.param('id'))) { |
| 31 | + DiscussionPageResolver.scrollToPostNumber = parseInt(args.near); |
26 | 32 | }
|
27 | 33 |
|
28 | 34 | return super.onmatch(args, requestedPath, route);
|
29 | 35 | }
|
30 | 36 |
|
31 | 37 | render(vnode) {
|
32 | 38 | if (DiscussionPageResolver.scrollToPostNumber !== null) {
|
33 |
| - console.log(DiscussionPageResolver.scrollToPostNumber); |
34 |
| - app.current.get('stream').goToNumber(parseInt(DiscussionPageResolver.scrollToPostNumber)); |
| 39 | + app.current.get('stream').goToNumber(DiscussionPageResolver.scrollToPostNumber); |
35 | 40 | DiscussionPageResolver.scrollToPostNumber = null;
|
36 | 41 | }
|
37 | 42 |
|
|
0 commit comments