summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorDessalines <dessalines@users.noreply.github.com>2020-05-15 12:36:11 -0400
committerGitHub <noreply@github.com>2020-05-15 12:36:11 -0400
commit940dc73f280742e553395d6a56eaca015a234b3a (patch)
treee81748decb1dc10d1ace2ad6318a94d063ccf23c /ui
parent3a4973ad68562f9ccb4a9f4442333e0478bc7b04 (diff)
Federated mentions. Fixes #681 (#717)
* Federated mentions. Fixes #681 * Changing some todos, adding comments.
Diffstat (limited to 'ui')
-rw-r--r--ui/src/api_tests/api.spec.ts45
-rw-r--r--ui/src/utils.ts21
2 files changed, 54 insertions, 12 deletions
diff --git a/ui/src/api_tests/api.spec.ts b/ui/src/api_tests/api.spec.ts
index dcfb5e62..d5da17c7 100644
--- a/ui/src/api_tests/api.spec.ts
+++ b/ui/src/api_tests/api.spec.ts
@@ -22,6 +22,7 @@ import {
EditPrivateMessageForm,
PrivateMessageResponse,
PrivateMessagesResponse,
+ GetUserMentionsResponse,
} from '../interfaces';
let lemmyAlphaUrl = 'http://localhost:8540';
@@ -379,6 +380,44 @@ describe('main', () => {
expect(getPostResAlpha.comments[0].community_local).toBe(false);
expect(getPostResAlpha.comments[0].creator_local).toBe(false);
expect(getPostResAlpha.comments[0].score).toBe(1);
+
+ // Lemmy alpha responds to their own comment, but mentions lemmy beta.
+ // Make sure lemmy beta gets that in their inbox.
+ let mentionContent = 'A test mention of @lemmy_beta@lemmy_beta:8550';
+ let mentionCommentForm: CommentForm = {
+ content: mentionContent,
+ post_id: 2,
+ parent_id: createResponse.comment.id,
+ auth: lemmyAlphaAuth,
+ };
+
+ let createMentionRes: CommentResponse = await fetch(
+ `${lemmyAlphaApiUrl}/comment`,
+ {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: wrapper(mentionCommentForm),
+ }
+ ).then(d => d.json());
+
+ expect(createMentionRes.comment.content).toBe(mentionContent);
+ expect(createMentionRes.comment.community_local).toBe(false);
+ expect(createMentionRes.comment.creator_local).toBe(true);
+ expect(createMentionRes.comment.score).toBe(1);
+
+ // Make sure lemmy beta sees that new mention
+ let getMentionUrl = `${lemmyBetaApiUrl}/user/mention?sort=New&unread_only=false&auth=${lemmyBetaAuth}`;
+ let getMentionsRes: GetUserMentionsResponse = await fetch(getMentionUrl, {
+ method: 'GET',
+ }).then(d => d.json());
+
+ // The newest show up first
+ expect(getMentionsRes.mentions[0].content).toBe(mentionContent);
+ expect(getMentionsRes.mentions[0].community_local).toBe(true);
+ expect(getMentionsRes.mentions[0].creator_local).toBe(false);
+ expect(getMentionsRes.mentions[0].score).toBe(1);
});
});
@@ -413,9 +452,9 @@ describe('main', () => {
method: 'GET',
}).then(d => d.json());
- expect(getPostRes.comments[1].content).toBe(content);
- expect(getPostRes.comments[1].community_local).toBe(true);
- expect(getPostRes.comments[1].creator_local).toBe(false);
+ expect(getPostRes.comments[2].content).toBe(content);
+ expect(getPostRes.comments[2].community_local).toBe(true);
+ expect(getPostRes.comments[2].creator_local).toBe(false);
});
});
diff --git a/ui/src/utils.ts b/ui/src/utils.ts
index 277da987..54322c8b 100644
--- a/ui/src/utils.ts
+++ b/ui/src/utils.ts
@@ -502,8 +502,8 @@ export function setupTribute(): Tribute {
trigger: '@',
selectTemplate: (item: any) => {
let link = item.original.local
- ? `[@${item.original.key}](/u/${item.original.key})`
- : `[@${item.original.key}](/user/${item.original.id})`;
+ ? `[${item.original.key}](/u/${item.original.name})`
+ : `[${item.original.key}](/user/${item.original.id})`;
return link;
},
values: (text: string, cb: any) => {
@@ -520,8 +520,8 @@ export function setupTribute(): Tribute {
trigger: '!',
selectTemplate: (item: any) => {
let link = item.original.local
- ? `[!${item.original.key}](/c/${item.original.key})`
- : `[!${item.original.key}](/community/${item.original.id})`;
+ ? `[${item.original.key}](/c/${item.original.name})`
+ : `[${item.original.key}](/community/${item.original.id})`;
return link;
},
values: (text: string, cb: any) => {
@@ -565,9 +565,9 @@ function userSearch(text: string, cb: any) {
if (res.op == UserOperation.Search) {
let data = res.data as SearchResponse;
let users = data.users.map(u => {
- let name_ = u.local ? u.name : `${u.name}@${hostname(u.actor_id)}`;
return {
- key: name_,
+ key: `@${u.name}@${hostname(u.actor_id)}`,
+ name: u.name,
local: u.local,
id: u.id,
};
@@ -602,9 +602,9 @@ function communitySearch(text: string, cb: any) {
if (res.op == UserOperation.Search) {
let data = res.data as SearchResponse;
let communities = data.communities.map(c => {
- let name_ = c.local ? c.name : `${c.name}@${hostname(c.actor_id)}`;
return {
- key: name_,
+ key: `!${c.name}@${hostname(c.actor_id)}`,
+ name: c.name,
local: c.local,
id: c.id,
};
@@ -859,5 +859,8 @@ export function previewLines(text: string, lines: number = 3): string {
}
export function hostname(url: string): string {
- return new URL(url).hostname;
+ let cUrl = new URL(url);
+ return window.location.port
+ ? `${cUrl.hostname}:${cUrl.port}`
+ : `${cUrl.hostname}`;
}