Skip to content

Commit a79d880

Browse files
committed
Add a new and more intuitive entry for adding members.
1 parent 6581c96 commit a79d880

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

routers/web/org/members.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,13 @@ func Members(ctx *context.Context) {
6767
ctx.ServerError("GetMembers", err)
6868
return
6969
}
70+
teams, err := organization.FindOrgTeams(ctx, org.ID)
71+
if err != nil {
72+
ctx.ServerError("GetOrgTeams", err)
73+
return
74+
}
7075
ctx.Data["Page"] = pager
76+
ctx.Data["Teams"] = teams
7177
ctx.Data["Members"] = members
7278
ctx.Data["MembersIsPublicMember"] = membersIsPublic
7379
ctx.Data["MembersIsUserOrgOwner"] = organization.IsUserOrgOwner(ctx, members, org.ID)

templates/org/member/members.tmpl

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@
44
<div class="ui container">
55
{{template "base/alert" .}}
66

7+
{{if .IsOrganizationOwner}}
8+
<div class="flex-text-block tw-justify-end tw-gap-x-1 tw-gap-y-2 tw-mb-4">
9+
<button class="ui primary button show-modal" data-modal="#add-member-to-team-modal"
10+
>
11+
{{svg "octicon-plus"}}
12+
{{ctx.Locale.Tr "org.teams.add_team_member"}}
13+
</button>
14+
</div>
15+
<div class="divider"></div>
16+
{{end}}
17+
718
<div class="flex-list">
819
{{range .Members}}
920
{{$isPublic := index $.MembersIsPublicMember .ID}}
@@ -87,4 +98,38 @@
8798
{{template "base/modal_actions_confirm" .}}
8899
</div>
89100

101+
<div class="ui small modal" id="add-member-to-team-modal">
102+
<div class="header">{{ctx.Locale.Tr "org.teams.add_team_member"}}</div>
103+
<div class="content">
104+
<form class="ui form ignore-dirty" method="post" data-action-base-link="{{$.OrgLink}}">
105+
{{.CsrfTokenHtml}}
106+
<div class="required field">
107+
<label>{{ctx.Locale.Tr "org.teams"}}</label>
108+
<div class="ui dropdown selection search team_add_member_team_search">
109+
<input name="team" type="hidden">
110+
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
111+
<div class="text"></div>
112+
<div class="menu">
113+
{{range .Teams}}
114+
<div class="item" data-value="{{.LowerName}}">{{.Name}}</div>
115+
{{end}}
116+
</div>
117+
</div>
118+
</div>
119+
<div class="required field">
120+
<label>{{ctx.Locale.Tr "org.members"}}</label>
121+
<div id="search-user-box" class="ui search">
122+
<div class="ui input">
123+
<input class="prompt" name="uname" placeholder="{{ctx.Locale.Tr "search.user_kind"}}" autocomplete="off" required>
124+
</div>
125+
</div>
126+
</div>
127+
<div class="actions">
128+
<button class="ui cancel button">{{ctx.Locale.Tr "cancel"}}</button>
129+
<button type="submit" class="ui primary button">{{ctx.Locale.Tr "save"}}</button>
130+
</div>
131+
</form>
132+
</div>
133+
</div>
134+
90135
{{template "base/footer" .}}

web_src/js/features/org-team.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,19 @@ import {fomanticQuery} from '../modules/fomantic/base.ts';
33

44
const {appSubUrl} = window.config;
55

6+
function initOrgTeamAddMember() {
7+
const modal = document.querySelector('#add-member-to-team-modal');
8+
if (!modal) return;
9+
const elDropdown = modal.querySelector('.team_add_member_team_search');
10+
const form = elDropdown.closest('form');
11+
const baseUrl = form.getAttribute('data-action-base-link');
12+
const teamInput = form.querySelector<HTMLInputElement>('input[name=team]');
13+
const onChangeTeam = function() {
14+
form.setAttribute('action', `${baseUrl}/teams/${teamInput.value}/action/add`);
15+
};
16+
fomanticQuery(elDropdown).dropdown('setting', 'onChange', onChangeTeam);
17+
}
18+
619
function initOrgTeamSettings() {
720
// on the page "page-content organization new team"
821
const pageContent = document.querySelector('.page-content.organization.new.team');
@@ -39,6 +52,7 @@ function initOrgTeamSearchRepoBox() {
3952

4053
export function initOrgTeam() {
4154
if (!document.querySelector('.page-content.organization')) return;
55+
initOrgTeamAddMember();
4256
initOrgTeamSettings();
4357
initOrgTeamSearchRepoBox();
4458
}

0 commit comments

Comments
 (0)