From 6581c967148e614cb3fc26e0003847181c8dc3e0 Mon Sep 17 00:00:00 2001 From: Kerwin Bryant Date: Sun, 1 Jun 2025 16:34:30 +0000 Subject: [PATCH 1/2] optimize user experience issues related to team list page --- options/locale/locale_en-US.ini | 1 + templates/org/team/members.tmpl | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index f7c2e5049bbc2..6a094f2e74719 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -2795,6 +2795,7 @@ teams = Teams code = Code lower_members = members lower_repositories = repositories +all_teams = All Teams create_new_team = New Team create_team = Create Team org_desc = Description diff --git a/templates/org/team/members.tmpl b/templates/org/team/members.tmpl index 5433f01530ff3..cf84e3a15c3cb 100644 --- a/templates/org/team/members.tmpl +++ b/templates/org/team/members.tmpl @@ -3,6 +3,19 @@ {{template "org/header" .}}
{{template "base/alert" .}} + {{if or .IsOrganizationOwner .IsOrganizationMember}} +
+ {{if .IsOrganizationOwner}} + {{svg "octicon-plus"}} {{ctx.Locale.Tr "org.create_new_team"}} + {{end}} + {{if .IsOrganizationMember}} + {{svg "octicon-people"}} {{ctx.Locale.Tr "org.all_teams"}} + {{end}} +
+ {{end}} + {{if and .IsOrganizationOwner .IsOrganizationMember}} +
+ {{end}}
{{template "org/team/sidebar" .}}
From a79d880f3781702cd1b6b28b75a7cbcd112b9118 Mon Sep 17 00:00:00 2001 From: Kerwin Bryant Date: Tue, 3 Jun 2025 12:50:26 +0000 Subject: [PATCH 2/2] Add a new and more intuitive entry for adding members. --- routers/web/org/members.go | 6 +++++ templates/org/member/members.tmpl | 45 +++++++++++++++++++++++++++++++ web_src/js/features/org-team.ts | 14 ++++++++++ 3 files changed, 65 insertions(+) diff --git a/routers/web/org/members.go b/routers/web/org/members.go index 2cbe75989a5ae..5b59be7ff3161 100644 --- a/routers/web/org/members.go +++ b/routers/web/org/members.go @@ -67,7 +67,13 @@ func Members(ctx *context.Context) { ctx.ServerError("GetMembers", err) return } + teams, err := organization.FindOrgTeams(ctx, org.ID) + if err != nil { + ctx.ServerError("GetOrgTeams", err) + return + } ctx.Data["Page"] = pager + ctx.Data["Teams"] = teams ctx.Data["Members"] = members ctx.Data["MembersIsPublicMember"] = membersIsPublic ctx.Data["MembersIsUserOrgOwner"] = organization.IsUserOrgOwner(ctx, members, org.ID) diff --git a/templates/org/member/members.tmpl b/templates/org/member/members.tmpl index 4388dc95204ab..35878edfc9264 100644 --- a/templates/org/member/members.tmpl +++ b/templates/org/member/members.tmpl @@ -4,6 +4,17 @@
{{template "base/alert" .}} + {{if .IsOrganizationOwner}} +
+ +
+
+ {{end}} +
{{range .Members}} {{$isPublic := index $.MembersIsPublicMember .ID}} @@ -87,4 +98,38 @@ {{template "base/modal_actions_confirm" .}}
+ + {{template "base/footer" .}} diff --git a/web_src/js/features/org-team.ts b/web_src/js/features/org-team.ts index d07818b0ac535..fd4e2185269ad 100644 --- a/web_src/js/features/org-team.ts +++ b/web_src/js/features/org-team.ts @@ -3,6 +3,19 @@ import {fomanticQuery} from '../modules/fomantic/base.ts'; const {appSubUrl} = window.config; +function initOrgTeamAddMember() { + const modal = document.querySelector('#add-member-to-team-modal'); + if (!modal) return; + const elDropdown = modal.querySelector('.team_add_member_team_search'); + const form = elDropdown.closest('form'); + const baseUrl = form.getAttribute('data-action-base-link'); + const teamInput = form.querySelector('input[name=team]'); + const onChangeTeam = function() { + form.setAttribute('action', `${baseUrl}/teams/${teamInput.value}/action/add`); + }; + fomanticQuery(elDropdown).dropdown('setting', 'onChange', onChangeTeam); +} + function initOrgTeamSettings() { // on the page "page-content organization new team" const pageContent = document.querySelector('.page-content.organization.new.team'); @@ -39,6 +52,7 @@ function initOrgTeamSearchRepoBox() { export function initOrgTeam() { if (!document.querySelector('.page-content.organization')) return; + initOrgTeamAddMember(); initOrgTeamSettings(); initOrgTeamSearchRepoBox(); }