From caac3104c4e77a40ad8ec3d1275f7b47c0fc8f68 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Sat, 18 May 2019 08:06:20 -0700 Subject: Make it easier to find invited group members We had a number of team members struggle to find invited members of a group. Searching for the e-mail address did not work because search only works with members with user accounts. This commit changes two things: 1. Breaks out the invited members into a separate table. 2. Adds search capability for the invited members. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/61948 --- app/controllers/groups/group_members_controller.rb | 13 ++++++++++-- app/models/member.rb | 4 ++++ app/views/groups/group_members/index.html.haml | 23 +++++++++++++++++++++- 3 files changed, 37 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/controllers/groups/group_members_controller.rb b/app/controllers/groups/group_members_controller.rb index f1d6fb00cfc..fc5cb3f0b5c 100644 --- a/app/controllers/groups/group_members_controller.rb +++ b/app/controllers/groups/group_members_controller.rb @@ -5,6 +5,8 @@ class Groups::GroupMembersController < Groups::ApplicationController include MembersPresentation include SortingHelper + MEMBER_PER_PAGE_LIMIT = 50 + def self.admin_not_required_endpoints %i[index leave request_access] end @@ -24,7 +26,14 @@ class Groups::GroupMembersController < Groups::ApplicationController @project = @group.projects.find(params[:project_id]) if params[:project_id] @members = GroupMembersFinder.new(@group).execute - @members = @members.non_invite unless can_manage_members + + if can_manage_members + @invited_members = @members.invite + @invited_members = @invited_members.search_invited(params[:search_invited]) if params[:search_invited].present? + @invited_members = present_members(@invited_members.page(params[:invited_members_page]).per(MEMBER_PER_PAGE_LIMIT)) + end + + @members = @members.non_invite @members = @members.search(params[:search]) if params[:search].present? @members = @members.sort_by_attribute(@sort) @@ -32,7 +41,7 @@ class Groups::GroupMembersController < Groups::ApplicationController @members = @members.filter_by_2fa(params[:two_factor]) end - @members = @members.page(params[:page]).per(50) + @members = @members.page(params[:page]).per(MEMBER_PER_PAGE_LIMIT) @members = present_members(@members) @requesters = present_members( diff --git a/app/models/member.rb b/app/models/member.rb index c7583434148..ada779f0583 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -107,6 +107,10 @@ class Member < ApplicationRecord joins(:user).merge(User.search(query)) end + def search_invited(query) + invite.where(['invite_email ILIKE ?', "%#{query}%"]) + end + def filter_by_2fa(value) case value when 'enabled' diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 021c0b6c429..ddbf89a5fb7 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -36,4 +36,25 @@ = render 'shared/members/sort_dropdown' %ul.content-list.members-list = render partial: 'shared/members/member', collection: @members, as: :member - = paginate @members, theme: 'gitlab' + = paginate @members, theme: 'gitlab' + + - if can_manage_members && @invited_members.exists? + .clearfix + %h5.member.existing-title + Invited members + .card + .card-header.flex-project-members-panel + %span.flex-project-title + Pending members to + %strong= @group.name + %span.badge.badge-pill= @invited_members.total_count + = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do + .form-group + .position-relative.append-right-8 + = search_field_tag :search_invited, params[:search_invited], { placeholder: 'Find invited members by e-mail', class: 'form-control', spellcheck: false } + %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } + = icon("search") + = render 'shared/members/sort_dropdown' + %ul.content-list.invited-members-list + = render partial: 'shared/members/member', collection: @invited_members, as: :member + = paginate @invited_members, param_name: 'invited_members_page', theme: 'gitlab' -- cgit v1.2.1 From ed29ce3622a82641ecb1e40cf596e1967dd1c19a Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Wed, 22 May 2019 22:23:29 -0700 Subject: Add tabs to switch between current/invited members --- app/views/groups/group_members/index.html.haml | 87 ++++++++++++++------------ 1 file changed, 46 insertions(+), 41 deletions(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index ddbf89a5fb7..cc4e8b0c31b 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -1,5 +1,6 @@ - page_title "Members" - can_manage_members = can?(current_user, :admin_group_member, @group) +- show_invited_members = can_manage_members && @invited_members.exists? .project-members-page.prepend-top-default %h4 @@ -16,45 +17,49 @@ = render_if_exists 'groups/group_members/ldap_sync' - .clearfix - %h5.member.existing-title - Existing members - .card - .card-header.flex-project-members-panel - %span.flex-project-title - Members with access to - %strong= @group.name - %span.badge.badge-pill= @members.total_count - = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do - .form-group - .position-relative.append-right-8 - = search_field_tag :search, params[:search], { placeholder: 'Find existing members by name', class: 'form-control', spellcheck: false } - %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } - = icon("search") - - if can_manage_members - = render 'shared/members/filter_2fa_dropdown' - = render 'shared/members/sort_dropdown' - %ul.content-list.members-list - = render partial: 'shared/members/member', collection: @members, as: :member - = paginate @members, theme: 'gitlab' + %ul.nav-links.mobile-separator.nav.nav-tabs.clearfix + %li.nav-item + = link_to "Existing members", "#existing_members", class: "nav-link active", 'data-toggle' => 'tab' + - if show_invited_members + %li.nav-item + = link_to "Invited members", "#invited_members", class: "nav-link", 'data-toggle' => 'tab' + + .tab-content + #existing_members.tab-pane.active + .card + .card-header.flex-project-members-panel + %span.flex-project-title + Members with access to + %strong= @group.name + %span.badge.badge-pill= @members.total_count + = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do + .form-group + .position-relative.append-right-8 + = search_field_tag :search, params[:search], { placeholder: 'Find existing members by name', class: 'form-control', spellcheck: false } + %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } + = icon("search") + - if can_manage_members + = render 'shared/members/filter_2fa_dropdown' + = render 'shared/members/sort_dropdown' + %ul.content-list.members-list + = render partial: 'shared/members/member', collection: @members, as: :member + = paginate @members, theme: 'gitlab' - - if can_manage_members && @invited_members.exists? - .clearfix - %h5.member.existing-title - Invited members - .card - .card-header.flex-project-members-panel - %span.flex-project-title - Pending members to - %strong= @group.name - %span.badge.badge-pill= @invited_members.total_count - = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do - .form-group - .position-relative.append-right-8 - = search_field_tag :search_invited, params[:search_invited], { placeholder: 'Find invited members by e-mail', class: 'form-control', spellcheck: false } - %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } - = icon("search") - = render 'shared/members/sort_dropdown' - %ul.content-list.invited-members-list - = render partial: 'shared/members/member', collection: @invited_members, as: :member - = paginate @invited_members, param_name: 'invited_members_page', theme: 'gitlab' + - if show_invited_members + #invited_members.tab-pane + .card + .card-header.flex-project-members-panel + %span.flex-project-title + Pending members to + %strong= @group.name + %span.badge.badge-pill= @invited_members.total_count + = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do + .form-group + .position-relative.append-right-8 + = search_field_tag :search_invited, params[:search_invited], { placeholder: 'Find invited members by e-mail', class: 'form-control', spellcheck: false } + %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } + = icon("search") + = render 'shared/members/sort_dropdown' + %ul.content-list.invited-members-list + = render partial: 'shared/members/member', collection: @invited_members, as: :member + = paginate @invited_members, param_name: 'invited_members_page', theme: 'gitlab' -- cgit v1.2.1 From e26139a756247b1874ae90f2f9f5a983e5a145ae Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Wed, 22 May 2019 22:34:31 -0700 Subject: Show total member count --- app/views/groups/group_members/index.html.haml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index cc4e8b0c31b..74a11bdca41 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -1,6 +1,8 @@ - page_title "Members" - can_manage_members = can?(current_user, :admin_group_member, @group) - show_invited_members = can_manage_members && @invited_members.exists? +- total_members = @members.total_count +- total_members += @invited_members.total_count if show_invited_members .project-members-page.prepend-top-default %h4 @@ -19,10 +21,16 @@ %ul.nav-links.mobile-separator.nav.nav-tabs.clearfix %li.nav-item - = link_to "Existing members", "#existing_members", class: "nav-link active", 'data-toggle' => 'tab' + = link_to "#existing_members", class: "nav-link active", 'data-toggle' => 'tab' do + %span + Existing members + %span.badge.badge-pill= @members.total_count - if show_invited_members %li.nav-item - = link_to "Invited members", "#invited_members", class: "nav-link", 'data-toggle' => 'tab' + = link_to "#invited_members", class: "nav-link", 'data-toggle' => 'tab' do + %span + Pending + %span.badge.badge-pill= @invited_members.total_count .tab-content #existing_members.tab-pane.active @@ -31,7 +39,7 @@ %span.flex-project-title Members with access to %strong= @group.name - %span.badge.badge-pill= @members.total_count + %span.badge.badge-pill= total_members = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do .form-group .position-relative.append-right-8 @@ -50,9 +58,9 @@ .card .card-header.flex-project-members-panel %span.flex-project-title - Pending members to + Members with access to %strong= @group.name - %span.badge.badge-pill= @invited_members.total_count + %span.badge.badge-pill= total_members = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do .form-group .position-relative.append-right-8 -- cgit v1.2.1 From 1b718d40f88d73108b34ef0fca20211183fdfdd1 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Fri, 24 May 2019 16:47:43 -0700 Subject: Minor UX tweaks based on feedback Show the pending page if user searches for an invited user. Remove the sort in the pending page to avoid confusion. --- app/views/groups/group_members/index.html.haml | 21 ++++++++++----------- .../shared/members/_filter_2fa_dropdown.html.haml | 2 +- app/views/shared/members/_sort_dropdown.html.haml | 1 + 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 74a11bdca41..aee30e04613 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -3,6 +3,7 @@ - show_invited_members = can_manage_members && @invited_members.exists? - total_members = @members.total_count - total_members += @invited_members.total_count if show_invited_members +- pending_active = params[:search_invited].present? .project-members-page.prepend-top-default %h4 @@ -21,32 +22,32 @@ %ul.nav-links.mobile-separator.nav.nav-tabs.clearfix %li.nav-item - = link_to "#existing_members", class: "nav-link active", 'data-toggle' => 'tab' do + = link_to "#existing_members", class: ["nav-link", ("active" unless pending_active)] , 'data-toggle' => 'tab' do %span - Existing members + Existing %span.badge.badge-pill= @members.total_count - if show_invited_members %li.nav-item - = link_to "#invited_members", class: "nav-link", 'data-toggle' => 'tab' do + = link_to "#invited_members", class: ["nav-link", ("active" if pending_active)], 'data-toggle' => 'tab' do %span Pending %span.badge.badge-pill= @invited_members.total_count .tab-content - #existing_members.tab-pane.active + #existing_members.tab-pane{ :class => ("active" unless pending_active) } .card .card-header.flex-project-members-panel %span.flex-project-title Members with access to %strong= @group.name - %span.badge.badge-pill= total_members = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do .form-group .position-relative.append-right-8 - = search_field_tag :search, params[:search], { placeholder: 'Find existing members by name', class: 'form-control', spellcheck: false } + = search_field_tag :search, params[:search], { placeholder: 'Search', class: 'form-control', spellcheck: false } %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } = icon("search") - if can_manage_members + = label_tag '2fa', '2FA', class: 'col-form-label label-bold pl-2 pr-2' = render 'shared/members/filter_2fa_dropdown' = render 'shared/members/sort_dropdown' %ul.content-list.members-list @@ -54,20 +55,18 @@ = paginate @members, theme: 'gitlab' - if show_invited_members - #invited_members.tab-pane + #invited_members.tab-pane{ :class => ("active" if pending_active) } .card .card-header.flex-project-members-panel %span.flex-project-title - Members with access to + Members with pending access to %strong= @group.name - %span.badge.badge-pill= total_members = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do .form-group .position-relative.append-right-8 - = search_field_tag :search_invited, params[:search_invited], { placeholder: 'Find invited members by e-mail', class: 'form-control', spellcheck: false } + = search_field_tag :search_invited, params[:search_invited], { placeholder: 'Search', class: 'form-control', spellcheck: false } %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } = icon("search") - = render 'shared/members/sort_dropdown' %ul.content-list.invited-members-list = render partial: 'shared/members/member', collection: @invited_members, as: :member = paginate @invited_members, param_name: 'invited_members_page', theme: 'gitlab' diff --git a/app/views/shared/members/_filter_2fa_dropdown.html.haml b/app/views/shared/members/_filter_2fa_dropdown.html.haml index 3e98587aeaa..a2bc5e9ecdf 100644 --- a/app/views/shared/members/_filter_2fa_dropdown.html.haml +++ b/app/views/shared/members/_filter_2fa_dropdown.html.haml @@ -1,7 +1,7 @@ - filter = params[:two_factor] || 'everyone' - filter_options = { 'everyone' => _('Everyone'), 'enabled' => _('Enabled'), 'disabled' => _('Disabled') } .dropdown.inline.member-filter-2fa-dropdown - = dropdown_toggle('2FA: ' + filter_options[filter], { toggle: 'dropdown' }) + = dropdown_toggle(filter_options[filter], { toggle: 'dropdown' }) %ul.dropdown-menu.dropdown-menu-align-right.dropdown-menu-selectable %li.dropdown-header = _("Filter by two-factor authentication") diff --git a/app/views/shared/members/_sort_dropdown.html.haml b/app/views/shared/members/_sort_dropdown.html.haml index 59bdfb73e6e..5b792e989f0 100644 --- a/app/views/shared/members/_sort_dropdown.html.haml +++ b/app/views/shared/members/_sort_dropdown.html.haml @@ -1,3 +1,4 @@ += label_tag :sort_by, 'Sort by', class: 'col-form-label label-bold pl-4 pr-2' .dropdown.inline.member-sort-dropdown = dropdown_toggle(member_sort_options_hash[@sort], { toggle: 'dropdown' }) %ul.dropdown-menu.dropdown-menu-right.dropdown-menu-selectable -- cgit v1.2.1 From e8654da9f0b9a2b87026c9722d3957532e6803e3 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Fri, 7 Jun 2019 22:11:02 -0700 Subject: Fix CSS for pending list --- app/views/groups/group_members/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index aee30e04613..4fc455ad613 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -67,6 +67,6 @@ = search_field_tag :search_invited, params[:search_invited], { placeholder: 'Search', class: 'form-control', spellcheck: false } %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } = icon("search") - %ul.content-list.invited-members-list + %ul.content-list.members-list = render partial: 'shared/members/member', collection: @invited_members, as: :member = paginate @invited_members, param_name: 'invited_members_page', theme: 'gitlab' -- cgit v1.2.1 From 562eda87be4f35a7b4ad1c566bff0cc7c5e45af0 Mon Sep 17 00:00:00 2001 From: George Tsiolis Date: Mon, 5 Aug 2019 11:43:30 +0300 Subject: Remove card border --- app/views/groups/group_members/index.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 4fc455ad613..baa96918cd8 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -35,7 +35,7 @@ .tab-content #existing_members.tab-pane{ :class => ("active" unless pending_active) } - .card + .card.card-without-border .card-header.flex-project-members-panel %span.flex-project-title Members with access to @@ -56,7 +56,7 @@ - if show_invited_members #invited_members.tab-pane{ :class => ("active" if pending_active) } - .card + .card.card-without-border .card-header.flex-project-members-panel %span.flex-project-title Members with pending access to -- cgit v1.2.1 From e1c45b4a669c82e2022c5d14c35cbe19c7e62476 Mon Sep 17 00:00:00 2001 From: George Tsiolis Date: Mon, 5 Aug 2019 12:22:07 +0300 Subject: Replace some flex properties --- app/views/groups/group_members/index.html.haml | 10 +++++----- app/views/shared/members/_filter_2fa_dropdown.html.haml | 2 +- app/views/shared/members/_sort_dropdown.html.haml | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index baa96918cd8..f7d6eae6c5f 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -36,8 +36,8 @@ .tab-content #existing_members.tab-pane{ :class => ("active" unless pending_active) } .card.card-without-border - .card-header.flex-project-members-panel - %span.flex-project-title + .d-flex.flex-column.flex-md-row.row-content-block.second-block + %span.flex-grow-1 Members with access to %strong= @group.name = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do @@ -47,7 +47,7 @@ %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } = icon("search") - if can_manage_members - = label_tag '2fa', '2FA', class: 'col-form-label label-bold pl-2 pr-2' + = label_tag '2fa', '2FA', class: 'col-form-label label-bold append-right-8' = render 'shared/members/filter_2fa_dropdown' = render 'shared/members/sort_dropdown' %ul.content-list.members-list @@ -57,8 +57,8 @@ - if show_invited_members #invited_members.tab-pane{ :class => ("active" if pending_active) } .card.card-without-border - .card-header.flex-project-members-panel - %span.flex-project-title + .d-flex.flex-column.flex-md-row.row-content-block.second-block + %span.flex-grow-1 Members with pending access to %strong= @group.name = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do diff --git a/app/views/shared/members/_filter_2fa_dropdown.html.haml b/app/views/shared/members/_filter_2fa_dropdown.html.haml index a2bc5e9ecdf..da68754722f 100644 --- a/app/views/shared/members/_filter_2fa_dropdown.html.haml +++ b/app/views/shared/members/_filter_2fa_dropdown.html.haml @@ -1,6 +1,6 @@ - filter = params[:two_factor] || 'everyone' - filter_options = { 'everyone' => _('Everyone'), 'enabled' => _('Enabled'), 'disabled' => _('Disabled') } -.dropdown.inline.member-filter-2fa-dropdown +.dropdown.inline.member-filter-2fa-dropdown.pr-2 = dropdown_toggle(filter_options[filter], { toggle: 'dropdown' }) %ul.dropdown-menu.dropdown-menu-align-right.dropdown-menu-selectable %li.dropdown-header diff --git a/app/views/shared/members/_sort_dropdown.html.haml b/app/views/shared/members/_sort_dropdown.html.haml index 5b792e989f0..8c1f603bc3f 100644 --- a/app/views/shared/members/_sort_dropdown.html.haml +++ b/app/views/shared/members/_sort_dropdown.html.haml @@ -1,5 +1,5 @@ -= label_tag :sort_by, 'Sort by', class: 'col-form-label label-bold pl-4 pr-2' -.dropdown.inline.member-sort-dropdown += label_tag :sort_by, 'Sort by', class: 'col-form-label label-bold pr-2' +.dropdown.inline = dropdown_toggle(member_sort_options_hash[@sort], { toggle: 'dropdown' }) %ul.dropdown-menu.dropdown-menu-right.dropdown-menu-selectable %li.dropdown-header -- cgit v1.2.1 From 7461c4227a6d394ad6ec4f65149c8598baf23e45 Mon Sep 17 00:00:00 2001 From: Martin Wortschack Date: Tue, 6 Aug 2019 09:42:15 +0200 Subject: Fix CSS for mobile - Externalize strings - Update PO file --- app/assets/stylesheets/pages/members.scss | 2 +- app/views/groups/group_members/index.html.haml | 36 +++++++++++----------- .../shared/members/_filter_2fa_dropdown.html.haml | 2 +- 3 files changed, 20 insertions(+), 20 deletions(-) (limited to 'app') diff --git a/app/assets/stylesheets/pages/members.scss b/app/assets/stylesheets/pages/members.scss index 68af01f9ccc..966428a93b5 100644 --- a/app/assets/stylesheets/pages/members.scss +++ b/app/assets/stylesheets/pages/members.scss @@ -98,7 +98,7 @@ position: absolute; right: 4px; top: 0; - height: 35px; + height: 33px; padding-left: 10px; padding-right: 10px; color: $gray-darkest; diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index f7d6eae6c5f..de966ee7cc1 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -1,4 +1,4 @@ -- page_title "Members" +- page_title _("Members") - can_manage_members = can?(current_user, :admin_group_member, @group) - show_invited_members = can_manage_members && @invited_members.exists? - total_members = @members.total_count @@ -7,12 +7,12 @@ .project-members-page.prepend-top-default %h4 - Members + = _("Members") %hr - if can_manage_members .project-members-new.append-bottom-default %p.clearfix - Add new member to + = _("Add new member to") %strong= @group.name = render "new_group_member" @@ -24,30 +24,30 @@ %li.nav-item = link_to "#existing_members", class: ["nav-link", ("active" unless pending_active)] , 'data-toggle' => 'tab' do %span - Existing + = _("Existing") %span.badge.badge-pill= @members.total_count - if show_invited_members %li.nav-item = link_to "#invited_members", class: ["nav-link", ("active" if pending_active)], 'data-toggle' => 'tab' do %span - Pending + = _("Pending") %span.badge.badge-pill= @invited_members.total_count .tab-content #existing_members.tab-pane{ :class => ("active" unless pending_active) } .card.card-without-border .d-flex.flex-column.flex-md-row.row-content-block.second-block - %span.flex-grow-1 - Members with access to + %span.flex-grow-1.align-self-md-center.col-form-label + = _("Members with access to") %strong= @group.name - = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do - .form-group - .position-relative.append-right-8 - = search_field_tag :search, params[:search], { placeholder: 'Search', class: 'form-control', spellcheck: false } - %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } + = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form' do + .form-group.flex-grow + .position-relative.pr-md-2 + = search_field_tag :search, params[:search], { placeholder: _('Search'), class: 'form-control', spellcheck: false } + %button.member-search-btn{ type: "submit", "aria-label" => _("Submit search") } = icon("search") - if can_manage_members - = label_tag '2fa', '2FA', class: 'col-form-label label-bold append-right-8' + = label_tag '2fa', '2FA', class: 'col-form-label label-bold pr-md-2' = render 'shared/members/filter_2fa_dropdown' = render 'shared/members/sort_dropdown' %ul.content-list.members-list @@ -59,13 +59,13 @@ .card.card-without-border .d-flex.flex-column.flex-md-row.row-content-block.second-block %span.flex-grow-1 - Members with pending access to + = _("Members with pending access to") %strong= @group.name - = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do + = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form' do .form-group - .position-relative.append-right-8 - = search_field_tag :search_invited, params[:search_invited], { placeholder: 'Search', class: 'form-control', spellcheck: false } - %button.member-search-btn{ type: "submit", "aria-label" => "Submit search" } + .position-relative.pr-md-2 + = search_field_tag :search_invited, params[:search_invited], { placeholder: _('Search'), class: 'form-control', spellcheck: false } + %button.member-search-btn{ type: "submit", "aria-label" => _("Submit search") } = icon("search") %ul.content-list.members-list = render partial: 'shared/members/member', collection: @invited_members, as: :member diff --git a/app/views/shared/members/_filter_2fa_dropdown.html.haml b/app/views/shared/members/_filter_2fa_dropdown.html.haml index da68754722f..44ea844028e 100644 --- a/app/views/shared/members/_filter_2fa_dropdown.html.haml +++ b/app/views/shared/members/_filter_2fa_dropdown.html.haml @@ -1,6 +1,6 @@ - filter = params[:two_factor] || 'everyone' - filter_options = { 'everyone' => _('Everyone'), 'enabled' => _('Enabled'), 'disabled' => _('Disabled') } -.dropdown.inline.member-filter-2fa-dropdown.pr-2 +.dropdown.inline.member-filter-2fa-dropdown.pr-md-2 = dropdown_toggle(filter_options[filter], { toggle: 'dropdown' }) %ul.dropdown-menu.dropdown-menu-align-right.dropdown-menu-selectable %li.dropdown-header -- cgit v1.2.1 From a9f76d83114434d3e99525b939b2ce6b5d081002 Mon Sep 17 00:00:00 2001 From: Martin Wortschack Date: Tue, 6 Aug 2019 13:53:54 +0200 Subject: Fix broken specs - Add qa- selector to sort dropdown --- app/assets/stylesheets/pages/members.scss | 4 ---- app/views/shared/members/_sort_dropdown.html.haml | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) (limited to 'app') diff --git a/app/assets/stylesheets/pages/members.scss b/app/assets/stylesheets/pages/members.scss index 966428a93b5..a4b3b412e33 100644 --- a/app/assets/stylesheets/pages/members.scss +++ b/app/assets/stylesheets/pages/members.scss @@ -9,10 +9,6 @@ } } -.member-sort-dropdown { - margin-left: $gl-padding-8; -} - .member { &.is-overridden { .btn-ldap-override { diff --git a/app/views/shared/members/_sort_dropdown.html.haml b/app/views/shared/members/_sort_dropdown.html.haml index 8c1f603bc3f..77f05edab5a 100644 --- a/app/views/shared/members/_sort_dropdown.html.haml +++ b/app/views/shared/members/_sort_dropdown.html.haml @@ -1,5 +1,5 @@ = label_tag :sort_by, 'Sort by', class: 'col-form-label label-bold pr-2' -.dropdown.inline +.dropdown.inline.qa-member-sort-dropdown = dropdown_toggle(member_sort_options_hash[@sort], { toggle: 'dropdown' }) %ul.dropdown-menu.dropdown-menu-right.dropdown-menu-selectable %li.dropdown-header -- cgit v1.2.1 From 46382a432d34aa23442d323fe1ae2355111e3741 Mon Sep 17 00:00:00 2001 From: Martin Wortschack Date: Tue, 6 Aug 2019 14:59:03 +0200 Subject: Remove local var --- app/views/groups/group_members/index.html.haml | 2 -- 1 file changed, 2 deletions(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index de966ee7cc1..48c92d7929c 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -1,8 +1,6 @@ - page_title _("Members") - can_manage_members = can?(current_user, :admin_group_member, @group) - show_invited_members = can_manage_members && @invited_members.exists? -- total_members = @members.total_count -- total_members += @invited_members.total_count if show_invited_members - pending_active = params[:search_invited].present? .project-members-page.prepend-top-default -- cgit v1.2.1 From 60a1e843faacb570b3480e12cf67424d79840ebb Mon Sep 17 00:00:00 2001 From: Martin Wortschack Date: Thu, 8 Aug 2019 09:47:13 +0200 Subject: Resolve first round of discussions - Avoid splitting sentences - Update PO file - Utilize $input-height - Replace pr- with mr- --- app/assets/stylesheets/pages/members.scss | 2 +- app/views/groups/group_members/index.html.haml | 17 +++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) (limited to 'app') diff --git a/app/assets/stylesheets/pages/members.scss b/app/assets/stylesheets/pages/members.scss index a4b3b412e33..d72dd8671cc 100644 --- a/app/assets/stylesheets/pages/members.scss +++ b/app/assets/stylesheets/pages/members.scss @@ -94,7 +94,7 @@ position: absolute; right: 4px; top: 0; - height: 33px; + height: $input-height; padding-left: 10px; padding-right: 10px; color: $gray-darkest; diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 48c92d7929c..e8be3b4fbab 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -10,8 +10,7 @@ - if can_manage_members .project-members-new.append-bottom-default %p.clearfix - = _("Add new member to") - %strong= @group.name + = _("Add new member to %{group_name}").html_safe % { group_name: @group.name } = render "new_group_member" = render 'shared/members/requests', membership_source: @group, requesters: @requesters @@ -36,13 +35,12 @@ .card.card-without-border .d-flex.flex-column.flex-md-row.row-content-block.second-block %span.flex-grow-1.align-self-md-center.col-form-label - = _("Members with access to") - %strong= @group.name + = _("Members with access to %{group_name}").html_safe % { group_name: @group.name } = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form' do .form-group.flex-grow - .position-relative.pr-md-2 + .position-relative.mr-md-2 = search_field_tag :search, params[:search], { placeholder: _('Search'), class: 'form-control', spellcheck: false } - %button.member-search-btn{ type: "submit", "aria-label" => _("Submit search") } + %button.member-search-btn.border-left{ type: "submit", "aria-label" => _("Submit search") } = icon("search") - if can_manage_members = label_tag '2fa', '2FA', class: 'col-form-label label-bold pr-md-2' @@ -57,13 +55,12 @@ .card.card-without-border .d-flex.flex-column.flex-md-row.row-content-block.second-block %span.flex-grow-1 - = _("Members with pending access to") - %strong= @group.name + = _("Members with pending access to %{group_name}").html_safe % { group_name: @group.name } = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form' do .form-group - .position-relative.pr-md-2 + .position-relative.mr-md-2 = search_field_tag :search_invited, params[:search_invited], { placeholder: _('Search'), class: 'form-control', spellcheck: false } - %button.member-search-btn{ type: "submit", "aria-label" => _("Submit search") } + %button.member-search-btn.border-left{ type: "submit", "aria-label" => _("Submit search") } = icon("search") %ul.content-list.members-list = render partial: 'shared/members/member', collection: @invited_members, as: :member -- cgit v1.2.1 From d39871d080ffbba35f4e58ed6c13c684e01be773 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Fri, 9 Aug 2019 00:33:42 -0700 Subject: Rename search_invited to search_invite_email --- app/controllers/groups/group_members_controller.rb | 2 +- app/models/member.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/controllers/groups/group_members_controller.rb b/app/controllers/groups/group_members_controller.rb index fc5cb3f0b5c..557888711ec 100644 --- a/app/controllers/groups/group_members_controller.rb +++ b/app/controllers/groups/group_members_controller.rb @@ -29,7 +29,7 @@ class Groups::GroupMembersController < Groups::ApplicationController if can_manage_members @invited_members = @members.invite - @invited_members = @invited_members.search_invited(params[:search_invited]) if params[:search_invited].present? + @invited_members = @invited_members.search_invite_email(params[:search_invited]) if params[:search_invited].present? @invited_members = present_members(@invited_members.page(params[:invited_members_page]).per(MEMBER_PER_PAGE_LIMIT)) end diff --git a/app/models/member.rb b/app/models/member.rb index ada779f0583..dbae1076670 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -107,7 +107,7 @@ class Member < ApplicationRecord joins(:user).merge(User.search(query)) end - def search_invited(query) + def search_invite_email(query) invite.where(['invite_email ILIKE ?', "%#{query}%"]) end -- cgit v1.2.1 From 95b0f7a8c7d021f2ba21355ed9ca217459c18a18 Mon Sep 17 00:00:00 2001 From: Martin Wortschack Date: Fri, 9 Aug 2019 09:40:08 +0000 Subject: Apply suggestion to app/views/groups/group_members/index.html.haml --- app/views/groups/group_members/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index e8be3b4fbab..0f2f9dd2f95 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -10,7 +10,7 @@ - if can_manage_members .project-members-new.append-bottom-default %p.clearfix - = _("Add new member to %{group_name}").html_safe % { group_name: @group.name } + = _("Add new member to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: '', strongEnd: '' } = render "new_group_member" = render 'shared/members/requests', membership_source: @group, requesters: @requesters -- cgit v1.2.1 From f77ffdafad0a94c8a2af7070710fbfbe88994040 Mon Sep 17 00:00:00 2001 From: Martin Wortschack Date: Fri, 9 Aug 2019 11:44:33 +0200 Subject: Resolve more discussion - Add placeholder for tags in translation - Update PO file --- app/views/groups/group_members/index.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 0f2f9dd2f95..4a9e05951f9 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -35,7 +35,7 @@ .card.card-without-border .d-flex.flex-column.flex-md-row.row-content-block.second-block %span.flex-grow-1.align-self-md-center.col-form-label - = _("Members with access to %{group_name}").html_safe % { group_name: @group.name } + = _("Members with access to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: '', strongEnd: '' } = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form' do .form-group.flex-grow .position-relative.mr-md-2 @@ -55,7 +55,7 @@ .card.card-without-border .d-flex.flex-column.flex-md-row.row-content-block.second-block %span.flex-grow-1 - = _("Members with pending access to %{group_name}").html_safe % { group_name: @group.name } + = _("Members with pending access to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: '', strongEnd: '' } = form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form' do .form-group .position-relative.mr-md-2 -- cgit v1.2.1 From 004d61961454c5ef48827201aff91aa4e044bc35 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Fri, 9 Aug 2019 10:46:36 -0700 Subject: Fix highlighting of group name not working The parameters needed `html_safe` as well. --- app/views/groups/group_members/index.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 055c46334bb..2aae938ee27 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -10,7 +10,7 @@ - if can_manage_members .project-members-new.append-bottom-default %p.clearfix - = _("Add new member to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: '', strongEnd: '' } + = _("Add new member to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: ''.html_safe, strongEnd: ''.html_safe } = render "new_group_member" = render 'shared/members/requests', membership_source: @group, requesters: @requesters @@ -35,7 +35,7 @@ .card.card-without-border .d-flex.flex-column.flex-md-row.row-content-block.second-block %span.flex-grow-1.align-self-md-center.col-form-label - = _("Members with access to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: '', strongEnd: '' } + = _("Members with access to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: ''.html_safe, strongEnd: ''.html_safe } = form_tag group_group_members_path(@group), method: :get, class: 'form-inline user-search-form' do .form-group.flex-grow .position-relative.mr-md-2 -- cgit v1.2.1 From 3af747657083e2d91922cdb9be5879f890ca50bb Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Fri, 9 Aug 2019 12:21:11 -0700 Subject: Change 'data-toggle' => 'tab' to data-toggle: 'tab' --- app/views/groups/group_members/index.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 2aae938ee27..31dc9c185fa 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -19,13 +19,13 @@ %ul.nav-links.mobile-separator.nav.nav-tabs.clearfix %li.nav-item - = link_to "#existing_members", class: ["nav-link", ("active" unless pending_active)] , 'data-toggle' => 'tab' do + = link_to "#existing_members", class: ["nav-link", ("active" unless pending_active)] , data-toggle: 'tab' do %span = _("Existing") %span.badge.badge-pill= @members.total_count - if show_invited_members %li.nav-item - = link_to "#invited_members", class: ["nav-link", ("active" if pending_active)], 'data-toggle' => 'tab' do + = link_to "#invited_members", class: ["nav-link", ("active" if pending_active)], data-toggle: 'tab' do %span = _("Pending") %span.badge.badge-pill= @invited_members.total_count -- cgit v1.2.1 From 96aeeae18e1ca4decfc4955bc67640f299a2b0d6 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Fri, 9 Aug 2019 12:26:27 -0700 Subject: Revert "Change 'data-toggle' => 'tab' to data-toggle: 'tab'" This reverts commit 3af747657083e2d91922cdb9be5879f890ca50bb. --- app/views/groups/group_members/index.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 31dc9c185fa..2aae938ee27 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -19,13 +19,13 @@ %ul.nav-links.mobile-separator.nav.nav-tabs.clearfix %li.nav-item - = link_to "#existing_members", class: ["nav-link", ("active" unless pending_active)] , data-toggle: 'tab' do + = link_to "#existing_members", class: ["nav-link", ("active" unless pending_active)] , 'data-toggle' => 'tab' do %span = _("Existing") %span.badge.badge-pill= @members.total_count - if show_invited_members %li.nav-item - = link_to "#invited_members", class: ["nav-link", ("active" if pending_active)], data-toggle: 'tab' do + = link_to "#invited_members", class: ["nav-link", ("active" if pending_active)], 'data-toggle' => 'tab' do %span = _("Pending") %span.badge.badge-pill= @invited_members.total_count -- cgit v1.2.1 From d20ed87bad1f3453ff2e874f65e226b8ebbe5849 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Fri, 9 Aug 2019 12:28:54 -0700 Subject: Fixing missing html_safe calls for pending list --- app/views/groups/group_members/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 2aae938ee27..2b49ed9c9ec 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -55,7 +55,7 @@ .card.card-without-border .d-flex.flex-column.flex-md-row.row-content-block.second-block %span.flex-grow-1 - = _("Members with pending access to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: '', strongEnd: '' } + = _("Members with pending access to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: ''.html_safe, strongEnd: ''.html_safe } = form_tag group_group_members_path(@group), method: :get, class: 'form-inline user-search-form' do .form-group .position-relative.mr-md-2 -- cgit v1.2.1 From 36459061f7e7fe092968f4ba7f253203807a660f Mon Sep 17 00:00:00 2001 From: Martin Wortschack Date: Fri, 9 Aug 2019 21:50:53 +0200 Subject: Use snake case for tag placeholders - Update PO file --- app/views/groups/group_members/index.html.haml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index 2b49ed9c9ec..882fcc79421 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -10,7 +10,7 @@ - if can_manage_members .project-members-new.append-bottom-default %p.clearfix - = _("Add new member to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: ''.html_safe, strongEnd: ''.html_safe } + = _("Add new member to %{strong_start}%{group_name}%{strong_end}").html_safe % { group_name: @group.name, strong_start: ''.html_safe, strong_end: ''.html_safe } = render "new_group_member" = render 'shared/members/requests', membership_source: @group, requesters: @requesters @@ -35,7 +35,7 @@ .card.card-without-border .d-flex.flex-column.flex-md-row.row-content-block.second-block %span.flex-grow-1.align-self-md-center.col-form-label - = _("Members with access to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: ''.html_safe, strongEnd: ''.html_safe } + = _("Members with access to %{strong_start}%{group_name}%{strong_end}").html_safe % { group_name: @group.name, strong_start: ''.html_safe, strong_end: ''.html_safe } = form_tag group_group_members_path(@group), method: :get, class: 'form-inline user-search-form' do .form-group.flex-grow .position-relative.mr-md-2 @@ -55,7 +55,7 @@ .card.card-without-border .d-flex.flex-column.flex-md-row.row-content-block.second-block %span.flex-grow-1 - = _("Members with pending access to %{strongStart}%{group_name}%{strongEnd}").html_safe % { group_name: @group.name, strongStart: ''.html_safe, strongEnd: ''.html_safe } + = _("Members with pending access to %{strong_start}%{group_name}%{strong_end}").html_safe % { group_name: @group.name, strong_start: ''.html_safe, strong_end: ''.html_safe } = form_tag group_group_members_path(@group), method: :get, class: 'form-inline user-search-form' do .form-group .position-relative.mr-md-2 -- cgit v1.2.1