Skip to content
This repository was archived by the owner on Jul 14, 2025. It is now read-only.

Commit a95ff24

Browse files
committed
DEV: Add compatibility with the Glimmer Post Stream
1 parent 70318da commit a95ff24

File tree

5 files changed

+346
-176
lines changed

5 files changed

+346
-176
lines changed
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import Component from "@glimmer/component";
2+
import { concat } from "@ember/helper";
3+
import icon from "discourse/helpers/d-icon";
4+
import userPrioritizedName from "discourse/helpers/user-prioritized-name";
5+
import { i18n } from "discourse-i18n";
6+
import { assignedToGroupPath, assignedToUserPath } from "../lib/url";
7+
8+
export default class AssignedToFirstPost extends Component {
9+
get assignedToUser() {
10+
return this.args.post?.topic?.assigned_to_user;
11+
}
12+
13+
get assignedToGroup() {
14+
return this.args.post?.topic?.assigned_to_group;
15+
}
16+
17+
get icon() {
18+
return this.assignedToUser ? "user-plus" : "group-plus";
19+
}
20+
21+
get indirectlyAssignedTo() {
22+
return this.args.post?.topic?.indirectly_assigned_to;
23+
}
24+
25+
get indirectAssignments() {
26+
if (!this.indirectlyAssignedTo) {
27+
return null;
28+
}
29+
30+
return Object.keys(this.indirectlyAssignedTo).map((postId) => {
31+
const postNumber = this.indirectlyAssignedTo[postId].post_number;
32+
33+
return {
34+
postId,
35+
assignee: this.indirectlyAssignedTo[postId].assigned_to,
36+
postNumber,
37+
url: `${this.args.post.topic.url}/${postNumber}`,
38+
};
39+
});
40+
}
41+
42+
get isAssigned() {
43+
return !!(
44+
this.assignedToUser ||
45+
this.assignedToGroup ||
46+
this.args.post?.topic?.indirectly_assigned_to
47+
);
48+
}
49+
50+
<template>
51+
{{#if this.isAssigned}}
52+
<p class="assigned-to">
53+
{{icon this.icon}}
54+
{{#if this.assignedToUser}}
55+
<span class="assignee">
56+
<span class="assigned-to--user">
57+
{{i18n
58+
"discourse_assign.assigned_topic_to"
59+
username=(userPrioritizedName this.assignedToUser)
60+
path=(assignedToUserPath this.assignedToUser)
61+
}}
62+
</span>
63+
</span>
64+
{{/if}}
65+
66+
{{#if this.assignedToGroup}}
67+
<span class="assignee">
68+
<span class="assigned-to--group">
69+
{{i18n
70+
"discourse_assign.assigned_topic_to"
71+
username=this.assignedToGroup.name
72+
path=(assignedToGroupPath this.assignedToGroup)
73+
}}
74+
</span>
75+
</span>
76+
{{/if}}
77+
78+
{{#each this.indirectAssignments key="postId" as |indirectAssignment|}}
79+
<span class="assign-text">
80+
{{i18n "discourse_assign.assigned"}}
81+
</span>
82+
<span class="assignee">
83+
<a href={{indirectAssignment.url}} class="assigned-indirectly">
84+
{{i18n
85+
"discourse_assign.assign_post_to_multiple"
86+
post_number=indirectAssignment.postNumber
87+
username=(userPrioritizedName indirectAssignment.assignee)
88+
}}
89+
</a>
90+
</span>
91+
{{/each}}
92+
</p>
93+
{{/if}}
94+
</template>
95+
}

assets/javascripts/discourse/components/assigned-to-post.gjs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,14 @@ import { service } from "@ember/service";
44
import DButton from "discourse/components/d-button";
55
import DropdownMenu from "discourse/components/dropdown-menu";
66
import icon from "discourse/helpers/d-icon";
7+
import userPrioritizedName from "discourse/helpers/user-prioritized-name";
78
import { i18n } from "discourse-i18n";
89
import DMenu from "float-kit/components/d-menu";
910

1011
export default class AssignedToPost extends Component {
1112
@service taskActions;
1213
@service siteSettings;
1314

14-
get nameOrUsername() {
15-
if (!this.siteSettings.prioritize_username_in_ux) {
16-
return this.args.assignedToUser.name || this.args.assignedToUser.username;
17-
} else {
18-
return this.args.assignedToUser.username;
19-
}
20-
}
21-
2215
@action
2316
unassign() {
2417
this.taskActions.unassignPost(this.args.post);
@@ -42,7 +35,7 @@ export default class AssignedToPost extends Component {
4235

4336
<a href={{@href}} class="assigned-to-username">
4437
{{#if @assignedToUser}}
45-
{{this.nameOrUsername}}
38+
{{userPrioritizedName @assignedToUser}}
4639
{{else}}
4740
{{@assignedToGroup.name}}
4841
{{/if}}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import Component from "@glimmer/component";
2+
import { assignedToGroupPath, assignedToUserPath } from "../lib/url";
3+
import AssignedFirstPost from "./assigned-to-first-post";
4+
import AssignedToPost from "./assigned-to-post";
5+
6+
export default class PostAssignmentsDisplay extends Component {
7+
static shouldRender(args) {
8+
return args.post;
9+
}
10+
11+
get post() {
12+
return this.args.outletArgs.post;
13+
}
14+
15+
get assignedTo() {
16+
return this.post.topic?.indirectly_assigned_to?.[this.post.id]?.assigned_to;
17+
}
18+
19+
get assignedToUser() {
20+
return this.assignedTo.username ? this.assignedTo : null;
21+
}
22+
23+
get assignedToGroup() {
24+
return !this.assignedToUser && this.assignedTo.name
25+
? this.assignedTo
26+
: null;
27+
}
28+
29+
get assignedHref() {
30+
return this.assignedToUser
31+
? assignedToUserPath(this.assignedToUser)
32+
: assignedToGroupPath(this.assignedToGroup);
33+
}
34+
35+
<template>
36+
{{#if this.post.firstPost}}
37+
<AssignedFirstPost @post={{this.post}} />
38+
{{else if this.assignedTo}}
39+
<p class="assigned-to">
40+
<AssignedToPost
41+
@assignedToUser={{this.assignedToUser}}
42+
@assignedToGroup={{this.assignedToGroup}}
43+
@href={{this.assignedHref}}
44+
@post={{this.post}}
45+
/>
46+
</p>
47+
{{/if}}
48+
</template>
49+
}

0 commit comments

Comments
 (0)